@copilotkit/react-ui 1.9.3 → 1.10.0-next.1
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/CHANGELOG.md +38 -0
- package/dist/{chunk-GVKA7RQQ.mjs → chunk-7CAK2CNK.mjs} +2 -2
- package/dist/{chunk-KN2GCKBE.mjs → chunk-7RNOT3GM.mjs} +9 -9
- package/dist/{chunk-KENCH7RN.mjs → chunk-B5IFB5YJ.mjs} +1 -1
- package/dist/chunk-B5IFB5YJ.mjs.map +1 -0
- package/dist/chunk-DBKRAOH7.mjs +34 -0
- package/dist/chunk-DBKRAOH7.mjs.map +1 -0
- package/dist/{chunk-4HUXYD3B.mjs → chunk-DTRPPNSA.mjs} +2 -2
- package/dist/{chunk-YTXEWDNC.mjs → chunk-E6MQUIZW.mjs} +15 -4
- package/dist/chunk-E6MQUIZW.mjs.map +1 -0
- package/dist/{chunk-Z4XPPVZT.mjs → chunk-EYRKZDP5.mjs} +1 -1
- package/dist/chunk-EYRKZDP5.mjs.map +1 -0
- package/dist/{chunk-SGFUVPDB.mjs → chunk-FOSKS7AI.mjs} +4 -4
- package/dist/{chunk-L3GZ7TXC.mjs → chunk-GCKKSSBU.mjs} +21 -24
- package/dist/chunk-GCKKSSBU.mjs.map +1 -0
- package/dist/{chunk-S5MBUNGN.mjs → chunk-O72ZB5V3.mjs} +4 -4
- package/dist/chunk-O72ZB5V3.mjs.map +1 -0
- package/dist/{chunk-QGSPTXOV.mjs → chunk-O7KTFUAN.mjs} +2 -2
- package/dist/chunk-O7KTFUAN.mjs.map +1 -0
- package/dist/{chunk-HKTWKCPS.mjs → chunk-O7PYQO73.mjs} +127 -92
- package/dist/chunk-O7PYQO73.mjs.map +1 -0
- package/dist/{chunk-32MUWKL3.mjs → chunk-OQM7D3Z3.mjs} +22 -18
- package/dist/chunk-OQM7D3Z3.mjs.map +1 -0
- package/dist/chunk-Q2467VHZ.mjs +30 -0
- package/dist/chunk-Q2467VHZ.mjs.map +1 -0
- package/dist/{chunk-ALIBUJML.mjs → chunk-QELAC6XJ.mjs} +2 -2
- package/dist/chunk-QELAC6XJ.mjs.map +1 -0
- package/dist/{chunk-H3EM63WS.mjs → chunk-TCIZDWPC.mjs} +2 -2
- package/dist/chunk-TCIZDWPC.mjs.map +1 -0
- package/dist/chunk-VVL6JFCJ.mjs +16 -0
- package/dist/chunk-VVL6JFCJ.mjs.map +1 -0
- package/dist/chunk-WHDNKXMP.mjs +135 -0
- package/dist/chunk-WHDNKXMP.mjs.map +1 -0
- package/dist/components/chat/Button.d.ts +1 -1
- package/dist/components/chat/Chat.d.ts +119 -28
- package/dist/components/chat/Chat.js +298 -658
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +12 -15
- package/dist/components/chat/CodeBlock.js.map +1 -1
- package/dist/components/chat/CodeBlock.mjs +1 -1
- package/dist/components/chat/Header.d.ts +1 -1
- package/dist/components/chat/Header.mjs +4 -4
- package/dist/components/chat/Input.d.ts +1 -1
- package/dist/components/chat/Input.js +3 -3
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +2 -2
- package/dist/components/chat/Markdown.js +13 -2
- package/dist/components/chat/Markdown.js.map +1 -1
- package/dist/components/chat/Markdown.mjs +2 -2
- package/dist/components/chat/Messages.d.ts +3 -3
- package/dist/components/chat/Messages.js +40 -116
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +1 -1
- package/dist/components/chat/Modal.d.ts +7 -2
- package/dist/components/chat/Modal.js +308 -668
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +17 -20
- package/dist/components/chat/Popup.d.ts +7 -2
- package/dist/components/chat/Popup.js +310 -670
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +18 -21
- package/dist/components/chat/Sidebar.d.ts +7 -2
- package/dist/components/chat/Sidebar.js +312 -672
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +18 -21
- package/dist/components/chat/Suggestion.d.ts +2 -9
- package/dist/components/chat/Suggestion.js +6 -96
- package/dist/components/chat/Suggestion.js.map +1 -1
- package/dist/components/chat/Suggestion.mjs +3 -5
- package/dist/components/chat/Suggestions.d.ts +1 -1
- package/dist/components/chat/Suggestions.js +4 -3
- package/dist/components/chat/Suggestions.js.map +1 -1
- package/dist/components/chat/Suggestions.mjs +2 -2
- package/dist/components/chat/Window.d.ts +1 -1
- package/dist/components/chat/index.d.ts +8 -3
- package/dist/components/chat/index.js +316 -676
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +22 -25
- package/dist/components/chat/messages/AssistantMessage.d.ts +1 -1
- package/dist/components/chat/messages/AssistantMessage.js +32 -24
- package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
- package/dist/components/chat/messages/AssistantMessage.mjs +3 -3
- package/dist/components/chat/messages/ImageRenderer.d.ts +12 -0
- package/dist/components/chat/messages/ImageRenderer.js +58 -0
- package/dist/components/chat/messages/ImageRenderer.js.map +1 -0
- package/dist/components/chat/messages/ImageRenderer.mjs +8 -0
- package/dist/components/chat/messages/RenderMessage.d.ts +9 -0
- package/dist/components/chat/messages/{RenderTextMessage.js → RenderMessage.js} +92 -47
- package/dist/components/chat/messages/RenderMessage.js.map +1 -0
- package/dist/components/chat/messages/RenderMessage.mjs +16 -0
- package/dist/components/chat/messages/UserMessage.d.ts +1 -1
- package/dist/components/chat/messages/UserMessage.js +7 -1
- package/dist/components/chat/messages/UserMessage.js.map +1 -1
- package/dist/components/chat/messages/UserMessage.mjs +1 -1
- package/dist/components/chat/props.d.ts +32 -27
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/dev-console/console.mjs +3 -3
- package/dist/components/dev-console/index.mjs +4 -4
- package/dist/components/index.d.ts +8 -3
- package/dist/components/index.js +316 -676
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +23 -26
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +1 -1
- package/dist/hooks/use-copilot-chat-suggestions.d.ts +1 -1
- package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -1
- package/dist/hooks/use-copilot-chat-suggestions.mjs +1 -1
- package/dist/hooks/use-push-to-talk.d.ts +1 -1
- package/dist/hooks/use-push-to-talk.js +3 -3
- package/dist/hooks/use-push-to-talk.js.map +1 -1
- package/dist/hooks/use-push-to-talk.mjs +1 -1
- package/dist/index.css +59 -3
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.js +322 -682
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -27
- package/dist/types/css.d.ts +3 -0
- package/dist/types/css.js.map +1 -1
- package/package.json +4 -4
- package/src/components/chat/Chat.tsx +194 -106
- package/src/components/chat/CodeBlock.tsx +1 -1
- package/src/components/chat/Markdown.tsx +12 -2
- package/src/components/chat/Messages.tsx +43 -122
- package/src/components/chat/Popup.tsx +1 -1
- package/src/components/chat/Sidebar.tsx +1 -1
- package/src/components/chat/Suggestion.tsx +5 -108
- package/src/components/chat/Suggestions.tsx +0 -1
- package/src/components/chat/index.tsx +1 -1
- package/src/components/chat/messages/AssistantMessage.tsx +15 -23
- package/src/components/chat/messages/ImageRenderer.tsx +37 -0
- package/src/components/chat/messages/{RenderTextMessage.tsx → RenderMessage.tsx} +10 -9
- package/src/components/chat/messages/UserMessage.tsx +16 -5
- package/src/components/chat/props.ts +36 -28
- package/src/css/colors.css +10 -0
- package/src/css/markdown.css +8 -0
- package/src/css/messages.css +54 -5
- package/src/css/suggestions.css +1 -1
- package/src/hooks/use-copilot-chat-suggestions.tsx +1 -1
- package/src/hooks/use-push-to-talk.tsx +6 -5
- package/src/styles.css +1 -1
- package/src/types/css.ts +3 -0
- package/dist/chunk-2II3Q27P.mjs +0 -112
- package/dist/chunk-2II3Q27P.mjs.map +0 -1
- package/dist/chunk-32MUWKL3.mjs.map +0 -1
- package/dist/chunk-53CVDVS5.mjs +0 -127
- package/dist/chunk-53CVDVS5.mjs.map +0 -1
- package/dist/chunk-ALIBUJML.mjs.map +0 -1
- package/dist/chunk-B3D7U7TJ.mjs +0 -211
- package/dist/chunk-B3D7U7TJ.mjs.map +0 -1
- package/dist/chunk-C7OB63U5.mjs +0 -36
- package/dist/chunk-C7OB63U5.mjs.map +0 -1
- package/dist/chunk-H3EM63WS.mjs.map +0 -1
- package/dist/chunk-HKTWKCPS.mjs.map +0 -1
- package/dist/chunk-HWMFMBJC.mjs +0 -10
- package/dist/chunk-HWMFMBJC.mjs.map +0 -1
- package/dist/chunk-IMBPSLL4.mjs +0 -104
- package/dist/chunk-IMBPSLL4.mjs.map +0 -1
- package/dist/chunk-KENCH7RN.mjs.map +0 -1
- package/dist/chunk-L3GZ7TXC.mjs.map +0 -1
- package/dist/chunk-QGSPTXOV.mjs.map +0 -1
- package/dist/chunk-S5MBUNGN.mjs.map +0 -1
- package/dist/chunk-ULDQXCED.mjs +0 -78
- package/dist/chunk-ULDQXCED.mjs.map +0 -1
- package/dist/chunk-YTXEWDNC.mjs.map +0 -1
- package/dist/chunk-Z4XPPVZT.mjs.map +0 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderActionExecutionMessage.js +0 -869
- package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +0 -14
- package/dist/components/chat/messages/RenderAgentStateMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderAgentStateMessage.js +0 -854
- package/dist/components/chat/messages/RenderAgentStateMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderAgentStateMessage.mjs +0 -14
- package/dist/components/chat/messages/RenderImageMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderImageMessage.js +0 -823
- package/dist/components/chat/messages/RenderImageMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderImageMessage.mjs +0 -15
- package/dist/components/chat/messages/RenderImageMessage.mjs.map +0 -1
- package/dist/components/chat/messages/RenderResultMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderResultMessage.js +0 -778
- package/dist/components/chat/messages/RenderResultMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderResultMessage.mjs +0 -14
- package/dist/components/chat/messages/RenderResultMessage.mjs.map +0 -1
- package/dist/components/chat/messages/RenderTextMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderTextMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderTextMessage.mjs +0 -15
- package/dist/components/chat/messages/RenderTextMessage.mjs.map +0 -1
- package/src/components/chat/messages/RenderActionExecutionMessage.tsx +0 -127
- package/src/components/chat/messages/RenderAgentStateMessage.tsx +0 -116
- package/src/components/chat/messages/RenderImageMessage.tsx +0 -64
- package/src/components/chat/messages/RenderResultMessage.tsx +0 -26
- /package/dist/{chunk-GVKA7RQQ.mjs.map → chunk-7CAK2CNK.mjs.map} +0 -0
- /package/dist/{chunk-KN2GCKBE.mjs.map → chunk-7RNOT3GM.mjs.map} +0 -0
- /package/dist/{chunk-4HUXYD3B.mjs.map → chunk-DTRPPNSA.mjs.map} +0 -0
- /package/dist/{chunk-SGFUVPDB.mjs.map → chunk-FOSKS7AI.mjs.map} +0 -0
- /package/dist/components/chat/messages/{RenderActionExecutionMessage.mjs.map → ImageRenderer.mjs.map} +0 -0
- /package/dist/components/chat/messages/{RenderAgentStateMessage.mjs.map → RenderMessage.mjs.map} +0 -0
|
@@ -396,18 +396,12 @@ var ChatContextProvider = ({
|
|
|
396
396
|
|
|
397
397
|
// src/components/chat/Messages.tsx
|
|
398
398
|
var import_react2 = require("react");
|
|
399
|
-
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
400
399
|
var import_react_core = require("@copilotkit/react-core");
|
|
401
400
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
402
401
|
var Messages = ({
|
|
403
|
-
messages,
|
|
404
402
|
inProgress,
|
|
405
403
|
children,
|
|
406
|
-
|
|
407
|
-
RenderActionExecutionMessage: RenderActionExecutionMessage2,
|
|
408
|
-
RenderAgentStateMessage: RenderAgentStateMessage2,
|
|
409
|
-
RenderResultMessage: RenderResultMessage2,
|
|
410
|
-
RenderImageMessage: RenderImageMessage2,
|
|
404
|
+
RenderMessage: RenderMessage2,
|
|
411
405
|
AssistantMessage: AssistantMessage2,
|
|
412
406
|
UserMessage: UserMessage2,
|
|
413
407
|
onRegenerate,
|
|
@@ -416,106 +410,32 @@ var Messages = ({
|
|
|
416
410
|
onThumbsDown,
|
|
417
411
|
markdownTagRenderers
|
|
418
412
|
}) => {
|
|
419
|
-
const
|
|
420
|
-
const
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
);
|
|
424
|
-
messages = [...initialMessages, ...messages];
|
|
425
|
-
const actionResults = {};
|
|
426
|
-
for (let i = 0; i < messages.length; i++) {
|
|
427
|
-
if (messages[i].isActionExecutionMessage()) {
|
|
428
|
-
const id = messages[i].id;
|
|
429
|
-
const resultMessage = messages.find(
|
|
430
|
-
(message) => message.isResultMessage() && message.actionExecutionId === id
|
|
431
|
-
);
|
|
432
|
-
if (resultMessage) {
|
|
433
|
-
actionResults[id] = import_runtime_client_gql.ResultMessage.decodeResult(resultMessage.result || "");
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
}
|
|
413
|
+
const { labels } = useChatContext();
|
|
414
|
+
const { visibleMessages, interrupt } = (0, import_react_core.useCopilotChat)();
|
|
415
|
+
const initialMessages = (0, import_react2.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
|
|
416
|
+
const messages = [...initialMessages, ...visibleMessages];
|
|
437
417
|
const { messagesContainerRef, messagesEndRef } = useScrollToBottom(messages);
|
|
438
|
-
const interrupt = (0, import_react_core.useLangGraphInterruptRender)();
|
|
439
418
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
|
|
440
419
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
|
|
441
420
|
messages.map((message, index) => {
|
|
442
421
|
const isCurrentMessage = index === messages.length - 1;
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
);
|
|
461
|
-
} else if (message.isActionExecutionMessage()) {
|
|
462
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
463
|
-
RenderActionExecutionMessage2,
|
|
464
|
-
{
|
|
465
|
-
message,
|
|
466
|
-
inProgress,
|
|
467
|
-
index,
|
|
468
|
-
isCurrentMessage,
|
|
469
|
-
actionResult: actionResults[message.id],
|
|
470
|
-
AssistantMessage: AssistantMessage2,
|
|
471
|
-
UserMessage: UserMessage2
|
|
472
|
-
},
|
|
473
|
-
index
|
|
474
|
-
);
|
|
475
|
-
} else if (message.isAgentStateMessage()) {
|
|
476
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
477
|
-
RenderAgentStateMessage2,
|
|
478
|
-
{
|
|
479
|
-
message,
|
|
480
|
-
inProgress,
|
|
481
|
-
index,
|
|
482
|
-
isCurrentMessage,
|
|
483
|
-
AssistantMessage: AssistantMessage2,
|
|
484
|
-
UserMessage: UserMessage2
|
|
485
|
-
},
|
|
486
|
-
index
|
|
487
|
-
);
|
|
488
|
-
} else if (message.isResultMessage()) {
|
|
489
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
490
|
-
RenderResultMessage2,
|
|
491
|
-
{
|
|
492
|
-
message,
|
|
493
|
-
inProgress,
|
|
494
|
-
index,
|
|
495
|
-
isCurrentMessage,
|
|
496
|
-
AssistantMessage: AssistantMessage2,
|
|
497
|
-
UserMessage: UserMessage2
|
|
498
|
-
},
|
|
499
|
-
index
|
|
500
|
-
);
|
|
501
|
-
} else if (message.isImageMessage && message.isImageMessage()) {
|
|
502
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
503
|
-
RenderImageMessage2,
|
|
504
|
-
{
|
|
505
|
-
message,
|
|
506
|
-
inProgress,
|
|
507
|
-
index,
|
|
508
|
-
isCurrentMessage,
|
|
509
|
-
AssistantMessage: AssistantMessage2,
|
|
510
|
-
UserMessage: UserMessage2,
|
|
511
|
-
onRegenerate,
|
|
512
|
-
onCopy,
|
|
513
|
-
onThumbsUp,
|
|
514
|
-
onThumbsDown
|
|
515
|
-
},
|
|
516
|
-
index
|
|
517
|
-
);
|
|
518
|
-
}
|
|
422
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
423
|
+
RenderMessage2,
|
|
424
|
+
{
|
|
425
|
+
message,
|
|
426
|
+
inProgress,
|
|
427
|
+
index,
|
|
428
|
+
isCurrentMessage,
|
|
429
|
+
AssistantMessage: AssistantMessage2,
|
|
430
|
+
UserMessage: UserMessage2,
|
|
431
|
+
onRegenerate,
|
|
432
|
+
onCopy,
|
|
433
|
+
onThumbsUp,
|
|
434
|
+
onThumbsDown,
|
|
435
|
+
markdownTagRenderers
|
|
436
|
+
},
|
|
437
|
+
index
|
|
438
|
+
);
|
|
519
439
|
}),
|
|
520
440
|
interrupt
|
|
521
441
|
] }),
|
|
@@ -523,20 +443,24 @@ var Messages = ({
|
|
|
523
443
|
] });
|
|
524
444
|
};
|
|
525
445
|
function makeInitialMessages(initial) {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
446
|
+
if (!initial)
|
|
447
|
+
return [];
|
|
448
|
+
if (Array.isArray(initial)) {
|
|
449
|
+
return initial.map((message) => {
|
|
450
|
+
return {
|
|
451
|
+
id: message,
|
|
452
|
+
role: "assistant",
|
|
453
|
+
content: message
|
|
454
|
+
};
|
|
455
|
+
});
|
|
533
456
|
}
|
|
534
|
-
return
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
457
|
+
return [
|
|
458
|
+
{
|
|
459
|
+
id: initial,
|
|
460
|
+
role: "system",
|
|
461
|
+
content: initial
|
|
462
|
+
}
|
|
463
|
+
];
|
|
540
464
|
}
|
|
541
465
|
function useScrollToBottom(messages) {
|
|
542
466
|
const messagesEndRef = (0, import_react2.useRef)(null);
|
|
@@ -592,7 +516,7 @@ function useScrollToBottom(messages) {
|
|
|
592
516
|
(0, import_react2.useEffect)(() => {
|
|
593
517
|
isUserScrollUpRef.current = false;
|
|
594
518
|
scrollToBottom();
|
|
595
|
-
}, [messages.filter((m) => m.
|
|
519
|
+
}, [messages.filter((m) => m.role === "user").length]);
|
|
596
520
|
return { messagesEndRef, messagesContainerRef };
|
|
597
521
|
}
|
|
598
522
|
|
|
@@ -661,6 +585,7 @@ var Textarea_default = AutoResizingTextarea;
|
|
|
661
585
|
|
|
662
586
|
// src/hooks/use-push-to-talk.tsx
|
|
663
587
|
var import_react_core2 = require("@copilotkit/react-core");
|
|
588
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
664
589
|
var import_react4 = require("react");
|
|
665
590
|
var startRecording = (mediaStreamRef, mediaRecorderRef, audioContextRef, recordedChunks, onStop) => __async(void 0, null, function* () {
|
|
666
591
|
if (!mediaStreamRef.current || !audioContextRef.current) {
|
|
@@ -752,9 +677,8 @@ var usePushToTalk = ({
|
|
|
752
677
|
const lastMessageIndex = context.messages.findIndex(
|
|
753
678
|
(message) => message.id === startReadingFromMessageId
|
|
754
679
|
);
|
|
755
|
-
const
|
|
756
|
-
|
|
757
|
-
);
|
|
680
|
+
const aguiMessages = (0, import_runtime_client_gql.gqlToAGUI)(context.messages);
|
|
681
|
+
const messagesAfterLast = aguiMessages.slice(lastMessageIndex + 1).filter((message) => message.role === "assistant");
|
|
758
682
|
const text = messagesAfterLast.map((message) => message.content).join("\n");
|
|
759
683
|
playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
|
|
760
684
|
setStartReadingFromMessageId(null);
|
|
@@ -899,7 +823,13 @@ var Input = ({
|
|
|
899
823
|
// src/components/chat/messages/UserMessage.tsx
|
|
900
824
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
901
825
|
var UserMessage = (props) => {
|
|
902
|
-
|
|
826
|
+
const { message, ImageRenderer: ImageRenderer2 } = props;
|
|
827
|
+
const isImageMessage = message && "image" in message && message.image;
|
|
828
|
+
if (isImageMessage) {
|
|
829
|
+
const imageMessage = message;
|
|
830
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
|
|
831
|
+
}
|
|
832
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
|
|
903
833
|
};
|
|
904
834
|
|
|
905
835
|
// src/components/chat/Markdown.tsx
|
|
@@ -1333,8 +1263,19 @@ var defaultComponents = {
|
|
|
1333
1263
|
children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
|
|
1334
1264
|
}
|
|
1335
1265
|
const match = /language-(\w+)/.exec(className || "");
|
|
1336
|
-
|
|
1337
|
-
|
|
1266
|
+
const hasLanguage = match && match[1];
|
|
1267
|
+
const content = String(children);
|
|
1268
|
+
const hasNewlines = content.includes("\n");
|
|
1269
|
+
const isInline = !hasLanguage && !hasNewlines;
|
|
1270
|
+
if (isInline) {
|
|
1271
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1272
|
+
"code",
|
|
1273
|
+
__spreadProps(__spreadValues({
|
|
1274
|
+
className: `copilotKitMarkdownElement copilotKitInlineCode ${className || ""}`
|
|
1275
|
+
}, props), {
|
|
1276
|
+
children
|
|
1277
|
+
})
|
|
1278
|
+
);
|
|
1338
1279
|
}
|
|
1339
1280
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1340
1281
|
CodeBlock,
|
|
@@ -1410,55 +1351,51 @@ var Markdown = ({ content, components }) => {
|
|
|
1410
1351
|
var import_react8 = require("react");
|
|
1411
1352
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1412
1353
|
var AssistantMessage = (props) => {
|
|
1354
|
+
var _a;
|
|
1413
1355
|
const { icons, labels } = useChatContext();
|
|
1414
1356
|
const {
|
|
1415
1357
|
message,
|
|
1416
1358
|
isLoading,
|
|
1417
|
-
subComponent,
|
|
1418
1359
|
onRegenerate,
|
|
1419
1360
|
onCopy,
|
|
1420
1361
|
onThumbsUp,
|
|
1421
1362
|
onThumbsDown,
|
|
1422
1363
|
isCurrentMessage,
|
|
1423
|
-
rawData,
|
|
1424
1364
|
markdownTagRenderers
|
|
1425
1365
|
} = props;
|
|
1426
1366
|
const [copied, setCopied] = (0, import_react8.useState)(false);
|
|
1427
1367
|
const handleCopy = () => {
|
|
1428
|
-
|
|
1429
|
-
|
|
1368
|
+
const content2 = (message == null ? void 0 : message.content) || "";
|
|
1369
|
+
if (content2 && onCopy) {
|
|
1370
|
+
navigator.clipboard.writeText(content2);
|
|
1430
1371
|
setCopied(true);
|
|
1431
|
-
onCopy(
|
|
1372
|
+
onCopy(content2);
|
|
1432
1373
|
setTimeout(() => setCopied(false), 2e3);
|
|
1433
|
-
} else if (
|
|
1434
|
-
navigator.clipboard.writeText(
|
|
1374
|
+
} else if (content2) {
|
|
1375
|
+
navigator.clipboard.writeText(content2);
|
|
1435
1376
|
setCopied(true);
|
|
1436
1377
|
setTimeout(() => setCopied(false), 2e3);
|
|
1437
1378
|
}
|
|
1438
1379
|
};
|
|
1439
1380
|
const handleRegenerate = () => {
|
|
1440
|
-
if (onRegenerate)
|
|
1381
|
+
if (onRegenerate)
|
|
1441
1382
|
onRegenerate();
|
|
1442
|
-
}
|
|
1443
1383
|
};
|
|
1444
1384
|
const handleThumbsUp = () => {
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
onThumbsUp(fullMessage);
|
|
1448
|
-
}
|
|
1385
|
+
if (onThumbsUp && message)
|
|
1386
|
+
onThumbsUp(message);
|
|
1449
1387
|
};
|
|
1450
1388
|
const handleThumbsDown = () => {
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
onThumbsDown(fullMessage);
|
|
1454
|
-
}
|
|
1389
|
+
if (onThumbsDown && message)
|
|
1390
|
+
onThumbsDown(message);
|
|
1455
1391
|
};
|
|
1456
1392
|
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: icons.activityIcon });
|
|
1393
|
+
const content = (message == null ? void 0 : message.content) || "";
|
|
1394
|
+
const subComponent = (_a = message == null ? void 0 : message.generativeUI) == null ? void 0 : _a.call(message);
|
|
1457
1395
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.
|
|
1461
|
-
message && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1396
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
|
|
1397
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Markdown, { content, components: markdownTagRenderers }),
|
|
1398
|
+
content && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1462
1399
|
"div",
|
|
1463
1400
|
{
|
|
1464
1401
|
className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
|
|
@@ -1507,19 +1444,52 @@ var AssistantMessage = (props) => {
|
|
|
1507
1444
|
}
|
|
1508
1445
|
)
|
|
1509
1446
|
] }),
|
|
1510
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent })
|
|
1447
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent }),
|
|
1448
|
+
isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingIcon, {})
|
|
1511
1449
|
] });
|
|
1512
1450
|
};
|
|
1513
1451
|
|
|
1514
|
-
// src/components/chat/messages/
|
|
1452
|
+
// src/components/chat/messages/ImageRenderer.tsx
|
|
1453
|
+
var import_react9 = require("react");
|
|
1515
1454
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1516
|
-
|
|
1455
|
+
var ImageRenderer = ({ image, content, className = "" }) => {
|
|
1456
|
+
const [imageError, setImageError] = (0, import_react9.useState)(false);
|
|
1457
|
+
const imageSrc = `data:image/${image.format};base64,${image.bytes}`;
|
|
1458
|
+
const altText = content || "User uploaded image";
|
|
1459
|
+
const handleImageError = () => {
|
|
1460
|
+
setImageError(true);
|
|
1461
|
+
};
|
|
1462
|
+
if (imageError) {
|
|
1463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `copilotKitImageRendering copilotKitImageRenderingError ${className}`, children: [
|
|
1464
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "copilotKitImageRenderingErrorMessage", children: "Failed to load image" }),
|
|
1465
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
|
|
1466
|
+
] });
|
|
1467
|
+
}
|
|
1468
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `copilotKitImageRendering ${className}`, children: [
|
|
1469
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1470
|
+
"img",
|
|
1471
|
+
{
|
|
1472
|
+
src: imageSrc,
|
|
1473
|
+
alt: altText,
|
|
1474
|
+
className: "copilotKitImageRenderingImage",
|
|
1475
|
+
onError: handleImageError
|
|
1476
|
+
}
|
|
1477
|
+
),
|
|
1478
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
|
|
1479
|
+
] });
|
|
1480
|
+
};
|
|
1481
|
+
|
|
1482
|
+
// src/components/chat/messages/RenderMessage.tsx
|
|
1483
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1484
|
+
function RenderMessage(_a) {
|
|
1517
1485
|
var _b = _a, {
|
|
1518
1486
|
UserMessage: UserMessage2 = UserMessage,
|
|
1519
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
1487
|
+
AssistantMessage: AssistantMessage2 = AssistantMessage,
|
|
1488
|
+
ImageRenderer: ImageRenderer2 = ImageRenderer
|
|
1520
1489
|
} = _b, props = __objRest(_b, [
|
|
1521
1490
|
"UserMessage",
|
|
1522
|
-
"AssistantMessage"
|
|
1491
|
+
"AssistantMessage",
|
|
1492
|
+
"ImageRenderer"
|
|
1523
1493
|
]);
|
|
1524
1494
|
const {
|
|
1525
1495
|
message,
|
|
@@ -1532,24 +1502,23 @@ function RenderTextMessage(_a) {
|
|
|
1532
1502
|
onThumbsDown,
|
|
1533
1503
|
markdownTagRenderers
|
|
1534
1504
|
} = props;
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
return /* @__PURE__ */ (0,
|
|
1505
|
+
switch (message.role) {
|
|
1506
|
+
case "user":
|
|
1507
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1538
1508
|
UserMessage2,
|
|
1539
1509
|
{
|
|
1540
1510
|
"data-message-role": "user",
|
|
1541
|
-
message
|
|
1542
|
-
|
|
1511
|
+
message,
|
|
1512
|
+
ImageRenderer: ImageRenderer2
|
|
1543
1513
|
},
|
|
1544
1514
|
index
|
|
1545
1515
|
);
|
|
1546
|
-
|
|
1547
|
-
return /* @__PURE__ */ (0,
|
|
1516
|
+
case "assistant":
|
|
1517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1548
1518
|
AssistantMessage2,
|
|
1549
1519
|
{
|
|
1550
1520
|
"data-message-role": "assistant",
|
|
1551
|
-
message
|
|
1552
|
-
rawData: message,
|
|
1521
|
+
message,
|
|
1553
1522
|
isLoading: inProgress && isCurrentMessage && !message.content,
|
|
1554
1523
|
isGenerating: inProgress && isCurrentMessage && !!message.content,
|
|
1555
1524
|
isCurrentMessage,
|
|
@@ -1557,421 +1526,22 @@ function RenderTextMessage(_a) {
|
|
|
1557
1526
|
onCopy,
|
|
1558
1527
|
onThumbsUp,
|
|
1559
1528
|
onThumbsDown,
|
|
1560
|
-
markdownTagRenderers
|
|
1561
|
-
|
|
1562
|
-
index
|
|
1563
|
-
);
|
|
1564
|
-
}
|
|
1565
|
-
}
|
|
1566
|
-
}
|
|
1567
|
-
|
|
1568
|
-
// src/components/chat/messages/RenderActionExecutionMessage.tsx
|
|
1569
|
-
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
1570
|
-
var import_react_core4 = require("@copilotkit/react-core");
|
|
1571
|
-
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1572
|
-
function RenderActionExecutionMessage(_a) {
|
|
1573
|
-
var _b = _a, {
|
|
1574
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
1575
|
-
} = _b, props = __objRest(_b, [
|
|
1576
|
-
"AssistantMessage"
|
|
1577
|
-
]);
|
|
1578
|
-
const { chatComponentsCache } = (0, import_react_core4.useCopilotContext)();
|
|
1579
|
-
const { message, inProgress, index, isCurrentMessage, actionResult } = props;
|
|
1580
|
-
if (message.isActionExecutionMessage()) {
|
|
1581
|
-
if (chatComponentsCache.current !== null && (chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"])) {
|
|
1582
|
-
const render = chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"];
|
|
1583
|
-
if (typeof render === "string") {
|
|
1584
|
-
if (isCurrentMessage && inProgress) {
|
|
1585
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1586
|
-
AssistantMessage2,
|
|
1587
|
-
{
|
|
1588
|
-
rawData: message,
|
|
1589
|
-
"data-message-role": "assistant",
|
|
1590
|
-
isLoading: false,
|
|
1591
|
-
isGenerating: true,
|
|
1592
|
-
message: render
|
|
1593
|
-
},
|
|
1594
|
-
index
|
|
1595
|
-
);
|
|
1596
|
-
} else {
|
|
1597
|
-
return null;
|
|
1598
|
-
}
|
|
1599
|
-
} else {
|
|
1600
|
-
const args = message.arguments;
|
|
1601
|
-
let status = "inProgress";
|
|
1602
|
-
if (actionResult !== void 0) {
|
|
1603
|
-
status = "complete";
|
|
1604
|
-
} else if (message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending) {
|
|
1605
|
-
status = "executing";
|
|
1606
|
-
}
|
|
1607
|
-
try {
|
|
1608
|
-
const toRender = render({
|
|
1609
|
-
status,
|
|
1610
|
-
// Cast to any as RenderFunctionStatus is a union that can be complex to narrow here
|
|
1611
|
-
args,
|
|
1612
|
-
result: actionResult,
|
|
1613
|
-
name: message.name,
|
|
1614
|
-
messageId: message.id
|
|
1615
|
-
// Pass messageId for HITL action correlation
|
|
1616
|
-
});
|
|
1617
|
-
if (!toRender && status === "complete") {
|
|
1618
|
-
return null;
|
|
1619
|
-
}
|
|
1620
|
-
if (typeof toRender === "string") {
|
|
1621
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1622
|
-
AssistantMessage2,
|
|
1623
|
-
{
|
|
1624
|
-
rawData: message,
|
|
1625
|
-
"data-message-role": "assistant",
|
|
1626
|
-
isLoading: false,
|
|
1627
|
-
isGenerating: false,
|
|
1628
|
-
message: toRender
|
|
1629
|
-
},
|
|
1630
|
-
index
|
|
1631
|
-
);
|
|
1632
|
-
} else {
|
|
1633
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1634
|
-
AssistantMessage2,
|
|
1635
|
-
{
|
|
1636
|
-
rawData: message,
|
|
1637
|
-
"data-message-role": "action-render",
|
|
1638
|
-
isLoading: false,
|
|
1639
|
-
isGenerating: false,
|
|
1640
|
-
subComponent: toRender
|
|
1641
|
-
},
|
|
1642
|
-
index
|
|
1643
|
-
);
|
|
1644
|
-
}
|
|
1645
|
-
} catch (e) {
|
|
1646
|
-
console.error(`Error executing render function for action ${message.name}: ${e}`);
|
|
1647
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1648
|
-
AssistantMessage2,
|
|
1649
|
-
{
|
|
1650
|
-
rawData: message,
|
|
1651
|
-
"data-message-role": "assistant",
|
|
1652
|
-
isLoading: false,
|
|
1653
|
-
isGenerating: false,
|
|
1654
|
-
subComponent: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
|
|
1655
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("b", { children: [
|
|
1656
|
-
"\u274C Error executing render function for action ",
|
|
1657
|
-
message.name,
|
|
1658
|
-
":"
|
|
1659
|
-
] }),
|
|
1660
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("pre", { children: e instanceof Error ? e.message : String(e) })
|
|
1661
|
-
] })
|
|
1662
|
-
},
|
|
1663
|
-
index
|
|
1664
|
-
);
|
|
1665
|
-
}
|
|
1666
|
-
}
|
|
1667
|
-
} else if (!inProgress || !isCurrentMessage) {
|
|
1668
|
-
return null;
|
|
1669
|
-
} else {
|
|
1670
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1671
|
-
AssistantMessage2,
|
|
1672
|
-
{
|
|
1673
|
-
rawData: message,
|
|
1674
|
-
"data-message-role": "assistant",
|
|
1675
|
-
isLoading: true,
|
|
1676
|
-
isGenerating: true
|
|
1529
|
+
markdownTagRenderers,
|
|
1530
|
+
ImageRenderer: ImageRenderer2
|
|
1677
1531
|
},
|
|
1678
1532
|
index
|
|
1679
1533
|
);
|
|
1680
|
-
}
|
|
1681
1534
|
}
|
|
1682
1535
|
}
|
|
1683
1536
|
|
|
1684
|
-
// src/components/chat/messages/RenderResultMessage.tsx
|
|
1685
|
-
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1686
|
-
function RenderResultMessage(_a) {
|
|
1687
|
-
var _b = _a, {
|
|
1688
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
1689
|
-
} = _b, props = __objRest(_b, [
|
|
1690
|
-
"AssistantMessage"
|
|
1691
|
-
]);
|
|
1692
|
-
const { message, inProgress, index, isCurrentMessage } = props;
|
|
1693
|
-
if (message.isResultMessage() && inProgress && isCurrentMessage) {
|
|
1694
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1695
|
-
AssistantMessage2,
|
|
1696
|
-
{
|
|
1697
|
-
"data-message-role": "assistant",
|
|
1698
|
-
rawData: message,
|
|
1699
|
-
isLoading: true,
|
|
1700
|
-
isGenerating: true
|
|
1701
|
-
},
|
|
1702
|
-
index
|
|
1703
|
-
);
|
|
1704
|
-
} else {
|
|
1705
|
-
return null;
|
|
1706
|
-
}
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
|
-
// src/components/chat/messages/RenderAgentStateMessage.tsx
|
|
1710
|
-
var import_react_core5 = require("@copilotkit/react-core");
|
|
1711
|
-
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1712
|
-
function RenderAgentStateMessage(_a) {
|
|
1713
|
-
var _b = _a, {
|
|
1714
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
1715
|
-
} = _b, props = __objRest(_b, [
|
|
1716
|
-
"AssistantMessage"
|
|
1717
|
-
]);
|
|
1718
|
-
const { chatComponentsCache } = (0, import_react_core5.useCopilotContext)();
|
|
1719
|
-
const { message, inProgress, index, isCurrentMessage } = props;
|
|
1720
|
-
if (message.isAgentStateMessage()) {
|
|
1721
|
-
let render;
|
|
1722
|
-
if (chatComponentsCache.current !== null) {
|
|
1723
|
-
render = chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-global`];
|
|
1724
|
-
}
|
|
1725
|
-
if (render) {
|
|
1726
|
-
if (typeof render === "string") {
|
|
1727
|
-
if (isCurrentMessage && inProgress) {
|
|
1728
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1729
|
-
AssistantMessage2,
|
|
1730
|
-
{
|
|
1731
|
-
rawData: message,
|
|
1732
|
-
message: render,
|
|
1733
|
-
"data-message-role": "assistant",
|
|
1734
|
-
isLoading: true,
|
|
1735
|
-
isGenerating: true
|
|
1736
|
-
},
|
|
1737
|
-
index
|
|
1738
|
-
);
|
|
1739
|
-
} else {
|
|
1740
|
-
return null;
|
|
1741
|
-
}
|
|
1742
|
-
} else {
|
|
1743
|
-
const state = message.state;
|
|
1744
|
-
let status = message.active ? "inProgress" : "complete";
|
|
1745
|
-
const toRender = render({
|
|
1746
|
-
status,
|
|
1747
|
-
state,
|
|
1748
|
-
nodeName: message.nodeName
|
|
1749
|
-
});
|
|
1750
|
-
if (!toRender && status === "complete") {
|
|
1751
|
-
return null;
|
|
1752
|
-
}
|
|
1753
|
-
if (!toRender && isCurrentMessage && inProgress) {
|
|
1754
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1755
|
-
AssistantMessage2,
|
|
1756
|
-
{
|
|
1757
|
-
"data-message-role": "assistant",
|
|
1758
|
-
rawData: message,
|
|
1759
|
-
isLoading: true,
|
|
1760
|
-
isGenerating: true
|
|
1761
|
-
},
|
|
1762
|
-
index
|
|
1763
|
-
);
|
|
1764
|
-
} else if (!toRender) {
|
|
1765
|
-
return null;
|
|
1766
|
-
}
|
|
1767
|
-
if (typeof toRender === "string") {
|
|
1768
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1769
|
-
AssistantMessage2,
|
|
1770
|
-
{
|
|
1771
|
-
rawData: message,
|
|
1772
|
-
message: toRender,
|
|
1773
|
-
isLoading: true,
|
|
1774
|
-
isGenerating: true,
|
|
1775
|
-
"data-message-role": "assistant"
|
|
1776
|
-
},
|
|
1777
|
-
index
|
|
1778
|
-
);
|
|
1779
|
-
} else {
|
|
1780
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1781
|
-
AssistantMessage2,
|
|
1782
|
-
{
|
|
1783
|
-
rawData: message,
|
|
1784
|
-
"data-message-role": "agent-state-render",
|
|
1785
|
-
isLoading: false,
|
|
1786
|
-
isGenerating: false,
|
|
1787
|
-
subComponent: toRender
|
|
1788
|
-
},
|
|
1789
|
-
index
|
|
1790
|
-
);
|
|
1791
|
-
}
|
|
1792
|
-
}
|
|
1793
|
-
} else if (!inProgress || !isCurrentMessage) {
|
|
1794
|
-
return null;
|
|
1795
|
-
} else {
|
|
1796
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1797
|
-
AssistantMessage2,
|
|
1798
|
-
{
|
|
1799
|
-
rawData: message,
|
|
1800
|
-
isLoading: true,
|
|
1801
|
-
isGenerating: true,
|
|
1802
|
-
"data-message-role": "assistant"
|
|
1803
|
-
},
|
|
1804
|
-
index
|
|
1805
|
-
);
|
|
1806
|
-
}
|
|
1807
|
-
}
|
|
1808
|
-
}
|
|
1809
|
-
|
|
1810
|
-
// src/components/chat/messages/RenderImageMessage.tsx
|
|
1811
|
-
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1812
|
-
function RenderImageMessage(_a) {
|
|
1813
|
-
var _b = _a, {
|
|
1814
|
-
UserMessage: UserMessage2 = UserMessage,
|
|
1815
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
1816
|
-
} = _b, props = __objRest(_b, [
|
|
1817
|
-
"UserMessage",
|
|
1818
|
-
"AssistantMessage"
|
|
1819
|
-
]);
|
|
1820
|
-
const {
|
|
1821
|
-
message,
|
|
1822
|
-
inProgress,
|
|
1823
|
-
index,
|
|
1824
|
-
isCurrentMessage,
|
|
1825
|
-
onRegenerate,
|
|
1826
|
-
onCopy,
|
|
1827
|
-
onThumbsUp,
|
|
1828
|
-
onThumbsDown
|
|
1829
|
-
} = props;
|
|
1830
|
-
if (message.isImageMessage()) {
|
|
1831
|
-
const imageData = `data:${message.format};base64,${message.bytes}`;
|
|
1832
|
-
const imageComponent = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "copilotKitImage", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1833
|
-
"img",
|
|
1834
|
-
{
|
|
1835
|
-
src: imageData,
|
|
1836
|
-
alt: "User uploaded image",
|
|
1837
|
-
style: { maxWidth: "100%", maxHeight: "300px", borderRadius: "8px" }
|
|
1838
|
-
}
|
|
1839
|
-
) });
|
|
1840
|
-
if (message.role === "user") {
|
|
1841
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1842
|
-
UserMessage2,
|
|
1843
|
-
{
|
|
1844
|
-
"data-message-role": "user",
|
|
1845
|
-
message: "",
|
|
1846
|
-
rawData: message,
|
|
1847
|
-
subComponent: imageComponent
|
|
1848
|
-
},
|
|
1849
|
-
index
|
|
1850
|
-
);
|
|
1851
|
-
} else if (message.role === "assistant") {
|
|
1852
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1853
|
-
AssistantMessage2,
|
|
1854
|
-
{
|
|
1855
|
-
"data-message-role": "assistant",
|
|
1856
|
-
message: "",
|
|
1857
|
-
rawData: message,
|
|
1858
|
-
subComponent: imageComponent,
|
|
1859
|
-
isLoading: inProgress && isCurrentMessage && !message.bytes,
|
|
1860
|
-
isGenerating: inProgress && isCurrentMessage && !!message.bytes,
|
|
1861
|
-
isCurrentMessage,
|
|
1862
|
-
onRegenerate: () => onRegenerate == null ? void 0 : onRegenerate(message.id),
|
|
1863
|
-
onCopy,
|
|
1864
|
-
onThumbsUp,
|
|
1865
|
-
onThumbsDown
|
|
1866
|
-
},
|
|
1867
|
-
index
|
|
1868
|
-
);
|
|
1869
|
-
}
|
|
1870
|
-
}
|
|
1871
|
-
return null;
|
|
1872
|
-
}
|
|
1873
|
-
|
|
1874
1537
|
// src/components/chat/Chat.tsx
|
|
1875
|
-
var
|
|
1876
|
-
var
|
|
1877
|
-
|
|
1878
|
-
// src/components/chat/Suggestion.tsx
|
|
1879
|
-
var import_react_core6 = require("@copilotkit/react-core");
|
|
1538
|
+
var import_react10 = __toESM(require("react"));
|
|
1539
|
+
var import_react_core5 = require("@copilotkit/react-core");
|
|
1880
1540
|
var import_shared = require("@copilotkit/shared");
|
|
1881
|
-
var
|
|
1882
|
-
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1883
|
-
function Suggestion({ title, onClick, partial, className }) {
|
|
1884
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1885
|
-
"button",
|
|
1886
|
-
{
|
|
1887
|
-
disabled: partial,
|
|
1888
|
-
onClick: (e) => {
|
|
1889
|
-
e.preventDefault();
|
|
1890
|
-
onClick();
|
|
1891
|
-
},
|
|
1892
|
-
className: className || (partial ? "suggestion loading" : "suggestion"),
|
|
1893
|
-
"data-test-id": "suggestion",
|
|
1894
|
-
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: title })
|
|
1895
|
-
}
|
|
1896
|
-
);
|
|
1897
|
-
}
|
|
1898
|
-
var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggestions, abortControllerRef) => __async(void 0, null, function* () {
|
|
1899
|
-
const abortController = abortControllerRef.current;
|
|
1900
|
-
const tools = JSON.stringify(
|
|
1901
|
-
Object.values(context.actions).map((action) => ({
|
|
1902
|
-
name: action.name,
|
|
1903
|
-
description: action.description,
|
|
1904
|
-
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters))
|
|
1905
|
-
}))
|
|
1906
|
-
);
|
|
1907
|
-
const allSuggestions = [];
|
|
1908
|
-
for (const config of Object.values(chatSuggestionConfiguration)) {
|
|
1909
|
-
try {
|
|
1910
|
-
const numOfSuggestionsInstructions = config.minSuggestions === 0 ? `Produce up to ${config.maxSuggestions} suggestions. If there are no highly relevant suggestions you can think of, provide an empty array.` : `Produce between ${config.minSuggestions} and ${config.maxSuggestions} suggestions.`;
|
|
1911
|
-
const result = yield (0, import_react_core6.extract)({
|
|
1912
|
-
context,
|
|
1913
|
-
instructions: "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. ",
|
|
1914
|
-
data: config.instructions + "\n\n" + numOfSuggestionsInstructions + "\n\nAvailable tools: " + tools + "\n\n",
|
|
1915
|
-
requestType: import_runtime_client_gql3.CopilotRequestType.Task,
|
|
1916
|
-
parameters: [
|
|
1917
|
-
{
|
|
1918
|
-
name: "suggestions",
|
|
1919
|
-
type: "object[]",
|
|
1920
|
-
attributes: [
|
|
1921
|
-
{
|
|
1922
|
-
name: "title",
|
|
1923
|
-
description: "The title of the suggestion. This is shown as a button and should be short.",
|
|
1924
|
-
type: "string"
|
|
1925
|
-
},
|
|
1926
|
-
{
|
|
1927
|
-
name: "message",
|
|
1928
|
-
description: "The message to send when the suggestion is clicked. This should be a clear, complete sentence and will be sent as an instruction to the AI.",
|
|
1929
|
-
type: "string"
|
|
1930
|
-
}
|
|
1931
|
-
]
|
|
1932
|
-
}
|
|
1933
|
-
],
|
|
1934
|
-
include: {
|
|
1935
|
-
messages: true,
|
|
1936
|
-
readable: true
|
|
1937
|
-
},
|
|
1938
|
-
abortSignal: abortController == null ? void 0 : abortController.signal,
|
|
1939
|
-
stream: ({ status, args }) => {
|
|
1940
|
-
const suggestions = args.suggestions || [];
|
|
1941
|
-
const newSuggestions = [];
|
|
1942
|
-
for (let i = 0; i < suggestions.length; i++) {
|
|
1943
|
-
if (config.maxSuggestions !== void 0 && i >= config.maxSuggestions) {
|
|
1944
|
-
break;
|
|
1945
|
-
}
|
|
1946
|
-
const { title, message } = suggestions[i];
|
|
1947
|
-
const partial = i == suggestions.length - 1 && status !== "complete";
|
|
1948
|
-
newSuggestions.push({
|
|
1949
|
-
title,
|
|
1950
|
-
message,
|
|
1951
|
-
partial,
|
|
1952
|
-
className: config.className
|
|
1953
|
-
});
|
|
1954
|
-
}
|
|
1955
|
-
setCurrentSuggestions([...allSuggestions, ...newSuggestions]);
|
|
1956
|
-
}
|
|
1957
|
-
});
|
|
1958
|
-
allSuggestions.push(...result.suggestions);
|
|
1959
|
-
} catch (error) {
|
|
1960
|
-
console.error("Error loading suggestions", error);
|
|
1961
|
-
}
|
|
1962
|
-
}
|
|
1963
|
-
if (abortControllerRef.current === abortController) {
|
|
1964
|
-
abortControllerRef.current = null;
|
|
1965
|
-
}
|
|
1966
|
-
});
|
|
1967
|
-
|
|
1968
|
-
// src/components/chat/Chat.tsx
|
|
1969
|
-
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
1970
|
-
var import_shared2 = require("@copilotkit/shared");
|
|
1971
|
-
var import_react_core8 = require("@copilotkit/react-core");
|
|
1541
|
+
var import_react_core6 = require("@copilotkit/react-core");
|
|
1972
1542
|
|
|
1973
1543
|
// src/components/chat/ImageUploadQueue.tsx
|
|
1974
|
-
var
|
|
1544
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1975
1545
|
var ImageUploadQueue = ({
|
|
1976
1546
|
images,
|
|
1977
1547
|
onRemoveImage,
|
|
@@ -1979,7 +1549,7 @@ var ImageUploadQueue = ({
|
|
|
1979
1549
|
}) => {
|
|
1980
1550
|
if (images.length === 0)
|
|
1981
1551
|
return null;
|
|
1982
|
-
return /* @__PURE__ */ (0,
|
|
1552
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1983
1553
|
"div",
|
|
1984
1554
|
{
|
|
1985
1555
|
className: `copilotKitImageUploadQueue ${className}`,
|
|
@@ -1990,7 +1560,7 @@ var ImageUploadQueue = ({
|
|
|
1990
1560
|
margin: "8px",
|
|
1991
1561
|
padding: "8px"
|
|
1992
1562
|
},
|
|
1993
|
-
children: images.map((image, index) => /* @__PURE__ */ (0,
|
|
1563
|
+
children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1994
1564
|
"div",
|
|
1995
1565
|
{
|
|
1996
1566
|
className: "copilotKitImageUploadQueueItem",
|
|
@@ -2003,7 +1573,7 @@ var ImageUploadQueue = ({
|
|
|
2003
1573
|
overflow: "hidden"
|
|
2004
1574
|
},
|
|
2005
1575
|
children: [
|
|
2006
|
-
/* @__PURE__ */ (0,
|
|
1576
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
2007
1577
|
"img",
|
|
2008
1578
|
{
|
|
2009
1579
|
src: `data:${image.contentType};base64,${image.bytes}`,
|
|
@@ -2015,7 +1585,7 @@ var ImageUploadQueue = ({
|
|
|
2015
1585
|
}
|
|
2016
1586
|
}
|
|
2017
1587
|
),
|
|
2018
|
-
/* @__PURE__ */ (0,
|
|
1588
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
2019
1589
|
"button",
|
|
2020
1590
|
{
|
|
2021
1591
|
onClick: () => onRemoveImage(index),
|
|
@@ -2048,10 +1618,32 @@ var ImageUploadQueue = ({
|
|
|
2048
1618
|
);
|
|
2049
1619
|
};
|
|
2050
1620
|
|
|
1621
|
+
// src/components/chat/Suggestion.tsx
|
|
1622
|
+
var import_react_core4 = require("@copilotkit/react-core");
|
|
1623
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1624
|
+
function Suggestion({ title, onClick, partial, className }) {
|
|
1625
|
+
if (!title)
|
|
1626
|
+
return null;
|
|
1627
|
+
const { isLoading } = (0, import_react_core4.useCopilotChat)();
|
|
1628
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1629
|
+
"button",
|
|
1630
|
+
{
|
|
1631
|
+
disabled: partial || isLoading,
|
|
1632
|
+
onClick: (e) => {
|
|
1633
|
+
e.preventDefault();
|
|
1634
|
+
onClick();
|
|
1635
|
+
},
|
|
1636
|
+
className: className || (partial ? "suggestion loading" : "suggestion"),
|
|
1637
|
+
"data-test-id": "suggestion",
|
|
1638
|
+
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: title })
|
|
1639
|
+
}
|
|
1640
|
+
);
|
|
1641
|
+
}
|
|
1642
|
+
|
|
2051
1643
|
// src/components/chat/Suggestions.tsx
|
|
2052
|
-
var
|
|
1644
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
2053
1645
|
function Suggestions({ suggestions, onSuggestionClick }) {
|
|
2054
|
-
return /* @__PURE__ */ (0,
|
|
1646
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2055
1647
|
Suggestion,
|
|
2056
1648
|
{
|
|
2057
1649
|
title: suggestion.title,
|
|
@@ -2065,9 +1657,10 @@ function Suggestions({ suggestions, onSuggestionClick }) {
|
|
|
2065
1657
|
}
|
|
2066
1658
|
|
|
2067
1659
|
// src/components/chat/Chat.tsx
|
|
2068
|
-
var
|
|
1660
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
2069
1661
|
function CopilotChat({
|
|
2070
1662
|
instructions,
|
|
1663
|
+
suggestions = "auto",
|
|
2071
1664
|
onSubmitMessage,
|
|
2072
1665
|
makeSystemMessage,
|
|
2073
1666
|
onInProgress,
|
|
@@ -2079,11 +1672,7 @@ function CopilotChat({
|
|
|
2079
1672
|
onThumbsDown,
|
|
2080
1673
|
markdownTagRenderers,
|
|
2081
1674
|
Messages: Messages2 = Messages,
|
|
2082
|
-
|
|
2083
|
-
RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
|
|
2084
|
-
RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
|
|
2085
|
-
RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
|
|
2086
|
-
RenderImageMessage: RenderImageMessage2 = RenderImageMessage,
|
|
1675
|
+
RenderMessage: RenderMessage2 = RenderMessage,
|
|
2087
1676
|
RenderSuggestionsList = Suggestions,
|
|
2088
1677
|
Input: Input2 = Input,
|
|
2089
1678
|
className,
|
|
@@ -2091,14 +1680,15 @@ function CopilotChat({
|
|
|
2091
1680
|
labels,
|
|
2092
1681
|
AssistantMessage: AssistantMessage2 = AssistantMessage,
|
|
2093
1682
|
UserMessage: UserMessage2 = UserMessage,
|
|
1683
|
+
ImageRenderer: ImageRenderer2 = ImageRenderer,
|
|
2094
1684
|
imageUploadsEnabled,
|
|
2095
1685
|
inputFileAccept = "image/*",
|
|
2096
1686
|
hideStopButton
|
|
2097
1687
|
}) {
|
|
2098
|
-
const { additionalInstructions, setChatInstructions } = (0,
|
|
2099
|
-
const [selectedImages, setSelectedImages] = (0,
|
|
2100
|
-
const fileInputRef = (0,
|
|
2101
|
-
(0,
|
|
1688
|
+
const { additionalInstructions, setChatInstructions } = (0, import_react_core5.useCopilotContext)();
|
|
1689
|
+
const [selectedImages, setSelectedImages] = (0, import_react10.useState)([]);
|
|
1690
|
+
const fileInputRef = (0, import_react10.useRef)(null);
|
|
1691
|
+
(0, import_react10.useEffect)(() => {
|
|
2102
1692
|
if (!imageUploadsEnabled)
|
|
2103
1693
|
return;
|
|
2104
1694
|
const handlePaste = (e) => __async(this, null, function* () {
|
|
@@ -2143,7 +1733,7 @@ function CopilotChat({
|
|
|
2143
1733
|
document.addEventListener("paste", handlePaste);
|
|
2144
1734
|
return () => document.removeEventListener("paste", handlePaste);
|
|
2145
1735
|
}, [imageUploadsEnabled]);
|
|
2146
|
-
(0,
|
|
1736
|
+
(0, import_react10.useEffect)(() => {
|
|
2147
1737
|
if (!(additionalInstructions == null ? void 0 : additionalInstructions.length)) {
|
|
2148
1738
|
setChatInstructions(instructions || "");
|
|
2149
1739
|
return;
|
|
@@ -2153,17 +1743,17 @@ function CopilotChat({
|
|
|
2153
1743
|
"Additionally, follow these instructions:",
|
|
2154
1744
|
...additionalInstructions.map((instruction) => `- ${instruction}`)
|
|
2155
1745
|
];
|
|
2156
|
-
console.log("combinedAdditionalInstructions", combinedAdditionalInstructions);
|
|
2157
1746
|
setChatInstructions(combinedAdditionalInstructions.join("\n") || "");
|
|
2158
1747
|
}, [instructions, additionalInstructions]);
|
|
2159
1748
|
const {
|
|
2160
1749
|
visibleMessages,
|
|
2161
1750
|
isLoading,
|
|
2162
|
-
currentSuggestions,
|
|
2163
1751
|
sendMessage,
|
|
2164
1752
|
stopGeneration,
|
|
2165
|
-
reloadMessages
|
|
1753
|
+
reloadMessages,
|
|
1754
|
+
suggestions: currentSuggestions
|
|
2166
1755
|
} = useCopilotChatLogic(
|
|
1756
|
+
suggestions,
|
|
2167
1757
|
makeSystemMessage,
|
|
2168
1758
|
onInProgress,
|
|
2169
1759
|
onSubmitMessage,
|
|
@@ -2178,7 +1768,7 @@ function CopilotChat({
|
|
|
2178
1768
|
}
|
|
2179
1769
|
return sendMessage(text, images);
|
|
2180
1770
|
};
|
|
2181
|
-
const chatContext =
|
|
1771
|
+
const chatContext = import_react10.default.useContext(ChatContext);
|
|
2182
1772
|
const isVisible = chatContext ? chatContext.open : true;
|
|
2183
1773
|
const handleRegenerate = (messageId) => {
|
|
2184
1774
|
if (onRegenerate) {
|
|
@@ -2225,17 +1815,13 @@ function CopilotChat({
|
|
|
2225
1815
|
const removeSelectedImage = (index) => {
|
|
2226
1816
|
setSelectedImages((prev) => prev.filter((_, i) => i !== index));
|
|
2227
1817
|
};
|
|
2228
|
-
return /* @__PURE__ */ (0,
|
|
2229
|
-
/* @__PURE__ */ (0,
|
|
1818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
|
|
1819
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2230
1820
|
Messages2,
|
|
2231
1821
|
{
|
|
2232
1822
|
AssistantMessage: AssistantMessage2,
|
|
2233
1823
|
UserMessage: UserMessage2,
|
|
2234
|
-
|
|
2235
|
-
RenderActionExecutionMessage: RenderActionExecutionMessage2,
|
|
2236
|
-
RenderAgentStateMessage: RenderAgentStateMessage2,
|
|
2237
|
-
RenderResultMessage: RenderResultMessage2,
|
|
2238
|
-
RenderImageMessage: RenderImageMessage2,
|
|
1824
|
+
RenderMessage: RenderMessage2,
|
|
2239
1825
|
messages: visibleMessages,
|
|
2240
1826
|
inProgress: isLoading,
|
|
2241
1827
|
onRegenerate: handleRegenerate,
|
|
@@ -2243,7 +1829,8 @@ function CopilotChat({
|
|
|
2243
1829
|
onThumbsUp,
|
|
2244
1830
|
onThumbsDown,
|
|
2245
1831
|
markdownTagRenderers,
|
|
2246
|
-
|
|
1832
|
+
ImageRenderer: ImageRenderer2,
|
|
1833
|
+
children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2247
1834
|
RenderSuggestionsList,
|
|
2248
1835
|
{
|
|
2249
1836
|
onSuggestionClick: handleSendMessage,
|
|
@@ -2252,9 +1839,9 @@ function CopilotChat({
|
|
|
2252
1839
|
)
|
|
2253
1840
|
}
|
|
2254
1841
|
),
|
|
2255
|
-
imageUploadsEnabled && /* @__PURE__ */ (0,
|
|
2256
|
-
/* @__PURE__ */ (0,
|
|
2257
|
-
/* @__PURE__ */ (0,
|
|
1842
|
+
imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
|
|
1843
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
|
|
1844
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2258
1845
|
"input",
|
|
2259
1846
|
{
|
|
2260
1847
|
type: "file",
|
|
@@ -2266,7 +1853,7 @@ function CopilotChat({
|
|
|
2266
1853
|
}
|
|
2267
1854
|
)
|
|
2268
1855
|
] }),
|
|
2269
|
-
/* @__PURE__ */ (0,
|
|
1856
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2270
1857
|
Input2,
|
|
2271
1858
|
{
|
|
2272
1859
|
inProgress: isLoading,
|
|
@@ -2288,75 +1875,118 @@ function WrappedCopilotChat({
|
|
|
2288
1875
|
labels,
|
|
2289
1876
|
className
|
|
2290
1877
|
}) {
|
|
2291
|
-
const chatContext =
|
|
1878
|
+
const chatContext = import_react10.default.useContext(ChatContext);
|
|
2292
1879
|
if (!chatContext) {
|
|
2293
|
-
return /* @__PURE__ */ (0,
|
|
2294
|
-
}, children: /* @__PURE__ */ (0,
|
|
1880
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
|
|
1881
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
|
|
2295
1882
|
}
|
|
2296
|
-
return /* @__PURE__ */ (0,
|
|
1883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children });
|
|
2297
1884
|
}
|
|
2298
|
-
var
|
|
2299
|
-
var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
1885
|
+
var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
2300
1886
|
var _a;
|
|
2301
1887
|
const {
|
|
2302
1888
|
visibleMessages,
|
|
2303
1889
|
appendMessage,
|
|
1890
|
+
setMessages,
|
|
2304
1891
|
reloadMessages: defaultReloadMessages,
|
|
2305
1892
|
stopGeneration: defaultStopGeneration,
|
|
2306
1893
|
runChatCompletion,
|
|
2307
|
-
isLoading
|
|
2308
|
-
|
|
2309
|
-
|
|
1894
|
+
isLoading,
|
|
1895
|
+
suggestions,
|
|
1896
|
+
setSuggestions,
|
|
1897
|
+
generateSuggestions,
|
|
1898
|
+
resetSuggestions: resetSuggestionsFromHook,
|
|
1899
|
+
isLoadingSuggestions
|
|
1900
|
+
} = (0, import_react_core5.useCopilotChat)({
|
|
2310
1901
|
makeSystemMessage
|
|
2311
1902
|
});
|
|
2312
|
-
const
|
|
2313
|
-
const
|
|
2314
|
-
const
|
|
2315
|
-
const
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
(0,
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
()
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
1903
|
+
const generalContext = (0, import_react_core5.useCopilotContext)();
|
|
1904
|
+
const messagesContext = (0, import_react_core5.useCopilotMessagesContext)();
|
|
1905
|
+
const { actions } = generalContext;
|
|
1906
|
+
const [suggestionsFailed, setSuggestionsFailed] = (0, import_react10.useState)(false);
|
|
1907
|
+
const hasGeneratedInitialSuggestions = (0, import_react10.useRef)(false);
|
|
1908
|
+
(0, import_react10.useEffect)(() => {
|
|
1909
|
+
if (Array.isArray(chatSuggestions)) {
|
|
1910
|
+
setSuggestions(chatSuggestions);
|
|
1911
|
+
hasGeneratedInitialSuggestions.current = true;
|
|
1912
|
+
}
|
|
1913
|
+
}, [JSON.stringify(chatSuggestions), setSuggestions]);
|
|
1914
|
+
const generateSuggestionsWithErrorHandling = (0, import_react10.useCallback)(
|
|
1915
|
+
(context) => __async(void 0, null, function* () {
|
|
1916
|
+
try {
|
|
1917
|
+
yield generateSuggestions();
|
|
1918
|
+
} catch (error) {
|
|
1919
|
+
console.error("Failed to generate suggestions:", error);
|
|
1920
|
+
setSuggestionsFailed(true);
|
|
1921
|
+
}
|
|
1922
|
+
}),
|
|
1923
|
+
[generateSuggestions]
|
|
1924
|
+
);
|
|
1925
|
+
(0, import_react10.useEffect)(() => {
|
|
1926
|
+
if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
|
|
1927
|
+
return;
|
|
1928
|
+
}
|
|
1929
|
+
if (isLoading) {
|
|
1930
|
+
return;
|
|
1931
|
+
}
|
|
1932
|
+
if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
|
|
1933
|
+
return;
|
|
1934
|
+
}
|
|
1935
|
+
if (visibleMessages.length === 0 && !hasGeneratedInitialSuggestions.current) {
|
|
1936
|
+
hasGeneratedInitialSuggestions.current = true;
|
|
1937
|
+
generateSuggestionsWithErrorHandling("initial");
|
|
1938
|
+
return;
|
|
1939
|
+
}
|
|
1940
|
+
if (visibleMessages.length > 0 && suggestions.length === 0) {
|
|
1941
|
+
generateSuggestionsWithErrorHandling("post-message");
|
|
1942
|
+
return;
|
|
1943
|
+
}
|
|
2343
1944
|
}, [
|
|
1945
|
+
chatSuggestions,
|
|
1946
|
+
isLoadingSuggestions,
|
|
1947
|
+
suggestionsFailed,
|
|
1948
|
+
visibleMessages.length,
|
|
2344
1949
|
isLoading,
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
//
|
|
2348
|
-
|
|
1950
|
+
suggestions.length,
|
|
1951
|
+
Object.keys(generalContext.chatSuggestionConfiguration).join(","),
|
|
1952
|
+
// Use stable string instead of object reference
|
|
1953
|
+
generateSuggestionsWithErrorHandling
|
|
2349
1954
|
]);
|
|
1955
|
+
(0, import_react10.useEffect)(() => {
|
|
1956
|
+
if (chatSuggestions !== "auto") {
|
|
1957
|
+
hasGeneratedInitialSuggestions.current = false;
|
|
1958
|
+
setSuggestionsFailed(false);
|
|
1959
|
+
}
|
|
1960
|
+
}, [chatSuggestions]);
|
|
1961
|
+
const stableContext = (0, import_react10.useMemo)(
|
|
1962
|
+
() => __spreadValues(__spreadValues({}, generalContext), messagesContext),
|
|
1963
|
+
[
|
|
1964
|
+
// Only include stable dependencies
|
|
1965
|
+
generalContext.actions,
|
|
1966
|
+
messagesContext.messages.length,
|
|
1967
|
+
generalContext.isLoading
|
|
1968
|
+
]
|
|
1969
|
+
);
|
|
1970
|
+
const resetSuggestions = (0, import_react10.useCallback)(() => {
|
|
1971
|
+
resetSuggestionsFromHook();
|
|
1972
|
+
setSuggestionsFailed(false);
|
|
1973
|
+
hasGeneratedInitialSuggestions.current = false;
|
|
1974
|
+
}, [resetSuggestionsFromHook]);
|
|
1975
|
+
(0, import_react10.useEffect)(() => {
|
|
1976
|
+
onInProgress == null ? void 0 : onInProgress(isLoading);
|
|
1977
|
+
}, [onInProgress, isLoading]);
|
|
2350
1978
|
const sendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
|
|
2351
1979
|
const images = imagesToUse || [];
|
|
2352
|
-
|
|
2353
|
-
|
|
1980
|
+
if (chatSuggestions === "auto" || chatSuggestions === "manual") {
|
|
1981
|
+
setSuggestions([]);
|
|
1982
|
+
}
|
|
2354
1983
|
let firstMessage = null;
|
|
2355
1984
|
if (messageContent.trim().length > 0) {
|
|
2356
|
-
const textMessage =
|
|
2357
|
-
|
|
2358
|
-
role:
|
|
2359
|
-
|
|
1985
|
+
const textMessage = {
|
|
1986
|
+
id: (0, import_shared.randomId)(),
|
|
1987
|
+
role: "user",
|
|
1988
|
+
content: messageContent
|
|
1989
|
+
};
|
|
2360
1990
|
if (onSubmitMessage) {
|
|
2361
1991
|
try {
|
|
2362
1992
|
yield onSubmitMessage(messageContent);
|
|
@@ -2364,18 +1994,24 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2364
1994
|
console.error("Error in onSubmitMessage:", error);
|
|
2365
1995
|
}
|
|
2366
1996
|
}
|
|
2367
|
-
yield appendMessage(textMessage, {
|
|
1997
|
+
yield appendMessage(textMessage, {
|
|
1998
|
+
followUp: images.length === 0,
|
|
1999
|
+
clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
|
|
2000
|
+
});
|
|
2368
2001
|
if (!firstMessage) {
|
|
2369
2002
|
firstMessage = textMessage;
|
|
2370
2003
|
}
|
|
2371
2004
|
}
|
|
2372
2005
|
if (images.length > 0) {
|
|
2373
2006
|
for (let i = 0; i < images.length; i++) {
|
|
2374
|
-
const imageMessage =
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2007
|
+
const imageMessage = {
|
|
2008
|
+
id: (0, import_shared.randomId)(),
|
|
2009
|
+
role: "user",
|
|
2010
|
+
image: {
|
|
2011
|
+
format: images[i].contentType.replace("image/", ""),
|
|
2012
|
+
bytes: images[i].bytes
|
|
2013
|
+
}
|
|
2014
|
+
};
|
|
2379
2015
|
yield appendMessage(imageMessage, { followUp: i === images.length - 1 });
|
|
2380
2016
|
if (!firstMessage) {
|
|
2381
2017
|
firstMessage = imageMessage;
|
|
@@ -2383,12 +2019,11 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2383
2019
|
}
|
|
2384
2020
|
}
|
|
2385
2021
|
if (!firstMessage) {
|
|
2386
|
-
return
|
|
2022
|
+
return { role: "user", content: "", id: (0, import_shared.randomId)() };
|
|
2387
2023
|
}
|
|
2388
2024
|
return firstMessage;
|
|
2389
2025
|
});
|
|
2390
2026
|
const messages = visibleMessages;
|
|
2391
|
-
const { setMessages } = messagesContext;
|
|
2392
2027
|
const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
|
|
2393
2028
|
const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
2394
2029
|
if (generalContext.agentSession) {
|
|
@@ -2409,9 +2044,9 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2409
2044
|
});
|
|
2410
2045
|
const runCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
2411
2046
|
if (generalContext.agentSession) {
|
|
2412
|
-
yield (0,
|
|
2047
|
+
yield (0, import_react_core6.runAgent)(
|
|
2413
2048
|
generalContext.agentSession.agentName,
|
|
2414
|
-
|
|
2049
|
+
stableContext,
|
|
2415
2050
|
appendMessage,
|
|
2416
2051
|
runChatCompletion,
|
|
2417
2052
|
hint
|
|
@@ -2420,7 +2055,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2420
2055
|
});
|
|
2421
2056
|
const stopCurrentAgent = () => {
|
|
2422
2057
|
if (generalContext.agentSession) {
|
|
2423
|
-
(0,
|
|
2058
|
+
(0, import_react_core6.stopAgent)(generalContext.agentSession.agentName, stableContext);
|
|
2424
2059
|
}
|
|
2425
2060
|
};
|
|
2426
2061
|
const setCurrentAgentState = (state) => {
|
|
@@ -2435,6 +2070,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2435
2070
|
}
|
|
2436
2071
|
};
|
|
2437
2072
|
function stopGeneration() {
|
|
2073
|
+
setSuggestions([]);
|
|
2438
2074
|
if (onStopGeneration) {
|
|
2439
2075
|
onStopGeneration({
|
|
2440
2076
|
messages,
|
|
@@ -2468,12 +2104,16 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2468
2104
|
}
|
|
2469
2105
|
}
|
|
2470
2106
|
return {
|
|
2107
|
+
messages,
|
|
2471
2108
|
visibleMessages,
|
|
2472
2109
|
isLoading,
|
|
2473
|
-
|
|
2110
|
+
suggestions,
|
|
2474
2111
|
sendMessage,
|
|
2475
2112
|
stopGeneration,
|
|
2476
|
-
reloadMessages
|
|
2113
|
+
reloadMessages,
|
|
2114
|
+
resetSuggestions,
|
|
2115
|
+
context: stableContext,
|
|
2116
|
+
actions
|
|
2477
2117
|
};
|
|
2478
2118
|
};
|
|
2479
2119
|
// Annotate the CommonJS export names for ESM import in node:
|