@assistant-ui/react 0.2.0 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +398 -310
- package/dist/index.d.ts +398 -310
- package/dist/index.js +749 -566
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +716 -530
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -3
package/dist/index.js
CHANGED
@@ -44,6 +44,7 @@ __export(src_exports, {
|
|
44
44
|
useActionBarCopy: () => useActionBarCopy,
|
45
45
|
useActionBarEdit: () => useActionBarEdit,
|
46
46
|
useActionBarReload: () => useActionBarReload,
|
47
|
+
useAppendMessage: () => useAppendMessage,
|
47
48
|
useAssistantContext: () => useAssistantContext,
|
48
49
|
useAssistantInstructions: () => useAssistantInstructions,
|
49
50
|
useAssistantTool: () => useAssistantTool,
|
@@ -59,11 +60,11 @@ __export(src_exports, {
|
|
59
60
|
useContentPartContext: () => useContentPartContext,
|
60
61
|
useContentPartDisplay: () => useContentPartDisplay,
|
61
62
|
useContentPartImage: () => useContentPartImage,
|
62
|
-
useContentPartInProgressIndicator: () => useContentPartInProgressIndicator,
|
63
63
|
useContentPartText: () => useContentPartText,
|
64
64
|
useLocalRuntime: () => useLocalRuntime,
|
65
65
|
useMessageContext: () => useMessageContext,
|
66
66
|
useMessageIf: () => useMessageIf,
|
67
|
+
useSwitchToNewThread: () => useSwitchToNewThread,
|
67
68
|
useThreadContext: () => useThreadContext,
|
68
69
|
useThreadEmpty: () => useThreadEmpty,
|
69
70
|
useThreadIf: () => useThreadIf,
|
@@ -72,192 +73,19 @@ __export(src_exports, {
|
|
72
73
|
});
|
73
74
|
module.exports = __toCommonJS(src_exports);
|
74
75
|
|
75
|
-
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
76
|
-
var import_react4 = require("react");
|
77
|
-
|
78
|
-
// src/context/react/MessageContext.ts
|
79
|
-
var import_react = require("react");
|
80
|
-
var MessageContext = (0, import_react.createContext)(null);
|
81
|
-
var useMessageContext = () => {
|
82
|
-
const context = (0, import_react.useContext)(MessageContext);
|
83
|
-
if (!context)
|
84
|
-
throw new Error(
|
85
|
-
"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
|
86
|
-
);
|
87
|
-
return context;
|
88
|
-
};
|
89
|
-
|
90
|
-
// src/utils/combined/useCombinedStore.ts
|
91
|
-
var import_react3 = require("react");
|
92
|
-
|
93
|
-
// src/utils/combined/createCombinedStore.ts
|
94
|
-
var import_react2 = require("react");
|
95
|
-
var createCombinedStore = (stores) => {
|
96
|
-
const subscribe = (callback) => {
|
97
|
-
const unsubscribes = stores.map((store) => store.subscribe(callback));
|
98
|
-
return () => {
|
99
|
-
for (const unsub of unsubscribes) {
|
100
|
-
unsub();
|
101
|
-
}
|
102
|
-
};
|
103
|
-
};
|
104
|
-
return (selector) => {
|
105
|
-
const getSnapshot = () => selector(...stores.map((store) => store.getState()));
|
106
|
-
return (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
107
|
-
};
|
108
|
-
};
|
109
|
-
|
110
|
-
// src/utils/combined/useCombinedStore.ts
|
111
|
-
var useCombinedStore = (stores, selector) => {
|
112
|
-
const useCombined = (0, import_react3.useMemo)(() => createCombinedStore(stores), stores);
|
113
|
-
return useCombined(selector);
|
114
|
-
};
|
115
|
-
|
116
|
-
// src/utils/getMessageText.tsx
|
117
|
-
var getMessageText = (message) => {
|
118
|
-
const textParts = message.content.filter(
|
119
|
-
(part) => part.type === "text"
|
120
|
-
);
|
121
|
-
return textParts.map((part) => part.text).join("\n\n");
|
122
|
-
};
|
123
|
-
|
124
|
-
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
125
|
-
var useActionBarCopy = ({
|
126
|
-
copiedDuration = 3e3
|
127
|
-
} = {}) => {
|
128
|
-
const { useMessage, useMessageUtils, useEditComposer } = useMessageContext();
|
129
|
-
const hasCopyableContent = useCombinedStore(
|
130
|
-
[useMessage, useEditComposer],
|
131
|
-
(m, c) => {
|
132
|
-
return !c.isEditing && m.message.content.some((c2) => c2.type === "text");
|
133
|
-
}
|
134
|
-
);
|
135
|
-
const callback = (0, import_react4.useCallback)(() => {
|
136
|
-
const { message } = useMessage.getState();
|
137
|
-
const { setIsCopied } = useMessageUtils.getState();
|
138
|
-
const { isEditing, value: composerValue } = useEditComposer.getState();
|
139
|
-
const valueToCopy = isEditing ? composerValue : getMessageText(message);
|
140
|
-
navigator.clipboard.writeText(valueToCopy);
|
141
|
-
setIsCopied(true);
|
142
|
-
setTimeout(() => setIsCopied(false), copiedDuration);
|
143
|
-
}, [useMessage, useMessageUtils, useEditComposer, copiedDuration]);
|
144
|
-
if (!hasCopyableContent) return null;
|
145
|
-
return callback;
|
146
|
-
};
|
147
|
-
|
148
|
-
// src/primitive-hooks/actionBar/useActionBarEdit.tsx
|
149
|
-
var import_react5 = require("react");
|
150
|
-
var useActionBarEdit = () => {
|
151
|
-
const { useMessage, useEditComposer } = useMessageContext();
|
152
|
-
const disabled = useCombinedStore(
|
153
|
-
[useMessage, useEditComposer],
|
154
|
-
(m, c) => m.message.role !== "user" || c.isEditing
|
155
|
-
);
|
156
|
-
const callback = (0, import_react5.useCallback)(() => {
|
157
|
-
const { edit } = useEditComposer.getState();
|
158
|
-
edit();
|
159
|
-
}, [useEditComposer]);
|
160
|
-
if (disabled) return null;
|
161
|
-
return callback;
|
162
|
-
};
|
163
|
-
|
164
|
-
// src/primitive-hooks/actionBar/useActionBarReload.tsx
|
165
|
-
var import_react7 = require("react");
|
166
|
-
|
167
|
-
// src/context/react/ThreadContext.ts
|
168
|
-
var import_react6 = require("react");
|
169
|
-
var ThreadContext = (0, import_react6.createContext)(null);
|
170
|
-
var useThreadContext = () => {
|
171
|
-
const context = (0, import_react6.useContext)(ThreadContext);
|
172
|
-
if (!context)
|
173
|
-
throw new Error(
|
174
|
-
"This component must be used within an AssistantRuntimeProvider."
|
175
|
-
);
|
176
|
-
return context;
|
177
|
-
};
|
178
|
-
|
179
|
-
// src/primitive-hooks/actionBar/useActionBarReload.tsx
|
180
|
-
var useActionBarReload = () => {
|
181
|
-
const { useThread, useThreadActions, useComposer, useViewport } = useThreadContext();
|
182
|
-
const { useMessage } = useMessageContext();
|
183
|
-
const disabled = useCombinedStore(
|
184
|
-
[useThread, useMessage],
|
185
|
-
(t, m) => t.isRunning || m.message.role !== "assistant"
|
186
|
-
);
|
187
|
-
const callback = (0, import_react7.useCallback)(() => {
|
188
|
-
const { parentId } = useMessage.getState();
|
189
|
-
useThreadActions.getState().startRun(parentId);
|
190
|
-
useViewport.getState().scrollToBottom();
|
191
|
-
useComposer.getState().focus();
|
192
|
-
}, [useThreadActions, useComposer, useViewport, useMessage]);
|
193
|
-
if (disabled) return null;
|
194
|
-
return callback;
|
195
|
-
};
|
196
|
-
|
197
|
-
// src/primitive-hooks/branchPicker/useBranchPickerCount.tsx
|
198
|
-
var useBranchPickerCount = () => {
|
199
|
-
const { useMessage } = useMessageContext();
|
200
|
-
const branchCount = useMessage((s) => s.branches.length);
|
201
|
-
return branchCount;
|
202
|
-
};
|
203
|
-
|
204
|
-
// src/primitive-hooks/branchPicker/useBranchPickerNext.tsx
|
205
|
-
var import_react8 = require("react");
|
206
|
-
var useBranchPickerNext = () => {
|
207
|
-
const { useThreadActions } = useThreadContext();
|
208
|
-
const { useMessage, useEditComposer } = useMessageContext();
|
209
|
-
const disabled = useCombinedStore(
|
210
|
-
[useMessage, useEditComposer],
|
211
|
-
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length
|
212
|
-
);
|
213
|
-
const callback = (0, import_react8.useCallback)(() => {
|
214
|
-
const { message, branches } = useMessage.getState();
|
215
|
-
useThreadActions.getState().switchToBranch(branches[branches.indexOf(message.id) + 1]);
|
216
|
-
}, [useThreadActions, useMessage]);
|
217
|
-
if (disabled) return null;
|
218
|
-
return callback;
|
219
|
-
};
|
220
|
-
|
221
|
-
// src/primitive-hooks/branchPicker/useBranchPickerNumber.tsx
|
222
|
-
var useBranchPickerNumber = () => {
|
223
|
-
const { useMessage } = useMessageContext();
|
224
|
-
const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));
|
225
|
-
return branchIdx + 1;
|
226
|
-
};
|
227
|
-
|
228
|
-
// src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx
|
229
|
-
var import_react9 = require("react");
|
230
|
-
var useBranchPickerPrevious = () => {
|
231
|
-
const { useThreadActions } = useThreadContext();
|
232
|
-
const { useMessage, useEditComposer } = useMessageContext();
|
233
|
-
const disabled = useCombinedStore(
|
234
|
-
[useMessage, useEditComposer],
|
235
|
-
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0
|
236
|
-
);
|
237
|
-
const callback = (0, import_react9.useCallback)(() => {
|
238
|
-
const { message, branches } = useMessage.getState();
|
239
|
-
useThreadActions.getState().switchToBranch(branches[branches.indexOf(message.id) - 1]);
|
240
|
-
}, [useThreadActions, useMessage]);
|
241
|
-
if (disabled) return null;
|
242
|
-
return callback;
|
243
|
-
};
|
244
|
-
|
245
|
-
// src/primitive-hooks/composer/useComposerCancel.tsx
|
246
|
-
var import_react16 = require("react");
|
247
|
-
|
248
76
|
// src/context/providers/AssistantRuntimeProvider.tsx
|
249
|
-
var
|
77
|
+
var import_react5 = require("react");
|
250
78
|
|
251
79
|
// src/context/providers/AssistantProvider.tsx
|
252
|
-
var
|
80
|
+
var import_react4 = require("react");
|
253
81
|
|
254
82
|
// src/context/react/AssistantContext.ts
|
255
|
-
var
|
256
|
-
var AssistantContext = (0,
|
83
|
+
var import_react = require("react");
|
84
|
+
var AssistantContext = (0, import_react.createContext)(
|
257
85
|
null
|
258
86
|
);
|
259
87
|
var useAssistantContext = () => {
|
260
|
-
const context = (0,
|
88
|
+
const context = (0, import_react.useContext)(AssistantContext);
|
261
89
|
if (!context)
|
262
90
|
throw new Error(
|
263
91
|
"This component must be used within an AssistantRuntimeProvider."
|
@@ -356,7 +184,19 @@ var makeAssistantToolUIsStore = () => (0, import_zustand2.create)((set) => {
|
|
356
184
|
});
|
357
185
|
|
358
186
|
// src/context/providers/ThreadProvider.tsx
|
359
|
-
var
|
187
|
+
var import_react3 = require("react");
|
188
|
+
|
189
|
+
// src/context/react/ThreadContext.ts
|
190
|
+
var import_react2 = require("react");
|
191
|
+
var ThreadContext = (0, import_react2.createContext)(null);
|
192
|
+
var useThreadContext = () => {
|
193
|
+
const context = (0, import_react2.useContext)(ThreadContext);
|
194
|
+
if (!context)
|
195
|
+
throw new Error(
|
196
|
+
"This component must be used within an AssistantRuntimeProvider."
|
197
|
+
);
|
198
|
+
return context;
|
199
|
+
};
|
360
200
|
|
361
201
|
// src/context/stores/Composer.ts
|
362
202
|
var import_zustand3 = require("zustand");
|
@@ -370,7 +210,7 @@ var makeBaseComposer = (set) => ({
|
|
370
210
|
});
|
371
211
|
|
372
212
|
// src/context/stores/Composer.ts
|
373
|
-
var makeComposerStore = (useThread, useThreadActions) => {
|
213
|
+
var makeComposerStore = (useThread, useThreadMessages, useThreadActions) => {
|
374
214
|
const focusListeners = /* @__PURE__ */ new Set();
|
375
215
|
return (0, import_zustand3.create)()((set, get, store) => {
|
376
216
|
return {
|
@@ -380,7 +220,7 @@ var makeComposerStore = (useThread, useThreadActions) => {
|
|
380
220
|
const { setValue, value } = get();
|
381
221
|
setValue("");
|
382
222
|
useThreadActions.getState().append({
|
383
|
-
parentId:
|
223
|
+
parentId: useThreadMessages.getState().at(-1)?.id ?? null,
|
384
224
|
role: "user",
|
385
225
|
content: [{ type: "text", text: value }]
|
386
226
|
});
|
@@ -410,7 +250,6 @@ var makeComposerStore = (useThread, useThreadActions) => {
|
|
410
250
|
var import_zustand4 = require("zustand");
|
411
251
|
var makeThreadStore = (runtimeRef) => {
|
412
252
|
return (0, import_zustand4.create)(() => ({
|
413
|
-
messages: runtimeRef.current.messages,
|
414
253
|
isRunning: runtimeRef.current.isRunning
|
415
254
|
}));
|
416
255
|
};
|
@@ -450,62 +289,91 @@ var makeThreadActionStore = (runtimeRef) => {
|
|
450
289
|
);
|
451
290
|
};
|
452
291
|
|
292
|
+
// src/context/stores/ThreadMessages.ts
|
293
|
+
var import_zustand7 = require("zustand");
|
294
|
+
var makeThreadMessagesStore = (runtimeRef) => {
|
295
|
+
return (0, import_zustand7.create)(() => runtimeRef.current.messages);
|
296
|
+
};
|
297
|
+
|
453
298
|
// src/context/providers/ThreadProvider.tsx
|
454
299
|
var import_jsx_runtime = require("react/jsx-runtime");
|
455
300
|
var ThreadProvider = ({
|
456
301
|
children,
|
457
302
|
runtime
|
458
303
|
}) => {
|
459
|
-
const runtimeRef = (0,
|
460
|
-
(0,
|
304
|
+
const runtimeRef = (0, import_react3.useRef)(runtime);
|
305
|
+
(0, import_react3.useInsertionEffect)(() => {
|
461
306
|
runtimeRef.current = runtime;
|
462
307
|
});
|
463
|
-
const [context] = (0,
|
308
|
+
const [context] = (0, import_react3.useState)(() => {
|
464
309
|
const useThread = makeThreadStore(runtimeRef);
|
310
|
+
const useThreadMessages = makeThreadMessagesStore(runtimeRef);
|
465
311
|
const useThreadActions = makeThreadActionStore(runtimeRef);
|
466
312
|
const useViewport = makeThreadViewportStore();
|
467
|
-
const useComposer = makeComposerStore(
|
313
|
+
const useComposer = makeComposerStore(
|
314
|
+
useThread,
|
315
|
+
useThreadMessages,
|
316
|
+
useThreadActions
|
317
|
+
);
|
468
318
|
return {
|
469
319
|
useThread,
|
320
|
+
useThreadMessages,
|
470
321
|
useThreadActions,
|
471
322
|
useComposer,
|
472
323
|
useViewport
|
473
324
|
};
|
474
325
|
});
|
475
|
-
(0,
|
326
|
+
(0, import_react3.useEffect)(() => {
|
476
327
|
const onRuntimeUpdate = () => {
|
477
328
|
context.useThread.setState(
|
478
329
|
Object.freeze({
|
479
|
-
messages: runtimeRef.current.messages,
|
480
330
|
isRunning: runtimeRef.current.isRunning
|
481
331
|
}),
|
482
332
|
true
|
483
333
|
);
|
334
|
+
context.useThreadMessages.setState(Object.freeze(runtimeRef.current.messages), true);
|
484
335
|
};
|
485
336
|
onRuntimeUpdate();
|
486
337
|
return runtime.subscribe(onRuntimeUpdate);
|
487
338
|
}, [context, runtime]);
|
488
|
-
const
|
339
|
+
const subscribe = (0, import_react3.useCallback)(
|
340
|
+
(c) => runtime.subscribe(c),
|
341
|
+
[runtime]
|
342
|
+
);
|
343
|
+
const RuntimeSynchronizer = (0, import_react3.useSyncExternalStore)(
|
344
|
+
subscribe,
|
345
|
+
() => runtime.unstable_synchronizer,
|
346
|
+
() => void 0
|
347
|
+
);
|
489
348
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ThreadContext.Provider, { value: context, children: [
|
490
349
|
RuntimeSynchronizer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RuntimeSynchronizer, {}),
|
491
350
|
children
|
492
351
|
] });
|
493
352
|
};
|
494
353
|
|
354
|
+
// src/context/stores/AssistantActions.tsx
|
355
|
+
var import_zustand8 = require("zustand");
|
356
|
+
var makeAssistantActionsStore = (runtimeRef) => (0, import_zustand8.create)(
|
357
|
+
() => Object.freeze({
|
358
|
+
switchToThread: () => runtimeRef.current.switchToThread(null)
|
359
|
+
})
|
360
|
+
);
|
361
|
+
|
495
362
|
// src/context/providers/AssistantProvider.tsx
|
496
363
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
497
364
|
var AssistantProvider = ({ children, runtime }) => {
|
498
|
-
const runtimeRef = (0,
|
499
|
-
(0,
|
365
|
+
const runtimeRef = (0, import_react4.useRef)(runtime);
|
366
|
+
(0, import_react4.useInsertionEffect)(() => {
|
500
367
|
runtimeRef.current = runtime;
|
501
368
|
});
|
502
|
-
const [context] = (0,
|
369
|
+
const [context] = (0, import_react4.useState)(() => {
|
503
370
|
const useModelConfig = makeAssistantModelConfigStore();
|
504
371
|
const useToolUIs = makeAssistantToolUIsStore();
|
505
|
-
|
372
|
+
const useAssistantActions = makeAssistantActionsStore(runtimeRef);
|
373
|
+
return { useModelConfig, useToolUIs, useAssistantActions };
|
506
374
|
});
|
507
375
|
const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);
|
508
|
-
(0,
|
376
|
+
(0, import_react4.useEffect)(() => {
|
509
377
|
return runtime.registerModelConfigProvider(getModelCOnfig);
|
510
378
|
}, [runtime, getModelCOnfig]);
|
511
379
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AssistantContext.Provider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ThreadProvider, { runtime, children }) });
|
@@ -516,14 +384,28 @@ var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
516
384
|
var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
|
517
385
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AssistantProvider, { runtime, children });
|
518
386
|
};
|
519
|
-
var AssistantRuntimeProvider = (0,
|
387
|
+
var AssistantRuntimeProvider = (0, import_react5.memo)(AssistantRuntimeProviderImpl);
|
388
|
+
|
389
|
+
// src/context/react/ComposerContext.ts
|
390
|
+
var import_react7 = require("react");
|
391
|
+
|
392
|
+
// src/context/react/MessageContext.ts
|
393
|
+
var import_react6 = require("react");
|
394
|
+
var MessageContext = (0, import_react6.createContext)(null);
|
395
|
+
var useMessageContext = () => {
|
396
|
+
const context = (0, import_react6.useContext)(MessageContext);
|
397
|
+
if (!context)
|
398
|
+
throw new Error(
|
399
|
+
"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
|
400
|
+
);
|
401
|
+
return context;
|
402
|
+
};
|
520
403
|
|
521
404
|
// src/context/react/ComposerContext.ts
|
522
|
-
var import_react14 = require("react");
|
523
405
|
var useComposerContext = () => {
|
524
406
|
const { useComposer } = useThreadContext();
|
525
|
-
const { useEditComposer } = (0,
|
526
|
-
return (0,
|
407
|
+
const { useEditComposer } = (0, import_react7.useContext)(MessageContext) ?? {};
|
408
|
+
return (0, import_react7.useMemo)(
|
527
409
|
() => ({
|
528
410
|
useComposer: useEditComposer ?? useComposer,
|
529
411
|
type: useEditComposer ? "edit" : "new"
|
@@ -533,12 +415,12 @@ var useComposerContext = () => {
|
|
533
415
|
};
|
534
416
|
|
535
417
|
// src/context/react/ContentPartContext.ts
|
536
|
-
var
|
537
|
-
var ContentPartContext = (0,
|
418
|
+
var import_react8 = require("react");
|
419
|
+
var ContentPartContext = (0, import_react8.createContext)(
|
538
420
|
null
|
539
421
|
);
|
540
422
|
var useContentPartContext = () => {
|
541
|
-
const context = (0,
|
423
|
+
const context = (0, import_react8.useContext)(ContentPartContext);
|
542
424
|
if (!context)
|
543
425
|
throw new Error(
|
544
426
|
"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
|
@@ -546,11 +428,267 @@ var useContentPartContext = () => {
|
|
546
428
|
return context;
|
547
429
|
};
|
548
430
|
|
431
|
+
// src/hooks/useAppendMessage.tsx
|
432
|
+
var import_react9 = require("react");
|
433
|
+
var toAppendMessage = (useThreadMessages, message) => {
|
434
|
+
if (typeof message === "string") {
|
435
|
+
return {
|
436
|
+
parentId: useThreadMessages.getState().at(-1)?.id ?? null,
|
437
|
+
role: "user",
|
438
|
+
content: [{ type: "text", text: message }]
|
439
|
+
};
|
440
|
+
}
|
441
|
+
return {
|
442
|
+
parentId: message.parentId ?? useThreadMessages.getState().at(-1)?.id ?? null,
|
443
|
+
role: message.role ?? "user",
|
444
|
+
content: message.content
|
445
|
+
};
|
446
|
+
};
|
447
|
+
var useAppendMessage = () => {
|
448
|
+
const { useThreadMessages, useThreadActions, useViewport, useComposer } = useThreadContext();
|
449
|
+
const append = (0, import_react9.useCallback)(
|
450
|
+
(message) => {
|
451
|
+
const appendMessage = toAppendMessage(useThreadMessages, message);
|
452
|
+
useThreadActions.getState().append(appendMessage);
|
453
|
+
useViewport.getState().scrollToBottom();
|
454
|
+
useComposer.getState().focus();
|
455
|
+
},
|
456
|
+
[useThreadMessages, useThreadActions, useViewport, useComposer]
|
457
|
+
);
|
458
|
+
return append;
|
459
|
+
};
|
460
|
+
|
461
|
+
// src/hooks/useSwitchToNewThread.tsx
|
462
|
+
var import_react10 = require("react");
|
463
|
+
var useSwitchToNewThread = () => {
|
464
|
+
const { useAssistantActions } = useAssistantContext();
|
465
|
+
const { useComposer } = useThreadContext();
|
466
|
+
const switchToNewThread = (0, import_react10.useCallback)(() => {
|
467
|
+
useAssistantActions.getState().switchToThread(null);
|
468
|
+
useComposer.getState().focus();
|
469
|
+
}, [useAssistantActions, useComposer]);
|
470
|
+
return switchToNewThread;
|
471
|
+
};
|
472
|
+
|
473
|
+
// src/model-config/useAssistantTool.tsx
|
474
|
+
var import_react11 = require("react");
|
475
|
+
var useAssistantTool = (tool) => {
|
476
|
+
const { useModelConfig, useToolUIs } = useAssistantContext();
|
477
|
+
const registerModelConfigProvider = useModelConfig(
|
478
|
+
(s) => s.registerModelConfigProvider
|
479
|
+
);
|
480
|
+
const setToolUI = useToolUIs((s) => s.setToolUI);
|
481
|
+
(0, import_react11.useEffect)(() => {
|
482
|
+
const { toolName, render, ...rest } = tool;
|
483
|
+
const config = {
|
484
|
+
tools: {
|
485
|
+
[tool.toolName]: rest
|
486
|
+
}
|
487
|
+
};
|
488
|
+
const unsub1 = registerModelConfigProvider(() => config);
|
489
|
+
const unsub2 = render ? setToolUI(toolName, render) : void 0;
|
490
|
+
return () => {
|
491
|
+
unsub1();
|
492
|
+
unsub2?.();
|
493
|
+
};
|
494
|
+
}, [registerModelConfigProvider, setToolUI, tool]);
|
495
|
+
};
|
496
|
+
|
497
|
+
// src/model-config/makeAssistantTool.tsx
|
498
|
+
var makeAssistantTool = (tool) => {
|
499
|
+
const Tool = () => {
|
500
|
+
useAssistantTool(tool);
|
501
|
+
return null;
|
502
|
+
};
|
503
|
+
return Tool;
|
504
|
+
};
|
505
|
+
|
506
|
+
// src/model-config/useAssistantToolUI.tsx
|
507
|
+
var import_react12 = require("react");
|
508
|
+
var useAssistantToolUI = (tool) => {
|
509
|
+
const { useToolUIs } = useAssistantContext();
|
510
|
+
const setToolUI = useToolUIs((s) => s.setToolUI);
|
511
|
+
(0, import_react12.useEffect)(() => {
|
512
|
+
if (!tool) return;
|
513
|
+
const { toolName, render } = tool;
|
514
|
+
return setToolUI(toolName, render);
|
515
|
+
}, [setToolUI, tool]);
|
516
|
+
};
|
517
|
+
|
518
|
+
// src/model-config/makeAssistantToolUI.tsx
|
519
|
+
var makeAssistantToolUI = (tool) => {
|
520
|
+
const ToolUI = () => {
|
521
|
+
useAssistantToolUI(tool);
|
522
|
+
return null;
|
523
|
+
};
|
524
|
+
return ToolUI;
|
525
|
+
};
|
526
|
+
|
527
|
+
// src/model-config/useAssistantInstructions.tsx
|
528
|
+
var import_react13 = require("react");
|
529
|
+
var useAssistantInstructions = (instruction) => {
|
530
|
+
const { useModelConfig } = useAssistantContext();
|
531
|
+
const registerModelConfigProvider = useModelConfig(
|
532
|
+
(s) => s.registerModelConfigProvider
|
533
|
+
);
|
534
|
+
(0, import_react13.useEffect)(() => {
|
535
|
+
const config = {
|
536
|
+
system: instruction
|
537
|
+
};
|
538
|
+
return registerModelConfigProvider(() => config);
|
539
|
+
}, [registerModelConfigProvider, instruction]);
|
540
|
+
};
|
541
|
+
|
542
|
+
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
543
|
+
var import_react16 = require("react");
|
544
|
+
|
545
|
+
// src/utils/combined/useCombinedStore.ts
|
546
|
+
var import_react15 = require("react");
|
547
|
+
|
548
|
+
// src/utils/combined/createCombinedStore.ts
|
549
|
+
var import_react14 = require("react");
|
550
|
+
var createCombinedStore = (stores) => {
|
551
|
+
const subscribe = (callback) => {
|
552
|
+
const unsubscribes = stores.map((store) => store.subscribe(callback));
|
553
|
+
return () => {
|
554
|
+
for (const unsub of unsubscribes) {
|
555
|
+
unsub();
|
556
|
+
}
|
557
|
+
};
|
558
|
+
};
|
559
|
+
return (selector) => {
|
560
|
+
const getSnapshot = () => selector(...stores.map((store) => store.getState()));
|
561
|
+
return (0, import_react14.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
562
|
+
};
|
563
|
+
};
|
564
|
+
|
565
|
+
// src/utils/combined/useCombinedStore.ts
|
566
|
+
var useCombinedStore = (stores, selector) => {
|
567
|
+
const useCombined = (0, import_react15.useMemo)(() => createCombinedStore(stores), stores);
|
568
|
+
return useCombined(selector);
|
569
|
+
};
|
570
|
+
|
571
|
+
// src/utils/getMessageText.tsx
|
572
|
+
var getMessageText = (message) => {
|
573
|
+
const textParts = message.content.filter(
|
574
|
+
(part) => part.type === "text"
|
575
|
+
);
|
576
|
+
return textParts.map((part) => part.text).join("\n\n");
|
577
|
+
};
|
578
|
+
|
579
|
+
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
580
|
+
var useActionBarCopy = ({
|
581
|
+
copiedDuration = 3e3
|
582
|
+
} = {}) => {
|
583
|
+
const { useMessage, useMessageUtils, useEditComposer } = useMessageContext();
|
584
|
+
const hasCopyableContent = useCombinedStore(
|
585
|
+
[useMessage, useEditComposer],
|
586
|
+
(m, c) => {
|
587
|
+
return !c.isEditing && m.message.content.some((c2) => c2.type === "text");
|
588
|
+
}
|
589
|
+
);
|
590
|
+
const callback = (0, import_react16.useCallback)(() => {
|
591
|
+
const { message } = useMessage.getState();
|
592
|
+
const { setIsCopied } = useMessageUtils.getState();
|
593
|
+
const { isEditing, value: composerValue } = useEditComposer.getState();
|
594
|
+
const valueToCopy = isEditing ? composerValue : getMessageText(message);
|
595
|
+
navigator.clipboard.writeText(valueToCopy);
|
596
|
+
setIsCopied(true);
|
597
|
+
setTimeout(() => setIsCopied(false), copiedDuration);
|
598
|
+
}, [useMessage, useMessageUtils, useEditComposer, copiedDuration]);
|
599
|
+
if (!hasCopyableContent) return null;
|
600
|
+
return callback;
|
601
|
+
};
|
602
|
+
|
603
|
+
// src/primitive-hooks/actionBar/useActionBarEdit.tsx
|
604
|
+
var import_react17 = require("react");
|
605
|
+
var useActionBarEdit = () => {
|
606
|
+
const { useMessage, useEditComposer } = useMessageContext();
|
607
|
+
const disabled = useCombinedStore(
|
608
|
+
[useMessage, useEditComposer],
|
609
|
+
(m, c) => m.message.role !== "user" || c.isEditing
|
610
|
+
);
|
611
|
+
const callback = (0, import_react17.useCallback)(() => {
|
612
|
+
const { edit } = useEditComposer.getState();
|
613
|
+
edit();
|
614
|
+
}, [useEditComposer]);
|
615
|
+
if (disabled) return null;
|
616
|
+
return callback;
|
617
|
+
};
|
618
|
+
|
619
|
+
// src/primitive-hooks/actionBar/useActionBarReload.tsx
|
620
|
+
var import_react18 = require("react");
|
621
|
+
var useActionBarReload = () => {
|
622
|
+
const { useThread, useThreadActions, useComposer, useViewport } = useThreadContext();
|
623
|
+
const { useMessage } = useMessageContext();
|
624
|
+
const disabled = useCombinedStore(
|
625
|
+
[useThread, useMessage],
|
626
|
+
(t, m) => t.isRunning || m.message.role !== "assistant"
|
627
|
+
);
|
628
|
+
const callback = (0, import_react18.useCallback)(() => {
|
629
|
+
const { parentId } = useMessage.getState();
|
630
|
+
useThreadActions.getState().startRun(parentId);
|
631
|
+
useViewport.getState().scrollToBottom();
|
632
|
+
useComposer.getState().focus();
|
633
|
+
}, [useThreadActions, useComposer, useViewport, useMessage]);
|
634
|
+
if (disabled) return null;
|
635
|
+
return callback;
|
636
|
+
};
|
637
|
+
|
638
|
+
// src/primitive-hooks/branchPicker/useBranchPickerCount.tsx
|
639
|
+
var useBranchPickerCount = () => {
|
640
|
+
const { useMessage } = useMessageContext();
|
641
|
+
const branchCount = useMessage((s) => s.branches.length);
|
642
|
+
return branchCount;
|
643
|
+
};
|
644
|
+
|
645
|
+
// src/primitive-hooks/branchPicker/useBranchPickerNext.tsx
|
646
|
+
var import_react19 = require("react");
|
647
|
+
var useBranchPickerNext = () => {
|
648
|
+
const { useThreadActions } = useThreadContext();
|
649
|
+
const { useMessage, useEditComposer } = useMessageContext();
|
650
|
+
const disabled = useCombinedStore(
|
651
|
+
[useMessage, useEditComposer],
|
652
|
+
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length
|
653
|
+
);
|
654
|
+
const callback = (0, import_react19.useCallback)(() => {
|
655
|
+
const { message, branches } = useMessage.getState();
|
656
|
+
useThreadActions.getState().switchToBranch(branches[branches.indexOf(message.id) + 1]);
|
657
|
+
}, [useThreadActions, useMessage]);
|
658
|
+
if (disabled) return null;
|
659
|
+
return callback;
|
660
|
+
};
|
661
|
+
|
662
|
+
// src/primitive-hooks/branchPicker/useBranchPickerNumber.tsx
|
663
|
+
var useBranchPickerNumber = () => {
|
664
|
+
const { useMessage } = useMessageContext();
|
665
|
+
const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));
|
666
|
+
return branchIdx + 1;
|
667
|
+
};
|
668
|
+
|
669
|
+
// src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx
|
670
|
+
var import_react20 = require("react");
|
671
|
+
var useBranchPickerPrevious = () => {
|
672
|
+
const { useThreadActions } = useThreadContext();
|
673
|
+
const { useMessage, useEditComposer } = useMessageContext();
|
674
|
+
const disabled = useCombinedStore(
|
675
|
+
[useMessage, useEditComposer],
|
676
|
+
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0
|
677
|
+
);
|
678
|
+
const callback = (0, import_react20.useCallback)(() => {
|
679
|
+
const { message, branches } = useMessage.getState();
|
680
|
+
useThreadActions.getState().switchToBranch(branches[branches.indexOf(message.id) - 1]);
|
681
|
+
}, [useThreadActions, useMessage]);
|
682
|
+
if (disabled) return null;
|
683
|
+
return callback;
|
684
|
+
};
|
685
|
+
|
549
686
|
// src/primitive-hooks/composer/useComposerCancel.tsx
|
687
|
+
var import_react21 = require("react");
|
550
688
|
var useComposerCancel = () => {
|
551
689
|
const { useComposer } = useComposerContext();
|
552
690
|
const disabled = useComposer((c) => !c.isEditing);
|
553
|
-
const callback = (0,
|
691
|
+
const callback = (0, import_react21.useCallback)(() => {
|
554
692
|
const { cancel } = useComposer.getState();
|
555
693
|
cancel();
|
556
694
|
}, [useComposer]);
|
@@ -569,12 +707,12 @@ var useComposerIf = (props) => {
|
|
569
707
|
};
|
570
708
|
|
571
709
|
// src/primitive-hooks/composer/useComposerSend.tsx
|
572
|
-
var
|
710
|
+
var import_react22 = require("react");
|
573
711
|
var useComposerSend = () => {
|
574
712
|
const { useViewport, useComposer: useNewComposer } = useThreadContext();
|
575
713
|
const { useComposer } = useComposerContext();
|
576
714
|
const disabled = useComposer((c) => !c.isEditing || c.value.length === 0);
|
577
|
-
const callback = (0,
|
715
|
+
const callback = (0, import_react22.useCallback)(() => {
|
578
716
|
const composerState = useComposer.getState();
|
579
717
|
if (!composerState.isEditing) return;
|
580
718
|
composerState.send();
|
@@ -611,17 +749,6 @@ var useContentPartImage = () => {
|
|
611
749
|
return image;
|
612
750
|
};
|
613
751
|
|
614
|
-
// src/primitive-hooks/contentPart/useContentPartInProgressIndicator.tsx
|
615
|
-
var useContentPartInProgressIndicator = () => {
|
616
|
-
const { useMessageUtils } = useMessageContext();
|
617
|
-
const { useContentPart } = useContentPartContext();
|
618
|
-
const indicator = useCombinedStore(
|
619
|
-
[useMessageUtils, useContentPart],
|
620
|
-
(m, c) => c.status === "in_progress" ? m.inProgressIndicator : null
|
621
|
-
);
|
622
|
-
return indicator;
|
623
|
-
};
|
624
|
-
|
625
752
|
// src/primitive-hooks/contentPart/useContentPartText.tsx
|
626
753
|
var useContentPartText = () => {
|
627
754
|
const { useContentPart } = useContentPartContext();
|
@@ -654,14 +781,17 @@ var useMessageIf = (props) => {
|
|
654
781
|
|
655
782
|
// src/primitive-hooks/thread/useThreadIf.tsx
|
656
783
|
var useThreadIf = (props) => {
|
657
|
-
const { useThread } = useThreadContext();
|
658
|
-
return
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
784
|
+
const { useThread, useThreadMessages } = useThreadContext();
|
785
|
+
return useCombinedStore(
|
786
|
+
[useThread, useThreadMessages],
|
787
|
+
(thread, messages) => {
|
788
|
+
if (props.empty === true && messages.length !== 0) return false;
|
789
|
+
if (props.empty === false && messages.length === 0) return false;
|
790
|
+
if (props.running === true && !thread.isRunning) return false;
|
791
|
+
if (props.running === false && thread.isRunning) return false;
|
792
|
+
return true;
|
793
|
+
}
|
794
|
+
);
|
665
795
|
};
|
666
796
|
|
667
797
|
// src/primitive-hooks/thread/useThreadEmpty.tsx
|
@@ -670,11 +800,11 @@ var useThreadEmpty = () => {
|
|
670
800
|
};
|
671
801
|
|
672
802
|
// src/primitive-hooks/thread/useThreadScrollToBottom.tsx
|
673
|
-
var
|
803
|
+
var import_react23 = require("react");
|
674
804
|
var useThreadScrollToBottom = () => {
|
675
805
|
const { useComposer, useViewport } = useThreadContext();
|
676
806
|
const isAtBottom = useViewport((s) => s.isAtBottom);
|
677
|
-
const handleScrollToBottom = (0,
|
807
|
+
const handleScrollToBottom = (0, import_react23.useCallback)(() => {
|
678
808
|
useViewport.getState().scrollToBottom();
|
679
809
|
useComposer.getState().focus();
|
680
810
|
}, [useViewport, useComposer]);
|
@@ -683,14 +813,14 @@ var useThreadScrollToBottom = () => {
|
|
683
813
|
};
|
684
814
|
|
685
815
|
// src/primitive-hooks/thread/useThreadSuggestion.tsx
|
686
|
-
var
|
816
|
+
var import_react24 = require("react");
|
687
817
|
var useThreadSuggestion = ({
|
688
818
|
prompt,
|
689
819
|
autoSend
|
690
820
|
}) => {
|
691
821
|
const { useThread, useComposer } = useThreadContext();
|
692
822
|
const disabled = useThread((t) => t.isRunning);
|
693
|
-
const callback = (0,
|
823
|
+
const callback = (0, import_react24.useCallback)(() => {
|
694
824
|
const thread = useThread.getState();
|
695
825
|
const composer = useComposer.getState();
|
696
826
|
composer.setValue(prompt);
|
@@ -705,16 +835,17 @@ var useThreadSuggestion = ({
|
|
705
835
|
// src/primitives/actionBar/index.ts
|
706
836
|
var actionBar_exports = {};
|
707
837
|
__export(actionBar_exports, {
|
708
|
-
Copy: () =>
|
709
|
-
Edit: () =>
|
710
|
-
Reload: () =>
|
711
|
-
Root: () =>
|
838
|
+
Copy: () => ActionBarPrimitiveCopy,
|
839
|
+
Edit: () => ActionBarPrimitiveEdit,
|
840
|
+
Reload: () => ActionBarPrimitiveReload,
|
841
|
+
Root: () => ActionBarPrimitiveRoot
|
712
842
|
});
|
713
843
|
|
714
844
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
715
845
|
var import_react_primitive = require("@radix-ui/react-primitive");
|
716
|
-
var
|
717
|
-
|
846
|
+
var import_react25 = require("react");
|
847
|
+
|
848
|
+
// src/primitives/actionBar/useActionBarFloatStatus.tsx
|
718
849
|
var useActionBarFloatStatus = ({
|
719
850
|
hideWhenRunning,
|
720
851
|
autohide,
|
@@ -735,7 +866,10 @@ var useActionBarFloatStatus = ({
|
|
735
866
|
}
|
736
867
|
);
|
737
868
|
};
|
738
|
-
|
869
|
+
|
870
|
+
// src/primitives/actionBar/ActionBarRoot.tsx
|
871
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
872
|
+
var ActionBarPrimitiveRoot = (0, import_react25.forwardRef)(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {
|
739
873
|
const hideAndfloatStatus = useActionBarFloatStatus({
|
740
874
|
hideWhenRunning,
|
741
875
|
autohide,
|
@@ -751,15 +885,15 @@ var ActionBarRoot = (0, import_react20.forwardRef)(({ hideWhenRunning, autohide,
|
|
751
885
|
}
|
752
886
|
);
|
753
887
|
});
|
754
|
-
|
888
|
+
ActionBarPrimitiveRoot.displayName = "ActionBarPrimitive.Root";
|
755
889
|
|
756
890
|
// src/utils/createActionButton.tsx
|
757
891
|
var import_primitive = require("@radix-ui/primitive");
|
758
892
|
var import_react_primitive2 = require("@radix-ui/react-primitive");
|
759
|
-
var
|
893
|
+
var import_react26 = require("react");
|
760
894
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
761
895
|
var createActionButton = (displayName, useActionButton) => {
|
762
|
-
const ActionButton = (0,
|
896
|
+
const ActionButton = (0, import_react26.forwardRef)((props, forwardedRef) => {
|
763
897
|
const callback = useActionButton(props);
|
764
898
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
765
899
|
import_react_primitive2.Primitive.button,
|
@@ -779,61 +913,64 @@ var createActionButton = (displayName, useActionButton) => {
|
|
779
913
|
};
|
780
914
|
|
781
915
|
// src/primitives/actionBar/ActionBarCopy.tsx
|
782
|
-
var
|
783
|
-
"
|
916
|
+
var ActionBarPrimitiveCopy = createActionButton(
|
917
|
+
"ActionBarPrimitive.Copy",
|
784
918
|
useActionBarCopy
|
785
919
|
);
|
786
920
|
|
787
921
|
// src/primitives/actionBar/ActionBarReload.tsx
|
788
|
-
var
|
789
|
-
"
|
922
|
+
var ActionBarPrimitiveReload = createActionButton(
|
923
|
+
"ActionBarPrimitive.Reload",
|
790
924
|
useActionBarReload
|
791
925
|
);
|
792
926
|
|
793
927
|
// src/primitives/actionBar/ActionBarEdit.tsx
|
794
|
-
var
|
795
|
-
"
|
928
|
+
var ActionBarPrimitiveEdit = createActionButton(
|
929
|
+
"ActionBarPrimitive.Edit",
|
796
930
|
useActionBarEdit
|
797
931
|
);
|
798
932
|
|
799
933
|
// src/primitives/assistantModal/index.ts
|
800
934
|
var assistantModal_exports = {};
|
801
935
|
__export(assistantModal_exports, {
|
802
|
-
Content: () =>
|
803
|
-
Root: () =>
|
804
|
-
Trigger: () =>
|
936
|
+
Content: () => AssistantModalPrimitiveContent,
|
937
|
+
Root: () => AssistantModalPrimitiveRoot,
|
938
|
+
Trigger: () => AssistantModalPrimitiveTrigger
|
805
939
|
});
|
806
940
|
|
807
941
|
// src/primitives/assistantModal/AssistantModalRoot.tsx
|
808
|
-
var
|
809
|
-
var
|
942
|
+
var import_react28 = require("react");
|
943
|
+
var PopoverPrimitive2 = __toESM(require("@radix-ui/react-popover"));
|
810
944
|
var import_primitive2 = require("@radix-ui/primitive");
|
811
945
|
|
812
946
|
// src/utils/hooks/useOnComposerFocus.tsx
|
813
947
|
var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
|
814
|
-
var
|
948
|
+
var import_react27 = require("react");
|
815
949
|
var useOnComposerFocus = (callback) => {
|
816
950
|
const callbackRef = (0, import_react_use_callback_ref.useCallbackRef)(callback);
|
817
951
|
const { useComposer } = useThreadContext();
|
818
|
-
(0,
|
952
|
+
(0, import_react27.useEffect)(() => {
|
819
953
|
return useComposer.getState().onFocus(() => {
|
820
954
|
callbackRef();
|
821
955
|
});
|
822
956
|
}, [useComposer, callbackRef]);
|
823
957
|
};
|
824
958
|
|
959
|
+
// src/primitives/assistantModal/scope.tsx
|
960
|
+
var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"));
|
961
|
+
var usePopoverScope = PopoverPrimitive.createPopoverScope();
|
962
|
+
|
825
963
|
// src/primitives/assistantModal/AssistantModalRoot.tsx
|
826
964
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
827
|
-
var usePopoverScope = PopoverPrimitive.createPopoverScope();
|
828
965
|
var useAssistantModalOpenState = (defaultOpen = false) => {
|
829
|
-
const state = (0,
|
966
|
+
const state = (0, import_react28.useState)(defaultOpen);
|
830
967
|
const [, setOpen] = state;
|
831
968
|
useOnComposerFocus(() => {
|
832
969
|
setOpen(true);
|
833
970
|
});
|
834
971
|
return state;
|
835
972
|
};
|
836
|
-
var
|
973
|
+
var AssistantModalPrimitiveRoot = ({
|
837
974
|
__scopeAssistantModal,
|
838
975
|
defaultOpen,
|
839
976
|
open,
|
@@ -843,7 +980,7 @@ var AssistantModalRoot = ({
|
|
843
980
|
const scope = usePopoverScope(__scopeAssistantModal);
|
844
981
|
const [modalOpen, setOpen] = useAssistantModalOpenState(defaultOpen);
|
845
982
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
846
|
-
|
983
|
+
PopoverPrimitive2.Root,
|
847
984
|
{
|
848
985
|
...scope,
|
849
986
|
open: open === void 0 ? modalOpen : open,
|
@@ -852,26 +989,29 @@ var AssistantModalRoot = ({
|
|
852
989
|
}
|
853
990
|
);
|
854
991
|
};
|
855
|
-
|
992
|
+
AssistantModalPrimitiveRoot.displayName = "AssistantModalPrimitive.Root";
|
856
993
|
|
857
994
|
// src/primitives/assistantModal/AssistantModalTrigger.tsx
|
858
|
-
var
|
859
|
-
var
|
995
|
+
var import_react29 = require("react");
|
996
|
+
var PopoverPrimitive3 = __toESM(require("@radix-ui/react-popover"));
|
860
997
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
861
|
-
var
|
862
|
-
({
|
998
|
+
var AssistantModalPrimitiveTrigger = (0, import_react29.forwardRef)(
|
999
|
+
({
|
1000
|
+
__scopeAssistantModal,
|
1001
|
+
...rest
|
1002
|
+
}, ref) => {
|
863
1003
|
const scope = usePopoverScope(__scopeAssistantModal);
|
864
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
1004
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PopoverPrimitive3.Trigger, { ...scope, ...rest, ref });
|
865
1005
|
}
|
866
1006
|
);
|
867
|
-
|
1007
|
+
AssistantModalPrimitiveTrigger.displayName = "AssistantModalPrimitive.Trigger";
|
868
1008
|
|
869
1009
|
// src/primitives/assistantModal/AssistantModalContent.tsx
|
870
|
-
var
|
871
|
-
var
|
1010
|
+
var import_react30 = require("react");
|
1011
|
+
var PopoverPrimitive4 = __toESM(require("@radix-ui/react-popover"));
|
872
1012
|
var import_primitive3 = require("@radix-ui/primitive");
|
873
1013
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
874
|
-
var
|
1014
|
+
var AssistantModalPrimitiveContent = (0, import_react30.forwardRef)(
|
875
1015
|
({
|
876
1016
|
__scopeAssistantModal,
|
877
1017
|
side,
|
@@ -881,8 +1021,8 @@ var AssistantModalContent = (0, import_react25.forwardRef)(
|
|
881
1021
|
...props
|
882
1022
|
}, forwardedRef) => {
|
883
1023
|
const scope = usePopoverScope(__scopeAssistantModal);
|
884
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
885
|
-
|
1024
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PopoverPrimitive4.Portal, { ...scope, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
1025
|
+
PopoverPrimitive4.Content,
|
886
1026
|
{
|
887
1027
|
...scope,
|
888
1028
|
...props,
|
@@ -897,97 +1037,101 @@ var AssistantModalContent = (0, import_react25.forwardRef)(
|
|
897
1037
|
) });
|
898
1038
|
}
|
899
1039
|
);
|
900
|
-
|
1040
|
+
AssistantModalPrimitiveContent.displayName = "AssistantModalPrimitive.Content";
|
901
1041
|
|
902
1042
|
// src/primitives/branchPicker/index.ts
|
903
1043
|
var branchPicker_exports = {};
|
904
1044
|
__export(branchPicker_exports, {
|
905
|
-
Count: () =>
|
906
|
-
Next: () =>
|
907
|
-
Number: () =>
|
1045
|
+
Count: () => BranchPickerPrimitiveCount,
|
1046
|
+
Next: () => BranchPickerPrimitiveNext,
|
1047
|
+
Number: () => BranchPickerPrimitiveNumber,
|
908
1048
|
Previous: () => BranchPickerPrevious,
|
909
|
-
Root: () =>
|
1049
|
+
Root: () => BranchPickerPrimitiveRoot
|
910
1050
|
});
|
911
1051
|
|
912
1052
|
// src/primitives/branchPicker/BranchPickerNext.tsx
|
913
|
-
var
|
914
|
-
"
|
1053
|
+
var BranchPickerPrimitiveNext = createActionButton(
|
1054
|
+
"BranchPickerPrimitive.Next",
|
915
1055
|
useBranchPickerNext
|
916
1056
|
);
|
917
1057
|
|
918
1058
|
// src/primitives/branchPicker/BranchPickerPrevious.tsx
|
919
1059
|
var BranchPickerPrevious = createActionButton(
|
920
|
-
"
|
1060
|
+
"BranchPickerPrimitive.Previous",
|
921
1061
|
useBranchPickerPrevious
|
922
1062
|
);
|
923
1063
|
|
924
1064
|
// src/primitives/branchPicker/BranchPickerCount.tsx
|
925
1065
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
926
|
-
var
|
1066
|
+
var BranchPickerPrimitiveCount = () => {
|
927
1067
|
const branchCount = useBranchPickerCount();
|
928
1068
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: branchCount });
|
929
1069
|
};
|
1070
|
+
BranchPickerPrimitiveCount.displayName = "BranchPickerPrimitive.Count";
|
930
1071
|
|
931
1072
|
// src/primitives/branchPicker/BranchPickerNumber.tsx
|
932
1073
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
933
|
-
var
|
1074
|
+
var BranchPickerPrimitiveNumber = () => {
|
934
1075
|
const branchNumber = useBranchPickerNumber();
|
935
1076
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: branchNumber });
|
936
1077
|
};
|
1078
|
+
BranchPickerPrimitiveNumber.displayName = "BranchPickerPrimitive.Number";
|
937
1079
|
|
938
1080
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
939
1081
|
var import_react_primitive6 = require("@radix-ui/react-primitive");
|
940
|
-
var
|
1082
|
+
var import_react37 = require("react");
|
941
1083
|
|
942
1084
|
// src/primitives/message/index.ts
|
943
1085
|
var message_exports = {};
|
944
1086
|
__export(message_exports, {
|
945
|
-
Content: () =>
|
946
|
-
If: () =>
|
947
|
-
InProgress: () =>
|
948
|
-
Root: () =>
|
1087
|
+
Content: () => MessagePrimitiveContent,
|
1088
|
+
If: () => MessagePrimitiveIf,
|
1089
|
+
InProgress: () => MessagePrimitiveInProgress,
|
1090
|
+
Root: () => MessagePrimitiveRoot
|
949
1091
|
});
|
950
1092
|
|
951
1093
|
// src/primitives/message/MessageRoot.tsx
|
952
1094
|
var import_primitive4 = require("@radix-ui/primitive");
|
953
1095
|
var import_react_primitive3 = require("@radix-ui/react-primitive");
|
954
|
-
var
|
1096
|
+
var import_react31 = require("react");
|
955
1097
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
956
|
-
var
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
);
|
977
|
-
MessageRoot.displayName = "MessageRoot";
|
1098
|
+
var MessagePrimitiveRoot = (0, import_react31.forwardRef)(({ onMouseEnter, onMouseLeave, ...rest }, ref) => {
|
1099
|
+
const { useMessageUtils } = useMessageContext();
|
1100
|
+
const setIsHovering = useMessageUtils((s) => s.setIsHovering);
|
1101
|
+
const handleMouseEnter = () => {
|
1102
|
+
setIsHovering(true);
|
1103
|
+
};
|
1104
|
+
const handleMouseLeave = () => {
|
1105
|
+
setIsHovering(false);
|
1106
|
+
};
|
1107
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
1108
|
+
import_react_primitive3.Primitive.div,
|
1109
|
+
{
|
1110
|
+
...rest,
|
1111
|
+
ref,
|
1112
|
+
onMouseEnter: (0, import_primitive4.composeEventHandlers)(onMouseEnter, handleMouseEnter),
|
1113
|
+
onMouseLeave: (0, import_primitive4.composeEventHandlers)(onMouseLeave, handleMouseLeave)
|
1114
|
+
}
|
1115
|
+
);
|
1116
|
+
});
|
1117
|
+
MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
|
978
1118
|
|
979
1119
|
// src/primitives/message/MessageIf.tsx
|
980
|
-
var
|
1120
|
+
var MessagePrimitiveIf = ({
|
1121
|
+
children,
|
1122
|
+
...query
|
1123
|
+
}) => {
|
981
1124
|
const result = useMessageIf(query);
|
982
1125
|
return result ? children : null;
|
983
1126
|
};
|
1127
|
+
MessagePrimitiveIf.displayName = "MessagePrimitive.If";
|
984
1128
|
|
985
1129
|
// src/primitives/message/MessageContent.tsx
|
986
|
-
var
|
1130
|
+
var import_react35 = require("react");
|
987
1131
|
|
988
1132
|
// src/context/providers/ContentPartProvider.tsx
|
989
|
-
var
|
990
|
-
var
|
1133
|
+
var import_react32 = require("react");
|
1134
|
+
var import_zustand9 = require("zustand");
|
991
1135
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
992
1136
|
var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
993
1137
|
const part = message.content[partIndex];
|
@@ -1005,14 +1149,14 @@ var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
|
1005
1149
|
};
|
1006
1150
|
var useContentPartContext2 = (partIndex) => {
|
1007
1151
|
const { useMessage } = useMessageContext();
|
1008
|
-
const [context] = (0,
|
1009
|
-
const useContentPart = (0,
|
1152
|
+
const [context] = (0, import_react32.useState)(() => {
|
1153
|
+
const useContentPart = (0, import_zustand9.create)(
|
1010
1154
|
() => ({})
|
1011
1155
|
);
|
1012
1156
|
syncContentPart(useMessage.getState(), useContentPart, partIndex);
|
1013
1157
|
return { useContentPart };
|
1014
1158
|
});
|
1015
|
-
(0,
|
1159
|
+
(0, import_react32.useEffect)(() => {
|
1016
1160
|
syncContentPart(useMessage.getState(), context.useContentPart, partIndex);
|
1017
1161
|
return useMessage.subscribe((message) => {
|
1018
1162
|
syncContentPart(message, context.useContentPart, partIndex);
|
@@ -1029,42 +1173,67 @@ var ContentPartProvider = ({
|
|
1029
1173
|
};
|
1030
1174
|
|
1031
1175
|
// src/primitives/contentPart/ContentPartDisplay.tsx
|
1032
|
-
var
|
1176
|
+
var ContentPartPrimitiveDisplay = () => {
|
1033
1177
|
const display = useContentPartDisplay();
|
1034
1178
|
return display ?? null;
|
1035
1179
|
};
|
1180
|
+
ContentPartPrimitiveDisplay.displayName = "ContentPartPrimitive.Display";
|
1181
|
+
|
1182
|
+
// src/utils/OutPortal.tsx
|
1183
|
+
var import_react33 = require("react");
|
1184
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
1185
|
+
var OutPortal = ({ node }) => {
|
1186
|
+
const parentRef = (0, import_react33.useRef)(null);
|
1187
|
+
(0, import_react33.useLayoutEffect)(() => {
|
1188
|
+
const parent = parentRef.current;
|
1189
|
+
if (!parent || !node) return;
|
1190
|
+
parent.appendChild(node);
|
1191
|
+
return () => {
|
1192
|
+
parent.removeChild(node);
|
1193
|
+
};
|
1194
|
+
}, [node]);
|
1195
|
+
if (!node) return null;
|
1196
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { ref: parentRef });
|
1197
|
+
};
|
1036
1198
|
|
1037
1199
|
// src/primitives/contentPart/ContentPartInProgressIndicator.tsx
|
1038
|
-
var
|
1039
|
-
|
1040
|
-
|
1200
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
1201
|
+
var ContentPartPrimitiveInProgressIndicator = () => {
|
1202
|
+
const { useMessageUtils } = useMessageContext();
|
1203
|
+
const { useContentPart } = useContentPartContext();
|
1204
|
+
const indicator = useCombinedStore(
|
1205
|
+
[useMessageUtils, useContentPart],
|
1206
|
+
(m, c) => c.status === "in_progress" ? m.inProgressIndicator : null
|
1207
|
+
);
|
1208
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(OutPortal, { node: indicator });
|
1041
1209
|
};
|
1210
|
+
ContentPartPrimitiveInProgressIndicator.displayName = "ContentPartPrimitive.InProgressIndicator";
|
1042
1211
|
|
1043
1212
|
// src/primitives/contentPart/ContentPartText.tsx
|
1044
1213
|
var import_react_primitive4 = require("@radix-ui/react-primitive");
|
1045
|
-
var
|
1046
|
-
var
|
1047
|
-
var
|
1214
|
+
var import_react34 = require("react");
|
1215
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
1216
|
+
var ContentPartPrimitiveText = (0, import_react34.forwardRef)((props, forwardedRef) => {
|
1048
1217
|
const text = useContentPartText();
|
1049
|
-
return /* @__PURE__ */ (0,
|
1218
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_primitive4.Primitive.span, { ...props, ref: forwardedRef, children: text });
|
1050
1219
|
});
|
1051
|
-
|
1220
|
+
ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
|
1052
1221
|
|
1053
1222
|
// src/primitives/message/MessageContent.tsx
|
1054
|
-
var
|
1223
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
1055
1224
|
var defaultComponents = {
|
1056
|
-
Text: () => /* @__PURE__ */ (0,
|
1057
|
-
/* @__PURE__ */ (0,
|
1058
|
-
/* @__PURE__ */ (0,
|
1225
|
+
Text: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("p", { style: { whiteSpace: "pre-line" }, children: [
|
1226
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveText, {}),
|
1227
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveInProgressIndicator, {})
|
1059
1228
|
] }),
|
1060
1229
|
Image: () => null,
|
1061
|
-
UI: () => /* @__PURE__ */ (0,
|
1230
|
+
UI: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveDisplay, {}),
|
1062
1231
|
tools: {
|
1063
1232
|
Fallback: (props) => {
|
1064
1233
|
const { useToolUIs } = useAssistantContext();
|
1065
1234
|
const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));
|
1066
1235
|
if (!Render) return null;
|
1067
|
-
return /* @__PURE__ */ (0,
|
1236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Render, { ...props });
|
1068
1237
|
}
|
1069
1238
|
}
|
1070
1239
|
};
|
@@ -1083,15 +1252,15 @@ var MessageContentPartComponent = ({
|
|
1083
1252
|
const type = part.type;
|
1084
1253
|
switch (type) {
|
1085
1254
|
case "text":
|
1086
|
-
return /* @__PURE__ */ (0,
|
1255
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { part, status });
|
1087
1256
|
case "image":
|
1088
|
-
return /* @__PURE__ */ (0,
|
1257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Image, { part, status });
|
1089
1258
|
case "ui":
|
1090
|
-
return /* @__PURE__ */ (0,
|
1259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(UI, { part, status });
|
1091
1260
|
case "tool-call": {
|
1092
1261
|
const Tool = by_name[part.toolName] || Fallback;
|
1093
1262
|
const addResult = (result) => addToolResult(part.toolCallId, result);
|
1094
|
-
return /* @__PURE__ */ (0,
|
1263
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Tool, { part, status, addResult });
|
1095
1264
|
}
|
1096
1265
|
default:
|
1097
1266
|
throw new Error(`Unknown content part type: ${type}`);
|
@@ -1101,18 +1270,20 @@ var MessageContentPartImpl = ({
|
|
1101
1270
|
partIndex,
|
1102
1271
|
components
|
1103
1272
|
}) => {
|
1104
|
-
return /* @__PURE__ */ (0,
|
1273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartProvider, { partIndex, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MessageContentPartComponent, { components }) });
|
1105
1274
|
};
|
1106
|
-
var MessageContentPart = (0,
|
1275
|
+
var MessageContentPart = (0, import_react35.memo)(
|
1107
1276
|
MessageContentPartImpl,
|
1108
1277
|
(prev, next) => prev.partIndex === next.partIndex && prev.components?.Text === next.components?.Text && prev.components?.Image === next.components?.Image && prev.components?.UI === next.components?.UI && prev.components?.tools === next.components?.tools
|
1109
1278
|
);
|
1110
|
-
var
|
1279
|
+
var MessagePrimitiveContent = ({
|
1280
|
+
components
|
1281
|
+
}) => {
|
1111
1282
|
const { useMessage } = useMessageContext();
|
1112
1283
|
const contentLength = useMessage((s) => s.message.content.length);
|
1113
1284
|
return new Array(contentLength).fill(null).map((_, idx) => {
|
1114
1285
|
const partIndex = idx;
|
1115
|
-
return /* @__PURE__ */ (0,
|
1286
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
1116
1287
|
MessageContentPart,
|
1117
1288
|
{
|
1118
1289
|
partIndex,
|
@@ -1122,71 +1293,69 @@ var MessageContent = ({ components }) => {
|
|
1122
1293
|
);
|
1123
1294
|
});
|
1124
1295
|
};
|
1296
|
+
MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
|
1125
1297
|
|
1126
1298
|
// src/primitives/message/MessageInProgress.tsx
|
1299
|
+
var import_react_dom = require("react-dom");
|
1127
1300
|
var import_react_primitive5 = require("@radix-ui/react-primitive");
|
1128
|
-
var
|
1129
|
-
var
|
1130
|
-
var
|
1301
|
+
var import_react36 = require("react");
|
1302
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
1303
|
+
var MessagePrimitiveInProgress = (0, import_react36.forwardRef)((props, ref) => {
|
1131
1304
|
const { useMessageUtils } = useMessageContext();
|
1132
|
-
|
1133
|
-
|
1134
|
-
}, [useMessageUtils, props, ref]);
|
1135
|
-
return null;
|
1305
|
+
const portalNode = useMessageUtils((s) => s.inProgressIndicator);
|
1306
|
+
return (0, import_react_dom.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_primitive5.Primitive.span, { ...props, ref }), portalNode);
|
1136
1307
|
});
|
1137
|
-
|
1308
|
+
MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
|
1138
1309
|
|
1139
1310
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
1140
|
-
var
|
1141
|
-
var
|
1142
|
-
return /* @__PURE__ */ (0,
|
1311
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
1312
|
+
var BranchPickerPrimitiveRoot = (0, import_react37.forwardRef)(({ hideWhenSingleBranch, ...rest }, ref) => {
|
1313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_primitive6.Primitive.div, { ...rest, ref }) });
|
1143
1314
|
});
|
1144
|
-
|
1315
|
+
BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
|
1145
1316
|
|
1146
1317
|
// src/primitives/composer/index.ts
|
1147
1318
|
var composer_exports = {};
|
1148
1319
|
__export(composer_exports, {
|
1149
|
-
Cancel: () =>
|
1150
|
-
If: () =>
|
1151
|
-
Input: () =>
|
1152
|
-
Root: () =>
|
1153
|
-
Send: () =>
|
1320
|
+
Cancel: () => ComposerPrimitiveCancel,
|
1321
|
+
If: () => ComposerPrimitiveIf,
|
1322
|
+
Input: () => ComposerPrimitiveInput,
|
1323
|
+
Root: () => ComposerPrimitiveRoot,
|
1324
|
+
Send: () => ComposerPrimitiveSend
|
1154
1325
|
});
|
1155
1326
|
|
1156
1327
|
// src/primitives/composer/ComposerRoot.tsx
|
1157
1328
|
var import_primitive5 = require("@radix-ui/primitive");
|
1158
1329
|
var import_react_primitive7 = require("@radix-ui/react-primitive");
|
1159
|
-
var
|
1160
|
-
var
|
1161
|
-
var
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
);
|
1179
|
-
ComposerRoot.displayName = "ComposerRoot";
|
1330
|
+
var import_react38 = require("react");
|
1331
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
1332
|
+
var ComposerPrimitiveRoot = (0, import_react38.forwardRef)(({ onSubmit, ...rest }, forwardedRef) => {
|
1333
|
+
const send = useComposerSend();
|
1334
|
+
const handleSubmit = (e) => {
|
1335
|
+
e.preventDefault();
|
1336
|
+
if (!send) return;
|
1337
|
+
send();
|
1338
|
+
};
|
1339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
1340
|
+
import_react_primitive7.Primitive.form,
|
1341
|
+
{
|
1342
|
+
...rest,
|
1343
|
+
ref: forwardedRef,
|
1344
|
+
onSubmit: (0, import_primitive5.composeEventHandlers)(onSubmit, handleSubmit)
|
1345
|
+
}
|
1346
|
+
);
|
1347
|
+
});
|
1348
|
+
ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
|
1180
1349
|
|
1181
1350
|
// src/primitives/composer/ComposerInput.tsx
|
1182
1351
|
var import_primitive6 = require("@radix-ui/primitive");
|
1183
1352
|
var import_react_compose_refs = require("@radix-ui/react-compose-refs");
|
1184
1353
|
var import_react_slot = require("@radix-ui/react-slot");
|
1185
|
-
var
|
1354
|
+
var import_react39 = require("react");
|
1186
1355
|
var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
|
1187
1356
|
var import_react_use_escape_keydown = require("@radix-ui/react-use-escape-keydown");
|
1188
|
-
var
|
1189
|
-
var
|
1357
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
1358
|
+
var ComposerPrimitiveInput = (0, import_react39.forwardRef)(
|
1190
1359
|
({ autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
|
1191
1360
|
const { useThread } = useThreadContext();
|
1192
1361
|
const { useComposer, type } = useComposerContext();
|
@@ -1195,7 +1364,7 @@ var ComposerInput = (0, import_react33.forwardRef)(
|
|
1195
1364
|
return c.value;
|
1196
1365
|
});
|
1197
1366
|
const Component = asChild ? import_react_slot.Slot : import_react_textarea_autosize.default;
|
1198
|
-
const textareaRef = (0,
|
1367
|
+
const textareaRef = (0, import_react39.useRef)(null);
|
1199
1368
|
const ref = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, textareaRef);
|
1200
1369
|
(0, import_react_use_escape_keydown.useEscapeKeydown)((e) => {
|
1201
1370
|
const composer = useComposer.getState();
|
@@ -1214,7 +1383,7 @@ var ComposerInput = (0, import_react33.forwardRef)(
|
|
1214
1383
|
}
|
1215
1384
|
};
|
1216
1385
|
const autoFocusEnabled = autoFocus && !disabled;
|
1217
|
-
const focus = (0,
|
1386
|
+
const focus = (0, import_react39.useCallback)(() => {
|
1218
1387
|
const textarea = textareaRef.current;
|
1219
1388
|
if (!textarea || !autoFocusEnabled) return;
|
1220
1389
|
textarea.focus({ preventScroll: true });
|
@@ -1223,13 +1392,13 @@ var ComposerInput = (0, import_react33.forwardRef)(
|
|
1223
1392
|
textareaRef.current.value.length
|
1224
1393
|
);
|
1225
1394
|
}, [autoFocusEnabled]);
|
1226
|
-
(0,
|
1395
|
+
(0, import_react39.useEffect)(() => focus(), [focus]);
|
1227
1396
|
useOnComposerFocus(() => {
|
1228
1397
|
if (type === "new") {
|
1229
1398
|
focus();
|
1230
1399
|
}
|
1231
1400
|
});
|
1232
|
-
return /* @__PURE__ */ (0,
|
1401
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
1233
1402
|
Component,
|
1234
1403
|
{
|
1235
1404
|
value,
|
@@ -1246,113 +1415,120 @@ var ComposerInput = (0, import_react33.forwardRef)(
|
|
1246
1415
|
);
|
1247
1416
|
}
|
1248
1417
|
);
|
1249
|
-
|
1418
|
+
ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
|
1250
1419
|
|
1251
1420
|
// src/primitives/composer/ComposerSend.tsx
|
1252
|
-
var
|
1421
|
+
var import_react40 = require("react");
|
1253
1422
|
var import_react_primitive8 = require("@radix-ui/react-primitive");
|
1254
|
-
var
|
1255
|
-
var
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
);
|
1270
|
-
ComposerSend.displayName = "ComposerSend";
|
1423
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
1424
|
+
var ComposerPrimitiveSend = (0, import_react40.forwardRef)(({ disabled, ...rest }, ref) => {
|
1425
|
+
const { useComposer } = useComposerContext();
|
1426
|
+
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
1427
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
1428
|
+
import_react_primitive8.Primitive.button,
|
1429
|
+
{
|
1430
|
+
type: "submit",
|
1431
|
+
...rest,
|
1432
|
+
ref,
|
1433
|
+
disabled: disabled || !hasValue
|
1434
|
+
}
|
1435
|
+
);
|
1436
|
+
});
|
1437
|
+
ComposerPrimitiveSend.displayName = "ComposerPrimitive.Send";
|
1271
1438
|
|
1272
1439
|
// src/primitives/composer/ComposerCancel.tsx
|
1273
|
-
var
|
1274
|
-
"
|
1440
|
+
var ComposerPrimitiveCancel = createActionButton(
|
1441
|
+
"ComposerPrimitive.Cancel",
|
1275
1442
|
useComposerCancel
|
1276
1443
|
);
|
1277
1444
|
|
1278
1445
|
// src/primitives/composer/ComposerIf.tsx
|
1279
|
-
var
|
1446
|
+
var ComposerPrimitiveIf = ({
|
1447
|
+
children,
|
1448
|
+
...query
|
1449
|
+
}) => {
|
1280
1450
|
const result = useComposerIf(query);
|
1281
1451
|
return result ? children : null;
|
1282
1452
|
};
|
1453
|
+
ComposerPrimitiveIf.displayName = "ComposerPrimitive.If";
|
1283
1454
|
|
1284
1455
|
// src/primitives/contentPart/index.ts
|
1285
1456
|
var contentPart_exports = {};
|
1286
1457
|
__export(contentPart_exports, {
|
1287
|
-
Display: () =>
|
1288
|
-
Image: () =>
|
1289
|
-
InProgressIndicator: () =>
|
1290
|
-
Text: () =>
|
1458
|
+
Display: () => ContentPartPrimitiveDisplay,
|
1459
|
+
Image: () => ContentPartPrimitiveImage,
|
1460
|
+
InProgressIndicator: () => ContentPartPrimitiveInProgressIndicator,
|
1461
|
+
Text: () => ContentPartPrimitiveText
|
1291
1462
|
});
|
1292
1463
|
|
1293
1464
|
// src/primitives/contentPart/ContentPartImage.tsx
|
1294
1465
|
var import_react_primitive9 = require("@radix-ui/react-primitive");
|
1295
|
-
var
|
1296
|
-
var
|
1297
|
-
var
|
1466
|
+
var import_react41 = require("react");
|
1467
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
1468
|
+
var ContentPartPrimitiveImage = (0, import_react41.forwardRef)((props, forwardedRef) => {
|
1298
1469
|
const image = useContentPartImage();
|
1299
|
-
return /* @__PURE__ */ (0,
|
1470
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_primitive9.Primitive.img, { src: image, ...props, ref: forwardedRef });
|
1300
1471
|
});
|
1301
|
-
|
1472
|
+
ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
|
1302
1473
|
|
1303
1474
|
// src/primitives/thread/index.ts
|
1304
1475
|
var thread_exports = {};
|
1305
1476
|
__export(thread_exports, {
|
1306
|
-
Empty: () =>
|
1307
|
-
If: () =>
|
1308
|
-
Messages: () =>
|
1309
|
-
Root: () =>
|
1310
|
-
ScrollToBottom: () =>
|
1311
|
-
Suggestion: () =>
|
1312
|
-
Viewport: () =>
|
1477
|
+
Empty: () => ThreadPrimitiveEmpty,
|
1478
|
+
If: () => ThreadPrimitiveIf,
|
1479
|
+
Messages: () => ThreadPrimitiveMessages,
|
1480
|
+
Root: () => ThreadPrimitiveRoot,
|
1481
|
+
ScrollToBottom: () => ThreadPrimitiveScrollToBottom,
|
1482
|
+
Suggestion: () => ThreadPrimitiveSuggestion,
|
1483
|
+
Viewport: () => ThreadPrimitiveViewport
|
1313
1484
|
});
|
1314
1485
|
|
1315
1486
|
// src/primitives/thread/ThreadRoot.tsx
|
1316
1487
|
var import_react_primitive10 = require("@radix-ui/react-primitive");
|
1317
|
-
var
|
1318
|
-
var
|
1319
|
-
var
|
1320
|
-
(props, ref)
|
1321
|
-
|
1322
|
-
|
1323
|
-
);
|
1324
|
-
ThreadRoot.displayName = "ThreadRoot";
|
1488
|
+
var import_react42 = require("react");
|
1489
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
1490
|
+
var ThreadPrimitiveRoot = (0, import_react42.forwardRef)((props, ref) => {
|
1491
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_primitive10.Primitive.div, { ...props, ref });
|
1492
|
+
});
|
1493
|
+
ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
|
1325
1494
|
|
1326
1495
|
// src/primitives/thread/ThreadEmpty.tsx
|
1327
|
-
var
|
1496
|
+
var ThreadPrimitiveEmpty = ({
|
1497
|
+
children
|
1498
|
+
}) => {
|
1328
1499
|
const empty = useThreadEmpty();
|
1329
1500
|
return empty ? children : null;
|
1330
1501
|
};
|
1502
|
+
ThreadPrimitiveEmpty.displayName = "ThreadPrimitive.Empty";
|
1331
1503
|
|
1332
1504
|
// src/primitives/thread/ThreadIf.tsx
|
1333
|
-
var
|
1505
|
+
var ThreadPrimitiveIf = ({
|
1506
|
+
children,
|
1507
|
+
...query
|
1508
|
+
}) => {
|
1334
1509
|
const result = useThreadIf(query);
|
1335
1510
|
return result ? children : null;
|
1336
1511
|
};
|
1512
|
+
ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
|
1337
1513
|
|
1338
1514
|
// src/primitives/thread/ThreadViewport.tsx
|
1339
1515
|
var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
|
1340
1516
|
var import_react_primitive11 = require("@radix-ui/react-primitive");
|
1341
|
-
var
|
1517
|
+
var import_react47 = require("react");
|
1342
1518
|
|
1343
1519
|
// src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
|
1344
1520
|
var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
|
1345
|
-
var
|
1521
|
+
var import_react46 = require("react");
|
1346
1522
|
|
1347
1523
|
// src/utils/hooks/useOnResizeContent.tsx
|
1348
1524
|
var import_react_use_callback_ref2 = require("@radix-ui/react-use-callback-ref");
|
1349
|
-
var
|
1525
|
+
var import_react44 = require("react");
|
1350
1526
|
|
1351
1527
|
// src/utils/hooks/useManagedRef.ts
|
1352
|
-
var
|
1528
|
+
var import_react43 = require("react");
|
1353
1529
|
var useManagedRef = (callback) => {
|
1354
|
-
const cleanupRef = (0,
|
1355
|
-
const ref = (0,
|
1530
|
+
const cleanupRef = (0, import_react43.useRef)();
|
1531
|
+
const ref = (0, import_react43.useCallback)(
|
1356
1532
|
(el) => {
|
1357
1533
|
if (cleanupRef.current) {
|
1358
1534
|
cleanupRef.current();
|
@@ -1369,7 +1545,7 @@ var useManagedRef = (callback) => {
|
|
1369
1545
|
// src/utils/hooks/useOnResizeContent.tsx
|
1370
1546
|
var useOnResizeContent = (callback) => {
|
1371
1547
|
const callbackRef = (0, import_react_use_callback_ref2.useCallbackRef)(callback);
|
1372
|
-
const refCallback = (0,
|
1548
|
+
const refCallback = (0, import_react44.useCallback)(
|
1373
1549
|
(el) => {
|
1374
1550
|
const resizeObserver = new ResizeObserver(() => {
|
1375
1551
|
callbackRef();
|
@@ -1406,11 +1582,11 @@ var useOnResizeContent = (callback) => {
|
|
1406
1582
|
|
1407
1583
|
// src/utils/hooks/useOnScrollToBottom.tsx
|
1408
1584
|
var import_react_use_callback_ref3 = require("@radix-ui/react-use-callback-ref");
|
1409
|
-
var
|
1585
|
+
var import_react45 = require("react");
|
1410
1586
|
var useOnScrollToBottom = (callback) => {
|
1411
1587
|
const callbackRef = (0, import_react_use_callback_ref3.useCallbackRef)(callback);
|
1412
1588
|
const { useViewport } = useThreadContext();
|
1413
|
-
(0,
|
1589
|
+
(0, import_react45.useEffect)(() => {
|
1414
1590
|
return useViewport.getState().onScrollToBottom(() => {
|
1415
1591
|
callbackRef();
|
1416
1592
|
});
|
@@ -1421,11 +1597,11 @@ var useOnScrollToBottom = (callback) => {
|
|
1421
1597
|
var useThreadViewportAutoScroll = ({
|
1422
1598
|
autoScroll = true
|
1423
1599
|
}) => {
|
1424
|
-
const divRef = (0,
|
1600
|
+
const divRef = (0, import_react46.useRef)(null);
|
1425
1601
|
const { useViewport } = useThreadContext();
|
1426
|
-
const firstRenderRef = (0,
|
1427
|
-
const lastScrollTop = (0,
|
1428
|
-
const isScrollingToBottomRef = (0,
|
1602
|
+
const firstRenderRef = (0, import_react46.useRef)(true);
|
1603
|
+
const lastScrollTop = (0, import_react46.useRef)(0);
|
1604
|
+
const isScrollingToBottomRef = (0, import_react46.useRef)(false);
|
1429
1605
|
const scrollToBottom = () => {
|
1430
1606
|
const div = divRef.current;
|
1431
1607
|
if (!div || !autoScroll) return;
|
@@ -1471,29 +1647,29 @@ var useThreadViewportAutoScroll = ({
|
|
1471
1647
|
};
|
1472
1648
|
|
1473
1649
|
// src/primitives/thread/ThreadViewport.tsx
|
1474
|
-
var
|
1475
|
-
var
|
1650
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
1651
|
+
var ThreadPrimitiveViewport = (0, import_react47.forwardRef)(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
|
1476
1652
|
const autoScrollRef = useThreadViewportAutoScroll({
|
1477
1653
|
autoScroll
|
1478
1654
|
});
|
1479
1655
|
const ref = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, autoScrollRef);
|
1480
|
-
return /* @__PURE__ */ (0,
|
1656
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_primitive11.Primitive.div, { ...rest, ref, children });
|
1481
1657
|
});
|
1482
|
-
|
1658
|
+
ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
|
1483
1659
|
|
1484
1660
|
// src/primitives/thread/ThreadMessages.tsx
|
1485
|
-
var
|
1661
|
+
var import_react49 = require("react");
|
1486
1662
|
|
1487
1663
|
// src/context/providers/MessageProvider.tsx
|
1488
|
-
var
|
1489
|
-
var
|
1664
|
+
var import_react48 = require("react");
|
1665
|
+
var import_zustand12 = require("zustand");
|
1490
1666
|
|
1491
1667
|
// src/context/stores/EditComposer.ts
|
1492
|
-
var
|
1668
|
+
var import_zustand10 = require("zustand");
|
1493
1669
|
var makeEditComposerStore = ({
|
1494
1670
|
onEdit,
|
1495
1671
|
onSend
|
1496
|
-
}) => (0,
|
1672
|
+
}) => (0, import_zustand10.create)()((set, get, store) => ({
|
1497
1673
|
...makeBaseComposer(set, get, store),
|
1498
1674
|
isEditing: false,
|
1499
1675
|
edit: () => {
|
@@ -1513,12 +1689,9 @@ var makeEditComposerStore = ({
|
|
1513
1689
|
}));
|
1514
1690
|
|
1515
1691
|
// src/context/stores/MessageUtils.ts
|
1516
|
-
var
|
1517
|
-
var makeMessageUtilsStore = () => (0,
|
1518
|
-
inProgressIndicator:
|
1519
|
-
setInProgressIndicator: (value) => {
|
1520
|
-
set({ inProgressIndicator: value });
|
1521
|
-
},
|
1692
|
+
var import_zustand11 = require("zustand");
|
1693
|
+
var makeMessageUtilsStore = () => (0, import_zustand11.create)((set) => ({
|
1694
|
+
inProgressIndicator: document.createElement("span"),
|
1522
1695
|
isCopied: false,
|
1523
1696
|
setIsCopied: (value) => {
|
1524
1697
|
set({ isCopied: value });
|
@@ -1530,15 +1703,15 @@ var makeMessageUtilsStore = () => (0, import_zustand9.create)((set) => ({
|
|
1530
1703
|
}));
|
1531
1704
|
|
1532
1705
|
// src/context/providers/MessageProvider.tsx
|
1533
|
-
var
|
1534
|
-
var getIsLast = (
|
1535
|
-
return
|
1706
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
1707
|
+
var getIsLast = (messages, message) => {
|
1708
|
+
return messages[messages.length - 1]?.id === message.id;
|
1536
1709
|
};
|
1537
|
-
var syncMessage = (
|
1538
|
-
const parentId =
|
1539
|
-
const message =
|
1710
|
+
var syncMessage = (messages, getBranches, useMessage, messageIndex) => {
|
1711
|
+
const parentId = messages[messageIndex - 1]?.id ?? null;
|
1712
|
+
const message = messages[messageIndex];
|
1540
1713
|
if (!message) return;
|
1541
|
-
const isLast = getIsLast(
|
1714
|
+
const isLast = getIsLast(messages, message);
|
1542
1715
|
const branches = getBranches(message.id);
|
1543
1716
|
const currentState = useMessage.getState();
|
1544
1717
|
if (currentState.message === message && currentState.parentId === parentId && currentState.branches === branches && currentState.isLast === isLast)
|
@@ -1551,9 +1724,9 @@ var syncMessage = (thread, getBranches, useMessage, messageIndex) => {
|
|
1551
1724
|
});
|
1552
1725
|
};
|
1553
1726
|
var useMessageContext2 = (messageIndex) => {
|
1554
|
-
const {
|
1555
|
-
const [context] = (0,
|
1556
|
-
const useMessage = (0,
|
1727
|
+
const { useThreadMessages, useThreadActions } = useThreadContext();
|
1728
|
+
const [context] = (0, import_react48.useState)(() => {
|
1729
|
+
const useMessage = (0, import_zustand12.create)(() => ({}));
|
1557
1730
|
const useMessageUtils = makeMessageUtilsStore();
|
1558
1731
|
const useEditComposer = makeEditComposerStore({
|
1559
1732
|
onEdit: () => {
|
@@ -1582,15 +1755,15 @@ var useMessageContext2 = (messageIndex) => {
|
|
1582
1755
|
}
|
1583
1756
|
});
|
1584
1757
|
syncMessage(
|
1585
|
-
|
1758
|
+
useThreadMessages.getState(),
|
1586
1759
|
useThreadActions.getState().getBranches,
|
1587
1760
|
useMessage,
|
1588
1761
|
messageIndex
|
1589
1762
|
);
|
1590
1763
|
return { useMessage, useMessageUtils, useEditComposer };
|
1591
1764
|
});
|
1592
|
-
(0,
|
1593
|
-
return
|
1765
|
+
(0, import_react48.useEffect)(() => {
|
1766
|
+
return useThreadMessages.subscribe((thread) => {
|
1594
1767
|
syncMessage(
|
1595
1768
|
thread,
|
1596
1769
|
useThreadActions.getState().getBranches,
|
@@ -1598,7 +1771,7 @@ var useMessageContext2 = (messageIndex) => {
|
|
1598
1771
|
messageIndex
|
1599
1772
|
);
|
1600
1773
|
});
|
1601
|
-
}, [
|
1774
|
+
}, [useThreadMessages, useThreadActions, context, messageIndex]);
|
1602
1775
|
return context;
|
1603
1776
|
};
|
1604
1777
|
var MessageProvider = ({
|
@@ -1606,11 +1779,11 @@ var MessageProvider = ({
|
|
1606
1779
|
children
|
1607
1780
|
}) => {
|
1608
1781
|
const context = useMessageContext2(messageIndex);
|
1609
|
-
return /* @__PURE__ */ (0,
|
1782
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(MessageContext.Provider, { value: context, children });
|
1610
1783
|
};
|
1611
1784
|
|
1612
1785
|
// src/primitives/thread/ThreadMessages.tsx
|
1613
|
-
var
|
1786
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
1614
1787
|
var getComponents = (components) => {
|
1615
1788
|
return {
|
1616
1789
|
EditComposer: components.EditComposer ?? components.UserMessage ?? components.Message,
|
@@ -1623,25 +1796,27 @@ var ThreadMessageImpl = ({
|
|
1623
1796
|
components
|
1624
1797
|
}) => {
|
1625
1798
|
const { UserMessage, EditComposer, AssistantMessage } = getComponents(components);
|
1626
|
-
return /* @__PURE__ */ (0,
|
1627
|
-
/* @__PURE__ */ (0,
|
1628
|
-
/* @__PURE__ */ (0,
|
1629
|
-
/* @__PURE__ */ (0,
|
1799
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(MessageProvider, { messageIndex, children: [
|
1800
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(MessagePrimitiveIf, { user: true, children: [
|
1801
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(UserMessage, {}) }),
|
1802
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(EditComposer, {}) })
|
1630
1803
|
] }),
|
1631
|
-
/* @__PURE__ */ (0,
|
1804
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AssistantMessage, {}) })
|
1632
1805
|
] });
|
1633
1806
|
};
|
1634
|
-
var ThreadMessage = (0,
|
1807
|
+
var ThreadMessage = (0, import_react49.memo)(
|
1635
1808
|
ThreadMessageImpl,
|
1636
1809
|
(prev, next) => prev.messageIndex === next.messageIndex && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
|
1637
1810
|
);
|
1638
|
-
var
|
1639
|
-
|
1640
|
-
|
1811
|
+
var ThreadPrimitiveMessages = ({
|
1812
|
+
components
|
1813
|
+
}) => {
|
1814
|
+
const { useThreadMessages } = useThreadContext();
|
1815
|
+
const messagesLength = useThreadMessages((t) => t.length);
|
1641
1816
|
if (messagesLength === 0) return null;
|
1642
1817
|
return new Array(messagesLength).fill(null).map((_, idx) => {
|
1643
1818
|
const messageIndex = idx;
|
1644
|
-
return /* @__PURE__ */ (0,
|
1819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
1645
1820
|
ThreadMessage,
|
1646
1821
|
{
|
1647
1822
|
messageIndex,
|
@@ -1651,21 +1826,22 @@ var ThreadMessages = ({ components }) => {
|
|
1651
1826
|
);
|
1652
1827
|
});
|
1653
1828
|
};
|
1829
|
+
ThreadPrimitiveMessages.displayName = "ThreadPrimitive.Messages";
|
1654
1830
|
|
1655
1831
|
// src/primitives/thread/ThreadScrollToBottom.tsx
|
1656
|
-
var
|
1657
|
-
"
|
1832
|
+
var ThreadPrimitiveScrollToBottom = createActionButton(
|
1833
|
+
"ThreadPrimitive.ScrollToBottom",
|
1658
1834
|
useThreadScrollToBottom
|
1659
1835
|
);
|
1660
1836
|
|
1661
1837
|
// src/primitives/thread/ThreadSuggestion.tsx
|
1662
|
-
var
|
1663
|
-
"
|
1838
|
+
var ThreadPrimitiveSuggestion = createActionButton(
|
1839
|
+
"ThreadPrimitive.Suggestion",
|
1664
1840
|
useThreadSuggestion
|
1665
1841
|
);
|
1666
1842
|
|
1667
1843
|
// src/runtime/local/useLocalRuntime.tsx
|
1668
|
-
var
|
1844
|
+
var import_react50 = require("react");
|
1669
1845
|
|
1670
1846
|
// src/runtime/utils/idUtils.tsx
|
1671
1847
|
var import_non_secure = require("nanoid/non-secure");
|
@@ -1827,13 +2003,91 @@ var MessageRepository = class {
|
|
1827
2003
|
}
|
1828
2004
|
};
|
1829
2005
|
|
2006
|
+
// src/runtime/core/BaseAssistantRuntime.tsx
|
2007
|
+
var BaseAssistantRuntime = class {
|
2008
|
+
constructor(_thread) {
|
2009
|
+
this._thread = _thread;
|
2010
|
+
this._thread = _thread;
|
2011
|
+
this._unsubscribe = this._thread.subscribe(this.subscriptionHandler);
|
2012
|
+
}
|
2013
|
+
_unsubscribe;
|
2014
|
+
get thread() {
|
2015
|
+
return this._thread;
|
2016
|
+
}
|
2017
|
+
set thread(thread) {
|
2018
|
+
this._unsubscribe();
|
2019
|
+
this._thread = thread;
|
2020
|
+
this._unsubscribe = this._thread.subscribe(this.subscriptionHandler);
|
2021
|
+
this.subscriptionHandler();
|
2022
|
+
}
|
2023
|
+
get messages() {
|
2024
|
+
return this.thread.messages;
|
2025
|
+
}
|
2026
|
+
get isRunning() {
|
2027
|
+
return this.thread.isRunning;
|
2028
|
+
}
|
2029
|
+
getBranches(messageId) {
|
2030
|
+
return this.thread.getBranches(messageId);
|
2031
|
+
}
|
2032
|
+
switchToBranch(branchId) {
|
2033
|
+
return this.thread.switchToBranch(branchId);
|
2034
|
+
}
|
2035
|
+
append(message) {
|
2036
|
+
return this.thread.append(message);
|
2037
|
+
}
|
2038
|
+
startRun(parentId) {
|
2039
|
+
return this.thread.startRun(parentId);
|
2040
|
+
}
|
2041
|
+
cancelRun() {
|
2042
|
+
return this.thread.cancelRun();
|
2043
|
+
}
|
2044
|
+
addToolResult(toolCallId, result) {
|
2045
|
+
return this.thread.addToolResult(toolCallId, result);
|
2046
|
+
}
|
2047
|
+
_subscriptions = /* @__PURE__ */ new Set();
|
2048
|
+
subscribe(callback) {
|
2049
|
+
this._subscriptions.add(callback);
|
2050
|
+
return () => this._subscriptions.delete(callback);
|
2051
|
+
}
|
2052
|
+
subscriptionHandler = () => {
|
2053
|
+
for (const callback of this._subscriptions) callback();
|
2054
|
+
};
|
2055
|
+
get unstable_synchronizer() {
|
2056
|
+
return this.thread.unstable_synchronizer;
|
2057
|
+
}
|
2058
|
+
};
|
2059
|
+
|
1830
2060
|
// src/runtime/local/LocalRuntime.tsx
|
1831
|
-
var LocalRuntime = class {
|
2061
|
+
var LocalRuntime = class extends BaseAssistantRuntime {
|
2062
|
+
_configProviders;
|
1832
2063
|
constructor(adapter) {
|
2064
|
+
const configProviders = /* @__PURE__ */ new Set();
|
2065
|
+
super(new LocalThreadRuntime(configProviders, adapter));
|
2066
|
+
this._configProviders = configProviders;
|
2067
|
+
}
|
2068
|
+
set adapter(adapter) {
|
2069
|
+
this.thread.adapter = adapter;
|
2070
|
+
}
|
2071
|
+
registerModelConfigProvider(provider) {
|
2072
|
+
this._configProviders.add(provider);
|
2073
|
+
return () => this._configProviders.delete(provider);
|
2074
|
+
}
|
2075
|
+
switchToThread(threadId) {
|
2076
|
+
if (threadId) {
|
2077
|
+
throw new Error("LocalRuntime does not yet support switching threads");
|
2078
|
+
}
|
2079
|
+
return this.thread = new LocalThreadRuntime(
|
2080
|
+
this._configProviders,
|
2081
|
+
this.thread.adapter
|
2082
|
+
);
|
2083
|
+
}
|
2084
|
+
};
|
2085
|
+
var LocalThreadRuntime = class {
|
2086
|
+
constructor(_configProviders, adapter) {
|
2087
|
+
this._configProviders = _configProviders;
|
1833
2088
|
this.adapter = adapter;
|
1834
2089
|
}
|
1835
2090
|
_subscriptions = /* @__PURE__ */ new Set();
|
1836
|
-
_configProviders = /* @__PURE__ */ new Set();
|
1837
2091
|
abortController = null;
|
1838
2092
|
repository = new MessageRepository();
|
1839
2093
|
get messages() {
|
@@ -1912,96 +2166,24 @@ var LocalRuntime = class {
|
|
1912
2166
|
this._subscriptions.add(callback);
|
1913
2167
|
return () => this._subscriptions.delete(callback);
|
1914
2168
|
}
|
1915
|
-
registerModelConfigProvider(provider) {
|
1916
|
-
this._configProviders.add(provider);
|
1917
|
-
return () => this._configProviders.delete(provider);
|
1918
|
-
}
|
1919
2169
|
addToolResult() {
|
1920
|
-
throw new Error("LocalRuntime does not yet support tool results");
|
2170
|
+
throw new Error("LocalRuntime does not yet support adding tool results");
|
1921
2171
|
}
|
1922
2172
|
};
|
1923
2173
|
|
1924
2174
|
// src/runtime/local/useLocalRuntime.tsx
|
1925
2175
|
var useLocalRuntime = (adapter) => {
|
1926
|
-
const [runtime] = (0,
|
1927
|
-
(0,
|
2176
|
+
const [runtime] = (0, import_react50.useState)(() => new LocalRuntime(adapter));
|
2177
|
+
(0, import_react50.useInsertionEffect)(() => {
|
1928
2178
|
runtime.adapter = adapter;
|
1929
2179
|
});
|
1930
2180
|
return runtime;
|
1931
2181
|
};
|
1932
2182
|
|
1933
|
-
// src/model-config/useAssistantTool.tsx
|
1934
|
-
var import_react45 = require("react");
|
1935
|
-
var useAssistantTool = (tool) => {
|
1936
|
-
const { useModelConfig, useToolUIs } = useAssistantContext();
|
1937
|
-
const registerModelConfigProvider = useModelConfig(
|
1938
|
-
(s) => s.registerModelConfigProvider
|
1939
|
-
);
|
1940
|
-
const setToolUI = useToolUIs((s) => s.setToolUI);
|
1941
|
-
(0, import_react45.useEffect)(() => {
|
1942
|
-
const { toolName, render, ...rest } = tool;
|
1943
|
-
const config = {
|
1944
|
-
tools: {
|
1945
|
-
[tool.toolName]: rest
|
1946
|
-
}
|
1947
|
-
};
|
1948
|
-
const unsub1 = registerModelConfigProvider(() => config);
|
1949
|
-
const unsub2 = render ? setToolUI(toolName, render) : void 0;
|
1950
|
-
return () => {
|
1951
|
-
unsub1();
|
1952
|
-
unsub2?.();
|
1953
|
-
};
|
1954
|
-
}, [registerModelConfigProvider, setToolUI, tool]);
|
1955
|
-
};
|
1956
|
-
|
1957
|
-
// src/model-config/makeAssistantTool.tsx
|
1958
|
-
var makeAssistantTool = (tool) => {
|
1959
|
-
const Tool = () => {
|
1960
|
-
useAssistantTool(tool);
|
1961
|
-
return null;
|
1962
|
-
};
|
1963
|
-
return Tool;
|
1964
|
-
};
|
1965
|
-
|
1966
|
-
// src/model-config/useAssistantToolUI.tsx
|
1967
|
-
var import_react46 = require("react");
|
1968
|
-
var useAssistantToolUI = (tool) => {
|
1969
|
-
const { useToolUIs } = useAssistantContext();
|
1970
|
-
const setToolUI = useToolUIs((s) => s.setToolUI);
|
1971
|
-
(0, import_react46.useEffect)(() => {
|
1972
|
-
if (!tool) return;
|
1973
|
-
const { toolName, render } = tool;
|
1974
|
-
return setToolUI(toolName, render);
|
1975
|
-
}, [setToolUI, tool]);
|
1976
|
-
};
|
1977
|
-
|
1978
|
-
// src/model-config/makeAssistantToolUI.tsx
|
1979
|
-
var makeAssistantToolUI = (tool) => {
|
1980
|
-
const ToolUI = () => {
|
1981
|
-
useAssistantToolUI(tool);
|
1982
|
-
return null;
|
1983
|
-
};
|
1984
|
-
return ToolUI;
|
1985
|
-
};
|
1986
|
-
|
1987
|
-
// src/model-config/useAssistantInstructions.tsx
|
1988
|
-
var import_react47 = require("react");
|
1989
|
-
var useAssistantInstructions = (instruction) => {
|
1990
|
-
const { useModelConfig } = useAssistantContext();
|
1991
|
-
const registerModelConfigProvider = useModelConfig(
|
1992
|
-
(s) => s.registerModelConfigProvider
|
1993
|
-
);
|
1994
|
-
(0, import_react47.useEffect)(() => {
|
1995
|
-
const config = {
|
1996
|
-
system: instruction
|
1997
|
-
};
|
1998
|
-
return registerModelConfigProvider(() => config);
|
1999
|
-
}, [registerModelConfigProvider, instruction]);
|
2000
|
-
};
|
2001
|
-
|
2002
2183
|
// src/internal.ts
|
2003
2184
|
var internal_exports = {};
|
2004
2185
|
__export(internal_exports, {
|
2186
|
+
BaseAssistantRuntime: () => BaseAssistantRuntime,
|
2005
2187
|
MessageRepository: () => MessageRepository,
|
2006
2188
|
ProxyConfigProvider: () => ProxyConfigProvider
|
2007
2189
|
});
|
@@ -2021,6 +2203,7 @@ __export(internal_exports, {
|
|
2021
2203
|
useActionBarCopy,
|
2022
2204
|
useActionBarEdit,
|
2023
2205
|
useActionBarReload,
|
2206
|
+
useAppendMessage,
|
2024
2207
|
useAssistantContext,
|
2025
2208
|
useAssistantInstructions,
|
2026
2209
|
useAssistantTool,
|
@@ -2036,11 +2219,11 @@ __export(internal_exports, {
|
|
2036
2219
|
useContentPartContext,
|
2037
2220
|
useContentPartDisplay,
|
2038
2221
|
useContentPartImage,
|
2039
|
-
useContentPartInProgressIndicator,
|
2040
2222
|
useContentPartText,
|
2041
2223
|
useLocalRuntime,
|
2042
2224
|
useMessageContext,
|
2043
2225
|
useMessageIf,
|
2226
|
+
useSwitchToNewThread,
|
2044
2227
|
useThreadContext,
|
2045
2228
|
useThreadEmpty,
|
2046
2229
|
useThreadIf,
|