@copilotkit/react-ui 1.10.7-next.0 → 1.50.0-beta.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 (129) hide show
  1. package/CHANGELOG.md +0 -9
  2. package/dist/{chunk-VTYBYTE6.mjs → chunk-3JYVJHL5.mjs} +7 -7
  3. package/dist/chunk-3YWFGNSM.mjs +32 -0
  4. package/dist/chunk-3YWFGNSM.mjs.map +1 -0
  5. package/dist/{chunk-YBRHDFVQ.mjs → chunk-CQ2WALZ7.mjs} +2 -2
  6. package/dist/{chunk-OWX6YJZH.mjs → chunk-E6WVAOQA.mjs} +9 -5
  7. package/dist/chunk-E6WVAOQA.mjs.map +1 -0
  8. package/dist/{chunk-WBPBTTQD.mjs → chunk-FFJHOZX6.mjs} +4 -4
  9. package/dist/{chunk-MJEYL3FK.mjs → chunk-G35HUUDA.mjs} +26 -260
  10. package/dist/chunk-G35HUUDA.mjs.map +1 -0
  11. package/dist/{chunk-V6DDX4LH.mjs → chunk-GDSZGYCE.mjs} +2 -2
  12. package/dist/{chunk-ZJCHKHE4.mjs → chunk-HBZW7E5Z.mjs} +13 -10
  13. package/dist/chunk-HBZW7E5Z.mjs.map +1 -0
  14. package/dist/{chunk-KX44MLR6.mjs → chunk-IHFR6PYG.mjs} +1 -1
  15. package/dist/chunk-IHFR6PYG.mjs.map +1 -0
  16. package/dist/{chunk-2XARU6EY.mjs → chunk-MPF6BJUF.mjs} +5 -3
  17. package/dist/chunk-MPF6BJUF.mjs.map +1 -0
  18. package/dist/{chunk-W26XFBEG.mjs → chunk-NGJ32FAP.mjs} +3 -3
  19. package/dist/chunk-NGJ32FAP.mjs.map +1 -0
  20. package/dist/{chunk-RKULVDQO.mjs → chunk-ODEHR7KI.mjs} +9 -2
  21. package/dist/chunk-ODEHR7KI.mjs.map +1 -0
  22. package/dist/chunk-OYRZ4VLU.mjs +12 -0
  23. package/dist/chunk-OYRZ4VLU.mjs.map +1 -0
  24. package/dist/chunk-QB3GUN2N.mjs +31 -0
  25. package/dist/chunk-QB3GUN2N.mjs.map +1 -0
  26. package/dist/{chunk-PIFTVJG3.mjs → chunk-SOB5EIL7.mjs} +2 -2
  27. package/dist/components/chat/Chat.d.ts +3 -98
  28. package/dist/components/chat/Chat.js +79 -275
  29. package/dist/components/chat/Chat.js.map +1 -1
  30. package/dist/components/chat/Chat.mjs +11 -13
  31. package/dist/components/chat/Header.mjs +4 -4
  32. package/dist/components/chat/Input.d.ts +1 -1
  33. package/dist/components/chat/Input.js +11 -8
  34. package/dist/components/chat/Input.js.map +1 -1
  35. package/dist/components/chat/Input.mjs +1 -1
  36. package/dist/components/chat/Messages.d.ts +3 -3
  37. package/dist/components/chat/Messages.js +33 -4
  38. package/dist/components/chat/Messages.js.map +1 -1
  39. package/dist/components/chat/Messages.mjs +5 -5
  40. package/dist/components/chat/Modal.d.ts +1 -6
  41. package/dist/components/chat/Modal.js +85 -279
  42. package/dist/components/chat/Modal.js.map +1 -1
  43. package/dist/components/chat/Modal.mjs +14 -14
  44. package/dist/components/chat/Popup.d.ts +1 -6
  45. package/dist/components/chat/Popup.js +85 -279
  46. package/dist/components/chat/Popup.js.map +1 -1
  47. package/dist/components/chat/Popup.mjs +15 -15
  48. package/dist/components/chat/Sidebar.d.ts +1 -6
  49. package/dist/components/chat/Sidebar.js +85 -279
  50. package/dist/components/chat/Sidebar.js.map +1 -1
  51. package/dist/components/chat/Sidebar.mjs +15 -15
  52. package/dist/components/chat/Suggestion.js.map +1 -1
  53. package/dist/components/chat/Suggestion.mjs +1 -1
  54. package/dist/components/chat/Suggestions.d.ts +1 -1
  55. package/dist/components/chat/Suggestions.js +19 -12
  56. package/dist/components/chat/Suggestions.js.map +1 -1
  57. package/dist/components/chat/Suggestions.mjs +2 -2
  58. package/dist/components/chat/index.d.ts +0 -5
  59. package/dist/components/chat/index.js +85 -279
  60. package/dist/components/chat/index.js.map +1 -1
  61. package/dist/components/chat/index.mjs +16 -16
  62. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  63. package/dist/components/chat/messages/AssistantMessage.mjs +1 -1
  64. package/dist/components/chat/messages/LegacyRenderMessage.js +28 -3
  65. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -1
  66. package/dist/components/chat/messages/LegacyRenderMessage.mjs +4 -4
  67. package/dist/components/chat/messages/RenderMessage.js +21 -3
  68. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  69. package/dist/components/chat/messages/RenderMessage.mjs +3 -3
  70. package/dist/components/chat/messages/UserMessage.js +19 -3
  71. package/dist/components/chat/messages/UserMessage.js.map +1 -1
  72. package/dist/components/chat/messages/UserMessage.mjs +1 -1
  73. package/dist/components/chat/props.d.ts +4 -0
  74. package/dist/components/chat/props.js.map +1 -1
  75. package/dist/components/dev-console/console.mjs +3 -3
  76. package/dist/components/dev-console/index.mjs +4 -4
  77. package/dist/components/index.d.ts +0 -5
  78. package/dist/components/index.js +85 -279
  79. package/dist/components/index.js.map +1 -1
  80. package/dist/components/index.mjs +17 -17
  81. package/dist/hooks/index.d.ts +1 -0
  82. package/dist/hooks/index.js +2 -24
  83. package/dist/hooks/index.js.map +1 -1
  84. package/dist/hooks/index.mjs +1 -1
  85. package/dist/hooks/use-copilot-chat-suggestions.d.ts +4 -26
  86. package/dist/hooks/use-copilot-chat-suggestions.js +2 -24
  87. package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -1
  88. package/dist/hooks/use-copilot-chat-suggestions.mjs +1 -1
  89. package/dist/index.css +0 -2
  90. package/dist/index.css.map +1 -1
  91. package/dist/index.d.ts +0 -5
  92. package/dist/index.js +88 -304
  93. package/dist/index.js.map +1 -1
  94. package/dist/index.mjs +18 -18
  95. package/dist/types/suggestions.d.ts +1 -0
  96. package/dist/types/suggestions.js.map +1 -1
  97. package/package.json +23 -22
  98. package/src/components/chat/Chat.tsx +24 -325
  99. package/src/components/chat/Input.tsx +13 -12
  100. package/src/components/chat/Messages.tsx +8 -4
  101. package/src/components/chat/Suggestion.tsx +2 -2
  102. package/src/components/chat/Suggestions.tsx +6 -2
  103. package/src/components/chat/messages/AssistantMessage.tsx +1 -0
  104. package/src/components/chat/messages/LegacyRenderMessage.tsx +7 -0
  105. package/src/components/chat/messages/RenderMessage.tsx +2 -0
  106. package/src/components/chat/messages/UserMessage.tsx +30 -6
  107. package/src/components/chat/props.ts +4 -0
  108. package/src/css/messages.css +0 -2
  109. package/src/hooks/use-copilot-chat-suggestions.tsx +6 -57
  110. package/src/types/suggestions.ts +1 -0
  111. package/tsup.config.ts +1 -1
  112. package/dist/chunk-226ZMOE3.mjs +0 -24
  113. package/dist/chunk-226ZMOE3.mjs.map +0 -1
  114. package/dist/chunk-2XARU6EY.mjs.map +0 -1
  115. package/dist/chunk-EYRKZDP5.mjs +0 -32
  116. package/dist/chunk-EYRKZDP5.mjs.map +0 -1
  117. package/dist/chunk-KX44MLR6.mjs.map +0 -1
  118. package/dist/chunk-MJEYL3FK.mjs.map +0 -1
  119. package/dist/chunk-OWX6YJZH.mjs.map +0 -1
  120. package/dist/chunk-RKULVDQO.mjs.map +0 -1
  121. package/dist/chunk-VVL6JFCJ.mjs +0 -16
  122. package/dist/chunk-VVL6JFCJ.mjs.map +0 -1
  123. package/dist/chunk-W26XFBEG.mjs.map +0 -1
  124. package/dist/chunk-ZJCHKHE4.mjs.map +0 -1
  125. /package/dist/{chunk-VTYBYTE6.mjs.map → chunk-3JYVJHL5.mjs.map} +0 -0
  126. /package/dist/{chunk-YBRHDFVQ.mjs.map → chunk-CQ2WALZ7.mjs.map} +0 -0
  127. /package/dist/{chunk-WBPBTTQD.mjs.map → chunk-FFJHOZX6.mjs.map} +0 -0
  128. /package/dist/{chunk-V6DDX4LH.mjs.map → chunk-GDSZGYCE.mjs.map} +0 -0
  129. /package/dist/{chunk-PIFTVJG3.mjs.map → chunk-SOB5EIL7.mjs.map} +0 -0
@@ -80,8 +80,7 @@ var __async = (__this, __arguments, generator) => {
80
80
  var Chat_exports = {};
81
81
  __export(Chat_exports, {
82
82
  CopilotChat: () => CopilotChat,
83
- WrappedCopilotChat: () => WrappedCopilotChat,
84
- useCopilotChatLogic: () => useCopilotChatLogic
83
+ WrappedCopilotChat: () => WrappedCopilotChat
85
84
  });
86
85
  module.exports = __toCommonJS(Chat_exports);
87
86
 
@@ -400,14 +399,30 @@ var import_react_core = require("@copilotkit/react-core");
400
399
 
401
400
  // src/components/chat/messages/UserMessage.tsx
402
401
  var import_jsx_runtime3 = require("react/jsx-runtime");
402
+ var getTextContent = (content) => {
403
+ if (typeof content === "undefined") {
404
+ return void 0;
405
+ }
406
+ if (typeof content === "string") {
407
+ return content;
408
+ }
409
+ return content.map((part) => {
410
+ if (part.type === "text") {
411
+ return part.text;
412
+ }
413
+ return void 0;
414
+ }).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
415
+ };
403
416
  var UserMessage = (props) => {
404
417
  const { message, ImageRenderer: ImageRenderer2 } = props;
405
- const isImageMessage = message && "image" in message && message.image;
418
+ const isImageMessage = message && "image" in message && Boolean(message.image);
406
419
  if (isImageMessage) {
407
420
  const imageMessage = message;
408
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
421
+ const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
422
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
409
423
  }
410
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
424
+ const content = getTextContent(message == null ? void 0 : message.content);
425
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
411
426
  };
412
427
 
413
428
  // src/components/chat/Markdown.tsx
@@ -1086,6 +1101,7 @@ function RenderMessage(_a) {
1086
1101
  var _a2;
1087
1102
  const {
1088
1103
  message,
1104
+ messages,
1089
1105
  inProgress,
1090
1106
  index,
1091
1107
  isCurrentMessage,
@@ -1116,6 +1132,7 @@ function RenderMessage(_a) {
1116
1132
  subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
1117
1133
  rawData: message,
1118
1134
  message,
1135
+ messages,
1119
1136
  isLoading: inProgress && isCurrentMessage && !message.content,
1120
1137
  isGenerating: inProgress && isCurrentMessage && !!message.content,
1121
1138
  isCurrentMessage,
@@ -1137,6 +1154,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1137
1154
  var import_jsx_runtime9 = require("react/jsx-runtime");
1138
1155
  var LegacyRenderMessage = ({
1139
1156
  message,
1157
+ messages,
1140
1158
  inProgress,
1141
1159
  index,
1142
1160
  isCurrentMessage,
@@ -1165,6 +1183,7 @@ var LegacyRenderMessage = ({
1165
1183
  RenderTextMessage,
1166
1184
  {
1167
1185
  message,
1186
+ messages,
1168
1187
  inProgress,
1169
1188
  index,
1170
1189
  isCurrentMessage,
@@ -1182,6 +1201,7 @@ var LegacyRenderMessage = ({
1182
1201
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1183
1202
  RenderActionExecutionMessage,
1184
1203
  {
1204
+ messages,
1185
1205
  message,
1186
1206
  inProgress,
1187
1207
  index,
@@ -1196,6 +1216,7 @@ var LegacyRenderMessage = ({
1196
1216
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1197
1217
  RenderAgentStateMessage,
1198
1218
  {
1219
+ messages,
1199
1220
  message,
1200
1221
  inProgress,
1201
1222
  index,
@@ -1209,6 +1230,7 @@ var LegacyRenderMessage = ({
1209
1230
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1210
1231
  RenderResultMessage,
1211
1232
  {
1233
+ messages,
1212
1234
  message,
1213
1235
  inProgress,
1214
1236
  index,
@@ -1222,6 +1244,7 @@ var LegacyRenderMessage = ({
1222
1244
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1223
1245
  RenderImageMessage,
1224
1246
  {
1247
+ messages,
1225
1248
  message,
1226
1249
  inProgress,
1227
1250
  index,
@@ -1234,6 +1257,7 @@ var LegacyRenderMessage = ({
1234
1257
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1235
1258
  RenderMessage,
1236
1259
  {
1260
+ messages,
1237
1261
  message,
1238
1262
  inProgress,
1239
1263
  index,
@@ -1274,7 +1298,8 @@ var Messages = ({
1274
1298
  RenderResultMessage,
1275
1299
  RenderImageMessage
1276
1300
  }) => {
1277
- const { labels } = useChatContext();
1301
+ var _a;
1302
+ const { labels, icons } = useChatContext();
1278
1303
  const { messages: visibleMessages, interrupt } = (0, import_react_core.useCopilotChatInternal)();
1279
1304
  const initialMessages = (0, import_react6.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1280
1305
  const messages = [...initialMessages, ...visibleMessages];
@@ -1304,6 +1329,7 @@ var Messages = ({
1304
1329
  ]
1305
1330
  );
1306
1331
  const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
1332
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: icons.activityIcon });
1307
1333
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1308
1334
  /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1309
1335
  messages.map((message, index) => {
@@ -1312,6 +1338,7 @@ var Messages = ({
1312
1338
  MessageRenderer,
1313
1339
  {
1314
1340
  message,
1341
+ messages,
1315
1342
  inProgress,
1316
1343
  index,
1317
1344
  isCurrentMessage,
@@ -1328,6 +1355,7 @@ var Messages = ({
1328
1355
  index
1329
1356
  );
1330
1357
  }),
1358
+ ((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingIcon, {}),
1331
1359
  interrupt,
1332
1360
  chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
1333
1361
  ] }),
@@ -1621,12 +1649,12 @@ var MAX_NEWLINES = 6;
1621
1649
  var Input = ({
1622
1650
  inProgress,
1623
1651
  onSend,
1624
- isVisible = false,
1652
+ chatReady = true,
1625
1653
  onStop,
1626
1654
  onUpload,
1627
1655
  hideStopButton = false
1628
1656
  }) => {
1629
- var _a, _b;
1657
+ var _a;
1630
1658
  const context = useChatContext();
1631
1659
  const copilotContext = (0, import_react_core3.useCopilotContext)();
1632
1660
  const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
@@ -1656,14 +1684,16 @@ var Input = ({
1656
1684
  inProgress
1657
1685
  });
1658
1686
  const isInProgress = inProgress || pushToTalkState === "transcribing";
1659
- const buttonIcon = isInProgress && !hideStopButton ? context.icons.stopIcon : context.icons.sendIcon;
1687
+ const { buttonIcon, buttonAlt } = (0, import_react10.useMemo)(() => {
1688
+ if (!chatReady)
1689
+ return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
1690
+ return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
1691
+ }, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
1660
1692
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
1693
+ const { interrupt } = (0, import_react_core3.useCopilotChatInternal)();
1661
1694
  const canSend = (0, import_react10.useMemo)(() => {
1662
- var _a2;
1663
- const interruptEvent = (_a2 = copilotContext.langGraphInterruptAction) == null ? void 0 : _a2.event;
1664
- const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
1665
- return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
1666
- }, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
1695
+ return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
1696
+ }, [interrupt, isInProgress, text, pushToTalkState]);
1667
1697
  const canStop = (0, import_react10.useMemo)(() => {
1668
1698
  return isInProgress && !hideStopButton;
1669
1699
  }, [isInProgress, hideStopButton]);
@@ -1710,6 +1740,7 @@ var Input = ({
1710
1740
  "data-copilotkit-in-progress": inProgress,
1711
1741
  "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
1712
1742
  className: "copilotKitInputControlButton",
1743
+ "aria-label": buttonAlt,
1713
1744
  children: buttonIcon
1714
1745
  }
1715
1746
  )
@@ -1723,8 +1754,6 @@ var Input = ({
1723
1754
  var import_react11 = __toESM(require("react"));
1724
1755
  var import_react_core5 = require("@copilotkit/react-core");
1725
1756
  var import_shared = require("@copilotkit/shared");
1726
- var import_shared2 = require("@copilotkit/shared");
1727
- var import_react_core6 = require("@copilotkit/react-core");
1728
1757
 
1729
1758
  // src/components/chat/ImageUploadQueue.tsx
1730
1759
  var import_jsx_runtime14 = require("react/jsx-runtime");
@@ -1828,18 +1857,25 @@ function Suggestion({ title, onClick, partial, className }) {
1828
1857
 
1829
1858
  // src/components/chat/Suggestions.tsx
1830
1859
  var import_jsx_runtime16 = require("react/jsx-runtime");
1831
- function Suggestions({ suggestions, onSuggestionClick }) {
1832
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1833
- Suggestion,
1834
- {
1835
- title: suggestion.title,
1836
- message: suggestion.message,
1837
- partial: suggestion.partial,
1838
- className: suggestion.className,
1839
- onClick: () => onSuggestionClick(suggestion.message)
1840
- },
1841
- index
1842
- )) });
1860
+ function Suggestions({
1861
+ suggestions,
1862
+ onSuggestionClick,
1863
+ isLoading
1864
+ }) {
1865
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
1866
+ var _a, _b;
1867
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1868
+ Suggestion,
1869
+ {
1870
+ title: suggestion.title,
1871
+ message: suggestion.message,
1872
+ partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
1873
+ className: suggestion.className,
1874
+ onClick: () => onSuggestionClick(suggestion.message)
1875
+ },
1876
+ index
1877
+ );
1878
+ }) });
1843
1879
  }
1844
1880
 
1845
1881
  // src/components/chat/Chat.tsx
@@ -2039,16 +2075,12 @@ function CopilotChat({
2039
2075
  sendMessage,
2040
2076
  stopGeneration,
2041
2077
  reloadMessages,
2042
- suggestions: currentSuggestions
2043
- } = useCopilotChatLogic(
2044
- suggestions,
2045
- makeSystemMessage,
2046
- disableSystemMessage,
2047
- onInProgress,
2048
- onSubmitMessage,
2049
- onStopGeneration,
2050
- onReloadMessages
2051
- );
2078
+ suggestions: currentSuggestions,
2079
+ isLoadingSuggestions,
2080
+ agent
2081
+ } = (0, import_react_core5.useCopilotChatInternal)({
2082
+ suggestions
2083
+ });
2052
2084
  const prevIsLoading = (0, import_react11.useRef)(isLoading);
2053
2085
  (0, import_react11.useEffect)(() => {
2054
2086
  if (prevIsLoading.current !== isLoading) {
@@ -2067,7 +2099,11 @@ function CopilotChat({
2067
2099
  fileInputRef.current.value = "";
2068
2100
  }
2069
2101
  triggerObservabilityHook("onMessageSent", text);
2070
- return sendMessage(text, images);
2102
+ return sendMessage({
2103
+ id: (0, import_shared.randomUUID)(),
2104
+ content: text,
2105
+ role: "user"
2106
+ });
2071
2107
  };
2072
2108
  const chatContext = import_react11.default.useContext(ChatContext);
2073
2109
  const isVisible = chatContext ? chatContext.open : true;
@@ -2170,7 +2206,8 @@ function CopilotChat({
2170
2206
  RenderSuggestionsList,
2171
2207
  {
2172
2208
  onSuggestionClick: handleSendMessage,
2173
- suggestions: currentSuggestions
2209
+ suggestions: currentSuggestions,
2210
+ isLoading: isLoadingSuggestions
2174
2211
  }
2175
2212
  )
2176
2213
  }
@@ -2193,6 +2230,7 @@ function CopilotChat({
2193
2230
  Input2,
2194
2231
  {
2195
2232
  inProgress: isLoading,
2233
+ chatReady: Boolean(agent),
2196
2234
  onSend: handleSendMessage,
2197
2235
  isVisible,
2198
2236
  onStop: stopGeneration,
@@ -2218,243 +2256,9 @@ function WrappedCopilotChat({
2218
2256
  }
2219
2257
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children });
2220
2258
  }
2221
- var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2222
- var _a;
2223
- const {
2224
- messages,
2225
- sendMessage,
2226
- setMessages,
2227
- reloadMessages: defaultReloadMessages,
2228
- stopGeneration: defaultStopGeneration,
2229
- runChatCompletion,
2230
- isLoading,
2231
- suggestions,
2232
- setSuggestions,
2233
- generateSuggestions,
2234
- resetSuggestions: resetSuggestionsFromHook,
2235
- isLoadingSuggestions
2236
- } = (0, import_react_core5.useCopilotChatInternal)({
2237
- makeSystemMessage,
2238
- disableSystemMessage
2239
- });
2240
- const generalContext = (0, import_react_core5.useCopilotContext)();
2241
- const messagesContext = (0, import_react_core5.useCopilotMessagesContext)();
2242
- const { actions } = generalContext;
2243
- const [suggestionsFailed, setSuggestionsFailed] = (0, import_react11.useState)(false);
2244
- const hasGeneratedInitialSuggestions = (0, import_react11.useRef)(false);
2245
- (0, import_react11.useEffect)(() => {
2246
- if (Array.isArray(chatSuggestions)) {
2247
- setSuggestions(chatSuggestions);
2248
- hasGeneratedInitialSuggestions.current = true;
2249
- }
2250
- }, [JSON.stringify(chatSuggestions), setSuggestions]);
2251
- const generateSuggestionsWithErrorHandling = (0, import_react11.useCallback)(
2252
- (context) => __async(void 0, null, function* () {
2253
- try {
2254
- yield generateSuggestions();
2255
- } catch (error) {
2256
- console.error("Failed to generate suggestions:", error);
2257
- setSuggestionsFailed(true);
2258
- }
2259
- }),
2260
- [generateSuggestions]
2261
- );
2262
- (0, import_react11.useEffect)(() => {
2263
- if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2264
- return;
2265
- }
2266
- if (isLoading) {
2267
- return;
2268
- }
2269
- if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2270
- return;
2271
- }
2272
- if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2273
- hasGeneratedInitialSuggestions.current = true;
2274
- generateSuggestionsWithErrorHandling("initial");
2275
- return;
2276
- }
2277
- if (messages.length > 0 && suggestions.length === 0) {
2278
- generateSuggestionsWithErrorHandling("post-message");
2279
- return;
2280
- }
2281
- }, [
2282
- chatSuggestions,
2283
- isLoadingSuggestions,
2284
- suggestionsFailed,
2285
- messages.length,
2286
- isLoading,
2287
- suggestions.length,
2288
- Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2289
- // Use stable string instead of object reference
2290
- generateSuggestionsWithErrorHandling
2291
- ]);
2292
- (0, import_react11.useEffect)(() => {
2293
- if (chatSuggestions !== "auto") {
2294
- hasGeneratedInitialSuggestions.current = false;
2295
- setSuggestionsFailed(false);
2296
- }
2297
- }, [chatSuggestions]);
2298
- const stableContext = (0, import_react11.useMemo)(
2299
- () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2300
- [
2301
- // Only include stable dependencies
2302
- generalContext.actions,
2303
- messagesContext.messages.length,
2304
- generalContext.isLoading
2305
- ]
2306
- );
2307
- const resetSuggestions = (0, import_react11.useCallback)(() => {
2308
- resetSuggestionsFromHook();
2309
- setSuggestionsFailed(false);
2310
- hasGeneratedInitialSuggestions.current = false;
2311
- }, [resetSuggestionsFromHook]);
2312
- (0, import_react11.useEffect)(() => {
2313
- onInProgress == null ? void 0 : onInProgress(isLoading);
2314
- }, [onInProgress, isLoading]);
2315
- const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2316
- const images = imagesToUse || [];
2317
- if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2318
- setSuggestions([]);
2319
- }
2320
- let firstMessage = null;
2321
- if (messageContent.trim().length > 0) {
2322
- const textMessage = {
2323
- id: (0, import_shared2.randomId)(),
2324
- role: "user",
2325
- content: messageContent
2326
- };
2327
- if (onSubmitMessage) {
2328
- try {
2329
- yield onSubmitMessage(messageContent);
2330
- } catch (error) {
2331
- console.error("Error in onSubmitMessage:", error);
2332
- }
2333
- }
2334
- yield sendMessage(textMessage, {
2335
- followUp: images.length === 0,
2336
- clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2337
- });
2338
- if (!firstMessage) {
2339
- firstMessage = textMessage;
2340
- }
2341
- }
2342
- if (images.length > 0) {
2343
- for (let i = 0; i < images.length; i++) {
2344
- const imageMessage = {
2345
- id: (0, import_shared2.randomId)(),
2346
- role: "user",
2347
- image: {
2348
- format: images[i].contentType.replace("image/", ""),
2349
- bytes: images[i].bytes
2350
- }
2351
- };
2352
- yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
2353
- if (!firstMessage) {
2354
- firstMessage = imageMessage;
2355
- }
2356
- }
2357
- }
2358
- if (!firstMessage) {
2359
- return { role: "user", content: "", id: (0, import_shared2.randomId)() };
2360
- }
2361
- return firstMessage;
2362
- });
2363
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
2364
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
2365
- if (generalContext.agentSession) {
2366
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
2367
- nodeName: void 0,
2368
- threadId: void 0
2369
- }));
2370
- generalContext.setCoagentStates((prevAgentStates) => {
2371
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2372
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
2373
- threadId: void 0,
2374
- nodeName: void 0,
2375
- runId: void 0
2376
- })
2377
- });
2378
- });
2379
- }
2380
- });
2381
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
2382
- if (generalContext.agentSession) {
2383
- yield (0, import_react_core6.runAgent)(
2384
- generalContext.agentSession.agentName,
2385
- stableContext,
2386
- messagesContext.messages,
2387
- sendMessage,
2388
- runChatCompletion
2389
- );
2390
- }
2391
- });
2392
- const stopCurrentAgent = () => {
2393
- if (generalContext.agentSession) {
2394
- (0, import_react_core6.stopAgent)(generalContext.agentSession.agentName, stableContext);
2395
- }
2396
- };
2397
- const setCurrentAgentState = (state) => {
2398
- if (generalContext.agentSession) {
2399
- generalContext.setCoagentStates((prevAgentStates) => {
2400
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2401
- [generalContext.agentSession.agentName]: {
2402
- state
2403
- }
2404
- });
2405
- });
2406
- }
2407
- };
2408
- function stopGeneration() {
2409
- setSuggestions([]);
2410
- if (onStopGeneration) {
2411
- onStopGeneration({
2412
- messages,
2413
- setMessages,
2414
- stopGeneration: defaultStopGeneration,
2415
- currentAgentName,
2416
- restartCurrentAgent,
2417
- stopCurrentAgent,
2418
- runCurrentAgent,
2419
- setCurrentAgentState
2420
- });
2421
- } else {
2422
- defaultStopGeneration();
2423
- }
2424
- }
2425
- function reloadMessages(messageId) {
2426
- if (onReloadMessages) {
2427
- onReloadMessages({
2428
- messages,
2429
- setMessages,
2430
- stopGeneration: defaultStopGeneration,
2431
- currentAgentName,
2432
- restartCurrentAgent,
2433
- stopCurrentAgent,
2434
- runCurrentAgent,
2435
- setCurrentAgentState,
2436
- messageId
2437
- });
2438
- } else {
2439
- defaultReloadMessages(messageId);
2440
- }
2441
- }
2442
- return {
2443
- messages,
2444
- isLoading,
2445
- suggestions,
2446
- sendMessage: safelySendMessage,
2447
- stopGeneration,
2448
- reloadMessages,
2449
- resetSuggestions,
2450
- context: stableContext,
2451
- actions
2452
- };
2453
- };
2454
2259
  // Annotate the CommonJS export names for ESM import in node:
2455
2260
  0 && (module.exports = {
2456
2261
  CopilotChat,
2457
- WrappedCopilotChat,
2458
- useCopilotChatLogic
2262
+ WrappedCopilotChat
2459
2263
  });
2460
2264
  //# sourceMappingURL=Chat.js.map