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