@copilotkit/react-ui 1.9.3-next.4 → 1.10.0-next.0

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.
Files changed (178) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/{chunk-KENCH7RN.mjs → chunk-B5IFB5YJ.mjs} +1 -1
  3. package/dist/chunk-B5IFB5YJ.mjs.map +1 -0
  4. package/dist/chunk-DBKRAOH7.mjs +34 -0
  5. package/dist/chunk-DBKRAOH7.mjs.map +1 -0
  6. package/dist/{chunk-4HUXYD3B.mjs → chunk-DTRPPNSA.mjs} +2 -2
  7. package/dist/{chunk-YTXEWDNC.mjs → chunk-E6MQUIZW.mjs} +15 -4
  8. package/dist/chunk-E6MQUIZW.mjs.map +1 -0
  9. package/dist/{chunk-L3GZ7TXC.mjs → chunk-GCKKSSBU.mjs} +21 -24
  10. package/dist/chunk-GCKKSSBU.mjs.map +1 -0
  11. package/dist/{chunk-KN2GCKBE.mjs → chunk-GJ3MFNBX.mjs} +6 -6
  12. package/dist/{chunk-32MUWKL3.mjs → chunk-JHUTTP5C.mjs} +21 -17
  13. package/dist/chunk-JHUTTP5C.mjs.map +1 -0
  14. package/dist/{chunk-HKTWKCPS.mjs → chunk-LXCD3K7B.mjs} +127 -92
  15. package/dist/chunk-LXCD3K7B.mjs.map +1 -0
  16. package/dist/{chunk-S5MBUNGN.mjs → chunk-O72ZB5V3.mjs} +4 -4
  17. package/dist/chunk-O72ZB5V3.mjs.map +1 -0
  18. package/dist/{chunk-QGSPTXOV.mjs → chunk-O7KTFUAN.mjs} +2 -2
  19. package/dist/chunk-O7KTFUAN.mjs.map +1 -0
  20. package/dist/chunk-Q2467VHZ.mjs +30 -0
  21. package/dist/chunk-Q2467VHZ.mjs.map +1 -0
  22. package/dist/{chunk-H3EM63WS.mjs → chunk-VLNT34X3.mjs} +2 -2
  23. package/dist/chunk-VVL6JFCJ.mjs +16 -0
  24. package/dist/chunk-VVL6JFCJ.mjs.map +1 -0
  25. package/dist/chunk-WHDNKXMP.mjs +135 -0
  26. package/dist/chunk-WHDNKXMP.mjs.map +1 -0
  27. package/dist/{chunk-ALIBUJML.mjs → chunk-WPVTPQ7X.mjs} +2 -2
  28. package/dist/components/chat/Button.d.ts +1 -1
  29. package/dist/components/chat/Chat.d.ts +119 -28
  30. package/dist/components/chat/Chat.js +298 -658
  31. package/dist/components/chat/Chat.js.map +1 -1
  32. package/dist/components/chat/Chat.mjs +12 -15
  33. package/dist/components/chat/CodeBlock.js.map +1 -1
  34. package/dist/components/chat/CodeBlock.mjs +1 -1
  35. package/dist/components/chat/Header.d.ts +1 -1
  36. package/dist/components/chat/Input.d.ts +1 -1
  37. package/dist/components/chat/Input.js +3 -3
  38. package/dist/components/chat/Input.js.map +1 -1
  39. package/dist/components/chat/Input.mjs +2 -2
  40. package/dist/components/chat/Markdown.js +13 -2
  41. package/dist/components/chat/Markdown.js.map +1 -1
  42. package/dist/components/chat/Markdown.mjs +2 -2
  43. package/dist/components/chat/Messages.d.ts +3 -3
  44. package/dist/components/chat/Messages.js +40 -116
  45. package/dist/components/chat/Messages.js.map +1 -1
  46. package/dist/components/chat/Messages.mjs +1 -1
  47. package/dist/components/chat/Modal.d.ts +7 -2
  48. package/dist/components/chat/Modal.js +308 -668
  49. package/dist/components/chat/Modal.js.map +1 -1
  50. package/dist/components/chat/Modal.mjs +13 -16
  51. package/dist/components/chat/Popup.d.ts +7 -2
  52. package/dist/components/chat/Popup.js +310 -670
  53. package/dist/components/chat/Popup.js.map +1 -1
  54. package/dist/components/chat/Popup.mjs +14 -17
  55. package/dist/components/chat/Sidebar.d.ts +7 -2
  56. package/dist/components/chat/Sidebar.js +312 -672
  57. package/dist/components/chat/Sidebar.js.map +1 -1
  58. package/dist/components/chat/Sidebar.mjs +14 -17
  59. package/dist/components/chat/Suggestion.d.ts +2 -9
  60. package/dist/components/chat/Suggestion.js +6 -96
  61. package/dist/components/chat/Suggestion.js.map +1 -1
  62. package/dist/components/chat/Suggestion.mjs +3 -5
  63. package/dist/components/chat/Suggestions.d.ts +1 -1
  64. package/dist/components/chat/Suggestions.js +4 -3
  65. package/dist/components/chat/Suggestions.js.map +1 -1
  66. package/dist/components/chat/Suggestions.mjs +2 -2
  67. package/dist/components/chat/Window.d.ts +1 -1
  68. package/dist/components/chat/index.d.ts +8 -3
  69. package/dist/components/chat/index.js +316 -676
  70. package/dist/components/chat/index.js.map +1 -1
  71. package/dist/components/chat/index.mjs +18 -21
  72. package/dist/components/chat/messages/AssistantMessage.d.ts +1 -1
  73. package/dist/components/chat/messages/AssistantMessage.js +32 -24
  74. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  75. package/dist/components/chat/messages/AssistantMessage.mjs +3 -3
  76. package/dist/components/chat/messages/ImageRenderer.d.ts +12 -0
  77. package/dist/components/chat/messages/ImageRenderer.js +58 -0
  78. package/dist/components/chat/messages/ImageRenderer.js.map +1 -0
  79. package/dist/components/chat/messages/ImageRenderer.mjs +8 -0
  80. package/dist/components/chat/messages/RenderMessage.d.ts +9 -0
  81. package/dist/components/chat/messages/{RenderTextMessage.js → RenderMessage.js} +92 -47
  82. package/dist/components/chat/messages/RenderMessage.js.map +1 -0
  83. package/dist/components/chat/messages/RenderMessage.mjs +16 -0
  84. package/dist/components/chat/messages/UserMessage.d.ts +1 -1
  85. package/dist/components/chat/messages/UserMessage.js +7 -1
  86. package/dist/components/chat/messages/UserMessage.js.map +1 -1
  87. package/dist/components/chat/messages/UserMessage.mjs +1 -1
  88. package/dist/components/chat/props.d.ts +32 -27
  89. package/dist/components/chat/props.js.map +1 -1
  90. package/dist/components/index.d.ts +8 -3
  91. package/dist/components/index.js +316 -676
  92. package/dist/components/index.js.map +1 -1
  93. package/dist/components/index.mjs +18 -21
  94. package/dist/hooks/use-push-to-talk.d.ts +1 -1
  95. package/dist/hooks/use-push-to-talk.js +3 -3
  96. package/dist/hooks/use-push-to-talk.js.map +1 -1
  97. package/dist/hooks/use-push-to-talk.mjs +1 -1
  98. package/dist/index.css +59 -3
  99. package/dist/index.css.map +1 -1
  100. package/dist/index.d.ts +8 -3
  101. package/dist/index.js +322 -682
  102. package/dist/index.js.map +1 -1
  103. package/dist/index.mjs +18 -21
  104. package/dist/types/css.d.ts +3 -0
  105. package/dist/types/css.js.map +1 -1
  106. package/package.json +4 -4
  107. package/src/components/chat/Chat.tsx +193 -105
  108. package/src/components/chat/CodeBlock.tsx +1 -1
  109. package/src/components/chat/Markdown.tsx +12 -2
  110. package/src/components/chat/Messages.tsx +43 -122
  111. package/src/components/chat/Suggestion.tsx +5 -108
  112. package/src/components/chat/Suggestions.tsx +0 -1
  113. package/src/components/chat/index.tsx +1 -1
  114. package/src/components/chat/messages/AssistantMessage.tsx +15 -23
  115. package/src/components/chat/messages/ImageRenderer.tsx +37 -0
  116. package/src/components/chat/messages/{RenderTextMessage.tsx → RenderMessage.tsx} +10 -9
  117. package/src/components/chat/messages/UserMessage.tsx +16 -5
  118. package/src/components/chat/props.ts +36 -28
  119. package/src/css/colors.css +10 -0
  120. package/src/css/markdown.css +8 -0
  121. package/src/css/messages.css +54 -5
  122. package/src/css/suggestions.css +1 -1
  123. package/src/hooks/use-push-to-talk.tsx +6 -5
  124. package/src/styles.css +1 -1
  125. package/src/types/css.ts +3 -0
  126. package/dist/chunk-2II3Q27P.mjs +0 -112
  127. package/dist/chunk-2II3Q27P.mjs.map +0 -1
  128. package/dist/chunk-32MUWKL3.mjs.map +0 -1
  129. package/dist/chunk-53CVDVS5.mjs +0 -127
  130. package/dist/chunk-53CVDVS5.mjs.map +0 -1
  131. package/dist/chunk-B3D7U7TJ.mjs +0 -211
  132. package/dist/chunk-B3D7U7TJ.mjs.map +0 -1
  133. package/dist/chunk-C7OB63U5.mjs +0 -36
  134. package/dist/chunk-C7OB63U5.mjs.map +0 -1
  135. package/dist/chunk-HKTWKCPS.mjs.map +0 -1
  136. package/dist/chunk-HWMFMBJC.mjs +0 -10
  137. package/dist/chunk-HWMFMBJC.mjs.map +0 -1
  138. package/dist/chunk-IMBPSLL4.mjs +0 -104
  139. package/dist/chunk-IMBPSLL4.mjs.map +0 -1
  140. package/dist/chunk-KENCH7RN.mjs.map +0 -1
  141. package/dist/chunk-L3GZ7TXC.mjs.map +0 -1
  142. package/dist/chunk-QGSPTXOV.mjs.map +0 -1
  143. package/dist/chunk-S5MBUNGN.mjs.map +0 -1
  144. package/dist/chunk-ULDQXCED.mjs +0 -78
  145. package/dist/chunk-ULDQXCED.mjs.map +0 -1
  146. package/dist/chunk-YTXEWDNC.mjs.map +0 -1
  147. package/dist/components/chat/messages/RenderActionExecutionMessage.d.ts +0 -9
  148. package/dist/components/chat/messages/RenderActionExecutionMessage.js +0 -869
  149. package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +0 -1
  150. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +0 -14
  151. package/dist/components/chat/messages/RenderAgentStateMessage.d.ts +0 -9
  152. package/dist/components/chat/messages/RenderAgentStateMessage.js +0 -854
  153. package/dist/components/chat/messages/RenderAgentStateMessage.js.map +0 -1
  154. package/dist/components/chat/messages/RenderAgentStateMessage.mjs +0 -14
  155. package/dist/components/chat/messages/RenderImageMessage.d.ts +0 -9
  156. package/dist/components/chat/messages/RenderImageMessage.js +0 -823
  157. package/dist/components/chat/messages/RenderImageMessage.js.map +0 -1
  158. package/dist/components/chat/messages/RenderImageMessage.mjs +0 -15
  159. package/dist/components/chat/messages/RenderImageMessage.mjs.map +0 -1
  160. package/dist/components/chat/messages/RenderResultMessage.d.ts +0 -9
  161. package/dist/components/chat/messages/RenderResultMessage.js +0 -778
  162. package/dist/components/chat/messages/RenderResultMessage.js.map +0 -1
  163. package/dist/components/chat/messages/RenderResultMessage.mjs +0 -14
  164. package/dist/components/chat/messages/RenderResultMessage.mjs.map +0 -1
  165. package/dist/components/chat/messages/RenderTextMessage.d.ts +0 -9
  166. package/dist/components/chat/messages/RenderTextMessage.js.map +0 -1
  167. package/dist/components/chat/messages/RenderTextMessage.mjs +0 -15
  168. package/dist/components/chat/messages/RenderTextMessage.mjs.map +0 -1
  169. package/src/components/chat/messages/RenderActionExecutionMessage.tsx +0 -127
  170. package/src/components/chat/messages/RenderAgentStateMessage.tsx +0 -116
  171. package/src/components/chat/messages/RenderImageMessage.tsx +0 -64
  172. package/src/components/chat/messages/RenderResultMessage.tsx +0 -26
  173. /package/dist/{chunk-4HUXYD3B.mjs.map → chunk-DTRPPNSA.mjs.map} +0 -0
  174. /package/dist/{chunk-KN2GCKBE.mjs.map → chunk-GJ3MFNBX.mjs.map} +0 -0
  175. /package/dist/{chunk-H3EM63WS.mjs.map → chunk-VLNT34X3.mjs.map} +0 -0
  176. /package/dist/{chunk-ALIBUJML.mjs.map → chunk-WPVTPQ7X.mjs.map} +0 -0
  177. /package/dist/components/chat/messages/{RenderActionExecutionMessage.mjs.map → ImageRenderer.mjs.map} +0 -0
  178. /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
- RenderTextMessage: RenderTextMessage2,
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 context = useChatContext();
420
- const initialMessages = (0, import_react2.useMemo)(
421
- () => makeInitialMessages(context.labels.initial),
422
- [context.labels.initial]
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
- if (message.isTextMessage()) {
444
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
445
- RenderTextMessage2,
446
- {
447
- message,
448
- inProgress,
449
- index,
450
- isCurrentMessage,
451
- AssistantMessage: AssistantMessage2,
452
- UserMessage: UserMessage2,
453
- onRegenerate,
454
- onCopy,
455
- onThumbsUp,
456
- onThumbsDown,
457
- markdownTagRenderers
458
- },
459
- index
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
- let initialArray = [];
527
- if (initial) {
528
- if (Array.isArray(initial)) {
529
- initialArray.push(...initial);
530
- } else {
531
- initialArray.push(initial);
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 initialArray.map(
535
- (message) => new import_runtime_client_gql.TextMessage({
536
- role: import_runtime_client_gql.Role.Assistant,
537
- content: message
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.isTextMessage() && m.role === import_runtime_client_gql.Role.User).length]);
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 messagesAfterLast = context.messages.slice(lastMessageIndex + 1).filter(
756
- (message) => message.isTextMessage() && message.role === "assistant"
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
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: props.subComponent || props.message });
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
- if (inline) {
1337
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("code", __spreadProps(__spreadValues({ className }, props), { children }));
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
- if (message && onCopy) {
1429
- navigator.clipboard.writeText(message);
1368
+ const content2 = (message == null ? void 0 : message.content) || "";
1369
+ if (content2 && onCopy) {
1370
+ navigator.clipboard.writeText(content2);
1430
1371
  setCopied(true);
1431
- onCopy(message);
1372
+ onCopy(content2);
1432
1373
  setTimeout(() => setCopied(false), 2e3);
1433
- } else if (message) {
1434
- navigator.clipboard.writeText(message);
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
- const fullMessage = rawData;
1446
- if (onThumbsUp && fullMessage) {
1447
- onThumbsUp(fullMessage);
1448
- }
1385
+ if (onThumbsUp && message)
1386
+ onThumbsUp(message);
1449
1387
  };
1450
1388
  const handleThumbsDown = () => {
1451
- const fullMessage = rawData;
1452
- if (onThumbsDown && fullMessage) {
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
- (message || isLoading) && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
1459
- message && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Markdown, { content: message || "", components: markdownTagRenderers }),
1460
- isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingIcon, {}),
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/RenderTextMessage.tsx
1452
+ // src/components/chat/messages/ImageRenderer.tsx
1453
+ var import_react9 = require("react");
1515
1454
  var import_jsx_runtime11 = require("react/jsx-runtime");
1516
- function RenderTextMessage(_a) {
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
- if (message.isTextMessage()) {
1536
- if (message.role === "user") {
1537
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
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: message.content,
1542
- rawData: message
1511
+ message,
1512
+ ImageRenderer: ImageRenderer2
1543
1513
  },
1544
1514
  index
1545
1515
  );
1546
- } else if (message.role == "assistant") {
1547
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1516
+ case "assistant":
1517
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1548
1518
  AssistantMessage2,
1549
1519
  {
1550
1520
  "data-message-role": "assistant",
1551
- message: message.content,
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 import_react9 = __toESM(require("react"));
1876
- var import_react_core7 = require("@copilotkit/react-core");
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 import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
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 import_jsx_runtime17 = require("react/jsx-runtime");
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, import_jsx_runtime17.jsx)(
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, import_jsx_runtime17.jsxs)(
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, import_jsx_runtime17.jsx)(
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, import_jsx_runtime17.jsx)(
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 import_jsx_runtime18 = require("react/jsx-runtime");
1644
+ var import_jsx_runtime15 = require("react/jsx-runtime");
2053
1645
  function Suggestions({ suggestions, onSuggestionClick }) {
2054
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
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 import_jsx_runtime19 = require("react/jsx-runtime");
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
- RenderTextMessage: RenderTextMessage2 = RenderTextMessage,
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, import_react_core7.useCopilotContext)();
2099
- const [selectedImages, setSelectedImages] = (0, import_react9.useState)([]);
2100
- const fileInputRef = (0, import_react9.useRef)(null);
2101
- (0, import_react9.useEffect)(() => {
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, import_react9.useEffect)(() => {
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 = import_react9.default.useContext(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, import_jsx_runtime19.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
2229
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
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
- RenderTextMessage: RenderTextMessage2,
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
- children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
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, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
2256
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
2257
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
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, import_jsx_runtime19.jsx)(
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 = import_react9.default.useContext(ChatContext);
1878
+ const chatContext = import_react10.default.useContext(ChatContext);
2292
1879
  if (!chatContext) {
2293
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
2294
- }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
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, import_jsx_runtime19.jsx)(import_jsx_runtime19.Fragment, { children });
1883
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children });
2297
1884
  }
2298
- var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
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
- } = (0, import_react_core7.useCopilotChat)({
2309
- id: (0, import_shared2.randomId)(),
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 [currentSuggestions, setCurrentSuggestions] = (0, import_react9.useState)([]);
2313
- const suggestionsAbortControllerRef = (0, import_react9.useRef)(null);
2314
- const debounceTimerRef = (0, import_react9.useRef)();
2315
- const abortSuggestions = () => {
2316
- var _a2;
2317
- (_a2 = suggestionsAbortControllerRef.current) == null ? void 0 : _a2.abort();
2318
- suggestionsAbortControllerRef.current = null;
2319
- };
2320
- const generalContext = (0, import_react_core7.useCopilotContext)();
2321
- const messagesContext = (0, import_react_core7.useCopilotMessagesContext)();
2322
- const context = __spreadValues(__spreadValues({}, generalContext), messagesContext);
2323
- (0, import_react9.useEffect)(() => {
2324
- onInProgress == null ? void 0 : onInProgress(isLoading);
2325
- abortSuggestions();
2326
- debounceTimerRef.current = setTimeout(
2327
- () => {
2328
- if (!isLoading && Object.keys(context.chatSuggestionConfiguration).length !== 0) {
2329
- suggestionsAbortControllerRef.current = new AbortController();
2330
- reloadSuggestions(
2331
- context,
2332
- context.chatSuggestionConfiguration,
2333
- setCurrentSuggestions,
2334
- suggestionsAbortControllerRef
2335
- );
2336
- }
2337
- },
2338
- currentSuggestions.length == 0 ? 0 : SUGGESTIONS_DEBOUNCE_TIMEOUT
2339
- );
2340
- return () => {
2341
- clearTimeout(debounceTimerRef.current);
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
- context.chatSuggestionConfiguration,
2346
- // hackish way to trigger suggestions reload on reset, but better than moving suggestions to the
2347
- // global context
2348
- visibleMessages.length == 0
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
- abortSuggestions();
2353
- setCurrentSuggestions([]);
1980
+ if (chatSuggestions === "auto" || chatSuggestions === "manual") {
1981
+ setSuggestions([]);
1982
+ }
2354
1983
  let firstMessage = null;
2355
1984
  if (messageContent.trim().length > 0) {
2356
- const textMessage = new import_runtime_client_gql4.TextMessage({
2357
- content: messageContent,
2358
- role: import_runtime_client_gql4.Role.User
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, { followUp: images.length === 0 });
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 = new import_runtime_client_gql4.ImageMessage({
2375
- format: images[i].contentType.replace("image/", ""),
2376
- bytes: images[i].bytes,
2377
- role: import_runtime_client_gql4.Role.User
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 new import_runtime_client_gql4.TextMessage({ content: "", role: import_runtime_client_gql4.Role.User });
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, import_react_core8.runAgent)(
2047
+ yield (0, import_react_core6.runAgent)(
2413
2048
  generalContext.agentSession.agentName,
2414
- context,
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, import_react_core8.stopAgent)(generalContext.agentSession.agentName, context);
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
- currentSuggestions,
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: