@assistant-ui/react 0.0.15 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +27 -7
- package/dist/index.d.ts +27 -7
- package/dist/index.js +332 -215
- package/dist/index.mjs +325 -207
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -33,6 +33,7 @@ __export(src_exports, {
|
|
33
33
|
ActionBarPrimitive: () => actionBar_exports,
|
34
34
|
BranchPickerPrimitive: () => branchPicker_exports,
|
35
35
|
ComposerPrimitive: () => composer_exports,
|
36
|
+
ContentPartPrimitive: () => contentPart_exports,
|
36
37
|
MessagePrimitive: () => message_exports,
|
37
38
|
ThreadPrimitive: () => thread_exports,
|
38
39
|
VercelAIAssistantProvider: () => VercelAIAssistantProvider,
|
@@ -113,7 +114,7 @@ var import_react3 = require("react");
|
|
113
114
|
var useOnResizeContent = (ref, callback) => {
|
114
115
|
const callbackRef = (0, import_react3.useRef)(callback);
|
115
116
|
callbackRef.current = callback;
|
116
|
-
(0, import_react3.
|
117
|
+
(0, import_react3.useEffect)(() => {
|
117
118
|
const el = ref.current;
|
118
119
|
if (!el) return;
|
119
120
|
const resizeObserver = new ResizeObserver(() => {
|
@@ -217,7 +218,9 @@ var MessageContext = (0, import_react6.createContext)(null);
|
|
217
218
|
var useMessageContext = () => {
|
218
219
|
const context = (0, import_react6.useContext)(MessageContext);
|
219
220
|
if (!context)
|
220
|
-
throw new Error(
|
221
|
+
throw new Error(
|
222
|
+
"This component must be used within a MessagePrimitive.Provider."
|
223
|
+
);
|
221
224
|
return context;
|
222
225
|
};
|
223
226
|
|
@@ -250,6 +253,7 @@ var message_exports = {};
|
|
250
253
|
__export(message_exports, {
|
251
254
|
Content: () => MessageContent,
|
252
255
|
If: () => MessageIf,
|
256
|
+
Loading: () => MessageLoading,
|
253
257
|
Provider: () => MessageProvider,
|
254
258
|
Root: () => MessageRoot
|
255
259
|
});
|
@@ -329,8 +333,12 @@ var useMessageContext2 = () => {
|
|
329
333
|
parentId: null,
|
330
334
|
branches: [],
|
331
335
|
isLast: false,
|
336
|
+
loadingIndicator: null,
|
332
337
|
isCopied: false,
|
333
338
|
isHovering: false,
|
339
|
+
setLoadingIndicator: (value) => {
|
340
|
+
set({ loadingIndicator: value });
|
341
|
+
},
|
334
342
|
setIsCopied: (value) => {
|
335
343
|
set({ isCopied: value });
|
336
344
|
},
|
@@ -432,10 +440,94 @@ var MessageIf = ({ children, ...query }) => {
|
|
432
440
|
return result ? children : null;
|
433
441
|
};
|
434
442
|
|
435
|
-
// src/
|
443
|
+
// src/utils/context/combined/useCombinedStore.ts
|
444
|
+
var import_react11 = require("react");
|
445
|
+
|
446
|
+
// src/utils/context/combined/createCombinedStore.ts
|
447
|
+
var import_react10 = require("react");
|
448
|
+
var createCombinedStore = (stores) => {
|
449
|
+
const subscribe = (callback) => {
|
450
|
+
const unsubscribes = stores.map((store) => store.subscribe(callback));
|
451
|
+
return () => {
|
452
|
+
for (const unsub of unsubscribes) {
|
453
|
+
unsub();
|
454
|
+
}
|
455
|
+
};
|
456
|
+
};
|
457
|
+
return (selector) => {
|
458
|
+
const getSnapshot = () => selector(...stores.map((store) => store.getState()));
|
459
|
+
return (0, import_react10.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
460
|
+
};
|
461
|
+
};
|
462
|
+
|
463
|
+
// src/utils/context/combined/useCombinedStore.ts
|
464
|
+
var useCombinedStore = (stores, selector) => {
|
465
|
+
const useCombined = (0, import_react11.useMemo)(() => createCombinedStore(stores), stores);
|
466
|
+
return useCombined(selector);
|
467
|
+
};
|
468
|
+
|
469
|
+
// src/utils/context/useContentPartContext.ts
|
470
|
+
var import_react12 = require("react");
|
471
|
+
var ContentPartContext = (0, import_react12.createContext)(null);
|
472
|
+
var useContentPartContext = () => {
|
473
|
+
const context = (0, import_react12.useContext)(ContentPartContext);
|
474
|
+
if (!context)
|
475
|
+
throw new Error(
|
476
|
+
"This component must be used within a ContentPartPrimitive.Provider."
|
477
|
+
);
|
478
|
+
return context;
|
479
|
+
};
|
480
|
+
|
481
|
+
// src/primitives/contentPart/ContentPartLoadingIndicator.tsx
|
482
|
+
var ContentPartLoadingIndicator = () => {
|
483
|
+
const { useMessage } = useMessageContext();
|
484
|
+
const { useContentPart } = useContentPartContext();
|
485
|
+
const loadingIndicator = useCombinedStore(
|
486
|
+
[useMessage, useContentPart],
|
487
|
+
(m, c) => c.isLoading ? m.loadingIndicator : null
|
488
|
+
);
|
489
|
+
return loadingIndicator;
|
490
|
+
};
|
491
|
+
|
492
|
+
// src/primitives/contentPart/ContentPartProvider.tsx
|
493
|
+
var import_react13 = require("react");
|
494
|
+
var import_zustand3 = require("zustand");
|
436
495
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
496
|
+
var useContentPartContext2 = () => {
|
497
|
+
const [context] = (0, import_react13.useState)(() => {
|
498
|
+
const useContentPart = (0, import_zustand3.create)(() => ({
|
499
|
+
part: null,
|
500
|
+
isLoading: false
|
501
|
+
}));
|
502
|
+
return { useContentPart };
|
503
|
+
});
|
504
|
+
return context;
|
505
|
+
};
|
506
|
+
var ContentPartProvider = ({
|
507
|
+
part,
|
508
|
+
isLoading,
|
509
|
+
children
|
510
|
+
}) => {
|
511
|
+
const context = useContentPartContext2();
|
512
|
+
(0, import_react13.useMemo)(() => {
|
513
|
+
context.useContentPart.setState(
|
514
|
+
{
|
515
|
+
part,
|
516
|
+
isLoading
|
517
|
+
},
|
518
|
+
true
|
519
|
+
);
|
520
|
+
}, [context, part, isLoading]);
|
521
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ContentPartContext.Provider, { value: context, children });
|
522
|
+
};
|
523
|
+
|
524
|
+
// src/primitives/message/MessageContent.tsx
|
525
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
437
526
|
var defaultComponents = {
|
438
|
-
Text: ({ part }) => /* @__PURE__ */ (0,
|
527
|
+
Text: ({ part }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
528
|
+
part.text,
|
529
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ContentPartLoadingIndicator, {})
|
530
|
+
] }),
|
439
531
|
Image: () => null,
|
440
532
|
UI: ({ part }) => part.display,
|
441
533
|
tools: {
|
@@ -450,29 +542,61 @@ var MessageContent = ({
|
|
450
542
|
tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {}
|
451
543
|
} = {}
|
452
544
|
}) => {
|
545
|
+
const { useThread } = useAssistantContext();
|
453
546
|
const { useMessage } = useMessageContext();
|
454
547
|
const content = useMessage((s) => s.message.content);
|
455
|
-
|
548
|
+
const isLoading = useCombinedStore(
|
549
|
+
[useThread, useMessage],
|
550
|
+
(t, s) => s.isLast && t.isRunning
|
551
|
+
);
|
552
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: content.map((part, i) => {
|
456
553
|
const key = i;
|
457
|
-
|
554
|
+
const type = part.type;
|
555
|
+
let component = null;
|
556
|
+
switch (type) {
|
458
557
|
case "text":
|
459
|
-
|
558
|
+
component = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { part });
|
559
|
+
break;
|
460
560
|
case "image":
|
461
|
-
|
561
|
+
component = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Image, { part });
|
562
|
+
break;
|
462
563
|
case "ui":
|
463
|
-
|
564
|
+
component = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(UI, { part });
|
565
|
+
break;
|
464
566
|
case "tool-call": {
|
465
567
|
const Tool = by_name[part.name] || Fallback;
|
466
|
-
|
568
|
+
component = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Tool, { part });
|
569
|
+
break;
|
467
570
|
}
|
468
571
|
default:
|
469
|
-
|
572
|
+
throw new Error(`Unknown content part type: ${type}`);
|
470
573
|
}
|
574
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
575
|
+
ContentPartProvider,
|
576
|
+
{
|
577
|
+
part,
|
578
|
+
isLoading: i === content.length - 1 && isLoading,
|
579
|
+
children: component
|
580
|
+
},
|
581
|
+
key
|
582
|
+
);
|
471
583
|
}) });
|
472
584
|
};
|
473
585
|
|
586
|
+
// src/primitives/message/MessageLoading.tsx
|
587
|
+
var import_react_primitive4 = require("@radix-ui/react-primitive");
|
588
|
+
var import_react14 = require("react");
|
589
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
590
|
+
var MessageLoading = (0, import_react14.forwardRef)((props, ref) => {
|
591
|
+
const { useMessage } = useMessageContext();
|
592
|
+
(0, import_react14.useMemo)(() => {
|
593
|
+
useMessage.getState().setLoadingIndicator(/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_primitive4.Primitive.div, { ...props, ref }));
|
594
|
+
}, [useMessage, props, ref]);
|
595
|
+
return null;
|
596
|
+
});
|
597
|
+
|
474
598
|
// src/primitives/thread/ThreadMessages.tsx
|
475
|
-
var
|
599
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
476
600
|
var getComponents = (components) => {
|
477
601
|
return {
|
478
602
|
EditComposer: components.EditComposer ?? components.UserMessage ?? components.Message,
|
@@ -486,19 +610,19 @@ var ThreadMessages = ({ components }) => {
|
|
486
610
|
const messages = thread.messages;
|
487
611
|
const { UserMessage, EditComposer, AssistantMessage } = getComponents(components);
|
488
612
|
if (messages.length === 0) return null;
|
489
|
-
return /* @__PURE__ */ (0,
|
613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: messages.map((message, idx) => {
|
490
614
|
const parentId = messages[idx - 1]?.id ?? null;
|
491
|
-
return /* @__PURE__ */ (0,
|
615
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
492
616
|
MessageProvider,
|
493
617
|
{
|
494
618
|
message,
|
495
619
|
parentId,
|
496
620
|
children: [
|
497
|
-
/* @__PURE__ */ (0,
|
498
|
-
/* @__PURE__ */ (0,
|
499
|
-
/* @__PURE__ */ (0,
|
621
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(MessageIf, { user: true, children: [
|
622
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ComposerIf, { editing: false, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(UserMessage, {}) }),
|
623
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ComposerIf, { editing: true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(EditComposer, {}) })
|
500
624
|
] }),
|
501
|
-
/* @__PURE__ */ (0,
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MessageIf, { assistant: true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(AssistantMessage, {}) })
|
502
626
|
]
|
503
627
|
},
|
504
628
|
parentId ?? "__ROOT__"
|
@@ -508,17 +632,17 @@ var ThreadMessages = ({ components }) => {
|
|
508
632
|
|
509
633
|
// src/primitives/thread/ThreadScrollToBottom.tsx
|
510
634
|
var import_primitive3 = require("@radix-ui/primitive");
|
511
|
-
var
|
512
|
-
var
|
513
|
-
var
|
514
|
-
var ThreadScrollToBottom = (0,
|
635
|
+
var import_react_primitive5 = require("@radix-ui/react-primitive");
|
636
|
+
var import_react15 = require("react");
|
637
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
638
|
+
var ThreadScrollToBottom = (0, import_react15.forwardRef)(({ onClick, ...rest }, ref) => {
|
515
639
|
const { useViewport } = useAssistantContext();
|
516
640
|
const isAtBottom = useViewport((s) => s.isAtBottom);
|
517
641
|
const handleScrollToBottom = () => {
|
518
642
|
useViewport.getState().scrollToBottom();
|
519
643
|
};
|
520
|
-
return /* @__PURE__ */ (0,
|
521
|
-
|
644
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
645
|
+
import_react_primitive5.Primitive.button,
|
522
646
|
{
|
523
647
|
...rest,
|
524
648
|
disabled: isAtBottom,
|
@@ -530,10 +654,10 @@ var ThreadScrollToBottom = (0, import_react10.forwardRef)(({ onClick, ...rest },
|
|
530
654
|
|
531
655
|
// src/primitives/thread/ThreadSuggestion.tsx
|
532
656
|
var import_primitive4 = require("@radix-ui/primitive");
|
533
|
-
var
|
534
|
-
var
|
535
|
-
var
|
536
|
-
var ThreadSuggestion = (0,
|
657
|
+
var import_react_primitive6 = require("@radix-ui/react-primitive");
|
658
|
+
var import_react16 = require("react");
|
659
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
660
|
+
var ThreadSuggestion = (0, import_react16.forwardRef)(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {
|
537
661
|
const { useThread, useComposer } = useAssistantContext();
|
538
662
|
const isDisabled = useThread((t) => t.isRunning);
|
539
663
|
const handleApplySuggestion = () => {
|
@@ -544,8 +668,8 @@ var ThreadSuggestion = (0, import_react11.forwardRef)(({ onClick, prompt, method
|
|
544
668
|
composer.send();
|
545
669
|
}
|
546
670
|
};
|
547
|
-
return /* @__PURE__ */ (0,
|
548
|
-
|
671
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
672
|
+
import_react_primitive6.Primitive.button,
|
549
673
|
{
|
550
674
|
...rest,
|
551
675
|
disabled: isDisabled,
|
@@ -568,14 +692,14 @@ __export(composer_exports, {
|
|
568
692
|
// src/primitives/composer/ComposerRoot.tsx
|
569
693
|
var import_primitive5 = require("@radix-ui/primitive");
|
570
694
|
var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
|
571
|
-
var
|
572
|
-
var
|
573
|
-
var
|
574
|
-
var ComposerRoot = (0,
|
695
|
+
var import_react_primitive7 = require("@radix-ui/react-primitive");
|
696
|
+
var import_react17 = require("react");
|
697
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
698
|
+
var ComposerRoot = (0, import_react17.forwardRef)(
|
575
699
|
({ onSubmit, ...rest }, forwardedRef) => {
|
576
700
|
const { useViewport } = useAssistantContext();
|
577
701
|
const { useComposer } = useComposerContext();
|
578
|
-
const formRef = (0,
|
702
|
+
const formRef = (0, import_react17.useRef)(null);
|
579
703
|
const ref = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, formRef);
|
580
704
|
const handleSubmit = (e) => {
|
581
705
|
const composerState = useComposer.getState();
|
@@ -584,8 +708,8 @@ var ComposerRoot = (0, import_react12.forwardRef)(
|
|
584
708
|
composerState.send();
|
585
709
|
useViewport.getState().scrollToBottom();
|
586
710
|
};
|
587
|
-
return /* @__PURE__ */ (0,
|
588
|
-
|
711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
712
|
+
import_react_primitive7.Primitive.form,
|
589
713
|
{
|
590
714
|
...rest,
|
591
715
|
ref,
|
@@ -599,10 +723,10 @@ var ComposerRoot = (0, import_react12.forwardRef)(
|
|
599
723
|
var import_primitive6 = require("@radix-ui/primitive");
|
600
724
|
var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
|
601
725
|
var import_react_slot = require("@radix-ui/react-slot");
|
602
|
-
var
|
726
|
+
var import_react18 = require("react");
|
603
727
|
var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
|
604
|
-
var
|
605
|
-
var ComposerInput = (0,
|
728
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
729
|
+
var ComposerInput = (0, import_react18.forwardRef)(
|
606
730
|
({ autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
|
607
731
|
const { useThread, useViewport } = useAssistantContext();
|
608
732
|
const { useComposer, type } = useComposerContext();
|
@@ -627,10 +751,10 @@ var ComposerInput = (0, import_react13.forwardRef)(
|
|
627
751
|
}
|
628
752
|
}
|
629
753
|
};
|
630
|
-
const textareaRef = (0,
|
754
|
+
const textareaRef = (0, import_react18.useRef)(null);
|
631
755
|
const ref = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, textareaRef);
|
632
756
|
const autoFocusEnabled = autoFocus && !disabled;
|
633
|
-
const focus = (0,
|
757
|
+
const focus = (0, import_react18.useCallback)(() => {
|
634
758
|
const textarea = textareaRef.current;
|
635
759
|
if (!textarea || !autoFocusEnabled) return;
|
636
760
|
textarea.focus();
|
@@ -639,13 +763,13 @@ var ComposerInput = (0, import_react13.forwardRef)(
|
|
639
763
|
textareaRef.current.value.length
|
640
764
|
);
|
641
765
|
}, [autoFocusEnabled]);
|
642
|
-
(0,
|
766
|
+
(0, import_react18.useEffect)(() => focus(), [focus]);
|
643
767
|
useOnScrollToBottom(() => {
|
644
768
|
if (type === "assistant") {
|
645
769
|
focus();
|
646
770
|
}
|
647
771
|
});
|
648
|
-
return /* @__PURE__ */ (0,
|
772
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
649
773
|
Component,
|
650
774
|
{
|
651
775
|
value,
|
@@ -664,15 +788,15 @@ var ComposerInput = (0, import_react13.forwardRef)(
|
|
664
788
|
);
|
665
789
|
|
666
790
|
// src/primitives/composer/ComposerSend.tsx
|
667
|
-
var
|
668
|
-
var
|
669
|
-
var
|
670
|
-
var ComposerSend = (0,
|
791
|
+
var import_react_primitive8 = require("@radix-ui/react-primitive");
|
792
|
+
var import_react19 = require("react");
|
793
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
794
|
+
var ComposerSend = (0, import_react19.forwardRef)(
|
671
795
|
({ disabled, ...rest }, ref) => {
|
672
796
|
const { useComposer } = useComposerContext();
|
673
797
|
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
674
|
-
return /* @__PURE__ */ (0,
|
675
|
-
|
798
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
799
|
+
import_react_primitive8.Primitive.button,
|
676
800
|
{
|
677
801
|
type: "submit",
|
678
802
|
...rest,
|
@@ -685,16 +809,16 @@ var ComposerSend = (0, import_react14.forwardRef)(
|
|
685
809
|
|
686
810
|
// src/primitives/composer/ComposerCancel.tsx
|
687
811
|
var import_primitive7 = require("@radix-ui/primitive");
|
688
|
-
var
|
689
|
-
var
|
690
|
-
var
|
691
|
-
var ComposerCancel = (0,
|
812
|
+
var import_react_primitive9 = require("@radix-ui/react-primitive");
|
813
|
+
var import_react20 = require("react");
|
814
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
815
|
+
var ComposerCancel = (0, import_react20.forwardRef)(({ onClick, ...rest }, ref) => {
|
692
816
|
const { useComposer } = useComposerContext();
|
693
817
|
const handleCancel = () => {
|
694
818
|
useComposer.getState().cancel();
|
695
819
|
};
|
696
|
-
return /* @__PURE__ */ (0,
|
697
|
-
|
820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
821
|
+
import_react_primitive9.Primitive.button,
|
698
822
|
{
|
699
823
|
type: "button",
|
700
824
|
...rest,
|
@@ -714,32 +838,6 @@ __export(branchPicker_exports, {
|
|
714
838
|
Root: () => BranchPickerRoot
|
715
839
|
});
|
716
840
|
|
717
|
-
// src/utils/context/combined/useCombinedStore.ts
|
718
|
-
var import_react17 = require("react");
|
719
|
-
|
720
|
-
// src/utils/context/combined/createCombinedStore.ts
|
721
|
-
var import_react16 = require("react");
|
722
|
-
var createCombinedStore = (stores) => {
|
723
|
-
const subscribe = (callback) => {
|
724
|
-
const unsubscribes = stores.map((store) => store.subscribe(callback));
|
725
|
-
return () => {
|
726
|
-
for (const unsub of unsubscribes) {
|
727
|
-
unsub();
|
728
|
-
}
|
729
|
-
};
|
730
|
-
};
|
731
|
-
return (selector) => {
|
732
|
-
const getSnapshot = () => selector(...stores.map((store) => store.getState()));
|
733
|
-
return (0, import_react16.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
734
|
-
};
|
735
|
-
};
|
736
|
-
|
737
|
-
// src/utils/context/combined/useCombinedStore.ts
|
738
|
-
var useCombinedStore = (stores, selector) => {
|
739
|
-
const useCombined = (0, import_react17.useMemo)(() => createCombinedStore(stores), stores);
|
740
|
-
return useCombined(selector);
|
741
|
-
};
|
742
|
-
|
743
841
|
// src/actions/useGoToNextBranch.tsx
|
744
842
|
var useGoToNextBranch = () => {
|
745
843
|
const { useThread } = useAssistantContext();
|
@@ -757,15 +855,15 @@ var useGoToNextBranch = () => {
|
|
757
855
|
|
758
856
|
// src/utils/createActionButton.tsx
|
759
857
|
var import_primitive8 = require("@radix-ui/primitive");
|
760
|
-
var
|
761
|
-
var
|
762
|
-
var
|
858
|
+
var import_react_primitive10 = require("@radix-ui/react-primitive");
|
859
|
+
var import_react21 = require("react");
|
860
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
763
861
|
var createActionButton = (useActionButton) => {
|
764
|
-
return (0,
|
862
|
+
return (0, import_react21.forwardRef)(
|
765
863
|
(props, forwardedRef) => {
|
766
864
|
const onClick = useActionButton(props);
|
767
|
-
return /* @__PURE__ */ (0,
|
768
|
-
|
865
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
866
|
+
import_react_primitive10.Primitive.button,
|
769
867
|
{
|
770
868
|
type: "button",
|
771
869
|
disabled: !onClick,
|
@@ -803,27 +901,27 @@ var useGoToPreviousBranch = () => {
|
|
803
901
|
var BranchPickerPrevious = createActionButton(useGoToPreviousBranch);
|
804
902
|
|
805
903
|
// src/primitives/branchPicker/BranchPickerCount.tsx
|
806
|
-
var
|
904
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
807
905
|
var BranchPickerCount = () => {
|
808
906
|
const { useMessage } = useMessageContext();
|
809
907
|
const branchCount = useMessage((s) => s.branches.length);
|
810
|
-
return /* @__PURE__ */ (0,
|
908
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: branchCount });
|
811
909
|
};
|
812
910
|
|
813
911
|
// src/primitives/branchPicker/BranchPickerNumber.tsx
|
814
|
-
var
|
912
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
815
913
|
var BranchPickerNumber = () => {
|
816
914
|
const { useMessage } = useMessageContext();
|
817
915
|
const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));
|
818
|
-
return /* @__PURE__ */ (0,
|
916
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_jsx_runtime18.Fragment, { children: branchIdx + 1 });
|
819
917
|
};
|
820
918
|
|
821
919
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
822
|
-
var
|
823
|
-
var
|
824
|
-
var
|
825
|
-
var BranchPickerRoot = (0,
|
826
|
-
return /* @__PURE__ */ (0,
|
920
|
+
var import_react_primitive11 = require("@radix-ui/react-primitive");
|
921
|
+
var import_react22 = require("react");
|
922
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
923
|
+
var BranchPickerRoot = (0, import_react22.forwardRef)(({ hideWhenSingleBranch, ...rest }, ref) => {
|
924
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(MessageIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_primitive11.Primitive.div, { ...rest, ref }) });
|
827
925
|
});
|
828
926
|
|
829
927
|
// src/primitives/actionBar/index.ts
|
@@ -836,10 +934,10 @@ __export(actionBar_exports, {
|
|
836
934
|
});
|
837
935
|
|
838
936
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
839
|
-
var
|
840
|
-
var
|
841
|
-
var
|
842
|
-
var ActionBarRoot = (0,
|
937
|
+
var import_react_primitive12 = require("@radix-ui/react-primitive");
|
938
|
+
var import_react23 = require("react");
|
939
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
940
|
+
var ActionBarRoot = (0, import_react23.forwardRef)(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {
|
843
941
|
const { useThread } = useAssistantContext();
|
844
942
|
const { useMessage } = useMessageContext();
|
845
943
|
const hideAndfloatStatus = useCombinedStore(
|
@@ -855,8 +953,8 @@ var ActionBarRoot = (0, import_react20.forwardRef)(({ hideWhenRunning, autohide,
|
|
855
953
|
}
|
856
954
|
);
|
857
955
|
if (hideAndfloatStatus === "hidden" /* Hidden */) return null;
|
858
|
-
return /* @__PURE__ */ (0,
|
859
|
-
|
956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
957
|
+
import_react_primitive12.Primitive.div,
|
860
958
|
{
|
861
959
|
"data-floating": hideAndfloatStatus === "floating" /* Floating */,
|
862
960
|
...rest,
|
@@ -924,18 +1022,25 @@ var useBeginMessageEdit = () => {
|
|
924
1022
|
// src/primitives/actionBar/ActionBarEdit.tsx
|
925
1023
|
var ActionBarEdit = createActionButton(useBeginMessageEdit);
|
926
1024
|
|
1025
|
+
// src/primitives/contentPart/index.ts
|
1026
|
+
var contentPart_exports = {};
|
1027
|
+
__export(contentPart_exports, {
|
1028
|
+
LoadingIndicator: () => ContentPartLoadingIndicator,
|
1029
|
+
Provider: () => ContentPartProvider
|
1030
|
+
});
|
1031
|
+
|
927
1032
|
// src/adapters/vercel/VercelAIAssistantProvider.tsx
|
928
|
-
var
|
1033
|
+
var import_react26 = require("react");
|
929
1034
|
|
930
1035
|
// src/adapters/vercel/useDummyAIAssistantContext.tsx
|
931
|
-
var
|
932
|
-
var
|
1036
|
+
var import_react24 = require("react");
|
1037
|
+
var import_zustand5 = require("zustand");
|
933
1038
|
|
934
1039
|
// src/utils/context/stores/ViewportStore.tsx
|
935
|
-
var
|
1040
|
+
var import_zustand4 = require("zustand");
|
936
1041
|
var makeViewportStore = () => {
|
937
1042
|
const scrollToBottomListeners = /* @__PURE__ */ new Set();
|
938
|
-
return (0,
|
1043
|
+
return (0, import_zustand4.create)(() => ({
|
939
1044
|
isAtBottom: true,
|
940
1045
|
scrollToBottom: () => {
|
941
1046
|
for (const listener of scrollToBottomListeners) {
|
@@ -953,7 +1058,7 @@ var makeViewportStore = () => {
|
|
953
1058
|
|
954
1059
|
// src/adapters/vercel/useDummyAIAssistantContext.tsx
|
955
1060
|
var makeDummyThreadStore = () => {
|
956
|
-
return (0,
|
1061
|
+
return (0, import_zustand5.create)(() => ({
|
957
1062
|
messages: [],
|
958
1063
|
isRunning: false,
|
959
1064
|
getBranches: () => {
|
@@ -974,7 +1079,7 @@ var makeDummyThreadStore = () => {
|
|
974
1079
|
}));
|
975
1080
|
};
|
976
1081
|
var useDummyAIAssistantContext = () => {
|
977
|
-
const [context] = (0,
|
1082
|
+
const [context] = (0, import_react24.useState)(() => {
|
978
1083
|
const useThread = makeDummyThreadStore();
|
979
1084
|
const useViewport = makeViewportStore();
|
980
1085
|
const useComposer = makeThreadComposerStore(useThread);
|
@@ -984,7 +1089,7 @@ var useDummyAIAssistantContext = () => {
|
|
984
1089
|
};
|
985
1090
|
|
986
1091
|
// src/adapters/vercel/useVercelAIThreadState.tsx
|
987
|
-
var
|
1092
|
+
var import_react25 = require("react");
|
988
1093
|
|
989
1094
|
// src/adapters/MessageRepository.tsx
|
990
1095
|
var import_non_secure = require("nanoid/non-secure");
|
@@ -1003,7 +1108,41 @@ var MessageRepository = class {
|
|
1003
1108
|
messages = /* @__PURE__ */ new Map();
|
1004
1109
|
// message_id -> item
|
1005
1110
|
head = null;
|
1006
|
-
|
1111
|
+
root = {
|
1112
|
+
children: []
|
1113
|
+
};
|
1114
|
+
getFallbackChild(p) {
|
1115
|
+
const childId = p.children.at(-1);
|
1116
|
+
const child = childId ? this.messages.get(childId) : null;
|
1117
|
+
if (child === void 0)
|
1118
|
+
throw new Error(
|
1119
|
+
"MessageRepository(getFallbackChild): Child message not found. This is likely an internal bug in assistant-ui."
|
1120
|
+
);
|
1121
|
+
return child;
|
1122
|
+
}
|
1123
|
+
performOp(newParent, child, operation) {
|
1124
|
+
const parentOrRoot = child.prev ?? this.root;
|
1125
|
+
const newParentOrRoot = newParent ?? this.root;
|
1126
|
+
if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
|
1127
|
+
if (operation !== "link") {
|
1128
|
+
parentOrRoot.children = parentOrRoot.children.filter(
|
1129
|
+
(m) => m !== child.current.id
|
1130
|
+
);
|
1131
|
+
if (child.prev?.next === child) {
|
1132
|
+
child.prev.next = this.getFallbackChild(child.prev);
|
1133
|
+
}
|
1134
|
+
}
|
1135
|
+
if (operation !== "cut") {
|
1136
|
+
newParentOrRoot.children = [
|
1137
|
+
...newParentOrRoot.children,
|
1138
|
+
child.current.id
|
1139
|
+
];
|
1140
|
+
if (newParent && (findHead(child) === this.head || newParent.next === null)) {
|
1141
|
+
newParent.next = child;
|
1142
|
+
}
|
1143
|
+
child.prev = newParent;
|
1144
|
+
}
|
1145
|
+
}
|
1007
1146
|
getMessages() {
|
1008
1147
|
const messages = new Array(this.head?.level ?? 0);
|
1009
1148
|
for (let current = this.head; current; current = current.prev) {
|
@@ -1012,20 +1151,17 @@ var MessageRepository = class {
|
|
1012
1151
|
return messages;
|
1013
1152
|
}
|
1014
1153
|
addOrUpdateMessage(parentId, message) {
|
1015
|
-
const
|
1016
|
-
if (item) {
|
1017
|
-
if ((item.prev?.current.id ?? null) !== parentId) {
|
1018
|
-
this.deleteMessage(message.id);
|
1019
|
-
} else {
|
1020
|
-
item.current = message;
|
1021
|
-
return;
|
1022
|
-
}
|
1023
|
-
}
|
1154
|
+
const existingItem = this.messages.get(message.id);
|
1024
1155
|
const prev = parentId ? this.messages.get(parentId) : null;
|
1025
1156
|
if (prev === void 0)
|
1026
1157
|
throw new Error(
|
1027
1158
|
"MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
|
1028
1159
|
);
|
1160
|
+
if (existingItem) {
|
1161
|
+
existingItem.current = message;
|
1162
|
+
this.performOp(prev, existingItem, "relink");
|
1163
|
+
return;
|
1164
|
+
}
|
1029
1165
|
const newItem = {
|
1030
1166
|
prev,
|
1031
1167
|
current: message,
|
@@ -1034,80 +1170,56 @@ var MessageRepository = class {
|
|
1034
1170
|
level: prev ? prev.level + 1 : 0
|
1035
1171
|
};
|
1036
1172
|
this.messages.set(message.id, newItem);
|
1037
|
-
if (prev) {
|
1038
|
-
prev.children = [...prev.children, message.id];
|
1039
|
-
prev.next = newItem;
|
1040
|
-
} else {
|
1041
|
-
this.rootChildren = [...this.rootChildren, message.id];
|
1042
|
-
}
|
1043
1173
|
if (this.head === prev) {
|
1044
1174
|
this.head = newItem;
|
1045
1175
|
}
|
1176
|
+
this.performOp(prev, newItem, "link");
|
1046
1177
|
}
|
1047
|
-
|
1048
|
-
const message = this.messages.get(messageId);
|
1049
|
-
if (!message)
|
1050
|
-
throw new Error(
|
1051
|
-
"MessageRepository(deleteMessage): Message not found. This is likely an internal bug in assistant-ui."
|
1052
|
-
);
|
1053
|
-
if (message.children.length > 0) {
|
1054
|
-
for (const child of message.children) {
|
1055
|
-
this.deleteMessage(child);
|
1056
|
-
}
|
1057
|
-
}
|
1058
|
-
this.messages.delete(messageId);
|
1059
|
-
if (message.prev) {
|
1060
|
-
message.prev.children = message.prev.children.filter(
|
1061
|
-
(m) => m !== messageId
|
1062
|
-
);
|
1063
|
-
if (message.prev.next === message) {
|
1064
|
-
const childId = message.prev.children.at(-1);
|
1065
|
-
const child = childId ? this.messages.get(childId) : null;
|
1066
|
-
if (child === void 0)
|
1067
|
-
throw new Error(
|
1068
|
-
"MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
|
1069
|
-
);
|
1070
|
-
message.prev.next = child;
|
1071
|
-
}
|
1072
|
-
} else {
|
1073
|
-
this.rootChildren = this.rootChildren.filter((m) => m !== messageId);
|
1074
|
-
}
|
1075
|
-
if (this.head === message) {
|
1076
|
-
this.head = message.prev ? findHead(message.prev) : null;
|
1077
|
-
}
|
1078
|
-
}
|
1079
|
-
getOptimisticId() {
|
1178
|
+
appendOptimisticMessage(parentId, message) {
|
1080
1179
|
let optimisticId;
|
1081
1180
|
do {
|
1082
1181
|
optimisticId = generateOptimisticId();
|
1083
1182
|
} while (this.messages.has(optimisticId));
|
1084
|
-
return optimisticId;
|
1085
|
-
}
|
1086
|
-
commitOptimisticRun(parentId) {
|
1087
|
-
const optimisticId = this.getOptimisticId();
|
1088
1183
|
this.addOrUpdateMessage(parentId, {
|
1184
|
+
...message,
|
1089
1185
|
id: optimisticId,
|
1090
|
-
role: "assistant",
|
1091
|
-
content: [
|
1092
|
-
{
|
1093
|
-
type: "text",
|
1094
|
-
text: ""
|
1095
|
-
}
|
1096
|
-
],
|
1097
1186
|
createdAt: /* @__PURE__ */ new Date()
|
1098
1187
|
});
|
1099
1188
|
return optimisticId;
|
1100
1189
|
}
|
1190
|
+
deleteMessage(messageId, newParentId) {
|
1191
|
+
const message = this.messages.get(messageId);
|
1192
|
+
const newParent = newParentId ? this.messages.get(newParentId) : null;
|
1193
|
+
if (!message)
|
1194
|
+
throw new Error(
|
1195
|
+
"MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
|
1196
|
+
);
|
1197
|
+
if (newParent === void 0)
|
1198
|
+
throw new Error(
|
1199
|
+
"MessageRepository(deleteMessage): New message not found. This is likely an internal bug in assistant-ui."
|
1200
|
+
);
|
1201
|
+
for (const child of message.children) {
|
1202
|
+
const childMessage = this.messages.get(child);
|
1203
|
+
if (!childMessage)
|
1204
|
+
throw new Error(
|
1205
|
+
"MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
|
1206
|
+
);
|
1207
|
+
this.performOp(newParent, childMessage, "relink");
|
1208
|
+
}
|
1209
|
+
this.messages.delete(messageId);
|
1210
|
+
if (this.head === message) {
|
1211
|
+
this.head = this.getFallbackChild(message.prev ?? this.root);
|
1212
|
+
}
|
1213
|
+
this.performOp(null, message, "cut");
|
1214
|
+
}
|
1101
1215
|
getBranches(messageId) {
|
1102
1216
|
const message = this.messages.get(messageId);
|
1103
1217
|
if (!message)
|
1104
1218
|
throw new Error(
|
1105
1219
|
"MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
|
1106
1220
|
);
|
1107
|
-
|
1108
|
-
|
1109
|
-
}
|
1110
|
-
return this.rootChildren;
|
1221
|
+
const { children } = message.prev ?? this.root;
|
1222
|
+
return children;
|
1111
1223
|
}
|
1112
1224
|
switchToBranch(messageId) {
|
1113
1225
|
const message = this.messages.get(messageId);
|
@@ -1121,20 +1233,20 @@ var MessageRepository = class {
|
|
1121
1233
|
this.head = findHead(message);
|
1122
1234
|
}
|
1123
1235
|
resetHead(messageId) {
|
1124
|
-
if (messageId) {
|
1125
|
-
const message = this.messages.get(messageId);
|
1126
|
-
if (!message)
|
1127
|
-
throw new Error(
|
1128
|
-
"MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
|
1129
|
-
);
|
1130
|
-
this.head = message;
|
1131
|
-
for (let current = message; current; current = current.prev) {
|
1132
|
-
if (current.prev) {
|
1133
|
-
current.prev.next = current;
|
1134
|
-
}
|
1135
|
-
}
|
1136
|
-
} else {
|
1236
|
+
if (messageId === null) {
|
1137
1237
|
this.head = null;
|
1238
|
+
return;
|
1239
|
+
}
|
1240
|
+
const message = this.messages.get(messageId);
|
1241
|
+
if (!message)
|
1242
|
+
throw new Error(
|
1243
|
+
"MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
|
1244
|
+
);
|
1245
|
+
this.head = message;
|
1246
|
+
for (let current = message; current; current = current.prev) {
|
1247
|
+
if (current.prev) {
|
1248
|
+
current.prev.next = current;
|
1249
|
+
}
|
1138
1250
|
}
|
1139
1251
|
}
|
1140
1252
|
};
|
@@ -1198,12 +1310,12 @@ var getIsRunning = (vercel) => {
|
|
1198
1310
|
return vercel.status === "in_progress";
|
1199
1311
|
};
|
1200
1312
|
var useVercelAIThreadState = (vercel) => {
|
1201
|
-
const [data] = (0,
|
1202
|
-
const vercelRef = (0,
|
1313
|
+
const [data] = (0, import_react25.useState)(() => new MessageRepository());
|
1314
|
+
const vercelRef = (0, import_react25.useRef)(vercel);
|
1203
1315
|
vercelRef.current = vercel;
|
1204
1316
|
const isRunning = getIsRunning(vercelRef.current);
|
1205
|
-
const assistantOptimisticIdRef = (0,
|
1206
|
-
const messages = (0,
|
1317
|
+
const assistantOptimisticIdRef = (0, import_react25.useRef)(null);
|
1318
|
+
const messages = (0, import_react25.useMemo)(() => {
|
1207
1319
|
const vm = converter.convertMessages(vercel.messages);
|
1208
1320
|
for (let i = 0; i < vm.length; i++) {
|
1209
1321
|
const message = vm[i];
|
@@ -1211,24 +1323,28 @@ var useVercelAIThreadState = (vercel) => {
|
|
1211
1323
|
data.addOrUpdateMessage(parent?.id ?? null, message);
|
1212
1324
|
}
|
1213
1325
|
if (assistantOptimisticIdRef.current) {
|
1214
|
-
data.deleteMessage(assistantOptimisticIdRef.current);
|
1326
|
+
data.deleteMessage(assistantOptimisticIdRef.current, null);
|
1215
1327
|
assistantOptimisticIdRef.current = null;
|
1216
1328
|
}
|
1217
1329
|
if (hasUpcomingMessage(isRunning, vm)) {
|
1218
|
-
assistantOptimisticIdRef.current = data.
|
1219
|
-
vm.at(-1)?.id ?? null
|
1330
|
+
assistantOptimisticIdRef.current = data.appendOptimisticMessage(
|
1331
|
+
vm.at(-1)?.id ?? null,
|
1332
|
+
{
|
1333
|
+
role: "assistant",
|
1334
|
+
content: [{ type: "text", text: "" }]
|
1335
|
+
}
|
1220
1336
|
);
|
1221
1337
|
}
|
1222
1338
|
data.resetHead(assistantOptimisticIdRef.current ?? vm.at(-1)?.id ?? null);
|
1223
1339
|
return data.getMessages();
|
1224
1340
|
}, [data, isRunning, vercel.messages]);
|
1225
|
-
const getBranches2 = (0,
|
1341
|
+
const getBranches2 = (0, import_react25.useCallback)(
|
1226
1342
|
(messageId) => {
|
1227
1343
|
return data.getBranches(messageId);
|
1228
1344
|
},
|
1229
1345
|
[data]
|
1230
1346
|
);
|
1231
|
-
const switchToBranch2 = (0,
|
1347
|
+
const switchToBranch2 = (0, import_react25.useCallback)(
|
1232
1348
|
(messageId) => {
|
1233
1349
|
data.switchToBranch(messageId);
|
1234
1350
|
vercelRef.current.setMessages(
|
@@ -1237,7 +1353,7 @@ var useVercelAIThreadState = (vercel) => {
|
|
1237
1353
|
},
|
1238
1354
|
[data]
|
1239
1355
|
);
|
1240
|
-
const startRun = (0,
|
1356
|
+
const startRun = (0, import_react25.useCallback)(async (parentId) => {
|
1241
1357
|
const reloadMaybe = "reload" in vercelRef.current ? vercelRef.current.reload : void 0;
|
1242
1358
|
if (!reloadMaybe)
|
1243
1359
|
throw new Error(
|
@@ -1250,7 +1366,7 @@ var useVercelAIThreadState = (vercel) => {
|
|
1250
1366
|
vercelRef.current.setMessages(newMessages);
|
1251
1367
|
await reloadMaybe();
|
1252
1368
|
}, []);
|
1253
|
-
const append = (0,
|
1369
|
+
const append = (0, import_react25.useCallback)(async (message) => {
|
1254
1370
|
if (message.content.length !== 1 || message.content[0]?.type !== "text")
|
1255
1371
|
throw new Error("Only text content is supported by Vercel AI SDK.");
|
1256
1372
|
const newMessages = sliceMessagesUntil(
|
@@ -1263,14 +1379,14 @@ var useVercelAIThreadState = (vercel) => {
|
|
1263
1379
|
content: message.content[0].text
|
1264
1380
|
});
|
1265
1381
|
}, []);
|
1266
|
-
const cancelRun2 = (0,
|
1382
|
+
const cancelRun2 = (0, import_react25.useCallback)(() => {
|
1267
1383
|
const lastMessage = vercelRef.current.messages.at(-1);
|
1268
1384
|
vercelRef.current.stop();
|
1269
1385
|
if (lastMessage?.role === "user") {
|
1270
1386
|
vercelRef.current.setInput(lastMessage.content);
|
1271
1387
|
}
|
1272
1388
|
}, []);
|
1273
|
-
return (0,
|
1389
|
+
return (0, import_react25.useMemo)(
|
1274
1390
|
() => ({
|
1275
1391
|
isRunning,
|
1276
1392
|
messages,
|
@@ -1293,7 +1409,7 @@ var useVercelAIThreadState = (vercel) => {
|
|
1293
1409
|
};
|
1294
1410
|
|
1295
1411
|
// src/adapters/vercel/VercelAIAssistantProvider.tsx
|
1296
|
-
var
|
1412
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
1297
1413
|
var VercelAIAssistantProvider = ({
|
1298
1414
|
children,
|
1299
1415
|
...rest
|
@@ -1301,21 +1417,21 @@ var VercelAIAssistantProvider = ({
|
|
1301
1417
|
const context = useDummyAIAssistantContext();
|
1302
1418
|
const vercel = "chat" in rest ? rest.chat : rest.assistant;
|
1303
1419
|
const threadState = useVercelAIThreadState(vercel);
|
1304
|
-
(0,
|
1420
|
+
(0, import_react26.useMemo)(() => {
|
1305
1421
|
context.useThread.setState(threadState, true);
|
1306
1422
|
}, [context, threadState]);
|
1307
|
-
(0,
|
1423
|
+
(0, import_react26.useMemo)(() => {
|
1308
1424
|
context.useComposer.setState({
|
1309
1425
|
value: vercel.input,
|
1310
1426
|
setValue: vercel.setInput
|
1311
1427
|
});
|
1312
1428
|
}, [context, vercel.input, vercel.setInput]);
|
1313
|
-
return /* @__PURE__ */ (0,
|
1429
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(AssistantContext.Provider, { value: context, children });
|
1314
1430
|
};
|
1315
1431
|
|
1316
1432
|
// src/adapters/vercel/VercelRSCAssistantProvider.tsx
|
1317
|
-
var
|
1318
|
-
var
|
1433
|
+
var import_react27 = require("react");
|
1434
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
1319
1435
|
var vercelToThreadMessage2 = (message) => {
|
1320
1436
|
return {
|
1321
1437
|
id: message.id,
|
@@ -1349,21 +1465,21 @@ var VercelRSCAssistantProvider = ({
|
|
1349
1465
|
reload
|
1350
1466
|
}) => {
|
1351
1467
|
const context = useDummyAIAssistantContext();
|
1352
|
-
const [isRunning, setIsRunning] = (0,
|
1353
|
-
const withRunning = (0,
|
1468
|
+
const [isRunning, setIsRunning] = (0, import_react27.useState)(false);
|
1469
|
+
const withRunning = (0, import_react27.useCallback)((callback) => {
|
1354
1470
|
setIsRunning(true);
|
1355
1471
|
return callback.finally(() => setIsRunning(false));
|
1356
1472
|
}, []);
|
1357
|
-
const converter2 = (0,
|
1473
|
+
const converter2 = (0, import_react27.useMemo)(() => {
|
1358
1474
|
const rscConverter = convertMessage ?? ((m) => m);
|
1359
1475
|
return new ThreadMessageConverter((m) => {
|
1360
1476
|
return vercelToThreadMessage2(rscConverter(m));
|
1361
1477
|
});
|
1362
1478
|
}, [convertMessage]);
|
1363
|
-
const messages = (0,
|
1479
|
+
const messages = (0, import_react27.useMemo)(() => {
|
1364
1480
|
return converter2.convertMessages(vercelMessages);
|
1365
1481
|
}, [converter2, vercelMessages]);
|
1366
|
-
const append = (0,
|
1482
|
+
const append = (0, import_react27.useCallback)(
|
1367
1483
|
async (message) => {
|
1368
1484
|
if (message.parentId !== (context.useThread.getState().messages.at(-1)?.id ?? null)) {
|
1369
1485
|
if (!edit)
|
@@ -1377,7 +1493,7 @@ var VercelRSCAssistantProvider = ({
|
|
1377
1493
|
},
|
1378
1494
|
[context, withRunning, appendCallback, edit]
|
1379
1495
|
);
|
1380
|
-
const startRun = (0,
|
1496
|
+
const startRun = (0, import_react27.useCallback)(
|
1381
1497
|
async (parentId) => {
|
1382
1498
|
if (!reload)
|
1383
1499
|
throw new Error(
|
@@ -1387,7 +1503,7 @@ var VercelRSCAssistantProvider = ({
|
|
1387
1503
|
},
|
1388
1504
|
[withRunning, reload]
|
1389
1505
|
);
|
1390
|
-
(0,
|
1506
|
+
(0, import_react27.useMemo)(() => {
|
1391
1507
|
context.useThread.setState(
|
1392
1508
|
{
|
1393
1509
|
messages,
|
@@ -1401,13 +1517,14 @@ var VercelRSCAssistantProvider = ({
|
|
1401
1517
|
true
|
1402
1518
|
);
|
1403
1519
|
}, [context, messages, isRunning, append, startRun]);
|
1404
|
-
return /* @__PURE__ */ (0,
|
1520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(AssistantContext.Provider, { value: context, children });
|
1405
1521
|
};
|
1406
1522
|
// Annotate the CommonJS export names for ESM import in node:
|
1407
1523
|
0 && (module.exports = {
|
1408
1524
|
ActionBarPrimitive,
|
1409
1525
|
BranchPickerPrimitive,
|
1410
1526
|
ComposerPrimitive,
|
1527
|
+
ContentPartPrimitive,
|
1411
1528
|
MessagePrimitive,
|
1412
1529
|
ThreadPrimitive,
|
1413
1530
|
VercelAIAssistantProvider,
|