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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +0 -9
  2. package/dist/{chunk-VTYBYTE6.mjs → chunk-3JYVJHL5.mjs} +7 -7
  3. package/dist/chunk-3YWFGNSM.mjs +32 -0
  4. package/dist/chunk-3YWFGNSM.mjs.map +1 -0
  5. package/dist/{chunk-YBRHDFVQ.mjs → chunk-CQ2WALZ7.mjs} +2 -2
  6. package/dist/{chunk-OWX6YJZH.mjs → chunk-E6WVAOQA.mjs} +9 -5
  7. package/dist/chunk-E6WVAOQA.mjs.map +1 -0
  8. package/dist/{chunk-WBPBTTQD.mjs → chunk-FFJHOZX6.mjs} +4 -4
  9. package/dist/{chunk-MJEYL3FK.mjs → chunk-G35HUUDA.mjs} +26 -260
  10. package/dist/chunk-G35HUUDA.mjs.map +1 -0
  11. package/dist/{chunk-V6DDX4LH.mjs → chunk-GDSZGYCE.mjs} +2 -2
  12. package/dist/{chunk-ZJCHKHE4.mjs → chunk-HBZW7E5Z.mjs} +13 -10
  13. package/dist/chunk-HBZW7E5Z.mjs.map +1 -0
  14. package/dist/{chunk-KX44MLR6.mjs → chunk-IHFR6PYG.mjs} +1 -1
  15. package/dist/chunk-IHFR6PYG.mjs.map +1 -0
  16. package/dist/{chunk-2XARU6EY.mjs → chunk-MPF6BJUF.mjs} +5 -3
  17. package/dist/chunk-MPF6BJUF.mjs.map +1 -0
  18. package/dist/{chunk-W26XFBEG.mjs → chunk-NGJ32FAP.mjs} +3 -3
  19. package/dist/chunk-NGJ32FAP.mjs.map +1 -0
  20. package/dist/{chunk-RKULVDQO.mjs → chunk-ODEHR7KI.mjs} +9 -2
  21. package/dist/chunk-ODEHR7KI.mjs.map +1 -0
  22. package/dist/chunk-OYRZ4VLU.mjs +12 -0
  23. package/dist/chunk-OYRZ4VLU.mjs.map +1 -0
  24. package/dist/chunk-QB3GUN2N.mjs +31 -0
  25. package/dist/chunk-QB3GUN2N.mjs.map +1 -0
  26. package/dist/{chunk-PIFTVJG3.mjs → chunk-SOB5EIL7.mjs} +2 -2
  27. package/dist/components/chat/Chat.d.ts +3 -98
  28. package/dist/components/chat/Chat.js +79 -275
  29. package/dist/components/chat/Chat.js.map +1 -1
  30. package/dist/components/chat/Chat.mjs +11 -13
  31. package/dist/components/chat/Header.mjs +4 -4
  32. package/dist/components/chat/Input.d.ts +1 -1
  33. package/dist/components/chat/Input.js +11 -8
  34. package/dist/components/chat/Input.js.map +1 -1
  35. package/dist/components/chat/Input.mjs +1 -1
  36. package/dist/components/chat/Messages.d.ts +3 -3
  37. package/dist/components/chat/Messages.js +33 -4
  38. package/dist/components/chat/Messages.js.map +1 -1
  39. package/dist/components/chat/Messages.mjs +5 -5
  40. package/dist/components/chat/Modal.d.ts +1 -6
  41. package/dist/components/chat/Modal.js +85 -279
  42. package/dist/components/chat/Modal.js.map +1 -1
  43. package/dist/components/chat/Modal.mjs +14 -14
  44. package/dist/components/chat/Popup.d.ts +1 -6
  45. package/dist/components/chat/Popup.js +85 -279
  46. package/dist/components/chat/Popup.js.map +1 -1
  47. package/dist/components/chat/Popup.mjs +15 -15
  48. package/dist/components/chat/Sidebar.d.ts +1 -6
  49. package/dist/components/chat/Sidebar.js +85 -279
  50. package/dist/components/chat/Sidebar.js.map +1 -1
  51. package/dist/components/chat/Sidebar.mjs +15 -15
  52. package/dist/components/chat/Suggestion.js.map +1 -1
  53. package/dist/components/chat/Suggestion.mjs +1 -1
  54. package/dist/components/chat/Suggestions.d.ts +1 -1
  55. package/dist/components/chat/Suggestions.js +19 -12
  56. package/dist/components/chat/Suggestions.js.map +1 -1
  57. package/dist/components/chat/Suggestions.mjs +2 -2
  58. package/dist/components/chat/index.d.ts +0 -5
  59. package/dist/components/chat/index.js +85 -279
  60. package/dist/components/chat/index.js.map +1 -1
  61. package/dist/components/chat/index.mjs +16 -16
  62. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  63. package/dist/components/chat/messages/AssistantMessage.mjs +1 -1
  64. package/dist/components/chat/messages/LegacyRenderMessage.js +28 -3
  65. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -1
  66. package/dist/components/chat/messages/LegacyRenderMessage.mjs +4 -4
  67. package/dist/components/chat/messages/RenderMessage.js +21 -3
  68. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  69. package/dist/components/chat/messages/RenderMessage.mjs +3 -3
  70. package/dist/components/chat/messages/UserMessage.js +19 -3
  71. package/dist/components/chat/messages/UserMessage.js.map +1 -1
  72. package/dist/components/chat/messages/UserMessage.mjs +1 -1
  73. package/dist/components/chat/props.d.ts +4 -0
  74. package/dist/components/chat/props.js.map +1 -1
  75. package/dist/components/dev-console/console.mjs +3 -3
  76. package/dist/components/dev-console/index.mjs +4 -4
  77. package/dist/components/index.d.ts +0 -5
  78. package/dist/components/index.js +85 -279
  79. package/dist/components/index.js.map +1 -1
  80. package/dist/components/index.mjs +17 -17
  81. package/dist/hooks/index.d.ts +1 -0
  82. package/dist/hooks/index.js +2 -24
  83. package/dist/hooks/index.js.map +1 -1
  84. package/dist/hooks/index.mjs +1 -1
  85. package/dist/hooks/use-copilot-chat-suggestions.d.ts +4 -26
  86. package/dist/hooks/use-copilot-chat-suggestions.js +2 -24
  87. package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -1
  88. package/dist/hooks/use-copilot-chat-suggestions.mjs +1 -1
  89. package/dist/index.css +0 -2
  90. package/dist/index.css.map +1 -1
  91. package/dist/index.d.ts +0 -5
  92. package/dist/index.js +88 -304
  93. package/dist/index.js.map +1 -1
  94. package/dist/index.mjs +18 -18
  95. package/dist/types/suggestions.d.ts +1 -0
  96. package/dist/types/suggestions.js.map +1 -1
  97. package/package.json +23 -22
  98. package/src/components/chat/Chat.tsx +24 -325
  99. package/src/components/chat/Input.tsx +13 -12
  100. package/src/components/chat/Messages.tsx +8 -4
  101. package/src/components/chat/Suggestion.tsx +2 -2
  102. package/src/components/chat/Suggestions.tsx +6 -2
  103. package/src/components/chat/messages/AssistantMessage.tsx +1 -0
  104. package/src/components/chat/messages/LegacyRenderMessage.tsx +7 -0
  105. package/src/components/chat/messages/RenderMessage.tsx +2 -0
  106. package/src/components/chat/messages/UserMessage.tsx +30 -6
  107. package/src/components/chat/props.ts +4 -0
  108. package/src/css/messages.css +0 -2
  109. package/src/hooks/use-copilot-chat-suggestions.tsx +6 -57
  110. package/src/types/suggestions.ts +1 -0
  111. package/tsup.config.ts +1 -1
  112. package/dist/chunk-226ZMOE3.mjs +0 -24
  113. package/dist/chunk-226ZMOE3.mjs.map +0 -1
  114. package/dist/chunk-2XARU6EY.mjs.map +0 -1
  115. package/dist/chunk-EYRKZDP5.mjs +0 -32
  116. package/dist/chunk-EYRKZDP5.mjs.map +0 -1
  117. package/dist/chunk-KX44MLR6.mjs.map +0 -1
  118. package/dist/chunk-MJEYL3FK.mjs.map +0 -1
  119. package/dist/chunk-OWX6YJZH.mjs.map +0 -1
  120. package/dist/chunk-RKULVDQO.mjs.map +0 -1
  121. package/dist/chunk-VVL6JFCJ.mjs +0 -16
  122. package/dist/chunk-VVL6JFCJ.mjs.map +0 -1
  123. package/dist/chunk-W26XFBEG.mjs.map +0 -1
  124. package/dist/chunk-ZJCHKHE4.mjs.map +0 -1
  125. /package/dist/{chunk-VTYBYTE6.mjs.map → chunk-3JYVJHL5.mjs.map} +0 -0
  126. /package/dist/{chunk-YBRHDFVQ.mjs.map → chunk-CQ2WALZ7.mjs.map} +0 -0
  127. /package/dist/{chunk-WBPBTTQD.mjs.map → chunk-FFJHOZX6.mjs.map} +0 -0
  128. /package/dist/{chunk-V6DDX4LH.mjs.map → chunk-GDSZGYCE.mjs.map} +0 -0
  129. /package/dist/{chunk-PIFTVJG3.mjs.map → chunk-SOB5EIL7.mjs.map} +0 -0
@@ -1,29 +1,29 @@
1
1
  import {
2
2
  CopilotModal
3
- } from "../../chunk-VTYBYTE6.mjs";
3
+ } from "../../chunk-3JYVJHL5.mjs";
4
4
  import "../../chunk-C3GSYRC3.mjs";
5
- import "../../chunk-V6DDX4LH.mjs";
5
+ import "../../chunk-GDSZGYCE.mjs";
6
6
  import "../../chunk-V7W6IM2V.mjs";
7
- import "../../chunk-WBPBTTQD.mjs";
7
+ import "../../chunk-FFJHOZX6.mjs";
8
+ import "../../chunk-Q5V6S67N.mjs";
9
+ import "../../chunk-JY2CSDKN.mjs";
8
10
  import "../../chunk-KXE2JCUH.mjs";
9
11
  import "../../chunk-NRA3CFEE.mjs";
10
12
  import "../../chunk-BH6PCAAL.mjs";
11
- import "../../chunk-Q5V6S67N.mjs";
12
- import "../../chunk-JY2CSDKN.mjs";
13
13
  import "../../chunk-UFN2VWSR.mjs";
14
- import "../../chunk-MJEYL3FK.mjs";
15
- import "../../chunk-226ZMOE3.mjs";
16
- import "../../chunk-W26XFBEG.mjs";
14
+ import "../../chunk-G35HUUDA.mjs";
15
+ import "../../chunk-QB3GUN2N.mjs";
16
+ import "../../chunk-NGJ32FAP.mjs";
17
17
  import "../../chunk-PLHTVHUW.mjs";
18
- import "../../chunk-ZJCHKHE4.mjs";
18
+ import "../../chunk-HBZW7E5Z.mjs";
19
19
  import "../../chunk-ELGRNEAO.mjs";
20
20
  import "../../chunk-QIOJXTIQ.mjs";
21
- import "../../chunk-OWX6YJZH.mjs";
22
- import "../../chunk-RKULVDQO.mjs";
23
- import "../../chunk-2XARU6EY.mjs";
24
- import "../../chunk-KX44MLR6.mjs";
21
+ import "../../chunk-E6WVAOQA.mjs";
22
+ import "../../chunk-ODEHR7KI.mjs";
23
+ import "../../chunk-MPF6BJUF.mjs";
24
+ import "../../chunk-IHFR6PYG.mjs";
25
25
  import "../../chunk-DBKRAOH7.mjs";
26
- import "../../chunk-VVL6JFCJ.mjs";
26
+ import "../../chunk-3YWFGNSM.mjs";
27
27
  import "../../chunk-JZ3RFQQ6.mjs";
28
28
  import "../../chunk-IEMQ2SQW.mjs";
29
29
  import "../../chunk-IK2BPURM.mjs";
@@ -5,13 +5,8 @@ import './props.js';
5
5
  import '@copilotkit/shared';
6
6
  import '../../types/suggestions.js';
7
7
  import './Chat.js';
8
- import '@copilotkit/react-core/dist/types/coagent-state';
9
- import '@copilotkit/react-core/dist/hooks/use-tree';
10
- import '@copilotkit/react-core/dist/copilot-context-cf9de848';
11
- import '@copilotkit/react-core/dist/types/coagent-action';
12
- import '@copilotkit/react-core';
13
- import '@copilotkit/runtime-client-gql';
14
8
  import './ChatContext.js';
9
+ import '@copilotkit/react-core';
15
10
 
16
11
  declare function CopilotPopup(props: CopilotModalProps): react_jsx_runtime.JSX.Element;
17
12
 
@@ -1030,14 +1030,30 @@ var import_react_core5 = require("@copilotkit/react-core");
1030
1030
 
1031
1031
  // src/components/chat/messages/UserMessage.tsx
1032
1032
  var import_jsx_runtime10 = require("react/jsx-runtime");
1033
+ var getTextContent = (content) => {
1034
+ if (typeof content === "undefined") {
1035
+ return void 0;
1036
+ }
1037
+ if (typeof content === "string") {
1038
+ return content;
1039
+ }
1040
+ return content.map((part) => {
1041
+ if (part.type === "text") {
1042
+ return part.text;
1043
+ }
1044
+ return void 0;
1045
+ }).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
1046
+ };
1033
1047
  var UserMessage = (props) => {
1034
1048
  const { message, ImageRenderer: ImageRenderer2 } = props;
1035
- const isImageMessage = message && "image" in message && message.image;
1049
+ const isImageMessage = message && "image" in message && Boolean(message.image);
1036
1050
  if (isImageMessage) {
1037
1051
  const imageMessage = message;
1038
- 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 }) });
1052
+ const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
1053
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
1039
1054
  }
1040
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
1055
+ const content = getTextContent(message == null ? void 0 : message.content);
1056
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
1041
1057
  };
1042
1058
 
1043
1059
  // src/components/chat/Markdown.tsx
@@ -1716,6 +1732,7 @@ function RenderMessage(_a) {
1716
1732
  var _a2;
1717
1733
  const {
1718
1734
  message,
1735
+ messages,
1719
1736
  inProgress,
1720
1737
  index,
1721
1738
  isCurrentMessage,
@@ -1746,6 +1763,7 @@ function RenderMessage(_a) {
1746
1763
  subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
1747
1764
  rawData: message,
1748
1765
  message,
1766
+ messages,
1749
1767
  isLoading: inProgress && isCurrentMessage && !message.content,
1750
1768
  isGenerating: inProgress && isCurrentMessage && !!message.content,
1751
1769
  isCurrentMessage,
@@ -1767,6 +1785,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1767
1785
  var import_jsx_runtime16 = require("react/jsx-runtime");
1768
1786
  var LegacyRenderMessage = ({
1769
1787
  message,
1788
+ messages,
1770
1789
  inProgress,
1771
1790
  index,
1772
1791
  isCurrentMessage,
@@ -1795,6 +1814,7 @@ var LegacyRenderMessage = ({
1795
1814
  RenderTextMessage,
1796
1815
  {
1797
1816
  message,
1817
+ messages,
1798
1818
  inProgress,
1799
1819
  index,
1800
1820
  isCurrentMessage,
@@ -1812,6 +1832,7 @@ var LegacyRenderMessage = ({
1812
1832
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1813
1833
  RenderActionExecutionMessage,
1814
1834
  {
1835
+ messages,
1815
1836
  message,
1816
1837
  inProgress,
1817
1838
  index,
@@ -1826,6 +1847,7 @@ var LegacyRenderMessage = ({
1826
1847
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1827
1848
  RenderAgentStateMessage,
1828
1849
  {
1850
+ messages,
1829
1851
  message,
1830
1852
  inProgress,
1831
1853
  index,
@@ -1839,6 +1861,7 @@ var LegacyRenderMessage = ({
1839
1861
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1840
1862
  RenderResultMessage,
1841
1863
  {
1864
+ messages,
1842
1865
  message,
1843
1866
  inProgress,
1844
1867
  index,
@@ -1852,6 +1875,7 @@ var LegacyRenderMessage = ({
1852
1875
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1853
1876
  RenderImageMessage,
1854
1877
  {
1878
+ messages,
1855
1879
  message,
1856
1880
  inProgress,
1857
1881
  index,
@@ -1864,6 +1888,7 @@ var LegacyRenderMessage = ({
1864
1888
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1865
1889
  RenderMessage,
1866
1890
  {
1891
+ messages,
1867
1892
  message,
1868
1893
  inProgress,
1869
1894
  index,
@@ -1904,7 +1929,8 @@ var Messages = ({
1904
1929
  RenderResultMessage,
1905
1930
  RenderImageMessage
1906
1931
  }) => {
1907
- const { labels } = useChatContext();
1932
+ var _a;
1933
+ const { labels, icons } = useChatContext();
1908
1934
  const { messages: visibleMessages, interrupt } = (0, import_react_core5.useCopilotChatInternal)();
1909
1935
  const initialMessages = (0, import_react10.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1910
1936
  const messages = [...initialMessages, ...visibleMessages];
@@ -1934,6 +1960,7 @@ var Messages = ({
1934
1960
  ]
1935
1961
  );
1936
1962
  const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
1963
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
1937
1964
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1938
1965
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1939
1966
  messages.map((message, index) => {
@@ -1942,6 +1969,7 @@ var Messages = ({
1942
1969
  MessageRenderer,
1943
1970
  {
1944
1971
  message,
1972
+ messages,
1945
1973
  inProgress,
1946
1974
  index,
1947
1975
  isCurrentMessage,
@@ -1958,6 +1986,7 @@ var Messages = ({
1958
1986
  index
1959
1987
  );
1960
1988
  }),
1989
+ ((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
1961
1990
  interrupt,
1962
1991
  chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
1963
1992
  ] }),
@@ -2251,12 +2280,12 @@ var MAX_NEWLINES = 6;
2251
2280
  var Input = ({
2252
2281
  inProgress,
2253
2282
  onSend,
2254
- isVisible = false,
2283
+ chatReady = true,
2255
2284
  onStop,
2256
2285
  onUpload,
2257
2286
  hideStopButton = false
2258
2287
  }) => {
2259
- var _a, _b;
2288
+ var _a;
2260
2289
  const context = useChatContext();
2261
2290
  const copilotContext = (0, import_react_core7.useCopilotContext)();
2262
2291
  const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
@@ -2286,14 +2315,16 @@ var Input = ({
2286
2315
  inProgress
2287
2316
  });
2288
2317
  const isInProgress = inProgress || pushToTalkState === "transcribing";
2289
- const buttonIcon = isInProgress && !hideStopButton ? context.icons.stopIcon : context.icons.sendIcon;
2318
+ const { buttonIcon, buttonAlt } = (0, import_react14.useMemo)(() => {
2319
+ if (!chatReady)
2320
+ return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
2321
+ return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
2322
+ }, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
2290
2323
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
2324
+ const { interrupt } = (0, import_react_core7.useCopilotChatInternal)();
2291
2325
  const canSend = (0, import_react14.useMemo)(() => {
2292
- var _a2;
2293
- const interruptEvent = (_a2 = copilotContext.langGraphInterruptAction) == null ? void 0 : _a2.event;
2294
- const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
2295
- return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
2296
- }, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
2326
+ return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
2327
+ }, [interrupt, isInProgress, text, pushToTalkState]);
2297
2328
  const canStop = (0, import_react14.useMemo)(() => {
2298
2329
  return isInProgress && !hideStopButton;
2299
2330
  }, [isInProgress, hideStopButton]);
@@ -2340,6 +2371,7 @@ var Input = ({
2340
2371
  "data-copilotkit-in-progress": inProgress,
2341
2372
  "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
2342
2373
  className: "copilotKitInputControlButton",
2374
+ "aria-label": buttonAlt,
2343
2375
  children: buttonIcon
2344
2376
  }
2345
2377
  )
@@ -2353,8 +2385,6 @@ var Input = ({
2353
2385
  var import_react15 = __toESM(require("react"));
2354
2386
  var import_react_core9 = require("@copilotkit/react-core");
2355
2387
  var import_shared3 = require("@copilotkit/shared");
2356
- var import_shared4 = require("@copilotkit/shared");
2357
- var import_react_core10 = require("@copilotkit/react-core");
2358
2388
 
2359
2389
  // src/components/chat/ImageUploadQueue.tsx
2360
2390
  var import_jsx_runtime21 = require("react/jsx-runtime");
@@ -2458,18 +2488,25 @@ function Suggestion({ title, onClick, partial, className }) {
2458
2488
 
2459
2489
  // src/components/chat/Suggestions.tsx
2460
2490
  var import_jsx_runtime23 = require("react/jsx-runtime");
2461
- function Suggestions({ suggestions, onSuggestionClick }) {
2462
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2463
- Suggestion,
2464
- {
2465
- title: suggestion.title,
2466
- message: suggestion.message,
2467
- partial: suggestion.partial,
2468
- className: suggestion.className,
2469
- onClick: () => onSuggestionClick(suggestion.message)
2470
- },
2471
- index
2472
- )) });
2491
+ function Suggestions({
2492
+ suggestions,
2493
+ onSuggestionClick,
2494
+ isLoading
2495
+ }) {
2496
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
2497
+ var _a, _b;
2498
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2499
+ Suggestion,
2500
+ {
2501
+ title: suggestion.title,
2502
+ message: suggestion.message,
2503
+ partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
2504
+ className: suggestion.className,
2505
+ onClick: () => onSuggestionClick(suggestion.message)
2506
+ },
2507
+ index
2508
+ );
2509
+ }) });
2473
2510
  }
2474
2511
 
2475
2512
  // src/components/chat/Chat.tsx
@@ -2669,16 +2706,12 @@ function CopilotChat({
2669
2706
  sendMessage,
2670
2707
  stopGeneration,
2671
2708
  reloadMessages,
2672
- suggestions: currentSuggestions
2673
- } = useCopilotChatLogic(
2674
- suggestions,
2675
- makeSystemMessage,
2676
- disableSystemMessage,
2677
- onInProgress,
2678
- onSubmitMessage,
2679
- onStopGeneration,
2680
- onReloadMessages
2681
- );
2709
+ suggestions: currentSuggestions,
2710
+ isLoadingSuggestions,
2711
+ agent
2712
+ } = (0, import_react_core9.useCopilotChatInternal)({
2713
+ suggestions
2714
+ });
2682
2715
  const prevIsLoading = (0, import_react15.useRef)(isLoading);
2683
2716
  (0, import_react15.useEffect)(() => {
2684
2717
  if (prevIsLoading.current !== isLoading) {
@@ -2697,7 +2730,11 @@ function CopilotChat({
2697
2730
  fileInputRef.current.value = "";
2698
2731
  }
2699
2732
  triggerObservabilityHook("onMessageSent", text);
2700
- return sendMessage(text, images);
2733
+ return sendMessage({
2734
+ id: (0, import_shared3.randomUUID)(),
2735
+ content: text,
2736
+ role: "user"
2737
+ });
2701
2738
  };
2702
2739
  const chatContext = import_react15.default.useContext(ChatContext);
2703
2740
  const isVisible = chatContext ? chatContext.open : true;
@@ -2800,7 +2837,8 @@ function CopilotChat({
2800
2837
  RenderSuggestionsList,
2801
2838
  {
2802
2839
  onSuggestionClick: handleSendMessage,
2803
- suggestions: currentSuggestions
2840
+ suggestions: currentSuggestions,
2841
+ isLoading: isLoadingSuggestions
2804
2842
  }
2805
2843
  )
2806
2844
  }
@@ -2823,6 +2861,7 @@ function CopilotChat({
2823
2861
  Input2,
2824
2862
  {
2825
2863
  inProgress: isLoading,
2864
+ chatReady: Boolean(agent),
2826
2865
  onSend: handleSendMessage,
2827
2866
  isVisible,
2828
2867
  onStop: stopGeneration,
@@ -2848,243 +2887,10 @@ function WrappedCopilotChat({
2848
2887
  }
2849
2888
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
2850
2889
  }
2851
- var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2852
- var _a;
2853
- const {
2854
- messages,
2855
- sendMessage,
2856
- setMessages,
2857
- reloadMessages: defaultReloadMessages,
2858
- stopGeneration: defaultStopGeneration,
2859
- runChatCompletion,
2860
- isLoading,
2861
- suggestions,
2862
- setSuggestions,
2863
- generateSuggestions,
2864
- resetSuggestions: resetSuggestionsFromHook,
2865
- isLoadingSuggestions
2866
- } = (0, import_react_core9.useCopilotChatInternal)({
2867
- makeSystemMessage,
2868
- disableSystemMessage
2869
- });
2870
- const generalContext = (0, import_react_core9.useCopilotContext)();
2871
- const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
2872
- const { actions } = generalContext;
2873
- const [suggestionsFailed, setSuggestionsFailed] = (0, import_react15.useState)(false);
2874
- const hasGeneratedInitialSuggestions = (0, import_react15.useRef)(false);
2875
- (0, import_react15.useEffect)(() => {
2876
- if (Array.isArray(chatSuggestions)) {
2877
- setSuggestions(chatSuggestions);
2878
- hasGeneratedInitialSuggestions.current = true;
2879
- }
2880
- }, [JSON.stringify(chatSuggestions), setSuggestions]);
2881
- const generateSuggestionsWithErrorHandling = (0, import_react15.useCallback)(
2882
- (context) => __async(void 0, null, function* () {
2883
- try {
2884
- yield generateSuggestions();
2885
- } catch (error) {
2886
- console.error("Failed to generate suggestions:", error);
2887
- setSuggestionsFailed(true);
2888
- }
2889
- }),
2890
- [generateSuggestions]
2891
- );
2892
- (0, import_react15.useEffect)(() => {
2893
- if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2894
- return;
2895
- }
2896
- if (isLoading) {
2897
- return;
2898
- }
2899
- if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2900
- return;
2901
- }
2902
- if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2903
- hasGeneratedInitialSuggestions.current = true;
2904
- generateSuggestionsWithErrorHandling("initial");
2905
- return;
2906
- }
2907
- if (messages.length > 0 && suggestions.length === 0) {
2908
- generateSuggestionsWithErrorHandling("post-message");
2909
- return;
2910
- }
2911
- }, [
2912
- chatSuggestions,
2913
- isLoadingSuggestions,
2914
- suggestionsFailed,
2915
- messages.length,
2916
- isLoading,
2917
- suggestions.length,
2918
- Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2919
- // Use stable string instead of object reference
2920
- generateSuggestionsWithErrorHandling
2921
- ]);
2922
- (0, import_react15.useEffect)(() => {
2923
- if (chatSuggestions !== "auto") {
2924
- hasGeneratedInitialSuggestions.current = false;
2925
- setSuggestionsFailed(false);
2926
- }
2927
- }, [chatSuggestions]);
2928
- const stableContext = (0, import_react15.useMemo)(
2929
- () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2930
- [
2931
- // Only include stable dependencies
2932
- generalContext.actions,
2933
- messagesContext.messages.length,
2934
- generalContext.isLoading
2935
- ]
2936
- );
2937
- const resetSuggestions = (0, import_react15.useCallback)(() => {
2938
- resetSuggestionsFromHook();
2939
- setSuggestionsFailed(false);
2940
- hasGeneratedInitialSuggestions.current = false;
2941
- }, [resetSuggestionsFromHook]);
2942
- (0, import_react15.useEffect)(() => {
2943
- onInProgress == null ? void 0 : onInProgress(isLoading);
2944
- }, [onInProgress, isLoading]);
2945
- const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2946
- const images = imagesToUse || [];
2947
- if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2948
- setSuggestions([]);
2949
- }
2950
- let firstMessage = null;
2951
- if (messageContent.trim().length > 0) {
2952
- const textMessage = {
2953
- id: (0, import_shared4.randomId)(),
2954
- role: "user",
2955
- content: messageContent
2956
- };
2957
- if (onSubmitMessage) {
2958
- try {
2959
- yield onSubmitMessage(messageContent);
2960
- } catch (error) {
2961
- console.error("Error in onSubmitMessage:", error);
2962
- }
2963
- }
2964
- yield sendMessage(textMessage, {
2965
- followUp: images.length === 0,
2966
- clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2967
- });
2968
- if (!firstMessage) {
2969
- firstMessage = textMessage;
2970
- }
2971
- }
2972
- if (images.length > 0) {
2973
- for (let i = 0; i < images.length; i++) {
2974
- const imageMessage = {
2975
- id: (0, import_shared4.randomId)(),
2976
- role: "user",
2977
- image: {
2978
- format: images[i].contentType.replace("image/", ""),
2979
- bytes: images[i].bytes
2980
- }
2981
- };
2982
- yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
2983
- if (!firstMessage) {
2984
- firstMessage = imageMessage;
2985
- }
2986
- }
2987
- }
2988
- if (!firstMessage) {
2989
- return { role: "user", content: "", id: (0, import_shared4.randomId)() };
2990
- }
2991
- return firstMessage;
2992
- });
2993
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
2994
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
2995
- if (generalContext.agentSession) {
2996
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
2997
- nodeName: void 0,
2998
- threadId: void 0
2999
- }));
3000
- generalContext.setCoagentStates((prevAgentStates) => {
3001
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3002
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
3003
- threadId: void 0,
3004
- nodeName: void 0,
3005
- runId: void 0
3006
- })
3007
- });
3008
- });
3009
- }
3010
- });
3011
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
3012
- if (generalContext.agentSession) {
3013
- yield (0, import_react_core10.runAgent)(
3014
- generalContext.agentSession.agentName,
3015
- stableContext,
3016
- messagesContext.messages,
3017
- sendMessage,
3018
- runChatCompletion
3019
- );
3020
- }
3021
- });
3022
- const stopCurrentAgent = () => {
3023
- if (generalContext.agentSession) {
3024
- (0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, stableContext);
3025
- }
3026
- };
3027
- const setCurrentAgentState = (state) => {
3028
- if (generalContext.agentSession) {
3029
- generalContext.setCoagentStates((prevAgentStates) => {
3030
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3031
- [generalContext.agentSession.agentName]: {
3032
- state
3033
- }
3034
- });
3035
- });
3036
- }
3037
- };
3038
- function stopGeneration() {
3039
- setSuggestions([]);
3040
- if (onStopGeneration) {
3041
- onStopGeneration({
3042
- messages,
3043
- setMessages,
3044
- stopGeneration: defaultStopGeneration,
3045
- currentAgentName,
3046
- restartCurrentAgent,
3047
- stopCurrentAgent,
3048
- runCurrentAgent,
3049
- setCurrentAgentState
3050
- });
3051
- } else {
3052
- defaultStopGeneration();
3053
- }
3054
- }
3055
- function reloadMessages(messageId) {
3056
- if (onReloadMessages) {
3057
- onReloadMessages({
3058
- messages,
3059
- setMessages,
3060
- stopGeneration: defaultStopGeneration,
3061
- currentAgentName,
3062
- restartCurrentAgent,
3063
- stopCurrentAgent,
3064
- runCurrentAgent,
3065
- setCurrentAgentState,
3066
- messageId
3067
- });
3068
- } else {
3069
- defaultReloadMessages(messageId);
3070
- }
3071
- }
3072
- return {
3073
- messages,
3074
- isLoading,
3075
- suggestions,
3076
- sendMessage: safelySendMessage,
3077
- stopGeneration,
3078
- reloadMessages,
3079
- resetSuggestions,
3080
- context: stableContext,
3081
- actions
3082
- };
3083
- };
3084
2890
 
3085
2891
  // src/components/chat/Modal.tsx
3086
- var import_react_core11 = require("@copilotkit/react-core");
3087
- var import_shared5 = require("@copilotkit/shared");
2892
+ var import_react_core10 = require("@copilotkit/react-core");
2893
+ var import_shared4 = require("@copilotkit/shared");
3088
2894
  var import_jsx_runtime25 = require("react/jsx-runtime");
3089
2895
  var CopilotModalInner = (_a) => {
3090
2896
  var _b = _a, {
@@ -3110,7 +2916,7 @@ var CopilotModalInner = (_a) => {
3110
2916
  "Button",
3111
2917
  "Header"
3112
2918
  ]);
3113
- const { copilotApiConfig, setBannerError } = (0, import_react_core11.useCopilotContext)();
2919
+ const { copilotApiConfig, setBannerError } = (0, import_react_core10.useCopilotContext)();
3114
2920
  const { publicApiKey } = copilotApiConfig;
3115
2921
  const triggerObservabilityHook = (0, import_react16.useCallback)(
3116
2922
  (hookName, ...args) => {
@@ -3119,14 +2925,14 @@ var CopilotModalInner = (_a) => {
3119
2925
  }
3120
2926
  if ((observabilityHooks == null ? void 0 : observabilityHooks[hookName]) && !publicApiKey) {
3121
2927
  setBannerError(
3122
- new import_shared5.CopilotKitError({
2928
+ new import_shared4.CopilotKitError({
3123
2929
  message: "observabilityHooks requires a publicApiKey to function.",
3124
- code: import_shared5.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
3125
- severity: import_shared5.Severity.CRITICAL,
3126
- visibility: import_shared5.ErrorVisibility.BANNER
2930
+ code: import_shared4.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
2931
+ severity: import_shared4.Severity.CRITICAL,
2932
+ visibility: import_shared4.ErrorVisibility.BANNER
3127
2933
  })
3128
2934
  );
3129
- import_shared5.styledConsole.publicApiKeyRequired("observabilityHooks");
2935
+ import_shared4.styledConsole.publicApiKeyRequired("observabilityHooks");
3130
2936
  }
3131
2937
  },
3132
2938
  [publicApiKey, observabilityHooks, setBannerError]