@copilotkit/react-ui 1.9.3 → 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 +30 -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
@@ -82,10 +82,10 @@ __export(Sidebar_exports, {
82
82
  CopilotSidebar: () => CopilotSidebar
83
83
  });
84
84
  module.exports = __toCommonJS(Sidebar_exports);
85
- var import_react15 = require("react");
85
+ var import_react16 = require("react");
86
86
 
87
87
  // src/components/chat/Modal.tsx
88
- var import_react14 = __toESM(require("react"));
88
+ var import_react15 = __toESM(require("react"));
89
89
 
90
90
  // src/components/chat/ChatContext.tsx
91
91
  var import_react = __toESM(require("react"));
@@ -1029,18 +1029,12 @@ var Header = ({}) => {
1029
1029
 
1030
1030
  // src/components/chat/Messages.tsx
1031
1031
  var import_react6 = require("react");
1032
- var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1033
1032
  var import_react_core4 = require("@copilotkit/react-core");
1034
1033
  var import_jsx_runtime10 = require("react/jsx-runtime");
1035
1034
  var Messages = ({
1036
- messages,
1037
1035
  inProgress,
1038
1036
  children,
1039
- RenderTextMessage: RenderTextMessage2,
1040
- RenderActionExecutionMessage: RenderActionExecutionMessage2,
1041
- RenderAgentStateMessage: RenderAgentStateMessage2,
1042
- RenderResultMessage: RenderResultMessage2,
1043
- RenderImageMessage: RenderImageMessage2,
1037
+ RenderMessage: RenderMessage2,
1044
1038
  AssistantMessage: AssistantMessage2,
1045
1039
  UserMessage: UserMessage2,
1046
1040
  onRegenerate,
@@ -1049,106 +1043,32 @@ var Messages = ({
1049
1043
  onThumbsDown,
1050
1044
  markdownTagRenderers
1051
1045
  }) => {
1052
- const context = useChatContext();
1053
- const initialMessages = (0, import_react6.useMemo)(
1054
- () => makeInitialMessages(context.labels.initial),
1055
- [context.labels.initial]
1056
- );
1057
- messages = [...initialMessages, ...messages];
1058
- const actionResults = {};
1059
- for (let i = 0; i < messages.length; i++) {
1060
- if (messages[i].isActionExecutionMessage()) {
1061
- const id = messages[i].id;
1062
- const resultMessage = messages.find(
1063
- (message) => message.isResultMessage() && message.actionExecutionId === id
1064
- );
1065
- if (resultMessage) {
1066
- actionResults[id] = import_runtime_client_gql.ResultMessage.decodeResult(resultMessage.result || "");
1067
- }
1068
- }
1069
- }
1046
+ const { labels } = useChatContext();
1047
+ const { visibleMessages, interrupt } = (0, import_react_core4.useCopilotChat)();
1048
+ const initialMessages = (0, import_react6.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1049
+ const messages = [...initialMessages, ...visibleMessages];
1070
1050
  const { messagesContainerRef, messagesEndRef } = useScrollToBottom(messages);
1071
- const interrupt = (0, import_react_core4.useLangGraphInterruptRender)();
1072
1051
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1073
1052
  /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1074
1053
  messages.map((message, index) => {
1075
1054
  const isCurrentMessage = index === messages.length - 1;
1076
- if (message.isTextMessage()) {
1077
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1078
- RenderTextMessage2,
1079
- {
1080
- message,
1081
- inProgress,
1082
- index,
1083
- isCurrentMessage,
1084
- AssistantMessage: AssistantMessage2,
1085
- UserMessage: UserMessage2,
1086
- onRegenerate,
1087
- onCopy,
1088
- onThumbsUp,
1089
- onThumbsDown,
1090
- markdownTagRenderers
1091
- },
1092
- index
1093
- );
1094
- } else if (message.isActionExecutionMessage()) {
1095
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1096
- RenderActionExecutionMessage2,
1097
- {
1098
- message,
1099
- inProgress,
1100
- index,
1101
- isCurrentMessage,
1102
- actionResult: actionResults[message.id],
1103
- AssistantMessage: AssistantMessage2,
1104
- UserMessage: UserMessage2
1105
- },
1106
- index
1107
- );
1108
- } else if (message.isAgentStateMessage()) {
1109
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1110
- RenderAgentStateMessage2,
1111
- {
1112
- message,
1113
- inProgress,
1114
- index,
1115
- isCurrentMessage,
1116
- AssistantMessage: AssistantMessage2,
1117
- UserMessage: UserMessage2
1118
- },
1119
- index
1120
- );
1121
- } else if (message.isResultMessage()) {
1122
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1123
- RenderResultMessage2,
1124
- {
1125
- message,
1126
- inProgress,
1127
- index,
1128
- isCurrentMessage,
1129
- AssistantMessage: AssistantMessage2,
1130
- UserMessage: UserMessage2
1131
- },
1132
- index
1133
- );
1134
- } else if (message.isImageMessage && message.isImageMessage()) {
1135
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1136
- RenderImageMessage2,
1137
- {
1138
- message,
1139
- inProgress,
1140
- index,
1141
- isCurrentMessage,
1142
- AssistantMessage: AssistantMessage2,
1143
- UserMessage: UserMessage2,
1144
- onRegenerate,
1145
- onCopy,
1146
- onThumbsUp,
1147
- onThumbsDown
1148
- },
1149
- index
1150
- );
1151
- }
1055
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1056
+ RenderMessage2,
1057
+ {
1058
+ message,
1059
+ inProgress,
1060
+ index,
1061
+ isCurrentMessage,
1062
+ AssistantMessage: AssistantMessage2,
1063
+ UserMessage: UserMessage2,
1064
+ onRegenerate,
1065
+ onCopy,
1066
+ onThumbsUp,
1067
+ onThumbsDown,
1068
+ markdownTagRenderers
1069
+ },
1070
+ index
1071
+ );
1152
1072
  }),
1153
1073
  interrupt
1154
1074
  ] }),
@@ -1156,20 +1076,24 @@ var Messages = ({
1156
1076
  ] });
1157
1077
  };
1158
1078
  function makeInitialMessages(initial) {
1159
- let initialArray = [];
1160
- if (initial) {
1161
- if (Array.isArray(initial)) {
1162
- initialArray.push(...initial);
1163
- } else {
1164
- initialArray.push(initial);
1165
- }
1079
+ if (!initial)
1080
+ return [];
1081
+ if (Array.isArray(initial)) {
1082
+ return initial.map((message) => {
1083
+ return {
1084
+ id: message,
1085
+ role: "assistant",
1086
+ content: message
1087
+ };
1088
+ });
1166
1089
  }
1167
- return initialArray.map(
1168
- (message) => new import_runtime_client_gql.TextMessage({
1169
- role: import_runtime_client_gql.Role.Assistant,
1170
- content: message
1171
- })
1172
- );
1090
+ return [
1091
+ {
1092
+ id: initial,
1093
+ role: "system",
1094
+ content: initial
1095
+ }
1096
+ ];
1173
1097
  }
1174
1098
  function useScrollToBottom(messages) {
1175
1099
  const messagesEndRef = (0, import_react6.useRef)(null);
@@ -1225,7 +1149,7 @@ function useScrollToBottom(messages) {
1225
1149
  (0, import_react6.useEffect)(() => {
1226
1150
  isUserScrollUpRef.current = false;
1227
1151
  scrollToBottom();
1228
- }, [messages.filter((m) => m.isTextMessage() && m.role === import_runtime_client_gql.Role.User).length]);
1152
+ }, [messages.filter((m) => m.role === "user").length]);
1229
1153
  return { messagesEndRef, messagesContainerRef };
1230
1154
  }
1231
1155
 
@@ -1294,6 +1218,7 @@ var Textarea_default = AutoResizingTextarea;
1294
1218
 
1295
1219
  // src/hooks/use-push-to-talk.tsx
1296
1220
  var import_react_core5 = require("@copilotkit/react-core");
1221
+ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1297
1222
  var import_react8 = require("react");
1298
1223
  var startRecording = (mediaStreamRef, mediaRecorderRef, audioContextRef, recordedChunks, onStop) => __async(void 0, null, function* () {
1299
1224
  if (!mediaStreamRef.current || !audioContextRef.current) {
@@ -1385,9 +1310,8 @@ var usePushToTalk = ({
1385
1310
  const lastMessageIndex = context.messages.findIndex(
1386
1311
  (message) => message.id === startReadingFromMessageId
1387
1312
  );
1388
- const messagesAfterLast = context.messages.slice(lastMessageIndex + 1).filter(
1389
- (message) => message.isTextMessage() && message.role === "assistant"
1390
- );
1313
+ const aguiMessages = (0, import_runtime_client_gql.gqlToAGUI)(context.messages);
1314
+ const messagesAfterLast = aguiMessages.slice(lastMessageIndex + 1).filter((message) => message.role === "assistant");
1391
1315
  const text = messagesAfterLast.map((message) => message.content).join("\n");
1392
1316
  playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
1393
1317
  setStartReadingFromMessageId(null);
@@ -1532,7 +1456,13 @@ var Input = ({
1532
1456
  // src/components/chat/messages/UserMessage.tsx
1533
1457
  var import_jsx_runtime14 = require("react/jsx-runtime");
1534
1458
  var UserMessage = (props) => {
1535
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: props.subComponent || props.message });
1459
+ const { message, ImageRenderer: ImageRenderer2 } = props;
1460
+ const isImageMessage = message && "image" in message && message.image;
1461
+ if (isImageMessage) {
1462
+ const imageMessage = message;
1463
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
1464
+ }
1465
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
1536
1466
  };
1537
1467
 
1538
1468
  // src/components/chat/Markdown.tsx
@@ -1966,8 +1896,19 @@ var defaultComponents = {
1966
1896
  children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
1967
1897
  }
1968
1898
  const match = /language-(\w+)/.exec(className || "");
1969
- if (inline) {
1970
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("code", __spreadProps(__spreadValues({ className }, props), { children }));
1899
+ const hasLanguage = match && match[1];
1900
+ const content = String(children);
1901
+ const hasNewlines = content.includes("\n");
1902
+ const isInline = !hasLanguage && !hasNewlines;
1903
+ if (isInline) {
1904
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1905
+ "code",
1906
+ __spreadProps(__spreadValues({
1907
+ className: `copilotKitMarkdownElement copilotKitInlineCode ${className || ""}`
1908
+ }, props), {
1909
+ children
1910
+ })
1911
+ );
1971
1912
  }
1972
1913
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1973
1914
  CodeBlock,
@@ -2043,55 +1984,51 @@ var Markdown = ({ content, components }) => {
2043
1984
  var import_react12 = require("react");
2044
1985
  var import_jsx_runtime17 = require("react/jsx-runtime");
2045
1986
  var AssistantMessage = (props) => {
1987
+ var _a;
2046
1988
  const { icons, labels } = useChatContext();
2047
1989
  const {
2048
1990
  message,
2049
1991
  isLoading,
2050
- subComponent,
2051
1992
  onRegenerate,
2052
1993
  onCopy,
2053
1994
  onThumbsUp,
2054
1995
  onThumbsDown,
2055
1996
  isCurrentMessage,
2056
- rawData,
2057
1997
  markdownTagRenderers
2058
1998
  } = props;
2059
1999
  const [copied, setCopied] = (0, import_react12.useState)(false);
2060
2000
  const handleCopy = () => {
2061
- if (message && onCopy) {
2062
- navigator.clipboard.writeText(message);
2001
+ const content2 = (message == null ? void 0 : message.content) || "";
2002
+ if (content2 && onCopy) {
2003
+ navigator.clipboard.writeText(content2);
2063
2004
  setCopied(true);
2064
- onCopy(message);
2005
+ onCopy(content2);
2065
2006
  setTimeout(() => setCopied(false), 2e3);
2066
- } else if (message) {
2067
- navigator.clipboard.writeText(message);
2007
+ } else if (content2) {
2008
+ navigator.clipboard.writeText(content2);
2068
2009
  setCopied(true);
2069
2010
  setTimeout(() => setCopied(false), 2e3);
2070
2011
  }
2071
2012
  };
2072
2013
  const handleRegenerate = () => {
2073
- if (onRegenerate) {
2014
+ if (onRegenerate)
2074
2015
  onRegenerate();
2075
- }
2076
2016
  };
2077
2017
  const handleThumbsUp = () => {
2078
- const fullMessage = rawData;
2079
- if (onThumbsUp && fullMessage) {
2080
- onThumbsUp(fullMessage);
2081
- }
2018
+ if (onThumbsUp && message)
2019
+ onThumbsUp(message);
2082
2020
  };
2083
2021
  const handleThumbsDown = () => {
2084
- const fullMessage = rawData;
2085
- if (onThumbsDown && fullMessage) {
2086
- onThumbsDown(fullMessage);
2087
- }
2022
+ if (onThumbsDown && message)
2023
+ onThumbsDown(message);
2088
2024
  };
2089
2025
  const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
2026
+ const content = (message == null ? void 0 : message.content) || "";
2027
+ const subComponent = (_a = message == null ? void 0 : message.generativeUI) == null ? void 0 : _a.call(message);
2090
2028
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
2091
- (message || isLoading) && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
2092
- message && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Markdown, { content: message || "", components: markdownTagRenderers }),
2093
- isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
2094
- message && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2029
+ content && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
2030
+ content && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Markdown, { content, components: markdownTagRenderers }),
2031
+ content && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2095
2032
  "div",
2096
2033
  {
2097
2034
  className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
@@ -2140,19 +2077,52 @@ var AssistantMessage = (props) => {
2140
2077
  }
2141
2078
  )
2142
2079
  ] }),
2143
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent })
2080
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent }),
2081
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {})
2144
2082
  ] });
2145
2083
  };
2146
2084
 
2147
- // src/components/chat/messages/RenderTextMessage.tsx
2085
+ // src/components/chat/messages/ImageRenderer.tsx
2086
+ var import_react13 = require("react");
2148
2087
  var import_jsx_runtime18 = require("react/jsx-runtime");
2149
- function RenderTextMessage(_a) {
2088
+ var ImageRenderer = ({ image, content, className = "" }) => {
2089
+ const [imageError, setImageError] = (0, import_react13.useState)(false);
2090
+ const imageSrc = `data:image/${image.format};base64,${image.bytes}`;
2091
+ const altText = content || "User uploaded image";
2092
+ const handleImageError = () => {
2093
+ setImageError(true);
2094
+ };
2095
+ if (imageError) {
2096
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: `copilotKitImageRendering copilotKitImageRenderingError ${className}`, children: [
2097
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitImageRenderingErrorMessage", children: "Failed to load image" }),
2098
+ content && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
2099
+ ] });
2100
+ }
2101
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: `copilotKitImageRendering ${className}`, children: [
2102
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2103
+ "img",
2104
+ {
2105
+ src: imageSrc,
2106
+ alt: altText,
2107
+ className: "copilotKitImageRenderingImage",
2108
+ onError: handleImageError
2109
+ }
2110
+ ),
2111
+ content && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
2112
+ ] });
2113
+ };
2114
+
2115
+ // src/components/chat/messages/RenderMessage.tsx
2116
+ var import_jsx_runtime19 = require("react/jsx-runtime");
2117
+ function RenderMessage(_a) {
2150
2118
  var _b = _a, {
2151
2119
  UserMessage: UserMessage2 = UserMessage,
2152
- AssistantMessage: AssistantMessage2 = AssistantMessage
2120
+ AssistantMessage: AssistantMessage2 = AssistantMessage,
2121
+ ImageRenderer: ImageRenderer2 = ImageRenderer
2153
2122
  } = _b, props = __objRest(_b, [
2154
2123
  "UserMessage",
2155
- "AssistantMessage"
2124
+ "AssistantMessage",
2125
+ "ImageRenderer"
2156
2126
  ]);
2157
2127
  const {
2158
2128
  message,
@@ -2165,24 +2135,23 @@ function RenderTextMessage(_a) {
2165
2135
  onThumbsDown,
2166
2136
  markdownTagRenderers
2167
2137
  } = props;
2168
- if (message.isTextMessage()) {
2169
- if (message.role === "user") {
2170
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2138
+ switch (message.role) {
2139
+ case "user":
2140
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2171
2141
  UserMessage2,
2172
2142
  {
2173
2143
  "data-message-role": "user",
2174
- message: message.content,
2175
- rawData: message
2144
+ message,
2145
+ ImageRenderer: ImageRenderer2
2176
2146
  },
2177
2147
  index
2178
2148
  );
2179
- } else if (message.role == "assistant") {
2180
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2149
+ case "assistant":
2150
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2181
2151
  AssistantMessage2,
2182
2152
  {
2183
2153
  "data-message-role": "assistant",
2184
- message: message.content,
2185
- rawData: message,
2154
+ message,
2186
2155
  isLoading: inProgress && isCurrentMessage && !message.content,
2187
2156
  isGenerating: inProgress && isCurrentMessage && !!message.content,
2188
2157
  isCurrentMessage,
@@ -2190,421 +2159,22 @@ function RenderTextMessage(_a) {
2190
2159
  onCopy,
2191
2160
  onThumbsUp,
2192
2161
  onThumbsDown,
2193
- markdownTagRenderers
2194
- },
2195
- index
2196
- );
2197
- }
2198
- }
2199
- }
2200
-
2201
- // src/components/chat/messages/RenderActionExecutionMessage.tsx
2202
- var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
2203
- var import_react_core7 = require("@copilotkit/react-core");
2204
- var import_jsx_runtime19 = require("react/jsx-runtime");
2205
- function RenderActionExecutionMessage(_a) {
2206
- var _b = _a, {
2207
- AssistantMessage: AssistantMessage2 = AssistantMessage
2208
- } = _b, props = __objRest(_b, [
2209
- "AssistantMessage"
2210
- ]);
2211
- const { chatComponentsCache } = (0, import_react_core7.useCopilotContext)();
2212
- const { message, inProgress, index, isCurrentMessage, actionResult } = props;
2213
- if (message.isActionExecutionMessage()) {
2214
- if (chatComponentsCache.current !== null && (chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"])) {
2215
- const render = chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"];
2216
- if (typeof render === "string") {
2217
- if (isCurrentMessage && inProgress) {
2218
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2219
- AssistantMessage2,
2220
- {
2221
- rawData: message,
2222
- "data-message-role": "assistant",
2223
- isLoading: false,
2224
- isGenerating: true,
2225
- message: render
2226
- },
2227
- index
2228
- );
2229
- } else {
2230
- return null;
2231
- }
2232
- } else {
2233
- const args = message.arguments;
2234
- let status = "inProgress";
2235
- if (actionResult !== void 0) {
2236
- status = "complete";
2237
- } else if (message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending) {
2238
- status = "executing";
2239
- }
2240
- try {
2241
- const toRender = render({
2242
- status,
2243
- // Cast to any as RenderFunctionStatus is a union that can be complex to narrow here
2244
- args,
2245
- result: actionResult,
2246
- name: message.name,
2247
- messageId: message.id
2248
- // Pass messageId for HITL action correlation
2249
- });
2250
- if (!toRender && status === "complete") {
2251
- return null;
2252
- }
2253
- if (typeof toRender === "string") {
2254
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2255
- AssistantMessage2,
2256
- {
2257
- rawData: message,
2258
- "data-message-role": "assistant",
2259
- isLoading: false,
2260
- isGenerating: false,
2261
- message: toRender
2262
- },
2263
- index
2264
- );
2265
- } else {
2266
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2267
- AssistantMessage2,
2268
- {
2269
- rawData: message,
2270
- "data-message-role": "action-render",
2271
- isLoading: false,
2272
- isGenerating: false,
2273
- subComponent: toRender
2274
- },
2275
- index
2276
- );
2277
- }
2278
- } catch (e) {
2279
- console.error(`Error executing render function for action ${message.name}: ${e}`);
2280
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2281
- AssistantMessage2,
2282
- {
2283
- rawData: message,
2284
- "data-message-role": "assistant",
2285
- isLoading: false,
2286
- isGenerating: false,
2287
- subComponent: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
2288
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("b", { children: [
2289
- "\u274C Error executing render function for action ",
2290
- message.name,
2291
- ":"
2292
- ] }),
2293
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("pre", { children: e instanceof Error ? e.message : String(e) })
2294
- ] })
2295
- },
2296
- index
2297
- );
2298
- }
2299
- }
2300
- } else if (!inProgress || !isCurrentMessage) {
2301
- return null;
2302
- } else {
2303
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2304
- AssistantMessage2,
2305
- {
2306
- rawData: message,
2307
- "data-message-role": "assistant",
2308
- isLoading: true,
2309
- isGenerating: true
2310
- },
2311
- index
2312
- );
2313
- }
2314
- }
2315
- }
2316
-
2317
- // src/components/chat/messages/RenderResultMessage.tsx
2318
- var import_jsx_runtime20 = require("react/jsx-runtime");
2319
- function RenderResultMessage(_a) {
2320
- var _b = _a, {
2321
- AssistantMessage: AssistantMessage2 = AssistantMessage
2322
- } = _b, props = __objRest(_b, [
2323
- "AssistantMessage"
2324
- ]);
2325
- const { message, inProgress, index, isCurrentMessage } = props;
2326
- if (message.isResultMessage() && inProgress && isCurrentMessage) {
2327
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2328
- AssistantMessage2,
2329
- {
2330
- "data-message-role": "assistant",
2331
- rawData: message,
2332
- isLoading: true,
2333
- isGenerating: true
2334
- },
2335
- index
2336
- );
2337
- } else {
2338
- return null;
2339
- }
2340
- }
2341
-
2342
- // src/components/chat/messages/RenderAgentStateMessage.tsx
2343
- var import_react_core8 = require("@copilotkit/react-core");
2344
- var import_jsx_runtime21 = require("react/jsx-runtime");
2345
- function RenderAgentStateMessage(_a) {
2346
- var _b = _a, {
2347
- AssistantMessage: AssistantMessage2 = AssistantMessage
2348
- } = _b, props = __objRest(_b, [
2349
- "AssistantMessage"
2350
- ]);
2351
- const { chatComponentsCache } = (0, import_react_core8.useCopilotContext)();
2352
- const { message, inProgress, index, isCurrentMessage } = props;
2353
- if (message.isAgentStateMessage()) {
2354
- let render;
2355
- if (chatComponentsCache.current !== null) {
2356
- render = chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-global`];
2357
- }
2358
- if (render) {
2359
- if (typeof render === "string") {
2360
- if (isCurrentMessage && inProgress) {
2361
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2362
- AssistantMessage2,
2363
- {
2364
- rawData: message,
2365
- message: render,
2366
- "data-message-role": "assistant",
2367
- isLoading: true,
2368
- isGenerating: true
2369
- },
2370
- index
2371
- );
2372
- } else {
2373
- return null;
2374
- }
2375
- } else {
2376
- const state = message.state;
2377
- let status = message.active ? "inProgress" : "complete";
2378
- const toRender = render({
2379
- status,
2380
- state,
2381
- nodeName: message.nodeName
2382
- });
2383
- if (!toRender && status === "complete") {
2384
- return null;
2385
- }
2386
- if (!toRender && isCurrentMessage && inProgress) {
2387
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2388
- AssistantMessage2,
2389
- {
2390
- "data-message-role": "assistant",
2391
- rawData: message,
2392
- isLoading: true,
2393
- isGenerating: true
2394
- },
2395
- index
2396
- );
2397
- } else if (!toRender) {
2398
- return null;
2399
- }
2400
- if (typeof toRender === "string") {
2401
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2402
- AssistantMessage2,
2403
- {
2404
- rawData: message,
2405
- message: toRender,
2406
- isLoading: true,
2407
- isGenerating: true,
2408
- "data-message-role": "assistant"
2409
- },
2410
- index
2411
- );
2412
- } else {
2413
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2414
- AssistantMessage2,
2415
- {
2416
- rawData: message,
2417
- "data-message-role": "agent-state-render",
2418
- isLoading: false,
2419
- isGenerating: false,
2420
- subComponent: toRender
2421
- },
2422
- index
2423
- );
2424
- }
2425
- }
2426
- } else if (!inProgress || !isCurrentMessage) {
2427
- return null;
2428
- } else {
2429
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2430
- AssistantMessage2,
2431
- {
2432
- rawData: message,
2433
- isLoading: true,
2434
- isGenerating: true,
2435
- "data-message-role": "assistant"
2162
+ markdownTagRenderers,
2163
+ ImageRenderer: ImageRenderer2
2436
2164
  },
2437
2165
  index
2438
2166
  );
2439
- }
2440
2167
  }
2441
2168
  }
2442
2169
 
2443
- // src/components/chat/messages/RenderImageMessage.tsx
2444
- var import_jsx_runtime22 = require("react/jsx-runtime");
2445
- function RenderImageMessage(_a) {
2446
- var _b = _a, {
2447
- UserMessage: UserMessage2 = UserMessage,
2448
- AssistantMessage: AssistantMessage2 = AssistantMessage
2449
- } = _b, props = __objRest(_b, [
2450
- "UserMessage",
2451
- "AssistantMessage"
2452
- ]);
2453
- const {
2454
- message,
2455
- inProgress,
2456
- index,
2457
- isCurrentMessage,
2458
- onRegenerate,
2459
- onCopy,
2460
- onThumbsUp,
2461
- onThumbsDown
2462
- } = props;
2463
- if (message.isImageMessage()) {
2464
- const imageData = `data:${message.format};base64,${message.bytes}`;
2465
- const imageComponent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "copilotKitImage", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2466
- "img",
2467
- {
2468
- src: imageData,
2469
- alt: "User uploaded image",
2470
- style: { maxWidth: "100%", maxHeight: "300px", borderRadius: "8px" }
2471
- }
2472
- ) });
2473
- if (message.role === "user") {
2474
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2475
- UserMessage2,
2476
- {
2477
- "data-message-role": "user",
2478
- message: "",
2479
- rawData: message,
2480
- subComponent: imageComponent
2481
- },
2482
- index
2483
- );
2484
- } else if (message.role === "assistant") {
2485
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2486
- AssistantMessage2,
2487
- {
2488
- "data-message-role": "assistant",
2489
- message: "",
2490
- rawData: message,
2491
- subComponent: imageComponent,
2492
- isLoading: inProgress && isCurrentMessage && !message.bytes,
2493
- isGenerating: inProgress && isCurrentMessage && !!message.bytes,
2494
- isCurrentMessage,
2495
- onRegenerate: () => onRegenerate == null ? void 0 : onRegenerate(message.id),
2496
- onCopy,
2497
- onThumbsUp,
2498
- onThumbsDown
2499
- },
2500
- index
2501
- );
2502
- }
2503
- }
2504
- return null;
2505
- }
2506
-
2507
2170
  // src/components/chat/Chat.tsx
2508
- var import_react13 = __toESM(require("react"));
2509
- var import_react_core10 = require("@copilotkit/react-core");
2510
-
2511
- // src/components/chat/Suggestion.tsx
2512
- var import_react_core9 = require("@copilotkit/react-core");
2171
+ var import_react14 = __toESM(require("react"));
2172
+ var import_react_core8 = require("@copilotkit/react-core");
2513
2173
  var import_shared3 = require("@copilotkit/shared");
2514
- var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
2515
- var import_jsx_runtime23 = require("react/jsx-runtime");
2516
- function Suggestion({ title, onClick, partial, className }) {
2517
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2518
- "button",
2519
- {
2520
- disabled: partial,
2521
- onClick: (e) => {
2522
- e.preventDefault();
2523
- onClick();
2524
- },
2525
- className: className || (partial ? "suggestion loading" : "suggestion"),
2526
- "data-test-id": "suggestion",
2527
- children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: title })
2528
- }
2529
- );
2530
- }
2531
- var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggestions, abortControllerRef) => __async(void 0, null, function* () {
2532
- const abortController = abortControllerRef.current;
2533
- const tools = JSON.stringify(
2534
- Object.values(context.actions).map((action) => ({
2535
- name: action.name,
2536
- description: action.description,
2537
- jsonSchema: JSON.stringify((0, import_shared3.actionParametersToJsonSchema)(action.parameters))
2538
- }))
2539
- );
2540
- const allSuggestions = [];
2541
- for (const config of Object.values(chatSuggestionConfiguration)) {
2542
- try {
2543
- 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.`;
2544
- const result = yield (0, import_react_core9.extract)({
2545
- context,
2546
- instructions: "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. ",
2547
- data: config.instructions + "\n\n" + numOfSuggestionsInstructions + "\n\nAvailable tools: " + tools + "\n\n",
2548
- requestType: import_runtime_client_gql3.CopilotRequestType.Task,
2549
- parameters: [
2550
- {
2551
- name: "suggestions",
2552
- type: "object[]",
2553
- attributes: [
2554
- {
2555
- name: "title",
2556
- description: "The title of the suggestion. This is shown as a button and should be short.",
2557
- type: "string"
2558
- },
2559
- {
2560
- name: "message",
2561
- 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.",
2562
- type: "string"
2563
- }
2564
- ]
2565
- }
2566
- ],
2567
- include: {
2568
- messages: true,
2569
- readable: true
2570
- },
2571
- abortSignal: abortController == null ? void 0 : abortController.signal,
2572
- stream: ({ status, args }) => {
2573
- const suggestions = args.suggestions || [];
2574
- const newSuggestions = [];
2575
- for (let i = 0; i < suggestions.length; i++) {
2576
- if (config.maxSuggestions !== void 0 && i >= config.maxSuggestions) {
2577
- break;
2578
- }
2579
- const { title, message } = suggestions[i];
2580
- const partial = i == suggestions.length - 1 && status !== "complete";
2581
- newSuggestions.push({
2582
- title,
2583
- message,
2584
- partial,
2585
- className: config.className
2586
- });
2587
- }
2588
- setCurrentSuggestions([...allSuggestions, ...newSuggestions]);
2589
- }
2590
- });
2591
- allSuggestions.push(...result.suggestions);
2592
- } catch (error) {
2593
- console.error("Error loading suggestions", error);
2594
- }
2595
- }
2596
- if (abortControllerRef.current === abortController) {
2597
- abortControllerRef.current = null;
2598
- }
2599
- });
2600
-
2601
- // src/components/chat/Chat.tsx
2602
- var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
2603
- var import_shared4 = require("@copilotkit/shared");
2604
- var import_react_core11 = require("@copilotkit/react-core");
2174
+ var import_react_core9 = require("@copilotkit/react-core");
2605
2175
 
2606
2176
  // src/components/chat/ImageUploadQueue.tsx
2607
- var import_jsx_runtime24 = require("react/jsx-runtime");
2177
+ var import_jsx_runtime20 = require("react/jsx-runtime");
2608
2178
  var ImageUploadQueue = ({
2609
2179
  images,
2610
2180
  onRemoveImage,
@@ -2612,7 +2182,7 @@ var ImageUploadQueue = ({
2612
2182
  }) => {
2613
2183
  if (images.length === 0)
2614
2184
  return null;
2615
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2185
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2616
2186
  "div",
2617
2187
  {
2618
2188
  className: `copilotKitImageUploadQueue ${className}`,
@@ -2623,7 +2193,7 @@ var ImageUploadQueue = ({
2623
2193
  margin: "8px",
2624
2194
  padding: "8px"
2625
2195
  },
2626
- children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2196
+ children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2627
2197
  "div",
2628
2198
  {
2629
2199
  className: "copilotKitImageUploadQueueItem",
@@ -2636,7 +2206,7 @@ var ImageUploadQueue = ({
2636
2206
  overflow: "hidden"
2637
2207
  },
2638
2208
  children: [
2639
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2209
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2640
2210
  "img",
2641
2211
  {
2642
2212
  src: `data:${image.contentType};base64,${image.bytes}`,
@@ -2648,7 +2218,7 @@ var ImageUploadQueue = ({
2648
2218
  }
2649
2219
  }
2650
2220
  ),
2651
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2221
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2652
2222
  "button",
2653
2223
  {
2654
2224
  onClick: () => onRemoveImage(index),
@@ -2681,10 +2251,32 @@ var ImageUploadQueue = ({
2681
2251
  );
2682
2252
  };
2683
2253
 
2254
+ // src/components/chat/Suggestion.tsx
2255
+ var import_react_core7 = require("@copilotkit/react-core");
2256
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2257
+ function Suggestion({ title, onClick, partial, className }) {
2258
+ if (!title)
2259
+ return null;
2260
+ const { isLoading } = (0, import_react_core7.useCopilotChat)();
2261
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2262
+ "button",
2263
+ {
2264
+ disabled: partial || isLoading,
2265
+ onClick: (e) => {
2266
+ e.preventDefault();
2267
+ onClick();
2268
+ },
2269
+ className: className || (partial ? "suggestion loading" : "suggestion"),
2270
+ "data-test-id": "suggestion",
2271
+ children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: title })
2272
+ }
2273
+ );
2274
+ }
2275
+
2684
2276
  // src/components/chat/Suggestions.tsx
2685
- var import_jsx_runtime25 = require("react/jsx-runtime");
2277
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2686
2278
  function Suggestions({ suggestions, onSuggestionClick }) {
2687
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2279
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2688
2280
  Suggestion,
2689
2281
  {
2690
2282
  title: suggestion.title,
@@ -2698,9 +2290,10 @@ function Suggestions({ suggestions, onSuggestionClick }) {
2698
2290
  }
2699
2291
 
2700
2292
  // src/components/chat/Chat.tsx
2701
- var import_jsx_runtime26 = require("react/jsx-runtime");
2293
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2702
2294
  function CopilotChat({
2703
2295
  instructions,
2296
+ suggestions = "auto",
2704
2297
  onSubmitMessage,
2705
2298
  makeSystemMessage,
2706
2299
  onInProgress,
@@ -2712,11 +2305,7 @@ function CopilotChat({
2712
2305
  onThumbsDown,
2713
2306
  markdownTagRenderers,
2714
2307
  Messages: Messages2 = Messages,
2715
- RenderTextMessage: RenderTextMessage2 = RenderTextMessage,
2716
- RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
2717
- RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
2718
- RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
2719
- RenderImageMessage: RenderImageMessage2 = RenderImageMessage,
2308
+ RenderMessage: RenderMessage2 = RenderMessage,
2720
2309
  RenderSuggestionsList = Suggestions,
2721
2310
  Input: Input2 = Input,
2722
2311
  className,
@@ -2724,14 +2313,15 @@ function CopilotChat({
2724
2313
  labels,
2725
2314
  AssistantMessage: AssistantMessage2 = AssistantMessage,
2726
2315
  UserMessage: UserMessage2 = UserMessage,
2316
+ ImageRenderer: ImageRenderer2 = ImageRenderer,
2727
2317
  imageUploadsEnabled,
2728
2318
  inputFileAccept = "image/*",
2729
2319
  hideStopButton
2730
2320
  }) {
2731
- const { additionalInstructions, setChatInstructions } = (0, import_react_core10.useCopilotContext)();
2732
- const [selectedImages, setSelectedImages] = (0, import_react13.useState)([]);
2733
- const fileInputRef = (0, import_react13.useRef)(null);
2734
- (0, import_react13.useEffect)(() => {
2321
+ const { additionalInstructions, setChatInstructions } = (0, import_react_core8.useCopilotContext)();
2322
+ const [selectedImages, setSelectedImages] = (0, import_react14.useState)([]);
2323
+ const fileInputRef = (0, import_react14.useRef)(null);
2324
+ (0, import_react14.useEffect)(() => {
2735
2325
  if (!imageUploadsEnabled)
2736
2326
  return;
2737
2327
  const handlePaste = (e) => __async(this, null, function* () {
@@ -2776,7 +2366,7 @@ function CopilotChat({
2776
2366
  document.addEventListener("paste", handlePaste);
2777
2367
  return () => document.removeEventListener("paste", handlePaste);
2778
2368
  }, [imageUploadsEnabled]);
2779
- (0, import_react13.useEffect)(() => {
2369
+ (0, import_react14.useEffect)(() => {
2780
2370
  if (!(additionalInstructions == null ? void 0 : additionalInstructions.length)) {
2781
2371
  setChatInstructions(instructions || "");
2782
2372
  return;
@@ -2786,17 +2376,17 @@ function CopilotChat({
2786
2376
  "Additionally, follow these instructions:",
2787
2377
  ...additionalInstructions.map((instruction) => `- ${instruction}`)
2788
2378
  ];
2789
- console.log("combinedAdditionalInstructions", combinedAdditionalInstructions);
2790
2379
  setChatInstructions(combinedAdditionalInstructions.join("\n") || "");
2791
2380
  }, [instructions, additionalInstructions]);
2792
2381
  const {
2793
2382
  visibleMessages,
2794
2383
  isLoading,
2795
- currentSuggestions,
2796
2384
  sendMessage,
2797
2385
  stopGeneration,
2798
- reloadMessages
2386
+ reloadMessages,
2387
+ suggestions: currentSuggestions
2799
2388
  } = useCopilotChatLogic(
2389
+ suggestions,
2800
2390
  makeSystemMessage,
2801
2391
  onInProgress,
2802
2392
  onSubmitMessage,
@@ -2811,7 +2401,7 @@ function CopilotChat({
2811
2401
  }
2812
2402
  return sendMessage(text, images);
2813
2403
  };
2814
- const chatContext = import_react13.default.useContext(ChatContext);
2404
+ const chatContext = import_react14.default.useContext(ChatContext);
2815
2405
  const isVisible = chatContext ? chatContext.open : true;
2816
2406
  const handleRegenerate = (messageId) => {
2817
2407
  if (onRegenerate) {
@@ -2858,17 +2448,13 @@ function CopilotChat({
2858
2448
  const removeSelectedImage = (index) => {
2859
2449
  setSelectedImages((prev) => prev.filter((_, i) => i !== index));
2860
2450
  };
2861
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
2862
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2451
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
2452
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2863
2453
  Messages2,
2864
2454
  {
2865
2455
  AssistantMessage: AssistantMessage2,
2866
2456
  UserMessage: UserMessage2,
2867
- RenderTextMessage: RenderTextMessage2,
2868
- RenderActionExecutionMessage: RenderActionExecutionMessage2,
2869
- RenderAgentStateMessage: RenderAgentStateMessage2,
2870
- RenderResultMessage: RenderResultMessage2,
2871
- RenderImageMessage: RenderImageMessage2,
2457
+ RenderMessage: RenderMessage2,
2872
2458
  messages: visibleMessages,
2873
2459
  inProgress: isLoading,
2874
2460
  onRegenerate: handleRegenerate,
@@ -2876,7 +2462,8 @@ function CopilotChat({
2876
2462
  onThumbsUp,
2877
2463
  onThumbsDown,
2878
2464
  markdownTagRenderers,
2879
- children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2465
+ ImageRenderer: ImageRenderer2,
2466
+ children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2880
2467
  RenderSuggestionsList,
2881
2468
  {
2882
2469
  onSuggestionClick: handleSendMessage,
@@ -2885,9 +2472,9 @@ function CopilotChat({
2885
2472
  )
2886
2473
  }
2887
2474
  ),
2888
- imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
2889
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
2890
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2475
+ imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
2476
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
2477
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2891
2478
  "input",
2892
2479
  {
2893
2480
  type: "file",
@@ -2899,7 +2486,7 @@ function CopilotChat({
2899
2486
  }
2900
2487
  )
2901
2488
  ] }),
2902
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2489
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2903
2490
  Input2,
2904
2491
  {
2905
2492
  inProgress: isLoading,
@@ -2921,75 +2508,118 @@ function WrappedCopilotChat({
2921
2508
  labels,
2922
2509
  className
2923
2510
  }) {
2924
- const chatContext = import_react13.default.useContext(ChatContext);
2511
+ const chatContext = import_react14.default.useContext(ChatContext);
2925
2512
  if (!chatContext) {
2926
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
2927
- }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
2513
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
2514
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
2928
2515
  }
2929
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_jsx_runtime26.Fragment, { children });
2516
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, { children });
2930
2517
  }
2931
- var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
2932
- var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2518
+ var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2933
2519
  var _a;
2934
2520
  const {
2935
2521
  visibleMessages,
2936
2522
  appendMessage,
2523
+ setMessages,
2937
2524
  reloadMessages: defaultReloadMessages,
2938
2525
  stopGeneration: defaultStopGeneration,
2939
2526
  runChatCompletion,
2940
- isLoading
2941
- } = (0, import_react_core10.useCopilotChat)({
2942
- id: (0, import_shared4.randomId)(),
2527
+ isLoading,
2528
+ suggestions,
2529
+ setSuggestions,
2530
+ generateSuggestions,
2531
+ resetSuggestions: resetSuggestionsFromHook,
2532
+ isLoadingSuggestions
2533
+ } = (0, import_react_core8.useCopilotChat)({
2943
2534
  makeSystemMessage
2944
2535
  });
2945
- const [currentSuggestions, setCurrentSuggestions] = (0, import_react13.useState)([]);
2946
- const suggestionsAbortControllerRef = (0, import_react13.useRef)(null);
2947
- const debounceTimerRef = (0, import_react13.useRef)();
2948
- const abortSuggestions = () => {
2949
- var _a2;
2950
- (_a2 = suggestionsAbortControllerRef.current) == null ? void 0 : _a2.abort();
2951
- suggestionsAbortControllerRef.current = null;
2952
- };
2953
- const generalContext = (0, import_react_core10.useCopilotContext)();
2954
- const messagesContext = (0, import_react_core10.useCopilotMessagesContext)();
2955
- const context = __spreadValues(__spreadValues({}, generalContext), messagesContext);
2956
- (0, import_react13.useEffect)(() => {
2957
- onInProgress == null ? void 0 : onInProgress(isLoading);
2958
- abortSuggestions();
2959
- debounceTimerRef.current = setTimeout(
2960
- () => {
2961
- if (!isLoading && Object.keys(context.chatSuggestionConfiguration).length !== 0) {
2962
- suggestionsAbortControllerRef.current = new AbortController();
2963
- reloadSuggestions(
2964
- context,
2965
- context.chatSuggestionConfiguration,
2966
- setCurrentSuggestions,
2967
- suggestionsAbortControllerRef
2968
- );
2969
- }
2970
- },
2971
- currentSuggestions.length == 0 ? 0 : SUGGESTIONS_DEBOUNCE_TIMEOUT
2972
- );
2973
- return () => {
2974
- clearTimeout(debounceTimerRef.current);
2975
- };
2536
+ const generalContext = (0, import_react_core8.useCopilotContext)();
2537
+ const messagesContext = (0, import_react_core8.useCopilotMessagesContext)();
2538
+ const { actions } = generalContext;
2539
+ const [suggestionsFailed, setSuggestionsFailed] = (0, import_react14.useState)(false);
2540
+ const hasGeneratedInitialSuggestions = (0, import_react14.useRef)(false);
2541
+ (0, import_react14.useEffect)(() => {
2542
+ if (Array.isArray(chatSuggestions)) {
2543
+ setSuggestions(chatSuggestions);
2544
+ hasGeneratedInitialSuggestions.current = true;
2545
+ }
2546
+ }, [JSON.stringify(chatSuggestions), setSuggestions]);
2547
+ const generateSuggestionsWithErrorHandling = (0, import_react14.useCallback)(
2548
+ (context) => __async(void 0, null, function* () {
2549
+ try {
2550
+ yield generateSuggestions();
2551
+ } catch (error) {
2552
+ console.error("Failed to generate suggestions:", error);
2553
+ setSuggestionsFailed(true);
2554
+ }
2555
+ }),
2556
+ [generateSuggestions]
2557
+ );
2558
+ (0, import_react14.useEffect)(() => {
2559
+ if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2560
+ return;
2561
+ }
2562
+ if (isLoading) {
2563
+ return;
2564
+ }
2565
+ if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2566
+ return;
2567
+ }
2568
+ if (visibleMessages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2569
+ hasGeneratedInitialSuggestions.current = true;
2570
+ generateSuggestionsWithErrorHandling("initial");
2571
+ return;
2572
+ }
2573
+ if (visibleMessages.length > 0 && suggestions.length === 0) {
2574
+ generateSuggestionsWithErrorHandling("post-message");
2575
+ return;
2576
+ }
2976
2577
  }, [
2578
+ chatSuggestions,
2579
+ isLoadingSuggestions,
2580
+ suggestionsFailed,
2581
+ visibleMessages.length,
2977
2582
  isLoading,
2978
- context.chatSuggestionConfiguration,
2979
- // hackish way to trigger suggestions reload on reset, but better than moving suggestions to the
2980
- // global context
2981
- visibleMessages.length == 0
2583
+ suggestions.length,
2584
+ Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2585
+ // Use stable string instead of object reference
2586
+ generateSuggestionsWithErrorHandling
2982
2587
  ]);
2588
+ (0, import_react14.useEffect)(() => {
2589
+ if (chatSuggestions !== "auto") {
2590
+ hasGeneratedInitialSuggestions.current = false;
2591
+ setSuggestionsFailed(false);
2592
+ }
2593
+ }, [chatSuggestions]);
2594
+ const stableContext = (0, import_react14.useMemo)(
2595
+ () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2596
+ [
2597
+ // Only include stable dependencies
2598
+ generalContext.actions,
2599
+ messagesContext.messages.length,
2600
+ generalContext.isLoading
2601
+ ]
2602
+ );
2603
+ const resetSuggestions = (0, import_react14.useCallback)(() => {
2604
+ resetSuggestionsFromHook();
2605
+ setSuggestionsFailed(false);
2606
+ hasGeneratedInitialSuggestions.current = false;
2607
+ }, [resetSuggestionsFromHook]);
2608
+ (0, import_react14.useEffect)(() => {
2609
+ onInProgress == null ? void 0 : onInProgress(isLoading);
2610
+ }, [onInProgress, isLoading]);
2983
2611
  const sendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2984
2612
  const images = imagesToUse || [];
2985
- abortSuggestions();
2986
- setCurrentSuggestions([]);
2613
+ if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2614
+ setSuggestions([]);
2615
+ }
2987
2616
  let firstMessage = null;
2988
2617
  if (messageContent.trim().length > 0) {
2989
- const textMessage = new import_runtime_client_gql4.TextMessage({
2990
- content: messageContent,
2991
- role: import_runtime_client_gql4.Role.User
2992
- });
2618
+ const textMessage = {
2619
+ id: (0, import_shared3.randomId)(),
2620
+ role: "user",
2621
+ content: messageContent
2622
+ };
2993
2623
  if (onSubmitMessage) {
2994
2624
  try {
2995
2625
  yield onSubmitMessage(messageContent);
@@ -2997,18 +2627,24 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2997
2627
  console.error("Error in onSubmitMessage:", error);
2998
2628
  }
2999
2629
  }
3000
- yield appendMessage(textMessage, { followUp: images.length === 0 });
2630
+ yield appendMessage(textMessage, {
2631
+ followUp: images.length === 0,
2632
+ clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2633
+ });
3001
2634
  if (!firstMessage) {
3002
2635
  firstMessage = textMessage;
3003
2636
  }
3004
2637
  }
3005
2638
  if (images.length > 0) {
3006
2639
  for (let i = 0; i < images.length; i++) {
3007
- const imageMessage = new import_runtime_client_gql4.ImageMessage({
3008
- format: images[i].contentType.replace("image/", ""),
3009
- bytes: images[i].bytes,
3010
- role: import_runtime_client_gql4.Role.User
3011
- });
2640
+ const imageMessage = {
2641
+ id: (0, import_shared3.randomId)(),
2642
+ role: "user",
2643
+ image: {
2644
+ format: images[i].contentType.replace("image/", ""),
2645
+ bytes: images[i].bytes
2646
+ }
2647
+ };
3012
2648
  yield appendMessage(imageMessage, { followUp: i === images.length - 1 });
3013
2649
  if (!firstMessage) {
3014
2650
  firstMessage = imageMessage;
@@ -3016,12 +2652,11 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
3016
2652
  }
3017
2653
  }
3018
2654
  if (!firstMessage) {
3019
- return new import_runtime_client_gql4.TextMessage({ content: "", role: import_runtime_client_gql4.Role.User });
2655
+ return { role: "user", content: "", id: (0, import_shared3.randomId)() };
3020
2656
  }
3021
2657
  return firstMessage;
3022
2658
  });
3023
2659
  const messages = visibleMessages;
3024
- const { setMessages } = messagesContext;
3025
2660
  const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
3026
2661
  const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
3027
2662
  if (generalContext.agentSession) {
@@ -3042,9 +2677,9 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
3042
2677
  });
3043
2678
  const runCurrentAgent = (hint) => __async(void 0, null, function* () {
3044
2679
  if (generalContext.agentSession) {
3045
- yield (0, import_react_core11.runAgent)(
2680
+ yield (0, import_react_core9.runAgent)(
3046
2681
  generalContext.agentSession.agentName,
3047
- context,
2682
+ stableContext,
3048
2683
  appendMessage,
3049
2684
  runChatCompletion,
3050
2685
  hint
@@ -3053,7 +2688,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
3053
2688
  });
3054
2689
  const stopCurrentAgent = () => {
3055
2690
  if (generalContext.agentSession) {
3056
- (0, import_react_core11.stopAgent)(generalContext.agentSession.agentName, context);
2691
+ (0, import_react_core9.stopAgent)(generalContext.agentSession.agentName, stableContext);
3057
2692
  }
3058
2693
  };
3059
2694
  const setCurrentAgentState = (state) => {
@@ -3068,6 +2703,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
3068
2703
  }
3069
2704
  };
3070
2705
  function stopGeneration() {
2706
+ setSuggestions([]);
3071
2707
  if (onStopGeneration) {
3072
2708
  onStopGeneration({
3073
2709
  messages,
@@ -3101,17 +2737,21 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
3101
2737
  }
3102
2738
  }
3103
2739
  return {
2740
+ messages,
3104
2741
  visibleMessages,
3105
2742
  isLoading,
3106
- currentSuggestions,
2743
+ suggestions,
3107
2744
  sendMessage,
3108
2745
  stopGeneration,
3109
- reloadMessages
2746
+ reloadMessages,
2747
+ resetSuggestions,
2748
+ context: stableContext,
2749
+ actions
3110
2750
  };
3111
2751
  };
3112
2752
 
3113
2753
  // src/components/chat/Modal.tsx
3114
- var import_jsx_runtime27 = require("react/jsx-runtime");
2754
+ var import_jsx_runtime24 = require("react/jsx-runtime");
3115
2755
  var CopilotModal = (_a) => {
3116
2756
  var _b = _a, {
3117
2757
  instructions,
@@ -3170,18 +2810,18 @@ var CopilotModal = (_a) => {
3170
2810
  "className",
3171
2811
  "children"
3172
2812
  ]);
3173
- const [openState, setOpenState] = import_react14.default.useState(defaultOpen);
2813
+ const [openState, setOpenState] = import_react15.default.useState(defaultOpen);
3174
2814
  const setOpen = (open) => {
3175
2815
  onSetOpen == null ? void 0 : onSetOpen(open);
3176
2816
  setOpenState(open);
3177
2817
  };
3178
- const memoizedHeader = (0, import_react14.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Header2, {}), [Header2]);
3179
- const memoizedChildren = (0, import_react14.useMemo)(() => children, [children]);
3180
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ChatContextProvider, { icons, labels, open: openState, setOpen, children: [
2818
+ const memoizedHeader = (0, import_react15.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Header2, {}), [Header2]);
2819
+ const memoizedChildren = (0, import_react15.useMemo)(() => children, [children]);
2820
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(ChatContextProvider, { icons, labels, open: openState, setOpen, children: [
3181
2821
  memoizedChildren,
3182
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className, children: [
3183
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Button2, {}),
3184
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2822
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className, children: [
2823
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Button2, {}),
2824
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
3185
2825
  Window2,
3186
2826
  {
3187
2827
  clickOutsideToClose,
@@ -3189,7 +2829,7 @@ var CopilotModal = (_a) => {
3189
2829
  hitEscapeToClose,
3190
2830
  children: [
3191
2831
  memoizedHeader,
3192
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2832
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3193
2833
  CopilotChat,
3194
2834
  __spreadProps(__spreadValues({}, props), {
3195
2835
  instructions,
@@ -3217,12 +2857,12 @@ var CopilotModal = (_a) => {
3217
2857
  };
3218
2858
 
3219
2859
  // src/components/chat/Sidebar.tsx
3220
- var import_jsx_runtime28 = require("react/jsx-runtime");
2860
+ var import_jsx_runtime25 = require("react/jsx-runtime");
3221
2861
  function CopilotSidebar(props) {
3222
2862
  props = __spreadProps(__spreadValues({}, props), {
3223
2863
  className: props.className ? props.className + " copilotKitSidebar" : "copilotKitSidebar"
3224
2864
  });
3225
- const [expandedClassName, setExpandedClassName] = (0, import_react15.useState)(
2865
+ const [expandedClassName, setExpandedClassName] = (0, import_react16.useState)(
3226
2866
  props.defaultOpen ? "sidebarExpanded" : ""
3227
2867
  );
3228
2868
  const onSetOpen = (open) => {
@@ -3230,7 +2870,7 @@ function CopilotSidebar(props) {
3230
2870
  (_a = props.onSetOpen) == null ? void 0 : _a.call(props, open);
3231
2871
  setExpandedClassName(open ? "sidebarExpanded" : "");
3232
2872
  };
3233
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
2873
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
3234
2874
  }
3235
2875
  // Annotate the CommonJS export names for ESM import in node:
3236
2876
  0 && (module.exports = {