@copilotkit/react-ui 1.10.7-next.0 → 1.50.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +8 -7
  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
@@ -1039,14 +1039,30 @@ var import_react_core5 = require("@copilotkit/react-core");
1039
1039
 
1040
1040
  // src/components/chat/messages/UserMessage.tsx
1041
1041
  var import_jsx_runtime10 = require("react/jsx-runtime");
1042
+ var getTextContent = (content) => {
1043
+ if (typeof content === "undefined") {
1044
+ return void 0;
1045
+ }
1046
+ if (typeof content === "string") {
1047
+ return content;
1048
+ }
1049
+ return content.map((part) => {
1050
+ if (part.type === "text") {
1051
+ return part.text;
1052
+ }
1053
+ return void 0;
1054
+ }).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
1055
+ };
1042
1056
  var UserMessage = (props) => {
1043
1057
  const { message, ImageRenderer: ImageRenderer2 } = props;
1044
- const isImageMessage = message && "image" in message && message.image;
1058
+ const isImageMessage = message && "image" in message && Boolean(message.image);
1045
1059
  if (isImageMessage) {
1046
1060
  const imageMessage = message;
1047
- 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 }) });
1061
+ const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
1062
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
1048
1063
  }
1049
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
1064
+ const content = getTextContent(message == null ? void 0 : message.content);
1065
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
1050
1066
  };
1051
1067
 
1052
1068
  // src/components/chat/Markdown.tsx
@@ -1725,6 +1741,7 @@ function RenderMessage(_a) {
1725
1741
  var _a2;
1726
1742
  const {
1727
1743
  message,
1744
+ messages,
1728
1745
  inProgress,
1729
1746
  index,
1730
1747
  isCurrentMessage,
@@ -1755,6 +1772,7 @@ function RenderMessage(_a) {
1755
1772
  subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
1756
1773
  rawData: message,
1757
1774
  message,
1775
+ messages,
1758
1776
  isLoading: inProgress && isCurrentMessage && !message.content,
1759
1777
  isGenerating: inProgress && isCurrentMessage && !!message.content,
1760
1778
  isCurrentMessage,
@@ -1776,6 +1794,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1776
1794
  var import_jsx_runtime16 = require("react/jsx-runtime");
1777
1795
  var LegacyRenderMessage = ({
1778
1796
  message,
1797
+ messages,
1779
1798
  inProgress,
1780
1799
  index,
1781
1800
  isCurrentMessage,
@@ -1804,6 +1823,7 @@ var LegacyRenderMessage = ({
1804
1823
  RenderTextMessage,
1805
1824
  {
1806
1825
  message,
1826
+ messages,
1807
1827
  inProgress,
1808
1828
  index,
1809
1829
  isCurrentMessage,
@@ -1821,6 +1841,7 @@ var LegacyRenderMessage = ({
1821
1841
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1822
1842
  RenderActionExecutionMessage,
1823
1843
  {
1844
+ messages,
1824
1845
  message,
1825
1846
  inProgress,
1826
1847
  index,
@@ -1835,6 +1856,7 @@ var LegacyRenderMessage = ({
1835
1856
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1836
1857
  RenderAgentStateMessage,
1837
1858
  {
1859
+ messages,
1838
1860
  message,
1839
1861
  inProgress,
1840
1862
  index,
@@ -1848,6 +1870,7 @@ var LegacyRenderMessage = ({
1848
1870
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1849
1871
  RenderResultMessage,
1850
1872
  {
1873
+ messages,
1851
1874
  message,
1852
1875
  inProgress,
1853
1876
  index,
@@ -1861,6 +1884,7 @@ var LegacyRenderMessage = ({
1861
1884
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1862
1885
  RenderImageMessage,
1863
1886
  {
1887
+ messages,
1864
1888
  message,
1865
1889
  inProgress,
1866
1890
  index,
@@ -1873,6 +1897,7 @@ var LegacyRenderMessage = ({
1873
1897
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1874
1898
  RenderMessage,
1875
1899
  {
1900
+ messages,
1876
1901
  message,
1877
1902
  inProgress,
1878
1903
  index,
@@ -1913,7 +1938,8 @@ var Messages = ({
1913
1938
  RenderResultMessage,
1914
1939
  RenderImageMessage
1915
1940
  }) => {
1916
- const { labels } = useChatContext();
1941
+ var _a;
1942
+ const { labels, icons } = useChatContext();
1917
1943
  const { messages: visibleMessages, interrupt } = (0, import_react_core5.useCopilotChatInternal)();
1918
1944
  const initialMessages = (0, import_react10.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1919
1945
  const messages = [...initialMessages, ...visibleMessages];
@@ -1943,6 +1969,7 @@ var Messages = ({
1943
1969
  ]
1944
1970
  );
1945
1971
  const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
1972
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
1946
1973
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1947
1974
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1948
1975
  messages.map((message, index) => {
@@ -1951,6 +1978,7 @@ var Messages = ({
1951
1978
  MessageRenderer,
1952
1979
  {
1953
1980
  message,
1981
+ messages,
1954
1982
  inProgress,
1955
1983
  index,
1956
1984
  isCurrentMessage,
@@ -1967,6 +1995,7 @@ var Messages = ({
1967
1995
  index
1968
1996
  );
1969
1997
  }),
1998
+ ((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
1970
1999
  interrupt,
1971
2000
  chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
1972
2001
  ] }),
@@ -2260,12 +2289,12 @@ var MAX_NEWLINES = 6;
2260
2289
  var Input = ({
2261
2290
  inProgress,
2262
2291
  onSend,
2263
- isVisible = false,
2292
+ chatReady = true,
2264
2293
  onStop,
2265
2294
  onUpload,
2266
2295
  hideStopButton = false
2267
2296
  }) => {
2268
- var _a, _b;
2297
+ var _a;
2269
2298
  const context = useChatContext();
2270
2299
  const copilotContext = (0, import_react_core7.useCopilotContext)();
2271
2300
  const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
@@ -2295,14 +2324,16 @@ var Input = ({
2295
2324
  inProgress
2296
2325
  });
2297
2326
  const isInProgress = inProgress || pushToTalkState === "transcribing";
2298
- const buttonIcon = isInProgress && !hideStopButton ? context.icons.stopIcon : context.icons.sendIcon;
2327
+ const { buttonIcon, buttonAlt } = (0, import_react14.useMemo)(() => {
2328
+ if (!chatReady)
2329
+ return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
2330
+ return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
2331
+ }, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
2299
2332
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
2333
+ const { interrupt } = (0, import_react_core7.useCopilotChatInternal)();
2300
2334
  const canSend = (0, import_react14.useMemo)(() => {
2301
- var _a2;
2302
- const interruptEvent = (_a2 = copilotContext.langGraphInterruptAction) == null ? void 0 : _a2.event;
2303
- const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
2304
- return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
2305
- }, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
2335
+ return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
2336
+ }, [interrupt, isInProgress, text, pushToTalkState]);
2306
2337
  const canStop = (0, import_react14.useMemo)(() => {
2307
2338
  return isInProgress && !hideStopButton;
2308
2339
  }, [isInProgress, hideStopButton]);
@@ -2349,6 +2380,7 @@ var Input = ({
2349
2380
  "data-copilotkit-in-progress": inProgress,
2350
2381
  "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
2351
2382
  className: "copilotKitInputControlButton",
2383
+ "aria-label": buttonAlt,
2352
2384
  children: buttonIcon
2353
2385
  }
2354
2386
  )
@@ -2362,8 +2394,6 @@ var Input = ({
2362
2394
  var import_react15 = __toESM(require("react"));
2363
2395
  var import_react_core9 = require("@copilotkit/react-core");
2364
2396
  var import_shared3 = require("@copilotkit/shared");
2365
- var import_shared4 = require("@copilotkit/shared");
2366
- var import_react_core10 = require("@copilotkit/react-core");
2367
2397
 
2368
2398
  // src/components/chat/ImageUploadQueue.tsx
2369
2399
  var import_jsx_runtime21 = require("react/jsx-runtime");
@@ -2467,18 +2497,25 @@ function Suggestion({ title, onClick, partial, className }) {
2467
2497
 
2468
2498
  // src/components/chat/Suggestions.tsx
2469
2499
  var import_jsx_runtime23 = require("react/jsx-runtime");
2470
- function Suggestions({ suggestions, onSuggestionClick }) {
2471
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2472
- Suggestion,
2473
- {
2474
- title: suggestion.title,
2475
- message: suggestion.message,
2476
- partial: suggestion.partial,
2477
- className: suggestion.className,
2478
- onClick: () => onSuggestionClick(suggestion.message)
2479
- },
2480
- index
2481
- )) });
2500
+ function Suggestions({
2501
+ suggestions,
2502
+ onSuggestionClick,
2503
+ isLoading
2504
+ }) {
2505
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
2506
+ var _a, _b;
2507
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2508
+ Suggestion,
2509
+ {
2510
+ title: suggestion.title,
2511
+ message: suggestion.message,
2512
+ partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
2513
+ className: suggestion.className,
2514
+ onClick: () => onSuggestionClick(suggestion.message)
2515
+ },
2516
+ index
2517
+ );
2518
+ }) });
2482
2519
  }
2483
2520
 
2484
2521
  // src/components/chat/Chat.tsx
@@ -2678,16 +2715,12 @@ function CopilotChat({
2678
2715
  sendMessage,
2679
2716
  stopGeneration,
2680
2717
  reloadMessages,
2681
- suggestions: currentSuggestions
2682
- } = useCopilotChatLogic(
2683
- suggestions,
2684
- makeSystemMessage,
2685
- disableSystemMessage,
2686
- onInProgress,
2687
- onSubmitMessage,
2688
- onStopGeneration,
2689
- onReloadMessages
2690
- );
2718
+ suggestions: currentSuggestions,
2719
+ isLoadingSuggestions,
2720
+ agent
2721
+ } = (0, import_react_core9.useCopilotChatInternal)({
2722
+ suggestions
2723
+ });
2691
2724
  const prevIsLoading = (0, import_react15.useRef)(isLoading);
2692
2725
  (0, import_react15.useEffect)(() => {
2693
2726
  if (prevIsLoading.current !== isLoading) {
@@ -2706,7 +2739,11 @@ function CopilotChat({
2706
2739
  fileInputRef.current.value = "";
2707
2740
  }
2708
2741
  triggerObservabilityHook("onMessageSent", text);
2709
- return sendMessage(text, images);
2742
+ return sendMessage({
2743
+ id: (0, import_shared3.randomUUID)(),
2744
+ content: text,
2745
+ role: "user"
2746
+ });
2710
2747
  };
2711
2748
  const chatContext = import_react15.default.useContext(ChatContext);
2712
2749
  const isVisible = chatContext ? chatContext.open : true;
@@ -2809,7 +2846,8 @@ function CopilotChat({
2809
2846
  RenderSuggestionsList,
2810
2847
  {
2811
2848
  onSuggestionClick: handleSendMessage,
2812
- suggestions: currentSuggestions
2849
+ suggestions: currentSuggestions,
2850
+ isLoading: isLoadingSuggestions
2813
2851
  }
2814
2852
  )
2815
2853
  }
@@ -2832,6 +2870,7 @@ function CopilotChat({
2832
2870
  Input2,
2833
2871
  {
2834
2872
  inProgress: isLoading,
2873
+ chatReady: Boolean(agent),
2835
2874
  onSend: handleSendMessage,
2836
2875
  isVisible,
2837
2876
  onStop: stopGeneration,
@@ -2857,243 +2896,10 @@ function WrappedCopilotChat({
2857
2896
  }
2858
2897
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
2859
2898
  }
2860
- var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2861
- var _a;
2862
- const {
2863
- messages,
2864
- sendMessage,
2865
- setMessages,
2866
- reloadMessages: defaultReloadMessages,
2867
- stopGeneration: defaultStopGeneration,
2868
- runChatCompletion,
2869
- isLoading,
2870
- suggestions,
2871
- setSuggestions,
2872
- generateSuggestions,
2873
- resetSuggestions: resetSuggestionsFromHook,
2874
- isLoadingSuggestions
2875
- } = (0, import_react_core9.useCopilotChatInternal)({
2876
- makeSystemMessage,
2877
- disableSystemMessage
2878
- });
2879
- const generalContext = (0, import_react_core9.useCopilotContext)();
2880
- const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
2881
- const { actions } = generalContext;
2882
- const [suggestionsFailed, setSuggestionsFailed] = (0, import_react15.useState)(false);
2883
- const hasGeneratedInitialSuggestions = (0, import_react15.useRef)(false);
2884
- (0, import_react15.useEffect)(() => {
2885
- if (Array.isArray(chatSuggestions)) {
2886
- setSuggestions(chatSuggestions);
2887
- hasGeneratedInitialSuggestions.current = true;
2888
- }
2889
- }, [JSON.stringify(chatSuggestions), setSuggestions]);
2890
- const generateSuggestionsWithErrorHandling = (0, import_react15.useCallback)(
2891
- (context) => __async(void 0, null, function* () {
2892
- try {
2893
- yield generateSuggestions();
2894
- } catch (error) {
2895
- console.error("Failed to generate suggestions:", error);
2896
- setSuggestionsFailed(true);
2897
- }
2898
- }),
2899
- [generateSuggestions]
2900
- );
2901
- (0, import_react15.useEffect)(() => {
2902
- if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2903
- return;
2904
- }
2905
- if (isLoading) {
2906
- return;
2907
- }
2908
- if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2909
- return;
2910
- }
2911
- if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2912
- hasGeneratedInitialSuggestions.current = true;
2913
- generateSuggestionsWithErrorHandling("initial");
2914
- return;
2915
- }
2916
- if (messages.length > 0 && suggestions.length === 0) {
2917
- generateSuggestionsWithErrorHandling("post-message");
2918
- return;
2919
- }
2920
- }, [
2921
- chatSuggestions,
2922
- isLoadingSuggestions,
2923
- suggestionsFailed,
2924
- messages.length,
2925
- isLoading,
2926
- suggestions.length,
2927
- Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2928
- // Use stable string instead of object reference
2929
- generateSuggestionsWithErrorHandling
2930
- ]);
2931
- (0, import_react15.useEffect)(() => {
2932
- if (chatSuggestions !== "auto") {
2933
- hasGeneratedInitialSuggestions.current = false;
2934
- setSuggestionsFailed(false);
2935
- }
2936
- }, [chatSuggestions]);
2937
- const stableContext = (0, import_react15.useMemo)(
2938
- () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2939
- [
2940
- // Only include stable dependencies
2941
- generalContext.actions,
2942
- messagesContext.messages.length,
2943
- generalContext.isLoading
2944
- ]
2945
- );
2946
- const resetSuggestions = (0, import_react15.useCallback)(() => {
2947
- resetSuggestionsFromHook();
2948
- setSuggestionsFailed(false);
2949
- hasGeneratedInitialSuggestions.current = false;
2950
- }, [resetSuggestionsFromHook]);
2951
- (0, import_react15.useEffect)(() => {
2952
- onInProgress == null ? void 0 : onInProgress(isLoading);
2953
- }, [onInProgress, isLoading]);
2954
- const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2955
- const images = imagesToUse || [];
2956
- if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2957
- setSuggestions([]);
2958
- }
2959
- let firstMessage = null;
2960
- if (messageContent.trim().length > 0) {
2961
- const textMessage = {
2962
- id: (0, import_shared4.randomId)(),
2963
- role: "user",
2964
- content: messageContent
2965
- };
2966
- if (onSubmitMessage) {
2967
- try {
2968
- yield onSubmitMessage(messageContent);
2969
- } catch (error) {
2970
- console.error("Error in onSubmitMessage:", error);
2971
- }
2972
- }
2973
- yield sendMessage(textMessage, {
2974
- followUp: images.length === 0,
2975
- clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2976
- });
2977
- if (!firstMessage) {
2978
- firstMessage = textMessage;
2979
- }
2980
- }
2981
- if (images.length > 0) {
2982
- for (let i = 0; i < images.length; i++) {
2983
- const imageMessage = {
2984
- id: (0, import_shared4.randomId)(),
2985
- role: "user",
2986
- image: {
2987
- format: images[i].contentType.replace("image/", ""),
2988
- bytes: images[i].bytes
2989
- }
2990
- };
2991
- yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
2992
- if (!firstMessage) {
2993
- firstMessage = imageMessage;
2994
- }
2995
- }
2996
- }
2997
- if (!firstMessage) {
2998
- return { role: "user", content: "", id: (0, import_shared4.randomId)() };
2999
- }
3000
- return firstMessage;
3001
- });
3002
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
3003
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
3004
- if (generalContext.agentSession) {
3005
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
3006
- nodeName: void 0,
3007
- threadId: void 0
3008
- }));
3009
- generalContext.setCoagentStates((prevAgentStates) => {
3010
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3011
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
3012
- threadId: void 0,
3013
- nodeName: void 0,
3014
- runId: void 0
3015
- })
3016
- });
3017
- });
3018
- }
3019
- });
3020
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
3021
- if (generalContext.agentSession) {
3022
- yield (0, import_react_core10.runAgent)(
3023
- generalContext.agentSession.agentName,
3024
- stableContext,
3025
- messagesContext.messages,
3026
- sendMessage,
3027
- runChatCompletion
3028
- );
3029
- }
3030
- });
3031
- const stopCurrentAgent = () => {
3032
- if (generalContext.agentSession) {
3033
- (0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, stableContext);
3034
- }
3035
- };
3036
- const setCurrentAgentState = (state) => {
3037
- if (generalContext.agentSession) {
3038
- generalContext.setCoagentStates((prevAgentStates) => {
3039
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3040
- [generalContext.agentSession.agentName]: {
3041
- state
3042
- }
3043
- });
3044
- });
3045
- }
3046
- };
3047
- function stopGeneration() {
3048
- setSuggestions([]);
3049
- if (onStopGeneration) {
3050
- onStopGeneration({
3051
- messages,
3052
- setMessages,
3053
- stopGeneration: defaultStopGeneration,
3054
- currentAgentName,
3055
- restartCurrentAgent,
3056
- stopCurrentAgent,
3057
- runCurrentAgent,
3058
- setCurrentAgentState
3059
- });
3060
- } else {
3061
- defaultStopGeneration();
3062
- }
3063
- }
3064
- function reloadMessages(messageId) {
3065
- if (onReloadMessages) {
3066
- onReloadMessages({
3067
- messages,
3068
- setMessages,
3069
- stopGeneration: defaultStopGeneration,
3070
- currentAgentName,
3071
- restartCurrentAgent,
3072
- stopCurrentAgent,
3073
- runCurrentAgent,
3074
- setCurrentAgentState,
3075
- messageId
3076
- });
3077
- } else {
3078
- defaultReloadMessages(messageId);
3079
- }
3080
- }
3081
- return {
3082
- messages,
3083
- isLoading,
3084
- suggestions,
3085
- sendMessage: safelySendMessage,
3086
- stopGeneration,
3087
- reloadMessages,
3088
- resetSuggestions,
3089
- context: stableContext,
3090
- actions
3091
- };
3092
- };
3093
2899
 
3094
2900
  // src/components/chat/Modal.tsx
3095
- var import_react_core11 = require("@copilotkit/react-core");
3096
- var import_shared5 = require("@copilotkit/shared");
2901
+ var import_react_core10 = require("@copilotkit/react-core");
2902
+ var import_shared4 = require("@copilotkit/shared");
3097
2903
  var import_jsx_runtime25 = require("react/jsx-runtime");
3098
2904
  var CopilotModalInner = (_a) => {
3099
2905
  var _b = _a, {
@@ -3119,7 +2925,7 @@ var CopilotModalInner = (_a) => {
3119
2925
  "Button",
3120
2926
  "Header"
3121
2927
  ]);
3122
- const { copilotApiConfig, setBannerError } = (0, import_react_core11.useCopilotContext)();
2928
+ const { copilotApiConfig, setBannerError } = (0, import_react_core10.useCopilotContext)();
3123
2929
  const { publicApiKey } = copilotApiConfig;
3124
2930
  const triggerObservabilityHook = (0, import_react16.useCallback)(
3125
2931
  (hookName, ...args) => {
@@ -3128,14 +2934,14 @@ var CopilotModalInner = (_a) => {
3128
2934
  }
3129
2935
  if ((observabilityHooks == null ? void 0 : observabilityHooks[hookName]) && !publicApiKey) {
3130
2936
  setBannerError(
3131
- new import_shared5.CopilotKitError({
2937
+ new import_shared4.CopilotKitError({
3132
2938
  message: "observabilityHooks requires a publicApiKey to function.",
3133
- code: import_shared5.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
3134
- severity: import_shared5.Severity.CRITICAL,
3135
- visibility: import_shared5.ErrorVisibility.BANNER
2939
+ code: import_shared4.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
2940
+ severity: import_shared4.Severity.CRITICAL,
2941
+ visibility: import_shared4.ErrorVisibility.BANNER
3136
2942
  })
3137
2943
  );
3138
- import_shared5.styledConsole.publicApiKeyRequired("observabilityHooks");
2944
+ import_shared4.styledConsole.publicApiKeyRequired("observabilityHooks");
3139
2945
  }
3140
2946
  },
3141
2947
  [publicApiKey, observabilityHooks, setBannerError]