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