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