@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
@@ -1028,14 +1028,30 @@ var import_react_core5 = require("@copilotkit/react-core");
1028
1028
 
1029
1029
  // src/components/chat/messages/UserMessage.tsx
1030
1030
  var import_jsx_runtime10 = require("react/jsx-runtime");
1031
+ var getTextContent = (content) => {
1032
+ if (typeof content === "undefined") {
1033
+ return void 0;
1034
+ }
1035
+ if (typeof content === "string") {
1036
+ return content;
1037
+ }
1038
+ return content.map((part) => {
1039
+ if (part.type === "text") {
1040
+ return part.text;
1041
+ }
1042
+ return void 0;
1043
+ }).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
1044
+ };
1031
1045
  var UserMessage = (props) => {
1032
1046
  const { message, ImageRenderer: ImageRenderer2 } = props;
1033
- const isImageMessage = message && "image" in message && message.image;
1047
+ const isImageMessage = message && "image" in message && Boolean(message.image);
1034
1048
  if (isImageMessage) {
1035
1049
  const imageMessage = message;
1036
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
1050
+ const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
1051
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
1037
1052
  }
1038
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
1053
+ const content = getTextContent(message == null ? void 0 : message.content);
1054
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
1039
1055
  };
1040
1056
 
1041
1057
  // src/components/chat/Markdown.tsx
@@ -1714,6 +1730,7 @@ function RenderMessage(_a) {
1714
1730
  var _a2;
1715
1731
  const {
1716
1732
  message,
1733
+ messages,
1717
1734
  inProgress,
1718
1735
  index,
1719
1736
  isCurrentMessage,
@@ -1744,6 +1761,7 @@ function RenderMessage(_a) {
1744
1761
  subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
1745
1762
  rawData: message,
1746
1763
  message,
1764
+ messages,
1747
1765
  isLoading: inProgress && isCurrentMessage && !message.content,
1748
1766
  isGenerating: inProgress && isCurrentMessage && !!message.content,
1749
1767
  isCurrentMessage,
@@ -1765,6 +1783,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1765
1783
  var import_jsx_runtime16 = require("react/jsx-runtime");
1766
1784
  var LegacyRenderMessage = ({
1767
1785
  message,
1786
+ messages,
1768
1787
  inProgress,
1769
1788
  index,
1770
1789
  isCurrentMessage,
@@ -1793,6 +1812,7 @@ var LegacyRenderMessage = ({
1793
1812
  RenderTextMessage,
1794
1813
  {
1795
1814
  message,
1815
+ messages,
1796
1816
  inProgress,
1797
1817
  index,
1798
1818
  isCurrentMessage,
@@ -1810,6 +1830,7 @@ var LegacyRenderMessage = ({
1810
1830
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1811
1831
  RenderActionExecutionMessage,
1812
1832
  {
1833
+ messages,
1813
1834
  message,
1814
1835
  inProgress,
1815
1836
  index,
@@ -1824,6 +1845,7 @@ var LegacyRenderMessage = ({
1824
1845
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1825
1846
  RenderAgentStateMessage,
1826
1847
  {
1848
+ messages,
1827
1849
  message,
1828
1850
  inProgress,
1829
1851
  index,
@@ -1837,6 +1859,7 @@ var LegacyRenderMessage = ({
1837
1859
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1838
1860
  RenderResultMessage,
1839
1861
  {
1862
+ messages,
1840
1863
  message,
1841
1864
  inProgress,
1842
1865
  index,
@@ -1850,6 +1873,7 @@ var LegacyRenderMessage = ({
1850
1873
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1851
1874
  RenderImageMessage,
1852
1875
  {
1876
+ messages,
1853
1877
  message,
1854
1878
  inProgress,
1855
1879
  index,
@@ -1862,6 +1886,7 @@ var LegacyRenderMessage = ({
1862
1886
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1863
1887
  RenderMessage,
1864
1888
  {
1889
+ messages,
1865
1890
  message,
1866
1891
  inProgress,
1867
1892
  index,
@@ -1902,7 +1927,8 @@ var Messages = ({
1902
1927
  RenderResultMessage,
1903
1928
  RenderImageMessage
1904
1929
  }) => {
1905
- const { labels } = useChatContext();
1930
+ var _a;
1931
+ const { labels, icons } = useChatContext();
1906
1932
  const { messages: visibleMessages, interrupt } = (0, import_react_core5.useCopilotChatInternal)();
1907
1933
  const initialMessages = (0, import_react10.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1908
1934
  const messages = [...initialMessages, ...visibleMessages];
@@ -1932,6 +1958,7 @@ var Messages = ({
1932
1958
  ]
1933
1959
  );
1934
1960
  const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
1961
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
1935
1962
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1936
1963
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1937
1964
  messages.map((message, index) => {
@@ -1940,6 +1967,7 @@ var Messages = ({
1940
1967
  MessageRenderer,
1941
1968
  {
1942
1969
  message,
1970
+ messages,
1943
1971
  inProgress,
1944
1972
  index,
1945
1973
  isCurrentMessage,
@@ -1956,6 +1984,7 @@ var Messages = ({
1956
1984
  index
1957
1985
  );
1958
1986
  }),
1987
+ ((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
1959
1988
  interrupt,
1960
1989
  chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
1961
1990
  ] }),
@@ -2249,12 +2278,12 @@ var MAX_NEWLINES = 6;
2249
2278
  var Input = ({
2250
2279
  inProgress,
2251
2280
  onSend,
2252
- isVisible = false,
2281
+ chatReady = true,
2253
2282
  onStop,
2254
2283
  onUpload,
2255
2284
  hideStopButton = false
2256
2285
  }) => {
2257
- var _a, _b;
2286
+ var _a;
2258
2287
  const context = useChatContext();
2259
2288
  const copilotContext = (0, import_react_core7.useCopilotContext)();
2260
2289
  const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
@@ -2284,14 +2313,16 @@ var Input = ({
2284
2313
  inProgress
2285
2314
  });
2286
2315
  const isInProgress = inProgress || pushToTalkState === "transcribing";
2287
- const buttonIcon = isInProgress && !hideStopButton ? context.icons.stopIcon : context.icons.sendIcon;
2316
+ const { buttonIcon, buttonAlt } = (0, import_react14.useMemo)(() => {
2317
+ if (!chatReady)
2318
+ return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
2319
+ return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
2320
+ }, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
2288
2321
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
2322
+ const { interrupt } = (0, import_react_core7.useCopilotChatInternal)();
2289
2323
  const canSend = (0, import_react14.useMemo)(() => {
2290
- var _a2;
2291
- const interruptEvent = (_a2 = copilotContext.langGraphInterruptAction) == null ? void 0 : _a2.event;
2292
- const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
2293
- return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
2294
- }, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
2324
+ return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
2325
+ }, [interrupt, isInProgress, text, pushToTalkState]);
2295
2326
  const canStop = (0, import_react14.useMemo)(() => {
2296
2327
  return isInProgress && !hideStopButton;
2297
2328
  }, [isInProgress, hideStopButton]);
@@ -2338,6 +2369,7 @@ var Input = ({
2338
2369
  "data-copilotkit-in-progress": inProgress,
2339
2370
  "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
2340
2371
  className: "copilotKitInputControlButton",
2372
+ "aria-label": buttonAlt,
2341
2373
  children: buttonIcon
2342
2374
  }
2343
2375
  )
@@ -2351,8 +2383,6 @@ var Input = ({
2351
2383
  var import_react15 = __toESM(require("react"));
2352
2384
  var import_react_core9 = require("@copilotkit/react-core");
2353
2385
  var import_shared3 = require("@copilotkit/shared");
2354
- var import_shared4 = require("@copilotkit/shared");
2355
- var import_react_core10 = require("@copilotkit/react-core");
2356
2386
 
2357
2387
  // src/components/chat/ImageUploadQueue.tsx
2358
2388
  var import_jsx_runtime21 = require("react/jsx-runtime");
@@ -2456,18 +2486,25 @@ function Suggestion({ title, onClick, partial, className }) {
2456
2486
 
2457
2487
  // src/components/chat/Suggestions.tsx
2458
2488
  var import_jsx_runtime23 = require("react/jsx-runtime");
2459
- function Suggestions({ suggestions, onSuggestionClick }) {
2460
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2461
- Suggestion,
2462
- {
2463
- title: suggestion.title,
2464
- message: suggestion.message,
2465
- partial: suggestion.partial,
2466
- className: suggestion.className,
2467
- onClick: () => onSuggestionClick(suggestion.message)
2468
- },
2469
- index
2470
- )) });
2489
+ function Suggestions({
2490
+ suggestions,
2491
+ onSuggestionClick,
2492
+ isLoading
2493
+ }) {
2494
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
2495
+ var _a, _b;
2496
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2497
+ Suggestion,
2498
+ {
2499
+ title: suggestion.title,
2500
+ message: suggestion.message,
2501
+ partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
2502
+ className: suggestion.className,
2503
+ onClick: () => onSuggestionClick(suggestion.message)
2504
+ },
2505
+ index
2506
+ );
2507
+ }) });
2471
2508
  }
2472
2509
 
2473
2510
  // src/components/chat/Chat.tsx
@@ -2667,16 +2704,12 @@ function CopilotChat({
2667
2704
  sendMessage,
2668
2705
  stopGeneration,
2669
2706
  reloadMessages,
2670
- suggestions: currentSuggestions
2671
- } = useCopilotChatLogic(
2672
- suggestions,
2673
- makeSystemMessage,
2674
- disableSystemMessage,
2675
- onInProgress,
2676
- onSubmitMessage,
2677
- onStopGeneration,
2678
- onReloadMessages
2679
- );
2707
+ suggestions: currentSuggestions,
2708
+ isLoadingSuggestions,
2709
+ agent
2710
+ } = (0, import_react_core9.useCopilotChatInternal)({
2711
+ suggestions
2712
+ });
2680
2713
  const prevIsLoading = (0, import_react15.useRef)(isLoading);
2681
2714
  (0, import_react15.useEffect)(() => {
2682
2715
  if (prevIsLoading.current !== isLoading) {
@@ -2695,7 +2728,11 @@ function CopilotChat({
2695
2728
  fileInputRef.current.value = "";
2696
2729
  }
2697
2730
  triggerObservabilityHook("onMessageSent", text);
2698
- return sendMessage(text, images);
2731
+ return sendMessage({
2732
+ id: (0, import_shared3.randomUUID)(),
2733
+ content: text,
2734
+ role: "user"
2735
+ });
2699
2736
  };
2700
2737
  const chatContext = import_react15.default.useContext(ChatContext);
2701
2738
  const isVisible = chatContext ? chatContext.open : true;
@@ -2798,7 +2835,8 @@ function CopilotChat({
2798
2835
  RenderSuggestionsList,
2799
2836
  {
2800
2837
  onSuggestionClick: handleSendMessage,
2801
- suggestions: currentSuggestions
2838
+ suggestions: currentSuggestions,
2839
+ isLoading: isLoadingSuggestions
2802
2840
  }
2803
2841
  )
2804
2842
  }
@@ -2821,6 +2859,7 @@ function CopilotChat({
2821
2859
  Input2,
2822
2860
  {
2823
2861
  inProgress: isLoading,
2862
+ chatReady: Boolean(agent),
2824
2863
  onSend: handleSendMessage,
2825
2864
  isVisible,
2826
2865
  onStop: stopGeneration,
@@ -2846,243 +2885,10 @@ function WrappedCopilotChat({
2846
2885
  }
2847
2886
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
2848
2887
  }
2849
- var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2850
- var _a;
2851
- const {
2852
- messages,
2853
- sendMessage,
2854
- setMessages,
2855
- reloadMessages: defaultReloadMessages,
2856
- stopGeneration: defaultStopGeneration,
2857
- runChatCompletion,
2858
- isLoading,
2859
- suggestions,
2860
- setSuggestions,
2861
- generateSuggestions,
2862
- resetSuggestions: resetSuggestionsFromHook,
2863
- isLoadingSuggestions
2864
- } = (0, import_react_core9.useCopilotChatInternal)({
2865
- makeSystemMessage,
2866
- disableSystemMessage
2867
- });
2868
- const generalContext = (0, import_react_core9.useCopilotContext)();
2869
- const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
2870
- const { actions } = generalContext;
2871
- const [suggestionsFailed, setSuggestionsFailed] = (0, import_react15.useState)(false);
2872
- const hasGeneratedInitialSuggestions = (0, import_react15.useRef)(false);
2873
- (0, import_react15.useEffect)(() => {
2874
- if (Array.isArray(chatSuggestions)) {
2875
- setSuggestions(chatSuggestions);
2876
- hasGeneratedInitialSuggestions.current = true;
2877
- }
2878
- }, [JSON.stringify(chatSuggestions), setSuggestions]);
2879
- const generateSuggestionsWithErrorHandling = (0, import_react15.useCallback)(
2880
- (context) => __async(void 0, null, function* () {
2881
- try {
2882
- yield generateSuggestions();
2883
- } catch (error) {
2884
- console.error("Failed to generate suggestions:", error);
2885
- setSuggestionsFailed(true);
2886
- }
2887
- }),
2888
- [generateSuggestions]
2889
- );
2890
- (0, import_react15.useEffect)(() => {
2891
- if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2892
- return;
2893
- }
2894
- if (isLoading) {
2895
- return;
2896
- }
2897
- if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2898
- return;
2899
- }
2900
- if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2901
- hasGeneratedInitialSuggestions.current = true;
2902
- generateSuggestionsWithErrorHandling("initial");
2903
- return;
2904
- }
2905
- if (messages.length > 0 && suggestions.length === 0) {
2906
- generateSuggestionsWithErrorHandling("post-message");
2907
- return;
2908
- }
2909
- }, [
2910
- chatSuggestions,
2911
- isLoadingSuggestions,
2912
- suggestionsFailed,
2913
- messages.length,
2914
- isLoading,
2915
- suggestions.length,
2916
- Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2917
- // Use stable string instead of object reference
2918
- generateSuggestionsWithErrorHandling
2919
- ]);
2920
- (0, import_react15.useEffect)(() => {
2921
- if (chatSuggestions !== "auto") {
2922
- hasGeneratedInitialSuggestions.current = false;
2923
- setSuggestionsFailed(false);
2924
- }
2925
- }, [chatSuggestions]);
2926
- const stableContext = (0, import_react15.useMemo)(
2927
- () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2928
- [
2929
- // Only include stable dependencies
2930
- generalContext.actions,
2931
- messagesContext.messages.length,
2932
- generalContext.isLoading
2933
- ]
2934
- );
2935
- const resetSuggestions = (0, import_react15.useCallback)(() => {
2936
- resetSuggestionsFromHook();
2937
- setSuggestionsFailed(false);
2938
- hasGeneratedInitialSuggestions.current = false;
2939
- }, [resetSuggestionsFromHook]);
2940
- (0, import_react15.useEffect)(() => {
2941
- onInProgress == null ? void 0 : onInProgress(isLoading);
2942
- }, [onInProgress, isLoading]);
2943
- const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2944
- const images = imagesToUse || [];
2945
- if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2946
- setSuggestions([]);
2947
- }
2948
- let firstMessage = null;
2949
- if (messageContent.trim().length > 0) {
2950
- const textMessage = {
2951
- id: (0, import_shared4.randomId)(),
2952
- role: "user",
2953
- content: messageContent
2954
- };
2955
- if (onSubmitMessage) {
2956
- try {
2957
- yield onSubmitMessage(messageContent);
2958
- } catch (error) {
2959
- console.error("Error in onSubmitMessage:", error);
2960
- }
2961
- }
2962
- yield sendMessage(textMessage, {
2963
- followUp: images.length === 0,
2964
- clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2965
- });
2966
- if (!firstMessage) {
2967
- firstMessage = textMessage;
2968
- }
2969
- }
2970
- if (images.length > 0) {
2971
- for (let i = 0; i < images.length; i++) {
2972
- const imageMessage = {
2973
- id: (0, import_shared4.randomId)(),
2974
- role: "user",
2975
- image: {
2976
- format: images[i].contentType.replace("image/", ""),
2977
- bytes: images[i].bytes
2978
- }
2979
- };
2980
- yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
2981
- if (!firstMessage) {
2982
- firstMessage = imageMessage;
2983
- }
2984
- }
2985
- }
2986
- if (!firstMessage) {
2987
- return { role: "user", content: "", id: (0, import_shared4.randomId)() };
2988
- }
2989
- return firstMessage;
2990
- });
2991
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
2992
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
2993
- if (generalContext.agentSession) {
2994
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
2995
- nodeName: void 0,
2996
- threadId: void 0
2997
- }));
2998
- generalContext.setCoagentStates((prevAgentStates) => {
2999
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3000
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
3001
- threadId: void 0,
3002
- nodeName: void 0,
3003
- runId: void 0
3004
- })
3005
- });
3006
- });
3007
- }
3008
- });
3009
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
3010
- if (generalContext.agentSession) {
3011
- yield (0, import_react_core10.runAgent)(
3012
- generalContext.agentSession.agentName,
3013
- stableContext,
3014
- messagesContext.messages,
3015
- sendMessage,
3016
- runChatCompletion
3017
- );
3018
- }
3019
- });
3020
- const stopCurrentAgent = () => {
3021
- if (generalContext.agentSession) {
3022
- (0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, stableContext);
3023
- }
3024
- };
3025
- const setCurrentAgentState = (state) => {
3026
- if (generalContext.agentSession) {
3027
- generalContext.setCoagentStates((prevAgentStates) => {
3028
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3029
- [generalContext.agentSession.agentName]: {
3030
- state
3031
- }
3032
- });
3033
- });
3034
- }
3035
- };
3036
- function stopGeneration() {
3037
- setSuggestions([]);
3038
- if (onStopGeneration) {
3039
- onStopGeneration({
3040
- messages,
3041
- setMessages,
3042
- stopGeneration: defaultStopGeneration,
3043
- currentAgentName,
3044
- restartCurrentAgent,
3045
- stopCurrentAgent,
3046
- runCurrentAgent,
3047
- setCurrentAgentState
3048
- });
3049
- } else {
3050
- defaultStopGeneration();
3051
- }
3052
- }
3053
- function reloadMessages(messageId) {
3054
- if (onReloadMessages) {
3055
- onReloadMessages({
3056
- messages,
3057
- setMessages,
3058
- stopGeneration: defaultStopGeneration,
3059
- currentAgentName,
3060
- restartCurrentAgent,
3061
- stopCurrentAgent,
3062
- runCurrentAgent,
3063
- setCurrentAgentState,
3064
- messageId
3065
- });
3066
- } else {
3067
- defaultReloadMessages(messageId);
3068
- }
3069
- }
3070
- return {
3071
- messages,
3072
- isLoading,
3073
- suggestions,
3074
- sendMessage: safelySendMessage,
3075
- stopGeneration,
3076
- reloadMessages,
3077
- resetSuggestions,
3078
- context: stableContext,
3079
- actions
3080
- };
3081
- };
3082
2888
 
3083
2889
  // src/components/chat/Modal.tsx
3084
- var import_react_core11 = require("@copilotkit/react-core");
3085
- var import_shared5 = require("@copilotkit/shared");
2890
+ var import_react_core10 = require("@copilotkit/react-core");
2891
+ var import_shared4 = require("@copilotkit/shared");
3086
2892
  var import_jsx_runtime25 = require("react/jsx-runtime");
3087
2893
  var CopilotModalInner = (_a) => {
3088
2894
  var _b = _a, {
@@ -3108,7 +2914,7 @@ var CopilotModalInner = (_a) => {
3108
2914
  "Button",
3109
2915
  "Header"
3110
2916
  ]);
3111
- const { copilotApiConfig, setBannerError } = (0, import_react_core11.useCopilotContext)();
2917
+ const { copilotApiConfig, setBannerError } = (0, import_react_core10.useCopilotContext)();
3112
2918
  const { publicApiKey } = copilotApiConfig;
3113
2919
  const triggerObservabilityHook = (0, import_react16.useCallback)(
3114
2920
  (hookName, ...args) => {
@@ -3117,14 +2923,14 @@ var CopilotModalInner = (_a) => {
3117
2923
  }
3118
2924
  if ((observabilityHooks == null ? void 0 : observabilityHooks[hookName]) && !publicApiKey) {
3119
2925
  setBannerError(
3120
- new import_shared5.CopilotKitError({
2926
+ new import_shared4.CopilotKitError({
3121
2927
  message: "observabilityHooks requires a publicApiKey to function.",
3122
- code: import_shared5.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
3123
- severity: import_shared5.Severity.CRITICAL,
3124
- visibility: import_shared5.ErrorVisibility.BANNER
2928
+ code: import_shared4.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
2929
+ severity: import_shared4.Severity.CRITICAL,
2930
+ visibility: import_shared4.ErrorVisibility.BANNER
3125
2931
  })
3126
2932
  );
3127
- import_shared5.styledConsole.publicApiKeyRequired("observabilityHooks");
2933
+ import_shared4.styledConsole.publicApiKeyRequired("observabilityHooks");
3128
2934
  }
3129
2935
  },
3130
2936
  [publicApiKey, observabilityHooks, setBannerError]