@assistant-ui/react 0.5.45 → 0.5.47
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/{chunk-BQ3MRWUV.js → chunk-BNSCUYW7.js} +9 -5
- package/dist/chunk-BNSCUYW7.js.map +1 -0
- package/dist/{chunk-5ZTUOAPH.mjs → chunk-TZO3D3VQ.mjs} +9 -5
- package/dist/chunk-TZO3D3VQ.mjs.map +1 -0
- package/dist/{edge-6dYzFCV5.d.mts → edge-Dwfu6YTG.d.mts} +16 -1
- package/dist/{edge-6dYzFCV5.d.ts → edge-Dwfu6YTG.d.ts} +16 -1
- package/dist/edge.d.mts +75 -75
- package/dist/edge.d.ts +75 -75
- package/dist/edge.js +8 -4
- package/dist/edge.js.map +1 -1
- package/dist/edge.mjs +8 -4
- package/dist/edge.mjs.map +1 -1
- package/dist/index.d.mts +201 -62
- package/dist/index.d.ts +201 -62
- package/dist/index.js +851 -234
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +912 -295
- package/dist/index.mjs.map +1 -1
- package/dist/styles/index.css +54 -3
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/tailwindcss/thread.css +32 -4
- package/package.json +1 -1
- package/dist/chunk-5ZTUOAPH.mjs.map +0 -1
- package/dist/chunk-BQ3MRWUV.js.map +0 -1
package/dist/index.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8;"use client";
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10; var _class11;"use client";
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
var
|
13
|
+
var _chunkBNSCUYW7js = require('./chunk-BNSCUYW7.js');
|
14
14
|
|
15
15
|
|
16
16
|
var _chunkDCHYNTHIjs = require('./chunk-DCHYNTHI.js');
|
@@ -42,7 +42,7 @@ var _zustand = require('zustand');
|
|
42
42
|
var ProxyConfigProvider = (_class = class {constructor() { _class.prototype.__init.call(this); }
|
43
43
|
__init() {this._providers = /* @__PURE__ */ new Set()}
|
44
44
|
getModelConfig() {
|
45
|
-
return
|
45
|
+
return _chunkBNSCUYW7js.mergeModelConfigs.call(void 0, this._providers);
|
46
46
|
}
|
47
47
|
registerModelConfigProvider(provider) {
|
48
48
|
this._providers.add(provider);
|
@@ -125,21 +125,26 @@ var makeComposerStore = (useThreadRuntime) => {
|
|
125
125
|
setValue(value) {
|
126
126
|
get().setText(value);
|
127
127
|
},
|
128
|
+
attachments: runtime.composer.attachments,
|
129
|
+
addAttachment: (file) => {
|
130
|
+
useThreadRuntime.getState().composer.addAttachment(file);
|
131
|
+
},
|
132
|
+
removeAttachment: (attachmentId) => {
|
133
|
+
useThreadRuntime.getState().composer.removeAttachment(attachmentId);
|
134
|
+
},
|
135
|
+
reset: () => {
|
136
|
+
useThreadRuntime.getState().composer.reset();
|
137
|
+
},
|
128
138
|
text: runtime.composer.text,
|
129
|
-
setText: (
|
130
|
-
useThreadRuntime.getState().composer.setText(
|
139
|
+
setText: (text) => {
|
140
|
+
useThreadRuntime.getState().composer.setText(text);
|
131
141
|
},
|
132
142
|
canCancel: runtime.capabilities.cancel,
|
133
143
|
isEditing: true,
|
144
|
+
isEmpty: runtime.composer.isEmpty,
|
134
145
|
send: () => {
|
135
146
|
const runtime2 = useThreadRuntime.getState();
|
136
|
-
|
137
|
-
runtime2.composer.setText("");
|
138
|
-
runtime2.append({
|
139
|
-
parentId: _nullishCoalesce(_optionalChain([runtime2, 'access', _6 => _6.messages, 'access', _7 => _7.at, 'call', _8 => _8(-1), 'optionalAccess', _9 => _9.id]), () => ( null)),
|
140
|
-
role: "user",
|
141
|
-
content: [{ type: "text", text }]
|
142
|
-
});
|
147
|
+
runtime2.composer.send();
|
143
148
|
},
|
144
149
|
cancel: () => {
|
145
150
|
useThreadRuntime.getState().cancelRun();
|
@@ -167,7 +172,7 @@ var getThreadStateFromRuntime = (runtime) => {
|
|
167
172
|
threadId: runtime.threadId,
|
168
173
|
capabilities: runtime.capabilities,
|
169
174
|
isDisabled: runtime.isDisabled,
|
170
|
-
isRunning: _optionalChain([lastMessage, 'optionalAccess',
|
175
|
+
isRunning: _optionalChain([lastMessage, 'optionalAccess', _6 => _6.role]) !== "assistant" ? false : lastMessage.status.type === "running"
|
171
176
|
});
|
172
177
|
};
|
173
178
|
var makeThreadStore = (runtimeRef) => {
|
@@ -228,7 +233,7 @@ var subscribeToMainThread = (runtime, callback) => {
|
|
228
233
|
let first = true;
|
229
234
|
let cleanup;
|
230
235
|
const inner = () => {
|
231
|
-
_optionalChain([cleanup, 'optionalCall',
|
236
|
+
_optionalChain([cleanup, 'optionalCall', _7 => _7()]);
|
232
237
|
cleanup = runtime.thread.subscribe(callback);
|
233
238
|
if (!first) {
|
234
239
|
callback();
|
@@ -239,7 +244,7 @@ var subscribeToMainThread = (runtime, callback) => {
|
|
239
244
|
inner();
|
240
245
|
return () => {
|
241
246
|
unsubscribe();
|
242
|
-
_optionalChain([cleanup, 'optionalCall',
|
247
|
+
_optionalChain([cleanup, 'optionalCall', _8 => _8()]);
|
243
248
|
};
|
244
249
|
};
|
245
250
|
|
@@ -275,6 +280,7 @@ _chunkDCHYNTHIjs.__export.call(void 0, internal_exports, {
|
|
275
280
|
BaseAssistantRuntime: () => BaseAssistantRuntime,
|
276
281
|
MessageRepository: () => MessageRepository,
|
277
282
|
ProxyConfigProvider: () => ProxyConfigProvider,
|
283
|
+
ThreadRuntimeComposer: () => ThreadRuntimeComposer,
|
278
284
|
TooltipIconButton: () => TooltipIconButton,
|
279
285
|
generateId: () => generateId,
|
280
286
|
useSmooth: () => useSmooth,
|
@@ -282,6 +288,76 @@ _chunkDCHYNTHIjs.__export.call(void 0, internal_exports, {
|
|
282
288
|
withSmoothContextProvider: () => withSmoothContextProvider
|
283
289
|
});
|
284
290
|
|
291
|
+
// src/runtimes/utils/ThreadRuntimeComposer.tsx
|
292
|
+
var ThreadRuntimeComposer = (_class3 = class {
|
293
|
+
constructor(runtime, notifySubscribers) {;_class3.prototype.__init4.call(this);_class3.prototype.__init5.call(this);_class3.prototype.__init6.call(this);
|
294
|
+
this.runtime = runtime;
|
295
|
+
this.notifySubscribers = notifySubscribers;
|
296
|
+
}
|
297
|
+
|
298
|
+
__init4() {this.attachmentAccept = "*"}
|
299
|
+
get isEmpty() {
|
300
|
+
return !this.text.trim() && !this.attachments.length;
|
301
|
+
}
|
302
|
+
setAttachmentAdapter(adapter) {
|
303
|
+
this._attachmentAdapter = adapter;
|
304
|
+
const accept = _nullishCoalesce(_optionalChain([adapter, 'optionalAccess', _9 => _9.accept]), () => ( "*"));
|
305
|
+
if (this.attachmentAccept !== accept) {
|
306
|
+
this.attachmentAccept = accept;
|
307
|
+
return true;
|
308
|
+
}
|
309
|
+
return false;
|
310
|
+
}
|
311
|
+
__init5() {this._attachments = []}
|
312
|
+
get attachments() {
|
313
|
+
return this._attachments;
|
314
|
+
}
|
315
|
+
async addAttachment(file) {
|
316
|
+
if (!this._attachmentAdapter)
|
317
|
+
throw new Error("Attachments are not supported");
|
318
|
+
const attachment = await this._attachmentAdapter.add({ file });
|
319
|
+
this._attachments = [...this._attachments, attachment];
|
320
|
+
this.notifySubscribers();
|
321
|
+
}
|
322
|
+
async removeAttachment(attachmentId) {
|
323
|
+
if (!this._attachmentAdapter)
|
324
|
+
throw new Error("Attachments are not supported");
|
325
|
+
const index = this._attachments.findIndex((a) => a.id === attachmentId);
|
326
|
+
if (index === -1) throw new Error("Attachment not found");
|
327
|
+
const attachment = this._attachments[index];
|
328
|
+
await this._attachmentAdapter.remove(attachment);
|
329
|
+
this._attachments = this._attachments.toSpliced(index, 1);
|
330
|
+
this.notifySubscribers();
|
331
|
+
}
|
332
|
+
__init6() {this._text = ""}
|
333
|
+
get text() {
|
334
|
+
return this._text;
|
335
|
+
}
|
336
|
+
setText(value) {
|
337
|
+
this._text = value;
|
338
|
+
this.notifySubscribers();
|
339
|
+
}
|
340
|
+
reset() {
|
341
|
+
this._text = "";
|
342
|
+
this._attachments = [];
|
343
|
+
this.notifySubscribers();
|
344
|
+
}
|
345
|
+
async send() {
|
346
|
+
const attachments = this._attachmentAdapter ? await Promise.all(
|
347
|
+
this.attachments.map(
|
348
|
+
async (a) => await this._attachmentAdapter.send(a)
|
349
|
+
)
|
350
|
+
) : [];
|
351
|
+
this.runtime.append({
|
352
|
+
parentId: _nullishCoalesce(_optionalChain([this, 'access', _10 => _10.runtime, 'access', _11 => _11.messages, 'access', _12 => _12.at, 'call', _13 => _13(-1), 'optionalAccess', _14 => _14.id]), () => ( null)),
|
353
|
+
role: "user",
|
354
|
+
content: this.text ? [{ type: "text", text: this.text }] : [],
|
355
|
+
attachments
|
356
|
+
});
|
357
|
+
this.reset();
|
358
|
+
}
|
359
|
+
}, _class3);
|
360
|
+
|
285
361
|
// src/utils/idUtils.tsx
|
286
362
|
var _nonsecure = require('nanoid/non-secure');
|
287
363
|
var generateId = _nonsecure.customAlphabet.call(void 0,
|
@@ -324,7 +400,8 @@ var fromCoreMessage = (message, {
|
|
324
400
|
return {
|
325
401
|
...commonProps,
|
326
402
|
role,
|
327
|
-
content: message.content
|
403
|
+
content: message.content,
|
404
|
+
attachments: []
|
328
405
|
};
|
329
406
|
case "system":
|
330
407
|
return {
|
@@ -345,11 +422,11 @@ var findHead = (message) => {
|
|
345
422
|
if ("current" in message) return message;
|
346
423
|
return null;
|
347
424
|
};
|
348
|
-
var MessageRepository = (
|
349
|
-
|
425
|
+
var MessageRepository = (_class4 = class {constructor() { _class4.prototype.__init7.call(this);_class4.prototype.__init8.call(this);_class4.prototype.__init9.call(this); }
|
426
|
+
__init7() {this.messages = /* @__PURE__ */ new Map()}
|
350
427
|
// message_id -> item
|
351
|
-
|
352
|
-
|
428
|
+
__init8() {this.head = null}
|
429
|
+
__init9() {this.root = {
|
353
430
|
children: [],
|
354
431
|
next: null
|
355
432
|
}}
|
@@ -391,7 +468,7 @@ var MessageRepository = (_class3 = class {constructor() { _class3.prototype.__in
|
|
391
468
|
}
|
392
469
|
}
|
393
470
|
getMessages() {
|
394
|
-
const messages = new Array(_nullishCoalesce(_optionalChain([this, 'access',
|
471
|
+
const messages = new Array(_nullishCoalesce(_optionalChain([this, 'access', _15 => _15.head, 'optionalAccess', _16 => _16.level]), () => ( 0)));
|
395
472
|
for (let current = this.head; current; current = current.prev) {
|
396
473
|
messages[current.level] = current.current;
|
397
474
|
}
|
@@ -429,7 +506,7 @@ var MessageRepository = (_class3 = class {constructor() { _class3.prototype.__in
|
|
429
506
|
"MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui."
|
430
507
|
);
|
431
508
|
return {
|
432
|
-
parentId: _nullishCoalesce(_optionalChain([message, 'access',
|
509
|
+
parentId: _nullishCoalesce(_optionalChain([message, 'access', _17 => _17.prev, 'optionalAccess', _18 => _18.current, 'access', _19 => _19.id]), () => ( null)),
|
433
510
|
message: message.current
|
434
511
|
};
|
435
512
|
}
|
@@ -513,11 +590,11 @@ var MessageRepository = (_class3 = class {constructor() { _class3.prototype.__in
|
|
513
590
|
for (const [, message] of this.messages) {
|
514
591
|
exportItems.push({
|
515
592
|
message: message.current,
|
516
|
-
parentId: _nullishCoalesce(_optionalChain([message, 'access',
|
593
|
+
parentId: _nullishCoalesce(_optionalChain([message, 'access', _20 => _20.prev, 'optionalAccess', _21 => _21.current, 'access', _22 => _22.id]), () => ( null))
|
517
594
|
});
|
518
595
|
}
|
519
596
|
return {
|
520
|
-
headId: _nullishCoalesce(_optionalChain([this, 'access',
|
597
|
+
headId: _nullishCoalesce(_optionalChain([this, 'access', _23 => _23.head, 'optionalAccess', _24 => _24.current, 'access', _25 => _25.id]), () => ( null)),
|
521
598
|
messages: exportItems
|
522
599
|
};
|
523
600
|
}
|
@@ -525,9 +602,9 @@ var MessageRepository = (_class3 = class {constructor() { _class3.prototype.__in
|
|
525
602
|
for (const { message, parentId } of messages) {
|
526
603
|
this.addOrUpdateMessage(parentId, message);
|
527
604
|
}
|
528
|
-
this.resetHead(_nullishCoalesce(_nullishCoalesce(headId, () => ( _optionalChain([messages, 'access',
|
605
|
+
this.resetHead(_nullishCoalesce(_nullishCoalesce(headId, () => ( _optionalChain([messages, 'access', _26 => _26.at, 'call', _27 => _27(-1), 'optionalAccess', _28 => _28.message, 'access', _29 => _29.id]))), () => ( null)));
|
529
606
|
}
|
530
|
-
},
|
607
|
+
}, _class4);
|
531
608
|
|
532
609
|
// src/utils/smooth/useSmooth.tsx
|
533
610
|
|
@@ -564,7 +641,7 @@ var withSmoothContextProvider = (Component) => {
|
|
564
641
|
};
|
565
642
|
function useSmoothContext(options) {
|
566
643
|
const context = _react.useContext.call(void 0, SmoothContext);
|
567
|
-
if (!_optionalChain([options, 'optionalAccess',
|
644
|
+
if (!_optionalChain([options, 'optionalAccess', _30 => _30.optional]) && !context)
|
568
645
|
throw new Error(
|
569
646
|
"This component must be used within a SmoothContextProvider."
|
570
647
|
);
|
@@ -577,14 +654,14 @@ var useSmoothStatus = () => {
|
|
577
654
|
|
578
655
|
// src/utils/smooth/useSmooth.tsx
|
579
656
|
var _reactusecallbackref = require('@radix-ui/react-use-callback-ref');
|
580
|
-
var TextStreamAnimator = (
|
581
|
-
constructor(currentText, setText) {;
|
657
|
+
var TextStreamAnimator = (_class5 = class {
|
658
|
+
constructor(currentText, setText) {;_class5.prototype.__init10.call(this);_class5.prototype.__init11.call(this);_class5.prototype.__init12.call(this);_class5.prototype.__init13.call(this);
|
582
659
|
this.currentText = currentText;
|
583
660
|
this.setText = setText;
|
584
661
|
}
|
585
|
-
|
586
|
-
|
587
|
-
|
662
|
+
__init10() {this.animationFrameId = null}
|
663
|
+
__init11() {this.lastUpdateTime = Date.now()}
|
664
|
+
__init12() {this.targetText = ""}
|
588
665
|
start() {
|
589
666
|
if (this.animationFrameId !== null) return;
|
590
667
|
this.lastUpdateTime = Date.now();
|
@@ -596,7 +673,7 @@ var TextStreamAnimator = (_class4 = class {
|
|
596
673
|
this.animationFrameId = null;
|
597
674
|
}
|
598
675
|
}
|
599
|
-
|
676
|
+
__init13() {this.animate = () => {
|
600
677
|
const currentTime = Date.now();
|
601
678
|
const deltaTime = currentTime - this.lastUpdateTime;
|
602
679
|
let timeToConsume = deltaTime;
|
@@ -620,7 +697,7 @@ var TextStreamAnimator = (_class4 = class {
|
|
620
697
|
this.lastUpdateTime = currentTime - timeToConsume;
|
621
698
|
this.setText(this.currentText);
|
622
699
|
}}
|
623
|
-
},
|
700
|
+
}, _class5);
|
624
701
|
var SMOOTH_STATUS = Object.freeze({
|
625
702
|
type: "running"
|
626
703
|
});
|
@@ -635,10 +712,10 @@ var useSmooth = (state, smooth = false) => {
|
|
635
712
|
const [displayedText, setDisplayedText] = _react.useState.call(void 0, text);
|
636
713
|
const setText = _reactusecallbackref.useCallbackRef.call(void 0, (text2) => {
|
637
714
|
setDisplayedText(text2);
|
638
|
-
_optionalChain([useSmoothStatus2, 'optionalAccess',
|
715
|
+
_optionalChain([useSmoothStatus2, 'optionalAccess', _31 => _31.setState, 'call', _32 => _32(text2 !== state.part.text ? SMOOTH_STATUS : state.status)]);
|
639
716
|
});
|
640
717
|
_react.useEffect.call(void 0, () => {
|
641
|
-
_optionalChain([useSmoothStatus2, 'optionalAccess',
|
718
|
+
_optionalChain([useSmoothStatus2, 'optionalAccess', _33 => _33.setState, 'call', _34 => _34(text !== displayedText ? SMOOTH_STATUS : state.status)]);
|
642
719
|
}, [useSmoothStatus2, text, displayedText, state.status]);
|
643
720
|
const [animatorRef] = _react.useState.call(void 0,
|
644
721
|
new TextStreamAnimator(text, setText)
|
@@ -832,7 +909,7 @@ var fromLanguageModelMessages = (lm, { mergeRoundtrips }) => {
|
|
832
909
|
});
|
833
910
|
if (mergeRoundtrips) {
|
834
911
|
const previousMessage = messages[messages.length - 1];
|
835
|
-
if (_optionalChain([previousMessage, 'optionalAccess',
|
912
|
+
if (_optionalChain([previousMessage, 'optionalAccess', _35 => _35.role]) === "assistant") {
|
836
913
|
previousMessage.content.push(...newContent);
|
837
914
|
break;
|
838
915
|
}
|
@@ -845,7 +922,7 @@ var fromLanguageModelMessages = (lm, { mergeRoundtrips }) => {
|
|
845
922
|
}
|
846
923
|
case "tool": {
|
847
924
|
const previousMessage = messages[messages.length - 1];
|
848
|
-
if (_optionalChain([previousMessage, 'optionalAccess',
|
925
|
+
if (_optionalChain([previousMessage, 'optionalAccess', _36 => _36.role]) !== "assistant")
|
849
926
|
throw new Error(
|
850
927
|
"A tool message must be preceded by an assistant message."
|
851
928
|
);
|
@@ -921,14 +998,14 @@ function streamPartDecoderStream() {
|
|
921
998
|
controller.enqueue(decodeStreamPart(chunk));
|
922
999
|
}
|
923
1000
|
});
|
924
|
-
return new (0,
|
1001
|
+
return new (0, _chunkBNSCUYW7js.PipeableTransformStream)((readable) => {
|
925
1002
|
return readable.pipeThrough(new TextDecoderStream()).pipeThrough(chunkByLineStream()).pipeThrough(decodeStream);
|
926
1003
|
});
|
927
1004
|
}
|
928
1005
|
|
929
1006
|
// src/runtimes/edge/streams/utils/index.ts
|
930
1007
|
var streamUtils = {
|
931
|
-
streamPartEncoderStream:
|
1008
|
+
streamPartEncoderStream: _chunkBNSCUYW7js.streamPartEncoderStream,
|
932
1009
|
streamPartDecoderStream
|
933
1010
|
};
|
934
1011
|
|
@@ -1037,8 +1114,8 @@ var EdgeChatAdapter = class {
|
|
1037
1114
|
credentials: _nullishCoalesce(this.options.credentials, () => ( "same-origin")),
|
1038
1115
|
body: JSON.stringify({
|
1039
1116
|
system: config.system,
|
1040
|
-
messages:
|
1041
|
-
tools: config.tools ?
|
1117
|
+
messages: _chunkBNSCUYW7js.toCoreMessages.call(void 0, messages),
|
1118
|
+
tools: config.tools ? _chunkBNSCUYW7js.toLanguageModelTools.call(void 0, config.tools) : [],
|
1042
1119
|
...config.callSettings,
|
1043
1120
|
...config.config,
|
1044
1121
|
...this.options.body
|
@@ -1048,7 +1125,7 @@ var EdgeChatAdapter = class {
|
|
1048
1125
|
if (result.status !== 200) {
|
1049
1126
|
throw new Error(`Status ${result.status}: ${await result.text()}`);
|
1050
1127
|
}
|
1051
|
-
const stream = result.body.pipeThrough(streamPartDecoderStream()).pipeThrough(assistantDecoderStream()).pipeThrough(
|
1128
|
+
const stream = result.body.pipeThrough(streamPartDecoderStream()).pipeThrough(assistantDecoderStream()).pipeThrough(_chunkBNSCUYW7js.toolResultStream.call(void 0, config.tools, abortSignal)).pipeThrough(_chunkBNSCUYW7js.runResultStream.call(void 0, ));
|
1052
1129
|
let update;
|
1053
1130
|
for await (update of asAsyncIterable(stream)) {
|
1054
1131
|
yield update;
|
@@ -1074,11 +1151,11 @@ var useEdgeRuntime = ({
|
|
1074
1151
|
};
|
1075
1152
|
|
1076
1153
|
// src/runtimes/local/shouldContinue.tsx
|
1077
|
-
var shouldContinue = (result) => _optionalChain([result, 'access',
|
1154
|
+
var shouldContinue = (result) => _optionalChain([result, 'access', _37 => _37.status, 'optionalAccess', _38 => _38.type]) === "requires-action" && result.status.reason === "tool-calls" && result.content.every((c) => c.type !== "tool-call" || !!c.result);
|
1078
1155
|
|
1079
1156
|
// src/runtimes/local/LocalThreadRuntime.tsx
|
1080
|
-
var LocalThreadRuntime = (
|
1081
|
-
constructor(configProvider, adapter, { initialMessages, ...options }) {;
|
1157
|
+
var LocalThreadRuntime = (_class6 = class {
|
1158
|
+
constructor(configProvider, adapter, { initialMessages, ...options }) {;_class6.prototype.__init14.call(this);_class6.prototype.__init15.call(this);_class6.prototype.__init16.call(this);_class6.prototype.__init17.call(this);_class6.prototype.__init18.call(this);_class6.prototype.__init19.call(this);
|
1082
1159
|
this.configProvider = configProvider;
|
1083
1160
|
this.adapter = adapter;
|
1084
1161
|
this.threadId = generateId();
|
@@ -1092,40 +1169,46 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1092
1169
|
}
|
1093
1170
|
}
|
1094
1171
|
}
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1172
|
+
__init14() {this._subscriptions = /* @__PURE__ */ new Set()}
|
1173
|
+
__init15() {this.abortController = null}
|
1174
|
+
__init16() {this.repository = new MessageRepository()}
|
1175
|
+
__init17() {this.capabilities = {
|
1099
1176
|
switchToBranch: true,
|
1100
1177
|
edit: true,
|
1101
1178
|
reload: true,
|
1102
1179
|
cancel: true,
|
1103
1180
|
unstable_copy: true,
|
1104
|
-
speak: false
|
1181
|
+
speak: false,
|
1182
|
+
attachments: false
|
1105
1183
|
}}
|
1106
1184
|
|
1107
|
-
|
1185
|
+
__init18() {this.isDisabled = false}
|
1108
1186
|
get messages() {
|
1109
1187
|
return this.repository.getMessages();
|
1110
1188
|
}
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
this.notifySubscribers();
|
1116
|
-
}
|
1117
|
-
}}
|
1189
|
+
__init19() {this.composer = new ThreadRuntimeComposer(
|
1190
|
+
this,
|
1191
|
+
this.notifySubscribers.bind(this)
|
1192
|
+
)}
|
1118
1193
|
|
1119
1194
|
get options() {
|
1120
1195
|
return this._options;
|
1121
1196
|
}
|
1122
1197
|
set options({ initialMessages, ...options }) {
|
1123
1198
|
this._options = options;
|
1124
|
-
|
1199
|
+
let hasUpdates = false;
|
1200
|
+
const canSpeak = _optionalChain([options, 'access', _39 => _39.adapters, 'optionalAccess', _40 => _40.speech]) !== void 0;
|
1125
1201
|
if (this.capabilities.speak !== canSpeak) {
|
1126
1202
|
this.capabilities.speak = canSpeak;
|
1127
|
-
|
1203
|
+
hasUpdates = true;
|
1128
1204
|
}
|
1205
|
+
this.composer.setAttachmentAdapter(_optionalChain([options, 'access', _41 => _41.adapters, 'optionalAccess', _42 => _42.attachments]));
|
1206
|
+
const canAttach = _optionalChain([options, 'access', _43 => _43.adapters, 'optionalAccess', _44 => _44.attachments]) !== void 0;
|
1207
|
+
if (this.capabilities.attachments !== canAttach) {
|
1208
|
+
this.capabilities.attachments = canAttach;
|
1209
|
+
hasUpdates = true;
|
1210
|
+
}
|
1211
|
+
if (hasUpdates) this.notifySubscribers();
|
1129
1212
|
}
|
1130
1213
|
getBranches(messageId) {
|
1131
1214
|
return this.repository.getBranches(messageId);
|
@@ -1144,6 +1227,7 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1144
1227
|
id: userMessageId,
|
1145
1228
|
role: "user",
|
1146
1229
|
content: message.content,
|
1230
|
+
attachments: _nullishCoalesce(message.attachments, () => ( [])),
|
1147
1231
|
createdAt: /* @__PURE__ */ new Date()
|
1148
1232
|
};
|
1149
1233
|
this.repository.addOrUpdateMessage(message.parentId, userMessage);
|
@@ -1165,18 +1249,18 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1165
1249
|
}
|
1166
1250
|
async performRoundtrip(parentId, message) {
|
1167
1251
|
const messages = this.repository.getMessages();
|
1168
|
-
_optionalChain([this, 'access',
|
1252
|
+
_optionalChain([this, 'access', _45 => _45.abortController, 'optionalAccess', _46 => _46.abort, 'call', _47 => _47()]);
|
1169
1253
|
this.abortController = new AbortController();
|
1170
1254
|
const initialContent = message.content;
|
1171
|
-
const initialRoundtrips = _optionalChain([message, 'access',
|
1172
|
-
const initalCustom = _optionalChain([message, 'access',
|
1255
|
+
const initialRoundtrips = _optionalChain([message, 'access', _48 => _48.metadata, 'optionalAccess', _49 => _49.roundtrips]);
|
1256
|
+
const initalCustom = _optionalChain([message, 'access', _50 => _50.metadata, 'optionalAccess', _51 => _51.custom]);
|
1173
1257
|
const updateMessage = (m) => {
|
1174
1258
|
message = {
|
1175
1259
|
...message,
|
1176
1260
|
...m.content ? { content: [...initialContent, ..._nullishCoalesce(m.content, () => ( []))] } : void 0,
|
1177
1261
|
status: _nullishCoalesce(m.status, () => ( message.status)),
|
1178
1262
|
// TODO deprecated, remove in v0.6
|
1179
|
-
..._optionalChain([m, 'access',
|
1263
|
+
..._optionalChain([m, 'access', _52 => _52.metadata, 'optionalAccess', _53 => _53.roundtrips]) ? {
|
1180
1264
|
roundtrips: [
|
1181
1265
|
..._nullishCoalesce(initialRoundtrips, () => ( [])),
|
1182
1266
|
...m.metadata.roundtrips
|
@@ -1191,7 +1275,7 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1191
1275
|
...m.metadata.roundtrips
|
1192
1276
|
]
|
1193
1277
|
} : void 0,
|
1194
|
-
..._optionalChain([m, 'access',
|
1278
|
+
..._optionalChain([m, 'access', _54 => _54.metadata, 'optionalAccess', _55 => _55.custom]) ? {
|
1195
1279
|
custom: { ..._nullishCoalesce(initalCustom, () => ( {})), ...m.metadata.custom }
|
1196
1280
|
} : void 0
|
1197
1281
|
}
|
@@ -1201,7 +1285,7 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1201
1285
|
this.notifySubscribers();
|
1202
1286
|
};
|
1203
1287
|
const maxToolRoundtrips = _nullishCoalesce(this.options.maxToolRoundtrips, () => ( 1));
|
1204
|
-
const toolRoundtrips = _nullishCoalesce(_optionalChain([message, 'access',
|
1288
|
+
const toolRoundtrips = _nullishCoalesce(_optionalChain([message, 'access', _56 => _56.metadata, 'optionalAccess', _57 => _57.roundtrips, 'optionalAccess', _58 => _58.length]), () => ( 0));
|
1205
1289
|
if (toolRoundtrips > maxToolRoundtrips) {
|
1206
1290
|
updateMessage({
|
1207
1291
|
status: {
|
@@ -1298,7 +1382,7 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1298
1382
|
// TODO lift utterance state to thread runtime
|
1299
1383
|
|
1300
1384
|
speak(messageId) {
|
1301
|
-
const adapter = _optionalChain([this, 'access',
|
1385
|
+
const adapter = _optionalChain([this, 'access', _59 => _59.options, 'access', _60 => _60.adapters, 'optionalAccess', _61 => _61.speech]);
|
1302
1386
|
if (!adapter) throw new Error("Speech adapter not configured");
|
1303
1387
|
const { message } = this.repository.getMessage(messageId);
|
1304
1388
|
if (this._utterance) {
|
@@ -1321,7 +1405,7 @@ var LocalThreadRuntime = (_class5 = class {
|
|
1321
1405
|
this.repository.import(data);
|
1322
1406
|
this.notifySubscribers();
|
1323
1407
|
}
|
1324
|
-
},
|
1408
|
+
}, _class6);
|
1325
1409
|
|
1326
1410
|
// src/runtimes/local/LocalRuntime.tsx
|
1327
1411
|
var LocalRuntime = class extends BaseAssistantRuntime {
|
@@ -1359,7 +1443,7 @@ var LocalRuntime = class extends BaseAssistantRuntime {
|
|
1359
1443
|
const messages = fromCoreMessages(initialMessages);
|
1360
1444
|
this.thread.import({
|
1361
1445
|
messages: messages.map((m, idx) => ({
|
1362
|
-
parentId: _nullishCoalesce(_optionalChain([messages, 'access',
|
1446
|
+
parentId: _nullishCoalesce(_optionalChain([messages, 'access', _62 => _62[idx - 1], 'optionalAccess', _63 => _63.id]), () => ( null)),
|
1363
1447
|
message: m
|
1364
1448
|
}))
|
1365
1449
|
});
|
@@ -1383,8 +1467,8 @@ var getExternalStoreMessage = (message) => {
|
|
1383
1467
|
};
|
1384
1468
|
|
1385
1469
|
// src/runtimes/external-store/ThreadMessageConverter.ts
|
1386
|
-
var ThreadMessageConverter = (
|
1387
|
-
|
1470
|
+
var ThreadMessageConverter = (_class7 = class {constructor() { _class7.prototype.__init20.call(this); }
|
1471
|
+
__init20() {this.cache = /* @__PURE__ */ new WeakMap()}
|
1388
1472
|
convertMessages(messages, converter) {
|
1389
1473
|
return messages.map((m, idx) => {
|
1390
1474
|
const cached = this.cache.get(m);
|
@@ -1393,7 +1477,7 @@ var ThreadMessageConverter = (_class6 = class {constructor() { _class6.prototype
|
|
1393
1477
|
return newMessage;
|
1394
1478
|
});
|
1395
1479
|
}
|
1396
|
-
},
|
1480
|
+
}, _class7);
|
1397
1481
|
|
1398
1482
|
// src/runtimes/external-store/auto-status.tsx
|
1399
1483
|
var AUTO_STATUS_RUNNING = Object.freeze({ type: "running" });
|
@@ -1406,12 +1490,14 @@ var getAutoStatus = (isLast, isRunning) => isLast && isRunning ? AUTO_STATUS_RUN
|
|
1406
1490
|
|
1407
1491
|
// src/runtimes/external-store/ThreadMessageLike.tsx
|
1408
1492
|
var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
|
1409
|
-
const { role, id, createdAt, status } = like;
|
1493
|
+
const { role, id, createdAt, attachments, status } = like;
|
1410
1494
|
const common = {
|
1411
1495
|
id: _nullishCoalesce(id, () => ( fallbackId)),
|
1412
1496
|
createdAt: _nullishCoalesce(createdAt, () => ( /* @__PURE__ */ new Date()))
|
1413
1497
|
};
|
1414
1498
|
const content = typeof like.content === "string" ? [{ type: "text", text: like.content }] : like.content;
|
1499
|
+
if (role !== "user" && attachments)
|
1500
|
+
throw new Error("Attachments are only supported for user messages");
|
1415
1501
|
switch (role) {
|
1416
1502
|
case "assistant":
|
1417
1503
|
return {
|
@@ -1456,7 +1542,8 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
|
|
1456
1542
|
throw new Error(`Unknown content part type: ${unhandledType}`);
|
1457
1543
|
}
|
1458
1544
|
}
|
1459
|
-
})
|
1545
|
+
}),
|
1546
|
+
attachments: _nullishCoalesce(attachments, () => ( []))
|
1460
1547
|
};
|
1461
1548
|
case "system":
|
1462
1549
|
if (content.length !== 1 || content[0].type !== "text")
|
@@ -1485,19 +1572,20 @@ var getThreadMessageText = (message) => {
|
|
1485
1572
|
|
1486
1573
|
// src/runtimes/external-store/ExternalStoreThreadRuntime.tsx
|
1487
1574
|
var hasUpcomingMessage = (isRunning, messages) => {
|
1488
|
-
return isRunning && _optionalChain([messages, 'access',
|
1575
|
+
return isRunning && _optionalChain([messages, 'access', _64 => _64[messages.length - 1], 'optionalAccess', _65 => _65.role]) !== "assistant";
|
1489
1576
|
};
|
1490
|
-
var ExternalStoreThreadRuntime = (
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1577
|
+
var ExternalStoreThreadRuntime = (_class8 = class {
|
1578
|
+
__init21() {this._subscriptions = /* @__PURE__ */ new Set()}
|
1579
|
+
__init22() {this.repository = new MessageRepository()}
|
1580
|
+
__init23() {this.assistantOptimisticId = null}
|
1581
|
+
__init24() {this._capabilities = {
|
1495
1582
|
switchToBranch: false,
|
1496
1583
|
edit: false,
|
1497
1584
|
reload: false,
|
1498
1585
|
cancel: false,
|
1499
1586
|
unstable_copy: false,
|
1500
|
-
speak: false
|
1587
|
+
speak: false,
|
1588
|
+
attachments: false
|
1501
1589
|
}}
|
1502
1590
|
get capabilities() {
|
1503
1591
|
return this._capabilities;
|
@@ -1505,16 +1593,13 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1505
1593
|
|
1506
1594
|
|
1507
1595
|
|
1508
|
-
|
1596
|
+
__init25() {this.converter = new ThreadMessageConverter()}
|
1509
1597
|
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
}
|
1516
|
-
}}
|
1517
|
-
constructor(store) {;_class7.prototype.__init18.call(this);_class7.prototype.__init19.call(this);_class7.prototype.__init20.call(this);_class7.prototype.__init21.call(this);_class7.prototype.__init22.call(this);_class7.prototype.__init23.call(this);_class7.prototype.__init24.call(this);
|
1598
|
+
__init26() {this.composer = new ThreadRuntimeComposer(
|
1599
|
+
this,
|
1600
|
+
this.notifySubscribers.bind(this)
|
1601
|
+
)}
|
1602
|
+
constructor(store) {;_class8.prototype.__init21.call(this);_class8.prototype.__init22.call(this);_class8.prototype.__init23.call(this);_class8.prototype.__init24.call(this);_class8.prototype.__init25.call(this);_class8.prototype.__init26.call(this);_class8.prototype.__init27.call(this);
|
1518
1603
|
this.store = store;
|
1519
1604
|
}
|
1520
1605
|
get store() {
|
@@ -1532,9 +1617,12 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1532
1617
|
edit: this._store.onEdit !== void 0,
|
1533
1618
|
reload: this._store.onReload !== void 0,
|
1534
1619
|
cancel: this._store.onCancel !== void 0,
|
1535
|
-
|
1536
|
-
|
1620
|
+
speak: this._store.onSpeak !== void 0,
|
1621
|
+
unstable_copy: _optionalChain([this, 'access', _69 => _69._store, 'access', _70 => _70.unstable_capabilities, 'optionalAccess', _71 => _71.copy]) !== false,
|
1622
|
+
// default true
|
1623
|
+
attachments: !!_optionalChain([this, 'access', _72 => _72.store, 'access', _73 => _73.adapters, 'optionalAccess', _74 => _74.attachments])
|
1537
1624
|
};
|
1625
|
+
this.composer.setAttachmentAdapter(_optionalChain([this, 'access', _75 => _75._store, 'access', _76 => _76.adapters, 'optionalAccess', _77 => _77.attachments]));
|
1538
1626
|
if (oldStore) {
|
1539
1627
|
if (oldStore.convertMessage !== store.convertMessage) {
|
1540
1628
|
this.converter = new ThreadMessageConverter();
|
@@ -1560,7 +1648,7 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1560
1648
|
for (let i = 0; i < messages.length; i++) {
|
1561
1649
|
const message = messages[i];
|
1562
1650
|
const parent = messages[i - 1];
|
1563
|
-
this.repository.addOrUpdateMessage(_nullishCoalesce(_optionalChain([parent, 'optionalAccess',
|
1651
|
+
this.repository.addOrUpdateMessage(_nullishCoalesce(_optionalChain([parent, 'optionalAccess', _78 => _78.id]), () => ( null)), message);
|
1564
1652
|
}
|
1565
1653
|
if (this.assistantOptimisticId) {
|
1566
1654
|
this.repository.deleteMessage(this.assistantOptimisticId);
|
@@ -1568,7 +1656,7 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1568
1656
|
}
|
1569
1657
|
if (hasUpcomingMessage(isRunning, messages)) {
|
1570
1658
|
this.assistantOptimisticId = this.repository.appendOptimisticMessage(
|
1571
|
-
_nullishCoalesce(_optionalChain([messages, 'access',
|
1659
|
+
_nullishCoalesce(_optionalChain([messages, 'access', _79 => _79.at, 'call', _80 => _80(-1), 'optionalAccess', _81 => _81.id]), () => ( null)),
|
1572
1660
|
{
|
1573
1661
|
role: "assistant",
|
1574
1662
|
content: []
|
@@ -1576,7 +1664,7 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1576
1664
|
);
|
1577
1665
|
}
|
1578
1666
|
this.repository.resetHead(
|
1579
|
-
_nullishCoalesce(_nullishCoalesce(this.assistantOptimisticId, () => ( _optionalChain([messages, 'access',
|
1667
|
+
_nullishCoalesce(_nullishCoalesce(this.assistantOptimisticId, () => ( _optionalChain([messages, 'access', _82 => _82.at, 'call', _83 => _83(-1), 'optionalAccess', _84 => _84.id]))), () => ( null))
|
1580
1668
|
);
|
1581
1669
|
this.messages = this.repository.getMessages();
|
1582
1670
|
this.notifySubscribers();
|
@@ -1594,7 +1682,7 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1594
1682
|
this.updateMessages(this.repository.getMessages());
|
1595
1683
|
}
|
1596
1684
|
async append(message) {
|
1597
|
-
if (message.parentId !== (_nullishCoalesce(_optionalChain([this, 'access',
|
1685
|
+
if (message.parentId !== (_nullishCoalesce(_optionalChain([this, 'access', _85 => _85.messages, 'access', _86 => _86.at, 'call', _87 => _87(-1), 'optionalAccess', _88 => _88.id]), () => ( null)))) {
|
1598
1686
|
if (!this._store.onEdit)
|
1599
1687
|
throw new Error("Runtime does not support editing messages.");
|
1600
1688
|
await this._store.onEdit(message);
|
@@ -1617,7 +1705,7 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1617
1705
|
}
|
1618
1706
|
let messages = this.repository.getMessages();
|
1619
1707
|
const previousMessage = messages[messages.length - 1];
|
1620
|
-
if (_optionalChain([previousMessage, 'optionalAccess',
|
1708
|
+
if (_optionalChain([previousMessage, 'optionalAccess', _89 => _89.role]) === "user" && previousMessage.id === _optionalChain([messages, 'access', _90 => _90.at, 'call', _91 => _91(-1), 'optionalAccess', _92 => _92.id])) {
|
1621
1709
|
this.repository.deleteMessage(previousMessage.id);
|
1622
1710
|
if (!this.composer.text.trim()) {
|
1623
1711
|
this.composer.setText(getThreadMessageText(previousMessage));
|
@@ -1645,18 +1733,18 @@ var ExternalStoreThreadRuntime = (_class7 = class {
|
|
1645
1733
|
this._subscriptions.add(callback);
|
1646
1734
|
return () => this._subscriptions.delete(callback);
|
1647
1735
|
}
|
1648
|
-
|
1649
|
-
_optionalChain([this, 'access',
|
1736
|
+
__init27() {this.updateMessages = (messages) => {
|
1737
|
+
_optionalChain([this, 'access', _93 => _93._store, 'access', _94 => _94.setMessages, 'optionalCall', _95 => _95(
|
1650
1738
|
messages.flatMap(getExternalStoreMessage).filter((m) => m != null)
|
1651
1739
|
)]);
|
1652
1740
|
}}
|
1653
|
-
},
|
1741
|
+
}, _class8);
|
1654
1742
|
|
1655
1743
|
// src/runtimes/external-store/ExternalStoreRuntime.tsx
|
1656
|
-
var ExternalStoreRuntime = (
|
1657
|
-
|
1744
|
+
var ExternalStoreRuntime = (_class9 = class extends BaseAssistantRuntime {
|
1745
|
+
__init28() {this._proxyConfigProvider = new ProxyConfigProvider()}
|
1658
1746
|
constructor(store) {
|
1659
|
-
super(new ExternalStoreThreadRuntime(store));
|
1747
|
+
super(new ExternalStoreThreadRuntime(store));_class9.prototype.__init28.call(this);;
|
1660
1748
|
}
|
1661
1749
|
get store() {
|
1662
1750
|
return this.thread.store;
|
@@ -1689,7 +1777,7 @@ var ExternalStoreRuntime = (_class8 = class extends BaseAssistantRuntime {
|
|
1689
1777
|
await this.store.onNewThread();
|
1690
1778
|
}
|
1691
1779
|
}
|
1692
|
-
},
|
1780
|
+
}, _class9);
|
1693
1781
|
|
1694
1782
|
// src/runtimes/external-store/useExternalStoreRuntime.tsx
|
1695
1783
|
|
@@ -1857,18 +1945,18 @@ var DangerousInBrowserAdapter = class {
|
|
1857
1945
|
this.options = options;
|
1858
1946
|
}
|
1859
1947
|
async *run({ messages, abortSignal, config }) {
|
1860
|
-
const res = await
|
1948
|
+
const res = await _chunkBNSCUYW7js.getEdgeRuntimeStream.call(void 0, {
|
1861
1949
|
options: this.options,
|
1862
1950
|
abortSignal,
|
1863
1951
|
requestData: {
|
1864
1952
|
system: config.system,
|
1865
|
-
messages:
|
1866
|
-
tools: config.tools ?
|
1953
|
+
messages: _chunkBNSCUYW7js.toCoreMessages.call(void 0, messages),
|
1954
|
+
tools: config.tools ? _chunkBNSCUYW7js.toLanguageModelTools.call(void 0, config.tools) : [],
|
1867
1955
|
...config.callSettings,
|
1868
1956
|
...config.config
|
1869
1957
|
}
|
1870
1958
|
});
|
1871
|
-
const stream = res.pipeThrough(
|
1959
|
+
const stream = res.pipeThrough(_chunkBNSCUYW7js.toolResultStream.call(void 0, config.tools, abortSignal)).pipeThrough(_chunkBNSCUYW7js.runResultStream.call(void 0, ));
|
1872
1960
|
for await (const update of asAsyncIterable(stream)) {
|
1873
1961
|
yield update;
|
1874
1962
|
}
|
@@ -1925,6 +2013,147 @@ var WebSpeechSynthesisAdapter = class {
|
|
1925
2013
|
}
|
1926
2014
|
};
|
1927
2015
|
|
2016
|
+
// src/runtimes/attachment/SimpleImageAttachmentAdapter.ts
|
2017
|
+
var SimpleImageAttachmentAdapter = (_class10 = class {constructor() { _class10.prototype.__init29.call(this); }
|
2018
|
+
__init29() {this.accept = "image/*"}
|
2019
|
+
async add(state) {
|
2020
|
+
return {
|
2021
|
+
id: state.file.name,
|
2022
|
+
type: "image",
|
2023
|
+
name: state.file.name,
|
2024
|
+
file: state.file
|
2025
|
+
};
|
2026
|
+
}
|
2027
|
+
async send(attachment) {
|
2028
|
+
return {
|
2029
|
+
...attachment,
|
2030
|
+
content: [
|
2031
|
+
{
|
2032
|
+
type: "image",
|
2033
|
+
image: await getFileDataURL(attachment.file)
|
2034
|
+
}
|
2035
|
+
]
|
2036
|
+
};
|
2037
|
+
}
|
2038
|
+
async remove() {
|
2039
|
+
}
|
2040
|
+
}, _class10);
|
2041
|
+
var getFileDataURL = (file) => new Promise((resolve, reject) => {
|
2042
|
+
const reader = new FileReader();
|
2043
|
+
reader.onload = () => resolve(reader.result);
|
2044
|
+
reader.onerror = (error) => reject(error);
|
2045
|
+
reader.readAsDataURL(file);
|
2046
|
+
});
|
2047
|
+
|
2048
|
+
// src/runtimes/attachment/SimpleTextAttachmentAdapter.ts
|
2049
|
+
var SimpleTextAttachmentAdapter = (_class11 = class {constructor() { _class11.prototype.__init30.call(this); }
|
2050
|
+
__init30() {this.accept = "text/plain,text/html,text/markdown,text/csv,text/xml,text/json,text/css"}
|
2051
|
+
async add(state) {
|
2052
|
+
return {
|
2053
|
+
id: state.file.name,
|
2054
|
+
type: "document",
|
2055
|
+
name: state.file.name,
|
2056
|
+
file: state.file
|
2057
|
+
};
|
2058
|
+
}
|
2059
|
+
async send(attachment) {
|
2060
|
+
return {
|
2061
|
+
...attachment,
|
2062
|
+
content: [
|
2063
|
+
{
|
2064
|
+
type: "text",
|
2065
|
+
text: `<attachment name=${attachment.name}>
|
2066
|
+
${await getFileText(attachment.file)}
|
2067
|
+
</attachment>`
|
2068
|
+
}
|
2069
|
+
]
|
2070
|
+
};
|
2071
|
+
}
|
2072
|
+
async remove() {
|
2073
|
+
}
|
2074
|
+
}, _class11);
|
2075
|
+
var getFileText = (file) => new Promise((resolve, reject) => {
|
2076
|
+
const reader = new FileReader();
|
2077
|
+
reader.onload = () => resolve(reader.result);
|
2078
|
+
reader.onerror = (error) => reject(error);
|
2079
|
+
reader.readAsText(file);
|
2080
|
+
});
|
2081
|
+
|
2082
|
+
// src/runtimes/attachment/CompositeAttachmentAdapter.ts
|
2083
|
+
function fileMatchesAccept(file, acceptString) {
|
2084
|
+
if (acceptString === "*") {
|
2085
|
+
return true;
|
2086
|
+
}
|
2087
|
+
const allowedTypes = acceptString.split(",").map((type) => type.trim().toLowerCase());
|
2088
|
+
const fileExtension = "." + file.name.split(".").pop().toLowerCase();
|
2089
|
+
const fileMimeType = file.type.toLowerCase();
|
2090
|
+
for (const type of allowedTypes) {
|
2091
|
+
if (type.startsWith(".") && type === fileExtension) {
|
2092
|
+
return true;
|
2093
|
+
}
|
2094
|
+
if (type.includes("/") && type === fileMimeType) {
|
2095
|
+
return true;
|
2096
|
+
}
|
2097
|
+
if (type === "image/*" || type === "video/*" || type === "audio/*") {
|
2098
|
+
if (type.endsWith("/*")) {
|
2099
|
+
const generalType = type.split("/")[0];
|
2100
|
+
if (fileMimeType.startsWith(generalType + "/")) {
|
2101
|
+
return true;
|
2102
|
+
}
|
2103
|
+
}
|
2104
|
+
}
|
2105
|
+
}
|
2106
|
+
return false;
|
2107
|
+
}
|
2108
|
+
var CompositeAttachmentAdapter = class {
|
2109
|
+
|
2110
|
+
|
2111
|
+
constructor(adapters) {
|
2112
|
+
this._adapters = adapters;
|
2113
|
+
const wildcardIdx = adapters.findIndex((a) => a.accept === "*");
|
2114
|
+
if (wildcardIdx !== -1) {
|
2115
|
+
if (wildcardIdx !== adapters.length - 1)
|
2116
|
+
throw new Error(
|
2117
|
+
"A wildcard adapter (handling all files) can only be specified as the last adapter."
|
2118
|
+
);
|
2119
|
+
this.accept = "*";
|
2120
|
+
} else {
|
2121
|
+
this.accept = adapters.map((a) => a.accept).join(",");
|
2122
|
+
}
|
2123
|
+
}
|
2124
|
+
async add(state) {
|
2125
|
+
for (const adapter of this._adapters) {
|
2126
|
+
if (fileMatchesAccept(state.file, adapter.accept)) {
|
2127
|
+
return adapter.add(state);
|
2128
|
+
}
|
2129
|
+
}
|
2130
|
+
throw new Error("No matching adapter found for file");
|
2131
|
+
}
|
2132
|
+
async send(attachment) {
|
2133
|
+
const adapters = this._adapters.slice();
|
2134
|
+
for (const adapter of adapters) {
|
2135
|
+
if (fileMatchesAccept(attachment.file, adapter.accept)) {
|
2136
|
+
return adapter.send(attachment);
|
2137
|
+
}
|
2138
|
+
}
|
2139
|
+
throw new Error("No matching adapter found for attachment");
|
2140
|
+
}
|
2141
|
+
async remove(attachment) {
|
2142
|
+
const adapters = this._adapters.slice();
|
2143
|
+
for (const adapter of adapters) {
|
2144
|
+
if (fileMatchesAccept(attachment.file, adapter.accept)) {
|
2145
|
+
return adapter.remove(attachment);
|
2146
|
+
}
|
2147
|
+
}
|
2148
|
+
throw new Error("No matching adapter found for attachment");
|
2149
|
+
}
|
2150
|
+
};
|
2151
|
+
|
2152
|
+
// src/context/ReadonlyStore.ts
|
2153
|
+
var writableStore = (store) => {
|
2154
|
+
return store;
|
2155
|
+
};
|
2156
|
+
|
1928
2157
|
// src/context/providers/ThreadProvider.tsx
|
1929
2158
|
|
1930
2159
|
var ThreadProvider = ({
|
@@ -1954,18 +2183,20 @@ var ThreadProvider = ({
|
|
1954
2183
|
const state = getThreadStateFromRuntime(thread);
|
1955
2184
|
if (oldState.threadId !== state.threadId || oldState.isDisabled !== state.isDisabled || oldState.isRunning !== state.isRunning || // TODO ensure capabilities is memoized
|
1956
2185
|
oldState.capabilities !== state.capabilities) {
|
1957
|
-
context.useThread.setState(
|
1958
|
-
state,
|
1959
|
-
true
|
1960
|
-
);
|
2186
|
+
writableStore(context.useThread).setState(state, true);
|
1961
2187
|
}
|
1962
2188
|
if (thread.messages !== context.useThreadMessages.getState()) {
|
1963
|
-
context.useThreadMessages.setState(
|
2189
|
+
writableStore(context.useThreadMessages).setState(
|
2190
|
+
thread.messages,
|
2191
|
+
true
|
2192
|
+
);
|
1964
2193
|
}
|
1965
2194
|
const composerState = context.useComposer.getState();
|
1966
|
-
if (thread.composer.text !== composerState.text || state.capabilities.cancel !== composerState.canCancel) {
|
1967
|
-
context.useComposer.setState({
|
2195
|
+
if (thread.composer.isEmpty !== composerState.isEmpty || thread.composer.text !== composerState.text || thread.composer.attachments !== composerState.attachments || state.capabilities.cancel !== composerState.canCancel) {
|
2196
|
+
writableStore(context.useComposer).setState({
|
2197
|
+
isEmpty: thread.composer.isEmpty,
|
1968
2198
|
text: thread.composer.text,
|
2199
|
+
attachments: thread.composer.attachments,
|
1969
2200
|
canCancel: state.capabilities.cancel
|
1970
2201
|
});
|
1971
2202
|
}
|
@@ -1975,7 +2206,7 @@ var ThreadProvider = ({
|
|
1975
2206
|
}, [provider, context]);
|
1976
2207
|
_react.useInsertionEffect.call(void 0,
|
1977
2208
|
() => provider.subscribe(() => {
|
1978
|
-
context.useThreadRuntime.setState(provider.thread, true);
|
2209
|
+
writableStore(context.useThreadRuntime).setState(provider.thread, true);
|
1979
2210
|
}),
|
1980
2211
|
[provider, context]
|
1981
2212
|
);
|
@@ -2027,7 +2258,7 @@ var AssistantProvider = ({ children, runtime }) => {
|
|
2027
2258
|
return runtime.registerModelConfigProvider(getModelConfig);
|
2028
2259
|
}, [runtime, getModelConfig]);
|
2029
2260
|
_react.useEffect.call(void 0,
|
2030
|
-
() => context.useAssistantRuntime.setState(runtime, true),
|
2261
|
+
() => writableStore(context.useAssistantRuntime).setState(runtime, true),
|
2031
2262
|
[runtime, context]
|
2032
2263
|
);
|
2033
2264
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AssistantContext.Provider, { value: context, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadProvider, { provider: runtime, children }) });
|
@@ -2048,7 +2279,7 @@ var AssistantRuntimeProvider = _react.memo.call(void 0, AssistantRuntimeProvider
|
|
2048
2279
|
var MessageContext = _react.createContext.call(void 0, null);
|
2049
2280
|
function useMessageContext(options) {
|
2050
2281
|
const context = _react.useContext.call(void 0, MessageContext);
|
2051
|
-
if (!_optionalChain([options, 'optionalAccess',
|
2282
|
+
if (!_optionalChain([options, 'optionalAccess', _96 => _96.optional]) && !context)
|
2052
2283
|
throw new Error(
|
2053
2284
|
"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
|
2054
2285
|
);
|
@@ -2075,7 +2306,7 @@ var ContentPartContext = _react.createContext.call(void 0,
|
|
2075
2306
|
);
|
2076
2307
|
function useContentPartContext(options) {
|
2077
2308
|
const context = _react.useContext.call(void 0, ContentPartContext);
|
2078
|
-
if (!_optionalChain([options, 'optionalAccess',
|
2309
|
+
if (!_optionalChain([options, 'optionalAccess', _97 => _97.optional]) && !context)
|
2079
2310
|
throw new Error(
|
2080
2311
|
"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
|
2081
2312
|
);
|
@@ -2087,15 +2318,17 @@ function useContentPartContext(options) {
|
|
2087
2318
|
var toAppendMessage = (useThreadMessages, message) => {
|
2088
2319
|
if (typeof message === "string") {
|
2089
2320
|
return {
|
2090
|
-
parentId: _nullishCoalesce(_optionalChain([useThreadMessages, 'access',
|
2321
|
+
parentId: _nullishCoalesce(_optionalChain([useThreadMessages, 'access', _98 => _98.getState, 'call', _99 => _99(), 'access', _100 => _100.at, 'call', _101 => _101(-1), 'optionalAccess', _102 => _102.id]), () => ( null)),
|
2091
2322
|
role: "user",
|
2092
|
-
content: [{ type: "text", text: message }]
|
2323
|
+
content: [{ type: "text", text: message }],
|
2324
|
+
attachments: []
|
2093
2325
|
};
|
2094
2326
|
}
|
2095
2327
|
return {
|
2096
|
-
parentId: _nullishCoalesce(_nullishCoalesce(message.parentId, () => ( _optionalChain([useThreadMessages, 'access',
|
2328
|
+
parentId: _nullishCoalesce(_nullishCoalesce(message.parentId, () => ( _optionalChain([useThreadMessages, 'access', _103 => _103.getState, 'call', _104 => _104(), 'access', _105 => _105.at, 'call', _106 => _106(-1), 'optionalAccess', _107 => _107.id]))), () => ( null)),
|
2097
2329
|
role: _nullishCoalesce(message.role, () => ( "user")),
|
2098
|
-
content: message.content
|
2330
|
+
content: message.content,
|
2331
|
+
attachments: _nullishCoalesce(message.attachments, () => ( []))
|
2099
2332
|
};
|
2100
2333
|
};
|
2101
2334
|
var useAppendMessage = () => {
|
@@ -2145,7 +2378,7 @@ var useAssistantTool = (tool) => {
|
|
2145
2378
|
const unsub2 = render ? setToolUI(toolName, render) : void 0;
|
2146
2379
|
return () => {
|
2147
2380
|
unsub1();
|
2148
|
-
_optionalChain([unsub2, 'optionalCall',
|
2381
|
+
_optionalChain([unsub2, 'optionalCall', _108 => _108()]);
|
2149
2382
|
};
|
2150
2383
|
}, [registerModelConfigProvider, setToolUI, tool]);
|
2151
2384
|
};
|
@@ -2156,6 +2389,7 @@ var makeAssistantTool = (tool) => {
|
|
2156
2389
|
useAssistantTool(tool);
|
2157
2390
|
return null;
|
2158
2391
|
};
|
2392
|
+
Tool.unstable_tool = tool;
|
2159
2393
|
return Tool;
|
2160
2394
|
};
|
2161
2395
|
|
@@ -2177,6 +2411,7 @@ var makeAssistantToolUI = (tool) => {
|
|
2177
2411
|
useAssistantToolUI(tool);
|
2178
2412
|
return null;
|
2179
2413
|
};
|
2414
|
+
ToolUI.unstable_tool = tool;
|
2180
2415
|
return ToolUI;
|
2181
2416
|
};
|
2182
2417
|
|
@@ -2398,7 +2633,7 @@ var useComposerSend = () => {
|
|
2398
2633
|
const { useComposer } = useComposerContext();
|
2399
2634
|
const disabled = useCombinedStore(
|
2400
2635
|
[useThread, useComposer],
|
2401
|
-
(t, c) => t.isRunning || !c.isEditing || c.
|
2636
|
+
(t, c) => t.isRunning || !c.isEditing || c.isEmpty
|
2402
2637
|
);
|
2403
2638
|
const callback = _react.useCallback.call(void 0, () => {
|
2404
2639
|
const composerState = useComposer.getState();
|
@@ -2411,6 +2646,30 @@ var useComposerSend = () => {
|
|
2411
2646
|
return callback;
|
2412
2647
|
};
|
2413
2648
|
|
2649
|
+
// src/primitive-hooks/composer/useComposerAddAttachment.tsx
|
2650
|
+
|
2651
|
+
var useComposerAddAttachment = () => {
|
2652
|
+
const { useComposer, useThreadRuntime } = useThreadContext();
|
2653
|
+
const disabled = useComposer((c) => !c.isEditing);
|
2654
|
+
const callback = _react.useCallback.call(void 0, () => {
|
2655
|
+
const { addAttachment } = useComposer.getState();
|
2656
|
+
const { attachmentAccept } = useThreadRuntime.getState().composer;
|
2657
|
+
const input = document.createElement("input");
|
2658
|
+
input.type = "file";
|
2659
|
+
if (attachmentAccept !== "*") {
|
2660
|
+
input.accept = attachmentAccept;
|
2661
|
+
}
|
2662
|
+
input.onchange = (e) => {
|
2663
|
+
const file = _optionalChain([e, 'access', _109 => _109.target, 'access', _110 => _110.files, 'optionalAccess', _111 => _111[0]]);
|
2664
|
+
if (!file) return;
|
2665
|
+
addAttachment(file);
|
2666
|
+
};
|
2667
|
+
input.click();
|
2668
|
+
}, [useComposer, useThreadRuntime]);
|
2669
|
+
if (disabled) return null;
|
2670
|
+
return callback;
|
2671
|
+
};
|
2672
|
+
|
2414
2673
|
// src/primitive-hooks/contentPart/useContentPartDisplay.tsx
|
2415
2674
|
var useContentPartDisplay = () => {
|
2416
2675
|
const { useContentPart } = useContentPartContext();
|
@@ -2465,6 +2724,10 @@ var useMessageIf = (props) => {
|
|
2465
2724
|
if (props.copied === false && isCopied) return false;
|
2466
2725
|
if (props.speaking === true && !isSpeaking) return false;
|
2467
2726
|
if (props.speaking === false && isSpeaking) return false;
|
2727
|
+
if (props.hasAttachments === true && (message.role !== "user" || !message.attachments.length))
|
2728
|
+
return false;
|
2729
|
+
if (props.hasAttachments === false && message.role === "user" && !!message.attachments.length)
|
2730
|
+
return false;
|
2468
2731
|
return true;
|
2469
2732
|
}
|
2470
2733
|
);
|
@@ -2610,7 +2873,7 @@ var createActionButton = (displayName, useActionButton, forwardProps = []) => {
|
|
2610
2873
|
...primitiveProps,
|
2611
2874
|
ref: forwardedRef,
|
2612
2875
|
onClick: _primitive.composeEventHandlers.call(void 0, primitiveProps.onClick, () => {
|
2613
|
-
_optionalChain([callback, 'optionalCall',
|
2876
|
+
_optionalChain([callback, 'optionalCall', _112 => _112()]);
|
2614
2877
|
})
|
2615
2878
|
}
|
2616
2879
|
);
|
@@ -2666,7 +2929,7 @@ var ActionBarPrimitiveStopSpeaking = _react.forwardRef.call(void 0, (props, ref)
|
|
2666
2929
|
...props,
|
2667
2930
|
ref,
|
2668
2931
|
onClick: _primitive.composeEventHandlers.call(void 0, props.onClick, () => {
|
2669
|
-
_optionalChain([callback, 'optionalCall',
|
2932
|
+
_optionalChain([callback, 'optionalCall', _113 => _113()]);
|
2670
2933
|
})
|
2671
2934
|
}
|
2672
2935
|
);
|
@@ -2842,6 +3105,7 @@ BranchPickerPrimitiveNumber.displayName = "BranchPickerPrimitive.Number";
|
|
2842
3105
|
// src/primitives/message/index.ts
|
2843
3106
|
var message_exports = {};
|
2844
3107
|
_chunkDCHYNTHIjs.__export.call(void 0, message_exports, {
|
3108
|
+
Attachments: () => MessagePrimitiveAttachments,
|
2845
3109
|
Content: () => MessagePrimitiveContent,
|
2846
3110
|
If: () => MessagePrimitiveIf,
|
2847
3111
|
InProgress: () => MessagePrimitiveInProgress,
|
@@ -2952,7 +3216,7 @@ var getContentPartState = ({ message }, useContentPart, partIndex) => {
|
|
2952
3216
|
}
|
2953
3217
|
}
|
2954
3218
|
const status = toContentPartStatus(message, partIndex, part);
|
2955
|
-
const currentState = _optionalChain([useContentPart, 'optionalAccess',
|
3219
|
+
const currentState = _optionalChain([useContentPart, 'optionalAccess', _114 => _114.getState, 'call', _115 => _115()]);
|
2956
3220
|
if (currentState && currentState.part === part && currentState.status === status)
|
2957
3221
|
return null;
|
2958
3222
|
return Object.freeze({ part, status });
|
@@ -2973,7 +3237,7 @@ var useContentPartContext2 = (partIndex) => {
|
|
2973
3237
|
partIndex
|
2974
3238
|
);
|
2975
3239
|
if (!newState) return;
|
2976
|
-
context.useContentPart.setState(newState, true);
|
3240
|
+
writableStore(context.useContentPart).setState(newState, true);
|
2977
3241
|
};
|
2978
3242
|
syncContentPart(useMessage.getState());
|
2979
3243
|
return useMessage.subscribe(syncContentPart);
|
@@ -3033,21 +3297,22 @@ ContentPartPrimitiveInProgress.displayName = "ContentPartPrimitive.InProgress";
|
|
3033
3297
|
|
3034
3298
|
// src/primitives/message/MessageContent.tsx
|
3035
3299
|
|
3300
|
+
var ToolUIDisplay = ({
|
3301
|
+
UI,
|
3302
|
+
...props
|
3303
|
+
}) => {
|
3304
|
+
const { useToolUIs } = useAssistantContext();
|
3305
|
+
const Render = _nullishCoalesce(useToolUIs((s) => s.getToolUI(props.part.toolName)), () => ( UI));
|
3306
|
+
if (!Render) return null;
|
3307
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Render, { ...props });
|
3308
|
+
};
|
3036
3309
|
var defaultComponents = {
|
3037
3310
|
Text: () => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { style: { whiteSpace: "pre-line" }, children: [
|
3038
3311
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContentPartPrimitiveText, {}),
|
3039
3312
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
|
3040
3313
|
] }),
|
3041
3314
|
Image: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContentPartPrimitiveImage, {}),
|
3042
|
-
UI: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContentPartPrimitiveDisplay, {})
|
3043
|
-
tools: {
|
3044
|
-
Fallback: (props) => {
|
3045
|
-
const { useToolUIs } = useAssistantContext();
|
3046
|
-
const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));
|
3047
|
-
if (!Render) return null;
|
3048
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Render, { ...props });
|
3049
|
-
}
|
3050
|
-
}
|
3315
|
+
UI: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContentPartPrimitiveDisplay, {})
|
3051
3316
|
};
|
3052
3317
|
var MessageContentPartComponent = ({
|
3053
3318
|
components: {
|
@@ -3055,7 +3320,7 @@ var MessageContentPartComponent = ({
|
|
3055
3320
|
Text: Text2 = defaultComponents.Text,
|
3056
3321
|
Image: Image2 = defaultComponents.Image,
|
3057
3322
|
UI = defaultComponents.UI,
|
3058
|
-
tools: { by_name = {}, Fallback: Fallback2 =
|
3323
|
+
tools: { by_name = {}, Fallback: Fallback2 = void 0 } = {}
|
3059
3324
|
} = {}
|
3060
3325
|
}) => {
|
3061
3326
|
const { useThreadActions } = useThreadContext();
|
@@ -3086,7 +3351,15 @@ var MessageContentPartComponent = ({
|
|
3086
3351
|
toolCallId: part.toolCallId,
|
3087
3352
|
result
|
3088
3353
|
});
|
3089
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3354
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3355
|
+
ToolUIDisplay,
|
3356
|
+
{
|
3357
|
+
UI: Tool,
|
3358
|
+
part,
|
3359
|
+
status,
|
3360
|
+
addResult
|
3361
|
+
}
|
3362
|
+
);
|
3090
3363
|
}
|
3091
3364
|
default:
|
3092
3365
|
const unhandledType = type;
|
@@ -3101,24 +3374,14 @@ var MessageContentPartImpl = ({
|
|
3101
3374
|
};
|
3102
3375
|
var MessageContentPart = _react.memo.call(void 0,
|
3103
3376
|
MessageContentPartImpl,
|
3104
|
-
(prev, next) => prev.partIndex === next.partIndex && _optionalChain([prev, 'access',
|
3377
|
+
(prev, next) => prev.partIndex === next.partIndex && _optionalChain([prev, 'access', _116 => _116.components, 'optionalAccess', _117 => _117.Text]) === _optionalChain([next, 'access', _118 => _118.components, 'optionalAccess', _119 => _119.Text]) && _optionalChain([prev, 'access', _120 => _120.components, 'optionalAccess', _121 => _121.Image]) === _optionalChain([next, 'access', _122 => _122.components, 'optionalAccess', _123 => _123.Image]) && _optionalChain([prev, 'access', _124 => _124.components, 'optionalAccess', _125 => _125.UI]) === _optionalChain([next, 'access', _126 => _126.components, 'optionalAccess', _127 => _127.UI]) && _optionalChain([prev, 'access', _128 => _128.components, 'optionalAccess', _129 => _129.tools]) === _optionalChain([next, 'access', _130 => _130.components, 'optionalAccess', _131 => _131.tools])
|
3105
3378
|
);
|
3106
3379
|
var MessagePrimitiveContent = ({
|
3107
3380
|
components
|
3108
3381
|
}) => {
|
3109
3382
|
const { useMessage } = useMessageContext();
|
3110
3383
|
const contentLength = useMessage((s) => s.message.content.length) || 1;
|
3111
|
-
return
|
3112
|
-
const partIndex = idx;
|
3113
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3114
|
-
MessageContentPart,
|
3115
|
-
{
|
3116
|
-
partIndex,
|
3117
|
-
components
|
3118
|
-
},
|
3119
|
-
partIndex
|
3120
|
-
);
|
3121
|
-
});
|
3384
|
+
return Array.from({ length: contentLength }, (_, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MessageContentPart, { partIndex: index, components }, index));
|
3122
3385
|
};
|
3123
3386
|
MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
|
3124
3387
|
|
@@ -3128,6 +3391,125 @@ var MessagePrimitiveInProgress = () => {
|
|
3128
3391
|
};
|
3129
3392
|
MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
|
3130
3393
|
|
3394
|
+
// src/primitives/message/MessageAttachments.tsx
|
3395
|
+
|
3396
|
+
|
3397
|
+
// src/context/react/AttachmentContext.ts
|
3398
|
+
|
3399
|
+
var AttachmentContext = _react.createContext.call(void 0,
|
3400
|
+
null
|
3401
|
+
);
|
3402
|
+
function useAttachmentContext(options) {
|
3403
|
+
const context = _react.useContext.call(void 0, AttachmentContext);
|
3404
|
+
if (_optionalChain([options, 'optionalAccess', _132 => _132.type]) === "composer" && _optionalChain([context, 'optionalAccess', _133 => _133.type]) !== "composer")
|
3405
|
+
throw new Error(
|
3406
|
+
"This component must be used within a ComposerPrimitive.Attachments component."
|
3407
|
+
);
|
3408
|
+
if (_optionalChain([options, 'optionalAccess', _134 => _134.type]) === "message" && _optionalChain([context, 'optionalAccess', _135 => _135.type]) !== "message")
|
3409
|
+
throw new Error(
|
3410
|
+
"This component must be used within a MessagePrimitive.Attachments component."
|
3411
|
+
);
|
3412
|
+
if (!_optionalChain([options, 'optionalAccess', _136 => _136.optional]) && !context)
|
3413
|
+
throw new Error(
|
3414
|
+
"This component must be used within a ComposerPrimitive.Attachments or MessagePrimitive.Attachments component."
|
3415
|
+
);
|
3416
|
+
return context;
|
3417
|
+
}
|
3418
|
+
|
3419
|
+
// src/context/providers/MessageAttachmentProvider.tsx
|
3420
|
+
|
3421
|
+
|
3422
|
+
|
3423
|
+
var getAttachment = ({ message }, useAttachment, partIndex) => {
|
3424
|
+
if (message.role !== "user") return null;
|
3425
|
+
const attachments = message.attachments;
|
3426
|
+
let attachment = attachments[partIndex];
|
3427
|
+
if (!attachment) return null;
|
3428
|
+
const currentState = _optionalChain([useAttachment, 'optionalAccess', _137 => _137.getState, 'call', _138 => _138()]);
|
3429
|
+
if (currentState && currentState.attachment === attachment) return null;
|
3430
|
+
return Object.freeze({ attachment });
|
3431
|
+
};
|
3432
|
+
var useMessageAttachmentContext = (partIndex) => {
|
3433
|
+
const { useMessage } = useMessageContext();
|
3434
|
+
const [context] = _react.useState.call(void 0,
|
3435
|
+
() => {
|
3436
|
+
const useAttachment = _zustand.create.call(void 0,
|
3437
|
+
() => getAttachment(useMessage.getState(), void 0, partIndex)
|
3438
|
+
);
|
3439
|
+
return { type: "message", useAttachment };
|
3440
|
+
}
|
3441
|
+
);
|
3442
|
+
_react.useEffect.call(void 0, () => {
|
3443
|
+
const syncAttachment = (messageState) => {
|
3444
|
+
const newState = getAttachment(
|
3445
|
+
messageState,
|
3446
|
+
context.useAttachment,
|
3447
|
+
partIndex
|
3448
|
+
);
|
3449
|
+
if (!newState) return;
|
3450
|
+
writableStore(context.useAttachment).setState(newState, true);
|
3451
|
+
};
|
3452
|
+
syncAttachment(useMessage.getState());
|
3453
|
+
return useMessage.subscribe(syncAttachment);
|
3454
|
+
}, [context, useMessage, partIndex]);
|
3455
|
+
return context;
|
3456
|
+
};
|
3457
|
+
var MessageAttachmentProvider = ({
|
3458
|
+
attachmentIndex: partIndex,
|
3459
|
+
children
|
3460
|
+
}) => {
|
3461
|
+
const context = useMessageAttachmentContext(partIndex);
|
3462
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AttachmentContext.Provider, { value: context, children });
|
3463
|
+
};
|
3464
|
+
|
3465
|
+
// src/primitives/message/MessageAttachments.tsx
|
3466
|
+
|
3467
|
+
var getComponent = (components, attachment) => {
|
3468
|
+
const type = attachment.type;
|
3469
|
+
switch (type) {
|
3470
|
+
case "image":
|
3471
|
+
return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _139 => _139.Image]), () => ( _optionalChain([components, 'optionalAccess', _140 => _140.Attachment])));
|
3472
|
+
case "document":
|
3473
|
+
return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _141 => _141.Document]), () => ( _optionalChain([components, 'optionalAccess', _142 => _142.Attachment])));
|
3474
|
+
case "file":
|
3475
|
+
return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _143 => _143.File]), () => ( _optionalChain([components, 'optionalAccess', _144 => _144.Attachment])));
|
3476
|
+
default:
|
3477
|
+
const _exhaustiveCheck = type;
|
3478
|
+
throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
|
3479
|
+
}
|
3480
|
+
};
|
3481
|
+
var AttachmentComponent = ({ components }) => {
|
3482
|
+
const { useAttachment } = useAttachmentContext({ type: "message" });
|
3483
|
+
const Component = useAttachment(
|
3484
|
+
(a) => getComponent(components, a.attachment)
|
3485
|
+
);
|
3486
|
+
if (!Component) return null;
|
3487
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component, {});
|
3488
|
+
};
|
3489
|
+
var MessageAttachmentImpl = ({ components, attachmentIndex }) => {
|
3490
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MessageAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AttachmentComponent, { components }) });
|
3491
|
+
};
|
3492
|
+
var MessageAttachment = _react.memo.call(void 0,
|
3493
|
+
MessageAttachmentImpl,
|
3494
|
+
(prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _145 => _145.components, 'optionalAccess', _146 => _146.Image]) === _optionalChain([next, 'access', _147 => _147.components, 'optionalAccess', _148 => _148.Image]) && _optionalChain([prev, 'access', _149 => _149.components, 'optionalAccess', _150 => _150.Document]) === _optionalChain([next, 'access', _151 => _151.components, 'optionalAccess', _152 => _152.Document]) && _optionalChain([prev, 'access', _153 => _153.components, 'optionalAccess', _154 => _154.File]) === _optionalChain([next, 'access', _155 => _155.components, 'optionalAccess', _156 => _156.File]) && _optionalChain([prev, 'access', _157 => _157.components, 'optionalAccess', _158 => _158.Attachment]) === _optionalChain([next, 'access', _159 => _159.components, 'optionalAccess', _160 => _160.Attachment])
|
3495
|
+
);
|
3496
|
+
var MessagePrimitiveAttachments = ({ components }) => {
|
3497
|
+
const { useMessage } = useMessageContext();
|
3498
|
+
const attachmentsCount = useMessage(({ message }) => {
|
3499
|
+
if (message.role !== "user") return 0;
|
3500
|
+
return message.attachments.length;
|
3501
|
+
});
|
3502
|
+
return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3503
|
+
MessageAttachment,
|
3504
|
+
{
|
3505
|
+
attachmentIndex: index,
|
3506
|
+
components
|
3507
|
+
},
|
3508
|
+
index
|
3509
|
+
));
|
3510
|
+
};
|
3511
|
+
MessagePrimitiveAttachments.displayName = "MessagePrimitive.Attachments";
|
3512
|
+
|
3131
3513
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
3132
3514
|
|
3133
3515
|
var BranchPickerPrimitiveRoot = _react.forwardRef.call(void 0, ({ hideWhenSingleBranch, ...rest }, ref) => {
|
@@ -3138,6 +3520,8 @@ BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
|
|
3138
3520
|
// src/primitives/composer/index.ts
|
3139
3521
|
var composer_exports = {};
|
3140
3522
|
_chunkDCHYNTHIjs.__export.call(void 0, composer_exports, {
|
3523
|
+
AddAttachment: () => ComposerPrimitiveAddAttachment,
|
3524
|
+
Attachments: () => ComposerPrimitiveAttachments,
|
3141
3525
|
Cancel: () => ComposerPrimitiveCancel,
|
3142
3526
|
If: () => ComposerPrimitiveIf,
|
3143
3527
|
Input: () => ComposerPrimitiveInput,
|
@@ -3216,7 +3600,7 @@ var ComposerPrimitiveInput = _react.forwardRef.call(void 0,
|
|
3216
3600
|
const { isRunning } = useThread.getState();
|
3217
3601
|
if (!isRunning) {
|
3218
3602
|
e.preventDefault();
|
3219
|
-
_optionalChain([textareaRef, 'access',
|
3603
|
+
_optionalChain([textareaRef, 'access', _161 => _161.current, 'optionalAccess', _162 => _162.closest, 'call', _163 => _163("form"), 'optionalAccess', _164 => _164.requestSubmit, 'call', _165 => _165()]);
|
3220
3604
|
}
|
3221
3605
|
}
|
3222
3606
|
};
|
@@ -3257,29 +3641,111 @@ var ComposerPrimitiveInput = _react.forwardRef.call(void 0,
|
|
3257
3641
|
ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
|
3258
3642
|
|
3259
3643
|
// src/primitives/composer/ComposerSend.tsx
|
3644
|
+
var ComposerPrimitiveSend = createActionButton(
|
3645
|
+
"ComposerPrimitive.Send",
|
3646
|
+
useComposerSend
|
3647
|
+
);
|
3260
3648
|
|
3649
|
+
// src/primitives/composer/ComposerCancel.tsx
|
3650
|
+
var ComposerPrimitiveCancel = createActionButton(
|
3651
|
+
"ComposerPrimitive.Cancel",
|
3652
|
+
useComposerCancel
|
3653
|
+
);
|
3261
3654
|
|
3655
|
+
// src/primitives/composer/ComposerAddAttachment.tsx
|
3656
|
+
var ComposerPrimitiveAddAttachment = createActionButton(
|
3657
|
+
"ComposerPrimitive.AddAttachment",
|
3658
|
+
useComposerAddAttachment
|
3659
|
+
);
|
3262
3660
|
|
3263
|
-
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3268
|
-
|
3269
|
-
|
3270
|
-
|
3271
|
-
|
3272
|
-
|
3661
|
+
// src/primitives/composer/ComposerAttachments.tsx
|
3662
|
+
|
3663
|
+
|
3664
|
+
// src/context/providers/ComposerAttachmentProvider.tsx
|
3665
|
+
|
3666
|
+
|
3667
|
+
|
3668
|
+
var getAttachment2 = ({ attachments }, useAttachment, partIndex) => {
|
3669
|
+
let attachment = attachments[partIndex];
|
3670
|
+
if (!attachment) return null;
|
3671
|
+
const currentState = _optionalChain([useAttachment, 'optionalAccess', _166 => _166.getState, 'call', _167 => _167()]);
|
3672
|
+
if (currentState && currentState.attachment === attachment) return null;
|
3673
|
+
return Object.freeze({ attachment });
|
3674
|
+
};
|
3675
|
+
var useComposerAttachmentContext = (partIndex) => {
|
3676
|
+
const { useComposer } = useThreadContext();
|
3677
|
+
const [context] = _react.useState.call(void 0,
|
3678
|
+
() => {
|
3679
|
+
const useAttachment = _zustand.create.call(void 0,
|
3680
|
+
() => getAttachment2(useComposer.getState(), void 0, partIndex)
|
3681
|
+
);
|
3682
|
+
return { type: "composer", useAttachment };
|
3273
3683
|
}
|
3274
3684
|
);
|
3275
|
-
|
3276
|
-
|
3685
|
+
_react.useEffect.call(void 0, () => {
|
3686
|
+
const syncAttachment = (composer) => {
|
3687
|
+
const newState = getAttachment2(
|
3688
|
+
composer,
|
3689
|
+
context.useAttachment,
|
3690
|
+
partIndex
|
3691
|
+
);
|
3692
|
+
if (!newState) return;
|
3693
|
+
writableStore(context.useAttachment).setState(newState, true);
|
3694
|
+
};
|
3695
|
+
syncAttachment(useComposer.getState());
|
3696
|
+
return useComposer.subscribe(syncAttachment);
|
3697
|
+
}, [context, useComposer, partIndex]);
|
3698
|
+
return context;
|
3699
|
+
};
|
3700
|
+
var ComposerAttachmentProvider = ({ attachmentIndex: partIndex, children }) => {
|
3701
|
+
const context = useComposerAttachmentContext(partIndex);
|
3702
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AttachmentContext.Provider, { value: context, children });
|
3703
|
+
};
|
3277
3704
|
|
3278
|
-
// src/primitives/composer/
|
3279
|
-
|
3280
|
-
|
3281
|
-
|
3705
|
+
// src/primitives/composer/ComposerAttachments.tsx
|
3706
|
+
|
3707
|
+
var getComponent2 = (components, attachment) => {
|
3708
|
+
const type = attachment.type;
|
3709
|
+
switch (type) {
|
3710
|
+
case "image":
|
3711
|
+
return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _168 => _168.Image]), () => ( _optionalChain([components, 'optionalAccess', _169 => _169.Attachment])));
|
3712
|
+
case "document":
|
3713
|
+
return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _170 => _170.Document]), () => ( _optionalChain([components, 'optionalAccess', _171 => _171.Attachment])));
|
3714
|
+
case "file":
|
3715
|
+
return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _172 => _172.File]), () => ( _optionalChain([components, 'optionalAccess', _173 => _173.Attachment])));
|
3716
|
+
default:
|
3717
|
+
const _exhaustiveCheck = type;
|
3718
|
+
throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
|
3719
|
+
}
|
3720
|
+
};
|
3721
|
+
var AttachmentComponent2 = ({ components }) => {
|
3722
|
+
const { useAttachment } = useAttachmentContext({ type: "composer" });
|
3723
|
+
const Component = useAttachment(
|
3724
|
+
(a) => getComponent2(components, a.attachment)
|
3725
|
+
);
|
3726
|
+
if (!Component) return null;
|
3727
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component, {});
|
3728
|
+
};
|
3729
|
+
var ComposerAttachmentImpl = ({ components, attachmentIndex }) => {
|
3730
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AttachmentComponent2, { components }) });
|
3731
|
+
};
|
3732
|
+
var ComposerAttachment = _react.memo.call(void 0,
|
3733
|
+
ComposerAttachmentImpl,
|
3734
|
+
(prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _174 => _174.components, 'optionalAccess', _175 => _175.Image]) === _optionalChain([next, 'access', _176 => _176.components, 'optionalAccess', _177 => _177.Image]) && _optionalChain([prev, 'access', _178 => _178.components, 'optionalAccess', _179 => _179.Document]) === _optionalChain([next, 'access', _180 => _180.components, 'optionalAccess', _181 => _181.Document]) && _optionalChain([prev, 'access', _182 => _182.components, 'optionalAccess', _183 => _183.File]) === _optionalChain([next, 'access', _184 => _184.components, 'optionalAccess', _185 => _185.File]) && _optionalChain([prev, 'access', _186 => _186.components, 'optionalAccess', _187 => _187.Attachment]) === _optionalChain([next, 'access', _188 => _188.components, 'optionalAccess', _189 => _189.Attachment])
|
3282
3735
|
);
|
3736
|
+
var ComposerPrimitiveAttachments = ({ components }) => {
|
3737
|
+
const { useComposer } = useThreadContext();
|
3738
|
+
const attachmentsCount = useComposer((s) => s.attachments.length);
|
3739
|
+
return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3740
|
+
ComposerAttachment,
|
3741
|
+
{
|
3742
|
+
attachmentIndex: index,
|
3743
|
+
components
|
3744
|
+
},
|
3745
|
+
index
|
3746
|
+
));
|
3747
|
+
};
|
3748
|
+
ComposerPrimitiveAttachments.displayName = "ComposerPrimitive.Attachments";
|
3283
3749
|
|
3284
3750
|
// src/primitives/composer/ComposerIf.tsx
|
3285
3751
|
var ComposerPrimitiveIf = ({
|
@@ -3427,9 +3893,7 @@ var useThreadViewportAutoScroll = ({
|
|
3427
3893
|
isScrollingToBottomRef.current = false;
|
3428
3894
|
}
|
3429
3895
|
if (newIsAtBottom !== isAtBottom) {
|
3430
|
-
useViewport.setState({
|
3431
|
-
isAtBottom: newIsAtBottom
|
3432
|
-
});
|
3896
|
+
writableStore(useViewport).setState({ isAtBottom: newIsAtBottom });
|
3433
3897
|
}
|
3434
3898
|
}
|
3435
3899
|
lastScrollTop.current = div.scrollTop;
|
@@ -3485,13 +3949,19 @@ var makeEditComposerStore = ({
|
|
3485
3949
|
},
|
3486
3950
|
text: "",
|
3487
3951
|
setText: (text) => {
|
3488
|
-
set({ text });
|
3952
|
+
set({ text, isEmpty: text.trim().length === 0 });
|
3489
3953
|
},
|
3490
3954
|
canCancel: false,
|
3491
3955
|
isEditing: false,
|
3956
|
+
isEmpty: true,
|
3492
3957
|
edit: () => {
|
3493
3958
|
const text = onEdit();
|
3494
|
-
set({
|
3959
|
+
set({
|
3960
|
+
isEditing: true,
|
3961
|
+
canCancel: true,
|
3962
|
+
isEmpty: text.trim().length === 0,
|
3963
|
+
text
|
3964
|
+
});
|
3495
3965
|
},
|
3496
3966
|
send: () => {
|
3497
3967
|
const text = get().text;
|
@@ -3518,7 +3988,7 @@ var makeMessageUtilsStore = () => _zustand.create.call(void 0, (set) => {
|
|
3518
3988
|
},
|
3519
3989
|
isSpeaking: false,
|
3520
3990
|
stopSpeaking: () => {
|
3521
|
-
_optionalChain([utterance, 'optionalAccess',
|
3991
|
+
_optionalChain([utterance, 'optionalAccess', _190 => _190.cancel, 'call', _191 => _191()]);
|
3522
3992
|
},
|
3523
3993
|
addUtterance: (utt) => {
|
3524
3994
|
utterance = utt;
|
@@ -3533,15 +4003,15 @@ var makeMessageUtilsStore = () => _zustand.create.call(void 0, (set) => {
|
|
3533
4003
|
// src/context/providers/MessageProvider.tsx
|
3534
4004
|
|
3535
4005
|
var getIsLast = (messages, message) => {
|
3536
|
-
return _optionalChain([messages, 'access',
|
4006
|
+
return _optionalChain([messages, 'access', _192 => _192[messages.length - 1], 'optionalAccess', _193 => _193.id]) === message.id;
|
3537
4007
|
};
|
3538
4008
|
var getMessageState = (messages, getBranches, useMessage, messageIndex) => {
|
3539
|
-
const parentId = _nullishCoalesce(_optionalChain([messages, 'access',
|
4009
|
+
const parentId = _nullishCoalesce(_optionalChain([messages, 'access', _194 => _194[messageIndex - 1], 'optionalAccess', _195 => _195.id]), () => ( null));
|
3540
4010
|
const message = messages[messageIndex];
|
3541
4011
|
if (!message) return null;
|
3542
4012
|
const isLast = getIsLast(messages, message);
|
3543
4013
|
const branches = getBranches(message.id);
|
3544
|
-
const currentState = _optionalChain([useMessage, 'optionalAccess',
|
4014
|
+
const currentState = _optionalChain([useMessage, 'optionalAccess', _196 => _196.getState, 'call', _197 => _197()]);
|
3545
4015
|
if (currentState && currentState.message === message && currentState.parentId === parentId && currentState.branches === branches && currentState.isLast === isLast)
|
3546
4016
|
return null;
|
3547
4017
|
return Object.freeze({
|
@@ -3585,7 +4055,8 @@ var useMessageContext2 = (messageIndex) => {
|
|
3585
4055
|
useThreadActions.getState().append({
|
3586
4056
|
parentId,
|
3587
4057
|
role: "user",
|
3588
|
-
content: [{ type: "text", text }, ...nonTextParts]
|
4058
|
+
content: [{ type: "text", text }, ...nonTextParts],
|
4059
|
+
attachments: message.attachments
|
3589
4060
|
});
|
3590
4061
|
}
|
3591
4062
|
});
|
@@ -3600,10 +4071,7 @@ var useMessageContext2 = (messageIndex) => {
|
|
3600
4071
|
messageIndex
|
3601
4072
|
);
|
3602
4073
|
if (!newState) return;
|
3603
|
-
context.useMessage.setState(
|
3604
|
-
newState,
|
3605
|
-
true
|
3606
|
-
);
|
4074
|
+
writableStore(context.useMessage).setState(newState, true);
|
3607
4075
|
};
|
3608
4076
|
syncMessage(useThreadMessages.getState());
|
3609
4077
|
return useThreadMessages.subscribe(syncMessage);
|
@@ -3653,22 +4121,12 @@ var ThreadPrimitiveMessagesImpl = ({
|
|
3653
4121
|
const { useThreadMessages } = useThreadContext();
|
3654
4122
|
const messagesLength = useThreadMessages((t) => t.length);
|
3655
4123
|
if (messagesLength === 0) return null;
|
3656
|
-
return
|
3657
|
-
const messageIndex = idx;
|
3658
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3659
|
-
ThreadMessage,
|
3660
|
-
{
|
3661
|
-
messageIndex,
|
3662
|
-
components
|
3663
|
-
},
|
3664
|
-
messageIndex
|
3665
|
-
);
|
3666
|
-
});
|
4124
|
+
return Array.from({ length: messagesLength }, (_, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadMessage, { messageIndex: index, components }, index));
|
3667
4125
|
};
|
3668
4126
|
ThreadPrimitiveMessagesImpl.displayName = "ThreadPrimitive.Messages";
|
3669
4127
|
var ThreadPrimitiveMessages = _react.memo.call(void 0,
|
3670
4128
|
ThreadPrimitiveMessagesImpl,
|
3671
|
-
(prev, next) => _optionalChain([prev, 'access',
|
4129
|
+
(prev, next) => _optionalChain([prev, 'access', _198 => _198.components, 'optionalAccess', _199 => _199.Message]) === _optionalChain([next, 'access', _200 => _200.components, 'optionalAccess', _201 => _201.Message]) && _optionalChain([prev, 'access', _202 => _202.components, 'optionalAccess', _203 => _203.UserMessage]) === _optionalChain([next, 'access', _204 => _204.components, 'optionalAccess', _205 => _205.UserMessage]) && _optionalChain([prev, 'access', _206 => _206.components, 'optionalAccess', _207 => _207.EditComposer]) === _optionalChain([next, 'access', _208 => _208.components, 'optionalAccess', _209 => _209.EditComposer]) && _optionalChain([prev, 'access', _210 => _210.components, 'optionalAccess', _211 => _211.AssistantMessage]) === _optionalChain([next, 'access', _212 => _212.components, 'optionalAccess', _213 => _213.AssistantMessage]) && _optionalChain([prev, 'access', _214 => _214.components, 'optionalAccess', _215 => _215.SystemMessage]) === _optionalChain([next, 'access', _216 => _216.components, 'optionalAccess', _217 => _217.SystemMessage])
|
3672
4130
|
);
|
3673
4131
|
|
3674
4132
|
// src/primitives/thread/ThreadScrollToBottom.tsx
|
@@ -3700,7 +4158,7 @@ var ThreadConfigProvider = ({
|
|
3700
4158
|
}) => {
|
3701
4159
|
const assistant = useAssistantContext({ optional: true });
|
3702
4160
|
const configProvider = config && Object.keys(_nullishCoalesce(config, () => ( {}))).length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
|
3703
|
-
if (!_optionalChain([config, 'optionalAccess',
|
4161
|
+
if (!_optionalChain([config, 'optionalAccess', _218 => _218.runtime])) return configProvider;
|
3704
4162
|
if (assistant) {
|
3705
4163
|
throw new Error(
|
3706
4164
|
"You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
|
@@ -3787,8 +4245,7 @@ var AssistantActionBarSpeak = _react.forwardRef.call(void 0, (props, ref) => {
|
|
3787
4245
|
} = {}
|
3788
4246
|
} = useThreadConfig();
|
3789
4247
|
const allowSpeak = useAllowSpeak();
|
3790
|
-
|
3791
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.Speak, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AudioLinesIcon, {}))) }) });
|
4248
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.Speak, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AudioLinesIcon, {}))) }) });
|
3792
4249
|
});
|
3793
4250
|
AssistantActionBarSpeak.displayName = "AssistantActionBarSpeak";
|
3794
4251
|
var AssistantActionBarStopSpeaking = _react.forwardRef.call(void 0, (props, ref) => {
|
@@ -3800,8 +4257,7 @@ var AssistantActionBarStopSpeaking = _react.forwardRef.call(void 0, (props, ref)
|
|
3800
4257
|
} = {}
|
3801
4258
|
} = useThreadConfig();
|
3802
4259
|
const allowSpeak = useAllowSpeak();
|
3803
|
-
|
3804
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.StopSpeaking, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip: stopTooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.StopCircleIcon, {}))) }) });
|
4260
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.StopSpeaking, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip: stopTooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.StopCircleIcon, {}))) }) });
|
3805
4261
|
});
|
3806
4262
|
AssistantActionBarStopSpeaking.displayName = "AssistantActionBarStopSpeaking";
|
3807
4263
|
var AssistantActionBarReload = _react.forwardRef.call(void 0, (props, ref) => {
|
@@ -3811,8 +4267,7 @@ var AssistantActionBarReload = _react.forwardRef.call(void 0, (props, ref) => {
|
|
3811
4267
|
} = {}
|
3812
4268
|
} = useThreadConfig();
|
3813
4269
|
const allowReload = useAllowReload();
|
3814
|
-
|
3815
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.Reload, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RefreshCwIcon, {}) }) });
|
4270
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.Reload, { disabled: !allowReload, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RefreshCwIcon, {}) }) });
|
3816
4271
|
});
|
3817
4272
|
AssistantActionBarReload.displayName = "AssistantActionBarReload";
|
3818
4273
|
var exports = {
|
@@ -3835,11 +4290,11 @@ var assistant_action_bar_default = Object.assign(
|
|
3835
4290
|
|
3836
4291
|
|
3837
4292
|
|
3838
|
-
var useAllowBranchPicker = () => {
|
4293
|
+
var useAllowBranchPicker = (ensureCapability = false) => {
|
3839
4294
|
const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();
|
3840
4295
|
const { useThread } = useThreadContext();
|
3841
4296
|
const branchPickerSupported = useThread((t) => t.capabilities.edit);
|
3842
|
-
return
|
4297
|
+
return allowBranchPicker && (!ensureCapability || branchPickerSupported);
|
3843
4298
|
};
|
3844
4299
|
var BranchPicker = () => {
|
3845
4300
|
const allowBranchPicker = useAllowBranchPicker();
|
@@ -3861,7 +4316,8 @@ var BranchPickerPrevious2 = _react.forwardRef.call(void 0, (props, ref) => {
|
|
3861
4316
|
branchPicker: { previous: { tooltip = "Previous" } = {} } = {}
|
3862
4317
|
} = {}
|
3863
4318
|
} = useThreadConfig();
|
3864
|
-
|
4319
|
+
const allowBranchPicker = useAllowBranchPicker();
|
4320
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, branchPicker_exports.Previous, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeftIcon, {}))) }) });
|
3865
4321
|
});
|
3866
4322
|
BranchPickerPrevious2.displayName = "BranchPickerPrevious";
|
3867
4323
|
var BranchPickerStateWrapper = withDefaults("span", {
|
@@ -3879,7 +4335,8 @@ var BranchPickerNext = _react.forwardRef.call(void 0, (props, ref) => {
|
|
3879
4335
|
const {
|
3880
4336
|
strings: { branchPicker: { next: { tooltip = "Next" } = {} } = {} } = {}
|
3881
4337
|
} = useThreadConfig();
|
3882
|
-
|
4338
|
+
const allowBranchPicker = useAllowBranchPicker();
|
4339
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, branchPicker_exports.Next, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRightIcon, {}))) }) });
|
3883
4340
|
});
|
3884
4341
|
BranchPickerNext.displayName = "BranchPickerNext";
|
3885
4342
|
var exports2 = {
|
@@ -3955,13 +4412,27 @@ var AssistantMessageContentWrapper = withDefaults("div", {
|
|
3955
4412
|
className: "aui-assistant-message-content"
|
3956
4413
|
});
|
3957
4414
|
var AssistantMessageContent = _react.forwardRef.call(void 0, ({ components: componentsProp, ...rest }, ref) => {
|
3958
|
-
const { assistantMessage: { components = {} } = {} } = useThreadConfig();
|
4415
|
+
const { tools, assistantMessage: { components = {} } = {} } = useThreadConfig();
|
4416
|
+
const toolsComponents = _react.useMemo.call(void 0,
|
4417
|
+
() => ({
|
4418
|
+
by_name: !tools ? void 0 : Object.fromEntries(
|
4419
|
+
tools.map((t) => [
|
4420
|
+
t.unstable_tool.toolName,
|
4421
|
+
t.unstable_tool.render
|
4422
|
+
])
|
4423
|
+
),
|
4424
|
+
Fallback: components.ToolFallback
|
4425
|
+
}),
|
4426
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4427
|
+
[..._nullishCoalesce(tools, () => ( [])), components.ToolFallback]
|
4428
|
+
);
|
3959
4429
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
3960
4430
|
message_exports.Content,
|
3961
4431
|
{
|
3962
4432
|
components: {
|
3963
4433
|
...componentsProp,
|
3964
|
-
Text: _nullishCoalesce(_nullishCoalesce(_optionalChain([componentsProp, 'optionalAccess',
|
4434
|
+
Text: _nullishCoalesce(_nullishCoalesce(_optionalChain([componentsProp, 'optionalAccess', _219 => _219.Text]), () => ( components.Text)), () => ( content_part_default.Text)),
|
4435
|
+
tools: toolsComponents
|
3965
4436
|
}
|
3966
4437
|
}
|
3967
4438
|
) });
|
@@ -4006,10 +4477,71 @@ var CircleStopIcon = () => {
|
|
4006
4477
|
};
|
4007
4478
|
CircleStopIcon.displayName = "CircleStopIcon";
|
4008
4479
|
|
4480
|
+
// src/ui/composer-attachment.tsx
|
4481
|
+
|
4482
|
+
|
4483
|
+
|
4484
|
+
var ComposerAttachmentRoot = withDefaults("div", {
|
4485
|
+
className: "aui-composer-attachment-root"
|
4486
|
+
});
|
4487
|
+
ComposerAttachmentRoot.displayName = "ComposerAttachmentRoot";
|
4488
|
+
var ComposerAttachment2 = () => {
|
4489
|
+
const { useAttachment } = useAttachmentContext({ type: "composer" });
|
4490
|
+
const attachment = useAttachment((a) => a.attachment);
|
4491
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, ComposerAttachmentRoot, { children: [
|
4492
|
+
".",
|
4493
|
+
attachment.name.split(".").pop(),
|
4494
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerAttachmentRemove, {})
|
4495
|
+
] });
|
4496
|
+
};
|
4497
|
+
ComposerAttachment2.displayName = "ComposerAttachment";
|
4498
|
+
var ComposerAttachmentRemove = _react.forwardRef.call(void 0, (props, ref) => {
|
4499
|
+
const {
|
4500
|
+
strings: {
|
4501
|
+
composer: { removeAttachment: { tooltip = "Remove file" } = {} } = {}
|
4502
|
+
} = {}
|
4503
|
+
} = useThreadConfig();
|
4504
|
+
const { useComposer } = useThreadContext();
|
4505
|
+
const { useAttachment } = useAttachmentContext();
|
4506
|
+
const handleRemoveAttachment = () => {
|
4507
|
+
useComposer.getState().removeAttachment(useAttachment.getState().attachment.id);
|
4508
|
+
};
|
4509
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
4510
|
+
TooltipIconButton,
|
4511
|
+
{
|
4512
|
+
tooltip,
|
4513
|
+
className: "aui-composer-attachment-remove",
|
4514
|
+
side: "top",
|
4515
|
+
...props,
|
4516
|
+
onClick: handleRemoveAttachment,
|
4517
|
+
ref,
|
4518
|
+
children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CircleXIcon, {})))
|
4519
|
+
}
|
4520
|
+
);
|
4521
|
+
});
|
4522
|
+
ComposerAttachmentRemove.displayName = "ComposerAttachmentRemove";
|
4523
|
+
var exports5 = {
|
4524
|
+
Root: ComposerAttachmentRoot,
|
4525
|
+
Remove: ComposerAttachmentRemove
|
4526
|
+
};
|
4527
|
+
var composer_attachment_default = Object.assign(
|
4528
|
+
ComposerAttachment2,
|
4529
|
+
exports5
|
4530
|
+
);
|
4531
|
+
|
4009
4532
|
// src/ui/composer.tsx
|
4010
4533
|
|
4534
|
+
var useAllowAttachments = (ensureCapability = false) => {
|
4535
|
+
const { composer: { allowAttachments = true } = {} } = useThreadConfig();
|
4536
|
+
const { useThread } = useThreadContext();
|
4537
|
+
const attachmentsSupported = useThread((t) => t.capabilities.attachments);
|
4538
|
+
return allowAttachments && (!ensureCapability || attachmentsSupported);
|
4539
|
+
};
|
4011
4540
|
var Composer = () => {
|
4541
|
+
const allowAttachments = useAllowAttachments(true);
|
4012
4542
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, ComposerRoot, { children: [
|
4543
|
+
allowAttachments && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerAttachments, {}),
|
4544
|
+
allowAttachments && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerAddAttachment, {}),
|
4013
4545
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerInput, { autoFocus: true }),
|
4014
4546
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerAction, {})
|
4015
4547
|
] });
|
@@ -4035,6 +4567,43 @@ var ComposerInput = _react.forwardRef.call(void 0,
|
|
4035
4567
|
}
|
4036
4568
|
);
|
4037
4569
|
ComposerInput.displayName = "ComposerInput";
|
4570
|
+
var ComposerAttachmentsContainer = withDefaults("div", {
|
4571
|
+
className: "aui-composer-attachments"
|
4572
|
+
});
|
4573
|
+
var ComposerAttachments = ({ components }) => {
|
4574
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerAttachmentsContainer, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
4575
|
+
composer_exports.Attachments,
|
4576
|
+
{
|
4577
|
+
components: {
|
4578
|
+
...components,
|
4579
|
+
Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _220 => _220.Attachment]), () => ( composer_attachment_default))
|
4580
|
+
}
|
4581
|
+
}
|
4582
|
+
) });
|
4583
|
+
};
|
4584
|
+
var ComposerAttachButton = withDefaults(TooltipIconButton, {
|
4585
|
+
variant: "default",
|
4586
|
+
className: "aui-composer-attach"
|
4587
|
+
});
|
4588
|
+
var ComposerAddAttachment = _react.forwardRef.call(void 0, (props, ref) => {
|
4589
|
+
const {
|
4590
|
+
strings: {
|
4591
|
+
composer: { addAttachment: { tooltip = "Attach file" } = {} } = {}
|
4592
|
+
} = {}
|
4593
|
+
} = useThreadConfig();
|
4594
|
+
const allowAttachments = useAllowAttachments();
|
4595
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, composer_exports.AddAttachment, { disabled: !allowAttachments, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
4596
|
+
ComposerAttachButton,
|
4597
|
+
{
|
4598
|
+
tooltip,
|
4599
|
+
variant: "ghost",
|
4600
|
+
...props,
|
4601
|
+
ref,
|
4602
|
+
children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.PaperclipIcon, {})))
|
4603
|
+
}
|
4604
|
+
) });
|
4605
|
+
});
|
4606
|
+
ComposerAddAttachment.displayName = "ComposerAddAttachment";
|
4038
4607
|
var useAllowCancel = () => {
|
4039
4608
|
const { useThread } = useThreadContext();
|
4040
4609
|
const cancelSupported = useThread((t) => t.capabilities.cancel);
|
@@ -4071,14 +4640,16 @@ var ComposerCancel = _react.forwardRef.call(void 0, (props, ref) => {
|
|
4071
4640
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComposerCancelButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CircleStopIcon, {}))) }) });
|
4072
4641
|
});
|
4073
4642
|
ComposerCancel.displayName = "ComposerCancel";
|
4074
|
-
var
|
4643
|
+
var exports6 = {
|
4075
4644
|
Root: ComposerRoot,
|
4076
4645
|
Input: ComposerInput,
|
4077
4646
|
Action: ComposerAction,
|
4078
4647
|
Send: ComposerSend,
|
4079
|
-
Cancel: ComposerCancel
|
4648
|
+
Cancel: ComposerCancel,
|
4649
|
+
AddAttachment: ComposerAddAttachment,
|
4650
|
+
Attachments: ComposerAttachments
|
4080
4651
|
};
|
4081
|
-
var composer_default = Object.assign(Composer,
|
4652
|
+
var composer_default = Object.assign(Composer, exports6);
|
4082
4653
|
|
4083
4654
|
// src/ui/thread-welcome.tsx
|
4084
4655
|
|
@@ -4138,13 +4709,13 @@ var ThreadWelcomeSuggestion = ({
|
|
4138
4709
|
};
|
4139
4710
|
var ThreadWelcomeSuggestions = () => {
|
4140
4711
|
const { welcome: { suggestions } = {} } = useThreadConfig();
|
4141
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestionContainer, { children: _optionalChain([suggestions, 'optionalAccess',
|
4712
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestionContainer, { children: _optionalChain([suggestions, 'optionalAccess', _221 => _221.map, 'call', _222 => _222((suggestion, idx) => {
|
4142
4713
|
const key = `${suggestion.prompt}-${idx}`;
|
4143
4714
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestion, { suggestion }, key);
|
4144
4715
|
})]) });
|
4145
4716
|
};
|
4146
4717
|
ThreadWelcomeSuggestions.displayName = "ThreadWelcomeSuggestions";
|
4147
|
-
var
|
4718
|
+
var exports7 = {
|
4148
4719
|
Root: ThreadWelcomeRoot,
|
4149
4720
|
Center: ThreadWelcomeCenter,
|
4150
4721
|
Avatar: ThreadWelcomeAvatar,
|
@@ -4152,7 +4723,7 @@ var exports6 = {
|
|
4152
4723
|
Suggestions: ThreadWelcomeSuggestions,
|
4153
4724
|
Suggestion: ThreadWelcomeSuggestion
|
4154
4725
|
};
|
4155
|
-
var thread_welcome_default = Object.assign(ThreadWelcome,
|
4726
|
+
var thread_welcome_default = Object.assign(ThreadWelcome, exports7);
|
4156
4727
|
|
4157
4728
|
// src/ui/user-message.tsx
|
4158
4729
|
|
@@ -4182,20 +4753,43 @@ var UserActionBarEdit = _react.forwardRef.call(void 0, (props, ref) => {
|
|
4182
4753
|
strings: { userMessage: { edit: { tooltip = "Edit" } = {} } = {} } = {}
|
4183
4754
|
} = useThreadConfig();
|
4184
4755
|
const allowEdit = useAllowEdit();
|
4185
|
-
|
4186
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.Edit, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.PencilIcon, {}))) }) });
|
4756
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, actionBar_exports.Edit, { disabled: !allowEdit, asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.PencilIcon, {}))) }) });
|
4187
4757
|
});
|
4188
4758
|
UserActionBarEdit.displayName = "UserActionBarEdit";
|
4189
|
-
var
|
4759
|
+
var exports8 = {
|
4190
4760
|
Root: UserActionBarRoot,
|
4191
4761
|
Edit: UserActionBarEdit
|
4192
4762
|
};
|
4193
|
-
var user_action_bar_default = Object.assign(UserActionBar,
|
4763
|
+
var user_action_bar_default = Object.assign(UserActionBar, exports8);
|
4764
|
+
|
4765
|
+
// src/ui/user-message-attachment.tsx
|
4766
|
+
|
4767
|
+
var UserMessageAttachmentRoot = withDefaults("div", {
|
4768
|
+
className: "aui-user-message-attachment-root"
|
4769
|
+
});
|
4770
|
+
UserMessageAttachmentRoot.displayName = "UserMessageAttachmentRoot";
|
4771
|
+
var UserMessageAttachment = () => {
|
4772
|
+
const { useAttachment } = useAttachmentContext();
|
4773
|
+
const attachment = useAttachment((a) => a.attachment);
|
4774
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, UserMessageAttachmentRoot, { children: [
|
4775
|
+
".",
|
4776
|
+
attachment.name.split(".").pop()
|
4777
|
+
] });
|
4778
|
+
};
|
4779
|
+
UserMessageAttachment.displayName = "UserMessageAttachment";
|
4780
|
+
var exports9 = {
|
4781
|
+
Root: UserMessageAttachmentRoot
|
4782
|
+
};
|
4783
|
+
var user_message_attachment_default = Object.assign(
|
4784
|
+
UserMessageAttachment,
|
4785
|
+
exports9
|
4786
|
+
);
|
4194
4787
|
|
4195
4788
|
// src/ui/user-message.tsx
|
4196
4789
|
|
4197
4790
|
var UserMessage = () => {
|
4198
4791
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, UserMessageRoot, { children: [
|
4792
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, UserMessageAttachments, {}),
|
4199
4793
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, user_action_bar_default, {}),
|
4200
4794
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, UserMessageContent, {}),
|
4201
4795
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, branch_picker_default, {})
|
@@ -4216,18 +4810,35 @@ var UserMessageContent = _react.forwardRef.call(void 0,
|
|
4216
4810
|
{
|
4217
4811
|
components: {
|
4218
4812
|
...components,
|
4219
|
-
Text: _nullishCoalesce(_optionalChain([components, 'optionalAccess',
|
4813
|
+
Text: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _223 => _223.Text]), () => ( content_part_default.Text))
|
4220
4814
|
}
|
4221
4815
|
}
|
4222
4816
|
) });
|
4223
4817
|
}
|
4224
4818
|
);
|
4225
4819
|
UserMessageContent.displayName = "UserMessageContent";
|
4226
|
-
var
|
4820
|
+
var UserMessageAttachmentsContainer = withDefaults("div", {
|
4821
|
+
className: "aui-user-message-attachments"
|
4822
|
+
});
|
4823
|
+
var UserMessageAttachments = ({
|
4824
|
+
components
|
4825
|
+
}) => {
|
4826
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, message_exports.If, { hasAttachments: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, UserMessageAttachmentsContainer, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
4827
|
+
message_exports.Attachments,
|
4828
|
+
{
|
4829
|
+
components: {
|
4830
|
+
...components,
|
4831
|
+
Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _224 => _224.Attachment]), () => ( user_message_attachment_default))
|
4832
|
+
}
|
4833
|
+
}
|
4834
|
+
) }) });
|
4835
|
+
};
|
4836
|
+
var exports10 = {
|
4227
4837
|
Root: UserMessageRoot,
|
4228
|
-
Content: UserMessageContent
|
4838
|
+
Content: UserMessageContent,
|
4839
|
+
Attachments: UserMessageAttachments
|
4229
4840
|
};
|
4230
|
-
var user_message_default = Object.assign(UserMessage,
|
4841
|
+
var user_message_default = Object.assign(UserMessage, exports10);
|
4231
4842
|
|
4232
4843
|
// src/ui/edit-composer.tsx
|
4233
4844
|
|
@@ -4274,14 +4885,14 @@ var EditComposerSend = _react.forwardRef.call(void 0,
|
|
4274
4885
|
}
|
4275
4886
|
);
|
4276
4887
|
EditComposerSend.displayName = "EditComposerSend";
|
4277
|
-
var
|
4888
|
+
var exports11 = {
|
4278
4889
|
Root: EditComposerRoot,
|
4279
4890
|
Input: EditComposerInput,
|
4280
4891
|
Footer: EditComposerFooter,
|
4281
4892
|
Cancel: EditComposerCancel,
|
4282
4893
|
Send: EditComposerSend
|
4283
4894
|
};
|
4284
|
-
var edit_composer_default = Object.assign(EditComposer,
|
4895
|
+
var edit_composer_default = Object.assign(EditComposer, exports11);
|
4285
4896
|
|
4286
4897
|
// src/ui/thread.tsx
|
4287
4898
|
|
@@ -4318,10 +4929,10 @@ var ThreadMessages = ({ components, ...rest }) => {
|
|
4318
4929
|
thread_exports.Messages,
|
4319
4930
|
{
|
4320
4931
|
components: {
|
4321
|
-
UserMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess',
|
4322
|
-
EditComposer: _nullishCoalesce(_optionalChain([components, 'optionalAccess',
|
4323
|
-
AssistantMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess',
|
4324
|
-
SystemMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess',
|
4932
|
+
UserMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _225 => _225.UserMessage]), () => ( user_message_default)),
|
4933
|
+
EditComposer: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _226 => _226.EditComposer]), () => ( edit_composer_default)),
|
4934
|
+
AssistantMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _227 => _227.AssistantMessage]), () => ( assistant_message_default)),
|
4935
|
+
SystemMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _228 => _228.SystemMessage]), () => ( SystemMessage))
|
4325
4936
|
},
|
4326
4937
|
...rest
|
4327
4938
|
}
|
@@ -4341,14 +4952,14 @@ var ThreadScrollToBottom = _react.forwardRef.call(void 0, (props, ref) => {
|
|
4341
4952
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: _nullishCoalesce(props.children, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArrowDownIcon, {}))) }) });
|
4342
4953
|
});
|
4343
4954
|
ThreadScrollToBottom.displayName = "ThreadScrollToBottom";
|
4344
|
-
var
|
4955
|
+
var exports12 = {
|
4345
4956
|
Root: ThreadRoot,
|
4346
4957
|
Viewport: ThreadViewport,
|
4347
4958
|
Messages: ThreadMessages,
|
4348
4959
|
ScrollToBottom: ThreadScrollToBottom,
|
4349
4960
|
ViewportFooter: ThreadViewportFooter
|
4350
4961
|
};
|
4351
|
-
var thread_default = Object.assign(Thread,
|
4962
|
+
var thread_default = Object.assign(Thread, exports12);
|
4352
4963
|
|
4353
4964
|
// src/ui/assistant-modal.tsx
|
4354
4965
|
|
@@ -4422,14 +5033,20 @@ var AssistantModalContent = withDefaults(assistantModal_exports.Content, {
|
|
4422
5033
|
sideOffset: 16
|
4423
5034
|
});
|
4424
5035
|
AssistantModalContent.displayName = "AssistantModalContent";
|
4425
|
-
var
|
5036
|
+
var exports13 = {
|
4426
5037
|
Root: AssistantModalRoot,
|
4427
5038
|
Trigger: AssistantModalTrigger,
|
4428
5039
|
Content: AssistantModalContent,
|
4429
5040
|
Button: AssistantModalButton,
|
4430
5041
|
Anchor: AssistantModalAnchor
|
4431
5042
|
};
|
4432
|
-
var assistant_modal_default = Object.assign(AssistantModal,
|
5043
|
+
var assistant_modal_default = Object.assign(AssistantModal, exports13);
|
5044
|
+
|
5045
|
+
|
5046
|
+
|
5047
|
+
|
5048
|
+
|
5049
|
+
|
4433
5050
|
|
4434
5051
|
|
4435
5052
|
|
@@ -4504,5 +5121,5 @@ var assistant_modal_default = Object.assign(AssistantModal, exports11);
|
|
4504
5121
|
|
4505
5122
|
|
4506
5123
|
|
4507
|
-
exports.ActionBarPrimitive = actionBar_exports; exports.AssistantActionBar = assistant_action_bar_default; exports.AssistantMessage = assistant_message_default; exports.AssistantModal = assistant_modal_default; exports.AssistantModalPrimitive = assistantModal_exports; exports.AssistantRuntimeProvider = AssistantRuntimeProvider; exports.BranchPicker = branch_picker_default; exports.BranchPickerPrimitive = branchPicker_exports; exports.Composer = composer_default; exports.ComposerPrimitive = composer_exports; exports.ContentPart = content_part_default; exports.ContentPartPrimitive = contentPart_exports; exports.EdgeChatAdapter = EdgeChatAdapter; exports.EditComposer = edit_composer_default; exports.ExternalStoreRuntime = ExternalStoreRuntime; exports.INTERNAL = internal_exports; exports.MessagePrimitive = message_exports; exports.Thread = thread_default; exports.ThreadConfigProvider = ThreadConfigProvider; exports.ThreadPrimitive = thread_exports; exports.ThreadWelcome = thread_welcome_default; exports.UserActionBar = user_action_bar_default; exports.UserMessage = user_message_default; exports.WebSpeechSynthesisAdapter = WebSpeechSynthesisAdapter; exports.fromCoreMessage = fromCoreMessage; exports.fromCoreMessages = fromCoreMessages; exports.fromLanguageModelMessages = fromLanguageModelMessages; exports.fromLanguageModelTools = fromLanguageModelTools; exports.getExternalStoreMessage = getExternalStoreMessage; exports.makeAssistantTool = makeAssistantTool; exports.makeAssistantToolUI = makeAssistantToolUI; exports.streamUtils = streamUtils; exports.subscribeToMainThread = subscribeToMainThread; exports.toCoreMessage =
|
5124
|
+
exports.ActionBarPrimitive = actionBar_exports; exports.AssistantActionBar = assistant_action_bar_default; exports.AssistantMessage = assistant_message_default; exports.AssistantModal = assistant_modal_default; exports.AssistantModalPrimitive = assistantModal_exports; exports.AssistantRuntimeProvider = AssistantRuntimeProvider; exports.BranchPicker = branch_picker_default; exports.BranchPickerPrimitive = branchPicker_exports; exports.Composer = composer_default; exports.ComposerAttachment = composer_attachment_default; exports.ComposerPrimitive = composer_exports; exports.CompositeAttachmentAdapter = CompositeAttachmentAdapter; exports.ContentPart = content_part_default; exports.ContentPartPrimitive = contentPart_exports; exports.EdgeChatAdapter = EdgeChatAdapter; exports.EditComposer = edit_composer_default; exports.ExternalStoreRuntime = ExternalStoreRuntime; exports.INTERNAL = internal_exports; exports.MessagePrimitive = message_exports; exports.SimpleImageAttachmentAdapter = SimpleImageAttachmentAdapter; exports.SimpleTextAttachmentAdapter = SimpleTextAttachmentAdapter; exports.Thread = thread_default; exports.ThreadConfigProvider = ThreadConfigProvider; exports.ThreadPrimitive = thread_exports; exports.ThreadWelcome = thread_welcome_default; exports.UserActionBar = user_action_bar_default; exports.UserMessage = user_message_default; exports.UserMessageAttachment = user_message_attachment_default; exports.WebSpeechSynthesisAdapter = WebSpeechSynthesisAdapter; exports.fromCoreMessage = fromCoreMessage; exports.fromCoreMessages = fromCoreMessages; exports.fromLanguageModelMessages = fromLanguageModelMessages; exports.fromLanguageModelTools = fromLanguageModelTools; exports.getExternalStoreMessage = getExternalStoreMessage; exports.makeAssistantTool = makeAssistantTool; exports.makeAssistantToolUI = makeAssistantToolUI; exports.streamUtils = streamUtils; exports.subscribeToMainThread = subscribeToMainThread; exports.toCoreMessage = _chunkBNSCUYW7js.toCoreMessage; exports.toCoreMessages = _chunkBNSCUYW7js.toCoreMessages; exports.toLanguageModelMessages = _chunkBNSCUYW7js.toLanguageModelMessages; exports.toLanguageModelTools = _chunkBNSCUYW7js.toLanguageModelTools; exports.useActionBarCopy = useActionBarCopy; exports.useActionBarEdit = useActionBarEdit; exports.useActionBarReload = useActionBarReload; exports.useActionBarSpeak = useActionBarSpeak; exports.useActionBarStopSpeaking = useActionBarStopSpeaking; exports.useAppendMessage = useAppendMessage; exports.useAssistantContext = useAssistantContext; exports.useAssistantInstructions = useAssistantInstructions; exports.useAssistantTool = useAssistantTool; exports.useAssistantToolUI = useAssistantToolUI; exports.useBranchPickerCount = useBranchPickerCount; exports.useBranchPickerNext = useBranchPickerNext; exports.useBranchPickerNumber = useBranchPickerNumber; exports.useBranchPickerPrevious = useBranchPickerPrevious; exports.useComposerAddAttachment = useComposerAddAttachment; exports.useComposerCancel = useComposerCancel; exports.useComposerContext = useComposerContext; exports.useComposerIf = useComposerIf; exports.useComposerSend = useComposerSend; exports.useContentPartContext = useContentPartContext; exports.useContentPartDisplay = useContentPartDisplay; exports.useContentPartImage = useContentPartImage; exports.useContentPartText = useContentPartText; exports.useDangerousInBrowserRuntime = useDangerousInBrowserRuntime; exports.useEdgeRuntime = useEdgeRuntime; exports.useExternalMessageConverter = useExternalMessageConverter; exports.useExternalStoreRuntime = useExternalStoreRuntime; exports.useLocalRuntime = useLocalRuntime; exports.useMessageContext = useMessageContext; exports.useMessageIf = useMessageIf; exports.useSwitchToNewThread = useSwitchToNewThread; exports.useThreadConfig = useThreadConfig; exports.useThreadContext = useThreadContext; exports.useThreadEmpty = useThreadEmpty; exports.useThreadIf = useThreadIf; exports.useThreadScrollToBottom = useThreadScrollToBottom; exports.useThreadSuggestion = useThreadSuggestion;
|
4508
5125
|
//# sourceMappingURL=index.js.map
|