@copilotkit/react-ui 1.10.6 → 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 (122) hide show
  1. package/dist/{chunk-H5Y4W7DM.mjs → chunk-3JYVJHL5.mjs} +6 -6
  2. package/dist/chunk-3YWFGNSM.mjs +32 -0
  3. package/dist/chunk-3YWFGNSM.mjs.map +1 -0
  4. package/dist/{chunk-BAD2NFZ7.mjs → chunk-CQ2WALZ7.mjs} +2 -2
  5. package/dist/{chunk-W7ONZTSW.mjs → chunk-E6WVAOQA.mjs} +11 -5
  6. package/dist/chunk-E6WVAOQA.mjs.map +1 -0
  7. package/dist/{chunk-ME2WM7IP.mjs → chunk-G35HUUDA.mjs} +36 -260
  8. package/dist/chunk-G35HUUDA.mjs.map +1 -0
  9. package/dist/{chunk-EZQA3UPQ.mjs → chunk-HBZW7E5Z.mjs} +16 -13
  10. package/dist/chunk-HBZW7E5Z.mjs.map +1 -0
  11. package/dist/{chunk-3QYTKBWC.mjs → chunk-IHFR6PYG.mjs} +8 -5
  12. package/dist/chunk-IHFR6PYG.mjs.map +1 -0
  13. package/dist/{chunk-5XLGXUQI.mjs → chunk-MPF6BJUF.mjs} +7 -3
  14. package/dist/chunk-MPF6BJUF.mjs.map +1 -0
  15. package/dist/{chunk-W26XFBEG.mjs → chunk-NGJ32FAP.mjs} +3 -3
  16. package/dist/chunk-NGJ32FAP.mjs.map +1 -0
  17. package/dist/{chunk-2LIO4Z3E.mjs → chunk-ODEHR7KI.mjs} +9 -2
  18. package/dist/chunk-ODEHR7KI.mjs.map +1 -0
  19. package/dist/chunk-OYRZ4VLU.mjs +12 -0
  20. package/dist/chunk-OYRZ4VLU.mjs.map +1 -0
  21. package/dist/chunk-QB3GUN2N.mjs +31 -0
  22. package/dist/chunk-QB3GUN2N.mjs.map +1 -0
  23. package/dist/{chunk-7RDGZ5JL.mjs → chunk-SOB5EIL7.mjs} +2 -2
  24. package/dist/components/chat/Chat.d.ts +3 -98
  25. package/dist/components/chat/Chat.js +100 -279
  26. package/dist/components/chat/Chat.js.map +1 -1
  27. package/dist/components/chat/Chat.mjs +12 -14
  28. package/dist/components/chat/Input.d.ts +1 -1
  29. package/dist/components/chat/Input.js +11 -8
  30. package/dist/components/chat/Input.js.map +1 -1
  31. package/dist/components/chat/Input.mjs +2 -2
  32. package/dist/components/chat/Messages.d.ts +4 -4
  33. package/dist/components/chat/Messages.js +44 -8
  34. package/dist/components/chat/Messages.js.map +1 -1
  35. package/dist/components/chat/Messages.mjs +5 -5
  36. package/dist/components/chat/Modal.d.ts +1 -6
  37. package/dist/components/chat/Modal.js +106 -283
  38. package/dist/components/chat/Modal.js.map +1 -1
  39. package/dist/components/chat/Modal.mjs +11 -11
  40. package/dist/components/chat/Popup.d.ts +1 -6
  41. package/dist/components/chat/Popup.js +106 -283
  42. package/dist/components/chat/Popup.js.map +1 -1
  43. package/dist/components/chat/Popup.mjs +12 -12
  44. package/dist/components/chat/Sidebar.d.ts +1 -6
  45. package/dist/components/chat/Sidebar.js +106 -283
  46. package/dist/components/chat/Sidebar.js.map +1 -1
  47. package/dist/components/chat/Sidebar.mjs +12 -12
  48. package/dist/components/chat/Suggestion.js.map +1 -1
  49. package/dist/components/chat/Suggestion.mjs +1 -1
  50. package/dist/components/chat/Suggestions.d.ts +1 -1
  51. package/dist/components/chat/Suggestions.js +19 -12
  52. package/dist/components/chat/Suggestions.js.map +1 -1
  53. package/dist/components/chat/Suggestions.mjs +2 -2
  54. package/dist/components/chat/index.d.ts +0 -5
  55. package/dist/components/chat/index.js +106 -283
  56. package/dist/components/chat/index.js.map +1 -1
  57. package/dist/components/chat/index.mjs +13 -13
  58. package/dist/components/chat/messages/AssistantMessage.js +7 -4
  59. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  60. package/dist/components/chat/messages/AssistantMessage.mjs +1 -1
  61. package/dist/components/chat/messages/LegacyRenderMessage.js +37 -7
  62. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -1
  63. package/dist/components/chat/messages/LegacyRenderMessage.mjs +4 -4
  64. package/dist/components/chat/messages/RenderMessage.js +30 -7
  65. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  66. package/dist/components/chat/messages/RenderMessage.mjs +3 -3
  67. package/dist/components/chat/messages/UserMessage.js +19 -3
  68. package/dist/components/chat/messages/UserMessage.js.map +1 -1
  69. package/dist/components/chat/messages/UserMessage.mjs +1 -1
  70. package/dist/components/chat/props.d.ts +16 -0
  71. package/dist/components/chat/props.js.map +1 -1
  72. package/dist/components/index.d.ts +0 -5
  73. package/dist/components/index.js +106 -283
  74. package/dist/components/index.js.map +1 -1
  75. package/dist/components/index.mjs +13 -13
  76. package/dist/hooks/index.d.ts +1 -0
  77. package/dist/hooks/index.js +2 -24
  78. package/dist/hooks/index.js.map +1 -1
  79. package/dist/hooks/index.mjs +1 -1
  80. package/dist/hooks/use-copilot-chat-suggestions.d.ts +4 -26
  81. package/dist/hooks/use-copilot-chat-suggestions.js +2 -24
  82. package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -1
  83. package/dist/hooks/use-copilot-chat-suggestions.mjs +1 -1
  84. package/dist/index.css +8 -1
  85. package/dist/index.css.map +1 -1
  86. package/dist/index.d.ts +0 -5
  87. package/dist/index.js +109 -308
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +14 -14
  90. package/dist/types/suggestions.d.ts +1 -0
  91. package/dist/types/suggestions.js.map +1 -1
  92. package/package.json +23 -22
  93. package/src/components/chat/Chat.tsx +40 -325
  94. package/src/components/chat/Input.tsx +13 -12
  95. package/src/components/chat/Messages.tsx +10 -4
  96. package/src/components/chat/Suggestion.tsx +2 -2
  97. package/src/components/chat/Suggestions.tsx +6 -2
  98. package/src/components/chat/messages/AssistantMessage.tsx +14 -4
  99. package/src/components/chat/messages/LegacyRenderMessage.tsx +7 -0
  100. package/src/components/chat/messages/RenderMessage.tsx +4 -0
  101. package/src/components/chat/messages/UserMessage.tsx +30 -6
  102. package/src/components/chat/props.ts +19 -0
  103. package/src/css/messages.css +10 -1
  104. package/src/hooks/use-copilot-chat-suggestions.tsx +6 -57
  105. package/src/types/suggestions.ts +1 -0
  106. package/tsup.config.ts +1 -1
  107. package/dist/chunk-226ZMOE3.mjs +0 -24
  108. package/dist/chunk-226ZMOE3.mjs.map +0 -1
  109. package/dist/chunk-2LIO4Z3E.mjs.map +0 -1
  110. package/dist/chunk-3QYTKBWC.mjs.map +0 -1
  111. package/dist/chunk-5XLGXUQI.mjs.map +0 -1
  112. package/dist/chunk-EYRKZDP5.mjs +0 -32
  113. package/dist/chunk-EYRKZDP5.mjs.map +0 -1
  114. package/dist/chunk-EZQA3UPQ.mjs.map +0 -1
  115. package/dist/chunk-ME2WM7IP.mjs.map +0 -1
  116. package/dist/chunk-VVL6JFCJ.mjs +0 -16
  117. package/dist/chunk-VVL6JFCJ.mjs.map +0 -1
  118. package/dist/chunk-W26XFBEG.mjs.map +0 -1
  119. package/dist/chunk-W7ONZTSW.mjs.map +0 -1
  120. /package/dist/{chunk-H5Y4W7DM.mjs.map → chunk-3JYVJHL5.mjs.map} +0 -0
  121. /package/dist/{chunk-BAD2NFZ7.mjs.map → chunk-CQ2WALZ7.mjs.map} +0 -0
  122. /package/dist/{chunk-7RDGZ5JL.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
@@ -1593,6 +1609,7 @@ var AssistantMessage = (props) => {
1593
1609
  onThumbsUp,
1594
1610
  onThumbsDown,
1595
1611
  isCurrentMessage,
1612
+ feedback,
1596
1613
  markdownTagRenderers
1597
1614
  } = props;
1598
1615
  const [copied, setCopied] = (0, import_react8.useState)(false);
@@ -1614,12 +1631,14 @@ var AssistantMessage = (props) => {
1614
1631
  onRegenerate();
1615
1632
  };
1616
1633
  const handleThumbsUp = () => {
1617
- if (onThumbsUp && message)
1634
+ if (onThumbsUp && message) {
1618
1635
  onThumbsUp(message);
1636
+ }
1619
1637
  };
1620
1638
  const handleThumbsDown = () => {
1621
- if (onThumbsDown && message)
1639
+ if (onThumbsDown && message) {
1622
1640
  onThumbsDown(message);
1641
+ }
1623
1642
  };
1624
1643
  const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: icons.activityIcon });
1625
1644
  const content = (message == null ? void 0 : message.content) || "";
@@ -1655,7 +1674,7 @@ var AssistantMessage = (props) => {
1655
1674
  onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1656
1675
  "button",
1657
1676
  {
1658
- className: "copilotKitMessageControlButton",
1677
+ className: `copilotKitMessageControlButton ${feedback === "thumbsUp" ? "active" : ""}`,
1659
1678
  onClick: handleThumbsUp,
1660
1679
  "aria-label": labels.thumbsUp,
1661
1680
  title: labels.thumbsUp,
@@ -1665,7 +1684,7 @@ var AssistantMessage = (props) => {
1665
1684
  onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1666
1685
  "button",
1667
1686
  {
1668
- className: "copilotKitMessageControlButton",
1687
+ className: `copilotKitMessageControlButton ${feedback === "thumbsDown" ? "active" : ""}`,
1669
1688
  onClick: handleThumbsDown,
1670
1689
  "aria-label": labels.thumbsDown,
1671
1690
  title: labels.thumbsDown,
@@ -1726,6 +1745,7 @@ function RenderMessage(_a) {
1726
1745
  var _a2;
1727
1746
  const {
1728
1747
  message,
1748
+ messages,
1729
1749
  inProgress,
1730
1750
  index,
1731
1751
  isCurrentMessage,
@@ -1733,6 +1753,7 @@ function RenderMessage(_a) {
1733
1753
  onCopy,
1734
1754
  onThumbsUp,
1735
1755
  onThumbsDown,
1756
+ messageFeedback,
1736
1757
  markdownTagRenderers
1737
1758
  } = props;
1738
1759
  switch (message.role) {
@@ -1755,6 +1776,7 @@ function RenderMessage(_a) {
1755
1776
  subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
1756
1777
  rawData: message,
1757
1778
  message,
1779
+ messages,
1758
1780
  isLoading: inProgress && isCurrentMessage && !message.content,
1759
1781
  isGenerating: inProgress && isCurrentMessage && !!message.content,
1760
1782
  isCurrentMessage,
@@ -1762,6 +1784,7 @@ function RenderMessage(_a) {
1762
1784
  onCopy,
1763
1785
  onThumbsUp,
1764
1786
  onThumbsDown,
1787
+ feedback: (messageFeedback == null ? void 0 : messageFeedback[message.id]) || null,
1765
1788
  markdownTagRenderers,
1766
1789
  ImageRenderer: ImageRenderer2
1767
1790
  },
@@ -1775,6 +1798,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1775
1798
  var import_jsx_runtime16 = require("react/jsx-runtime");
1776
1799
  var LegacyRenderMessage = ({
1777
1800
  message,
1801
+ messages,
1778
1802
  inProgress,
1779
1803
  index,
1780
1804
  isCurrentMessage,
@@ -1803,6 +1827,7 @@ var LegacyRenderMessage = ({
1803
1827
  RenderTextMessage,
1804
1828
  {
1805
1829
  message,
1830
+ messages,
1806
1831
  inProgress,
1807
1832
  index,
1808
1833
  isCurrentMessage,
@@ -1820,6 +1845,7 @@ var LegacyRenderMessage = ({
1820
1845
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1821
1846
  RenderActionExecutionMessage,
1822
1847
  {
1848
+ messages,
1823
1849
  message,
1824
1850
  inProgress,
1825
1851
  index,
@@ -1834,6 +1860,7 @@ var LegacyRenderMessage = ({
1834
1860
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1835
1861
  RenderAgentStateMessage,
1836
1862
  {
1863
+ messages,
1837
1864
  message,
1838
1865
  inProgress,
1839
1866
  index,
@@ -1847,6 +1874,7 @@ var LegacyRenderMessage = ({
1847
1874
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1848
1875
  RenderResultMessage,
1849
1876
  {
1877
+ messages,
1850
1878
  message,
1851
1879
  inProgress,
1852
1880
  index,
@@ -1860,6 +1888,7 @@ var LegacyRenderMessage = ({
1860
1888
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1861
1889
  RenderImageMessage,
1862
1890
  {
1891
+ messages,
1863
1892
  message,
1864
1893
  inProgress,
1865
1894
  index,
@@ -1872,6 +1901,7 @@ var LegacyRenderMessage = ({
1872
1901
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1873
1902
  RenderMessage,
1874
1903
  {
1904
+ messages,
1875
1905
  message,
1876
1906
  inProgress,
1877
1907
  index,
@@ -1902,6 +1932,7 @@ var Messages = ({
1902
1932
  onCopy,
1903
1933
  onThumbsUp,
1904
1934
  onThumbsDown,
1935
+ messageFeedback,
1905
1936
  markdownTagRenderers,
1906
1937
  chatError,
1907
1938
  // Legacy props
@@ -1911,7 +1942,8 @@ var Messages = ({
1911
1942
  RenderResultMessage,
1912
1943
  RenderImageMessage
1913
1944
  }) => {
1914
- const { labels } = useChatContext();
1945
+ var _a;
1946
+ const { labels, icons } = useChatContext();
1915
1947
  const { messages: visibleMessages, interrupt } = (0, import_react_core5.useCopilotChatInternal)();
1916
1948
  const initialMessages = (0, import_react10.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1917
1949
  const messages = [...initialMessages, ...visibleMessages];
@@ -1941,6 +1973,7 @@ var Messages = ({
1941
1973
  ]
1942
1974
  );
1943
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 });
1944
1977
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1945
1978
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1946
1979
  messages.map((message, index) => {
@@ -1949,6 +1982,7 @@ var Messages = ({
1949
1982
  MessageRenderer,
1950
1983
  {
1951
1984
  message,
1985
+ messages,
1952
1986
  inProgress,
1953
1987
  index,
1954
1988
  isCurrentMessage,
@@ -1959,11 +1993,13 @@ var Messages = ({
1959
1993
  onCopy,
1960
1994
  onThumbsUp,
1961
1995
  onThumbsDown,
1996
+ messageFeedback,
1962
1997
  markdownTagRenderers
1963
1998
  },
1964
1999
  index
1965
2000
  );
1966
2001
  }),
2002
+ ((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
1967
2003
  interrupt,
1968
2004
  chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
1969
2005
  ] }),
@@ -2257,12 +2293,12 @@ var MAX_NEWLINES = 6;
2257
2293
  var Input = ({
2258
2294
  inProgress,
2259
2295
  onSend,
2260
- isVisible = false,
2296
+ chatReady = true,
2261
2297
  onStop,
2262
2298
  onUpload,
2263
2299
  hideStopButton = false
2264
2300
  }) => {
2265
- var _a, _b;
2301
+ var _a;
2266
2302
  const context = useChatContext();
2267
2303
  const copilotContext = (0, import_react_core7.useCopilotContext)();
2268
2304
  const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
@@ -2292,14 +2328,16 @@ var Input = ({
2292
2328
  inProgress
2293
2329
  });
2294
2330
  const isInProgress = inProgress || pushToTalkState === "transcribing";
2295
- 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]);
2296
2336
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
2337
+ const { interrupt } = (0, import_react_core7.useCopilotChatInternal)();
2297
2338
  const canSend = (0, import_react14.useMemo)(() => {
2298
- var _a2;
2299
- const interruptEvent = (_a2 = copilotContext.langGraphInterruptAction) == null ? void 0 : _a2.event;
2300
- const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
2301
- return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
2302
- }, [(_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]);
2303
2341
  const canStop = (0, import_react14.useMemo)(() => {
2304
2342
  return isInProgress && !hideStopButton;
2305
2343
  }, [isInProgress, hideStopButton]);
@@ -2346,6 +2384,7 @@ var Input = ({
2346
2384
  "data-copilotkit-in-progress": inProgress,
2347
2385
  "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
2348
2386
  className: "copilotKitInputControlButton",
2387
+ "aria-label": buttonAlt,
2349
2388
  children: buttonIcon
2350
2389
  }
2351
2390
  )
@@ -2359,8 +2398,6 @@ var Input = ({
2359
2398
  var import_react15 = __toESM(require("react"));
2360
2399
  var import_react_core9 = require("@copilotkit/react-core");
2361
2400
  var import_shared3 = require("@copilotkit/shared");
2362
- var import_shared4 = require("@copilotkit/shared");
2363
- var import_react_core10 = require("@copilotkit/react-core");
2364
2401
 
2365
2402
  // src/components/chat/ImageUploadQueue.tsx
2366
2403
  var import_jsx_runtime21 = require("react/jsx-runtime");
@@ -2464,18 +2501,25 @@ function Suggestion({ title, onClick, partial, className }) {
2464
2501
 
2465
2502
  // src/components/chat/Suggestions.tsx
2466
2503
  var import_jsx_runtime23 = require("react/jsx-runtime");
2467
- function Suggestions({ suggestions, onSuggestionClick }) {
2468
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2469
- Suggestion,
2470
- {
2471
- title: suggestion.title,
2472
- message: suggestion.message,
2473
- partial: suggestion.partial,
2474
- className: suggestion.className,
2475
- onClick: () => onSuggestionClick(suggestion.message)
2476
- },
2477
- index
2478
- )) });
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
+ }) });
2479
2523
  }
2480
2524
 
2481
2525
  // src/components/chat/Chat.tsx
@@ -2529,6 +2573,9 @@ function CopilotChat({
2529
2573
  const { publicApiKey, chatApiEndpoint } = copilotApiConfig;
2530
2574
  const [selectedImages, setSelectedImages] = (0, import_react15.useState)([]);
2531
2575
  const [chatError, setChatError] = (0, import_react15.useState)(null);
2576
+ const [messageFeedback, setMessageFeedback] = (0, import_react15.useState)(
2577
+ {}
2578
+ );
2532
2579
  const fileInputRef = (0, import_react15.useRef)(null);
2533
2580
  const triggerObservabilityHook = (0, import_react15.useCallback)(
2534
2581
  (hookName, ...args) => {
@@ -2672,16 +2719,12 @@ function CopilotChat({
2672
2719
  sendMessage,
2673
2720
  stopGeneration,
2674
2721
  reloadMessages,
2675
- suggestions: currentSuggestions
2676
- } = useCopilotChatLogic(
2677
- suggestions,
2678
- makeSystemMessage,
2679
- disableSystemMessage,
2680
- onInProgress,
2681
- onSubmitMessage,
2682
- onStopGeneration,
2683
- onReloadMessages
2684
- );
2722
+ suggestions: currentSuggestions,
2723
+ isLoadingSuggestions,
2724
+ agent
2725
+ } = (0, import_react_core9.useCopilotChatInternal)({
2726
+ suggestions
2727
+ });
2685
2728
  const prevIsLoading = (0, import_react15.useRef)(isLoading);
2686
2729
  (0, import_react15.useEffect)(() => {
2687
2730
  if (prevIsLoading.current !== isLoading) {
@@ -2700,7 +2743,11 @@ function CopilotChat({
2700
2743
  fileInputRef.current.value = "";
2701
2744
  }
2702
2745
  triggerObservabilityHook("onMessageSent", text);
2703
- return sendMessage(text, images);
2746
+ return sendMessage({
2747
+ id: (0, import_shared3.randomUUID)(),
2748
+ content: text,
2749
+ role: "user"
2750
+ });
2704
2751
  };
2705
2752
  const chatContext = import_react15.default.useContext(ChatContext);
2706
2753
  const isVisible = chatContext ? chatContext.open : true;
@@ -2756,12 +2803,18 @@ function CopilotChat({
2756
2803
  if (onThumbsUp) {
2757
2804
  onThumbsUp(message);
2758
2805
  }
2806
+ setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
2807
+ [message.id]: "thumbsUp"
2808
+ }));
2759
2809
  triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsUp");
2760
2810
  };
2761
2811
  const handleThumbsDown = (message) => {
2762
2812
  if (onThumbsDown) {
2763
2813
  onThumbsDown(message);
2764
2814
  }
2815
+ setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
2816
+ [message.id]: "thumbsDown"
2817
+ }));
2765
2818
  triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsDown");
2766
2819
  };
2767
2820
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
@@ -2783,6 +2836,7 @@ function CopilotChat({
2783
2836
  onCopy: handleCopy,
2784
2837
  onThumbsUp: handleThumbsUp,
2785
2838
  onThumbsDown: handleThumbsDown,
2839
+ messageFeedback,
2786
2840
  markdownTagRenderers,
2787
2841
  ImageRenderer: ImageRenderer2,
2788
2842
  ErrorMessage,
@@ -2796,7 +2850,8 @@ function CopilotChat({
2796
2850
  RenderSuggestionsList,
2797
2851
  {
2798
2852
  onSuggestionClick: handleSendMessage,
2799
- suggestions: currentSuggestions
2853
+ suggestions: currentSuggestions,
2854
+ isLoading: isLoadingSuggestions
2800
2855
  }
2801
2856
  )
2802
2857
  }
@@ -2819,6 +2874,7 @@ function CopilotChat({
2819
2874
  Input2,
2820
2875
  {
2821
2876
  inProgress: isLoading,
2877
+ chatReady: Boolean(agent),
2822
2878
  onSend: handleSendMessage,
2823
2879
  isVisible,
2824
2880
  onStop: stopGeneration,
@@ -2844,243 +2900,10 @@ function WrappedCopilotChat({
2844
2900
  }
2845
2901
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
2846
2902
  }
2847
- var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2848
- var _a;
2849
- const {
2850
- messages,
2851
- sendMessage,
2852
- setMessages,
2853
- reloadMessages: defaultReloadMessages,
2854
- stopGeneration: defaultStopGeneration,
2855
- runChatCompletion,
2856
- isLoading,
2857
- suggestions,
2858
- setSuggestions,
2859
- generateSuggestions,
2860
- resetSuggestions: resetSuggestionsFromHook,
2861
- isLoadingSuggestions
2862
- } = (0, import_react_core9.useCopilotChatInternal)({
2863
- makeSystemMessage,
2864
- disableSystemMessage
2865
- });
2866
- const generalContext = (0, import_react_core9.useCopilotContext)();
2867
- const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
2868
- const { actions } = generalContext;
2869
- const [suggestionsFailed, setSuggestionsFailed] = (0, import_react15.useState)(false);
2870
- const hasGeneratedInitialSuggestions = (0, import_react15.useRef)(false);
2871
- (0, import_react15.useEffect)(() => {
2872
- if (Array.isArray(chatSuggestions)) {
2873
- setSuggestions(chatSuggestions);
2874
- hasGeneratedInitialSuggestions.current = true;
2875
- }
2876
- }, [JSON.stringify(chatSuggestions), setSuggestions]);
2877
- const generateSuggestionsWithErrorHandling = (0, import_react15.useCallback)(
2878
- (context) => __async(void 0, null, function* () {
2879
- try {
2880
- yield generateSuggestions();
2881
- } catch (error) {
2882
- console.error("Failed to generate suggestions:", error);
2883
- setSuggestionsFailed(true);
2884
- }
2885
- }),
2886
- [generateSuggestions]
2887
- );
2888
- (0, import_react15.useEffect)(() => {
2889
- if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2890
- return;
2891
- }
2892
- if (isLoading) {
2893
- return;
2894
- }
2895
- if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2896
- return;
2897
- }
2898
- if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2899
- hasGeneratedInitialSuggestions.current = true;
2900
- generateSuggestionsWithErrorHandling("initial");
2901
- return;
2902
- }
2903
- if (messages.length > 0 && suggestions.length === 0) {
2904
- generateSuggestionsWithErrorHandling("post-message");
2905
- return;
2906
- }
2907
- }, [
2908
- chatSuggestions,
2909
- isLoadingSuggestions,
2910
- suggestionsFailed,
2911
- messages.length,
2912
- isLoading,
2913
- suggestions.length,
2914
- Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2915
- // Use stable string instead of object reference
2916
- generateSuggestionsWithErrorHandling
2917
- ]);
2918
- (0, import_react15.useEffect)(() => {
2919
- if (chatSuggestions !== "auto") {
2920
- hasGeneratedInitialSuggestions.current = false;
2921
- setSuggestionsFailed(false);
2922
- }
2923
- }, [chatSuggestions]);
2924
- const stableContext = (0, import_react15.useMemo)(
2925
- () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2926
- [
2927
- // Only include stable dependencies
2928
- generalContext.actions,
2929
- messagesContext.messages.length,
2930
- generalContext.isLoading
2931
- ]
2932
- );
2933
- const resetSuggestions = (0, import_react15.useCallback)(() => {
2934
- resetSuggestionsFromHook();
2935
- setSuggestionsFailed(false);
2936
- hasGeneratedInitialSuggestions.current = false;
2937
- }, [resetSuggestionsFromHook]);
2938
- (0, import_react15.useEffect)(() => {
2939
- onInProgress == null ? void 0 : onInProgress(isLoading);
2940
- }, [onInProgress, isLoading]);
2941
- const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2942
- const images = imagesToUse || [];
2943
- if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2944
- setSuggestions([]);
2945
- }
2946
- let firstMessage = null;
2947
- if (messageContent.trim().length > 0) {
2948
- const textMessage = {
2949
- id: (0, import_shared4.randomId)(),
2950
- role: "user",
2951
- content: messageContent
2952
- };
2953
- if (onSubmitMessage) {
2954
- try {
2955
- yield onSubmitMessage(messageContent);
2956
- } catch (error) {
2957
- console.error("Error in onSubmitMessage:", error);
2958
- }
2959
- }
2960
- yield sendMessage(textMessage, {
2961
- followUp: images.length === 0,
2962
- clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2963
- });
2964
- if (!firstMessage) {
2965
- firstMessage = textMessage;
2966
- }
2967
- }
2968
- if (images.length > 0) {
2969
- for (let i = 0; i < images.length; i++) {
2970
- const imageMessage = {
2971
- id: (0, import_shared4.randomId)(),
2972
- role: "user",
2973
- image: {
2974
- format: images[i].contentType.replace("image/", ""),
2975
- bytes: images[i].bytes
2976
- }
2977
- };
2978
- yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
2979
- if (!firstMessage) {
2980
- firstMessage = imageMessage;
2981
- }
2982
- }
2983
- }
2984
- if (!firstMessage) {
2985
- return { role: "user", content: "", id: (0, import_shared4.randomId)() };
2986
- }
2987
- return firstMessage;
2988
- });
2989
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
2990
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
2991
- if (generalContext.agentSession) {
2992
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
2993
- nodeName: void 0,
2994
- threadId: void 0
2995
- }));
2996
- generalContext.setCoagentStates((prevAgentStates) => {
2997
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2998
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
2999
- threadId: void 0,
3000
- nodeName: void 0,
3001
- runId: void 0
3002
- })
3003
- });
3004
- });
3005
- }
3006
- });
3007
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
3008
- if (generalContext.agentSession) {
3009
- yield (0, import_react_core10.runAgent)(
3010
- generalContext.agentSession.agentName,
3011
- stableContext,
3012
- messagesContext.messages,
3013
- sendMessage,
3014
- runChatCompletion
3015
- );
3016
- }
3017
- });
3018
- const stopCurrentAgent = () => {
3019
- if (generalContext.agentSession) {
3020
- (0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, stableContext);
3021
- }
3022
- };
3023
- const setCurrentAgentState = (state) => {
3024
- if (generalContext.agentSession) {
3025
- generalContext.setCoagentStates((prevAgentStates) => {
3026
- return __spreadProps(__spreadValues({}, prevAgentStates), {
3027
- [generalContext.agentSession.agentName]: {
3028
- state
3029
- }
3030
- });
3031
- });
3032
- }
3033
- };
3034
- function stopGeneration() {
3035
- setSuggestions([]);
3036
- if (onStopGeneration) {
3037
- onStopGeneration({
3038
- messages,
3039
- setMessages,
3040
- stopGeneration: defaultStopGeneration,
3041
- currentAgentName,
3042
- restartCurrentAgent,
3043
- stopCurrentAgent,
3044
- runCurrentAgent,
3045
- setCurrentAgentState
3046
- });
3047
- } else {
3048
- defaultStopGeneration();
3049
- }
3050
- }
3051
- function reloadMessages(messageId) {
3052
- if (onReloadMessages) {
3053
- onReloadMessages({
3054
- messages,
3055
- setMessages,
3056
- stopGeneration: defaultStopGeneration,
3057
- currentAgentName,
3058
- restartCurrentAgent,
3059
- stopCurrentAgent,
3060
- runCurrentAgent,
3061
- setCurrentAgentState,
3062
- messageId
3063
- });
3064
- } else {
3065
- defaultReloadMessages(messageId);
3066
- }
3067
- }
3068
- return {
3069
- messages,
3070
- isLoading,
3071
- suggestions,
3072
- sendMessage: safelySendMessage,
3073
- stopGeneration,
3074
- reloadMessages,
3075
- resetSuggestions,
3076
- context: stableContext,
3077
- actions
3078
- };
3079
- };
3080
2903
 
3081
2904
  // src/components/chat/Modal.tsx
3082
- var import_react_core11 = require("@copilotkit/react-core");
3083
- var import_shared5 = require("@copilotkit/shared");
2905
+ var import_react_core10 = require("@copilotkit/react-core");
2906
+ var import_shared4 = require("@copilotkit/shared");
3084
2907
  var import_jsx_runtime25 = require("react/jsx-runtime");
3085
2908
  var CopilotModalInner = (_a) => {
3086
2909
  var _b = _a, {
@@ -3106,7 +2929,7 @@ var CopilotModalInner = (_a) => {
3106
2929
  "Button",
3107
2930
  "Header"
3108
2931
  ]);
3109
- const { copilotApiConfig, setBannerError } = (0, import_react_core11.useCopilotContext)();
2932
+ const { copilotApiConfig, setBannerError } = (0, import_react_core10.useCopilotContext)();
3110
2933
  const { publicApiKey } = copilotApiConfig;
3111
2934
  const triggerObservabilityHook = (0, import_react16.useCallback)(
3112
2935
  (hookName, ...args) => {
@@ -3115,14 +2938,14 @@ var CopilotModalInner = (_a) => {
3115
2938
  }
3116
2939
  if ((observabilityHooks == null ? void 0 : observabilityHooks[hookName]) && !publicApiKey) {
3117
2940
  setBannerError(
3118
- new import_shared5.CopilotKitError({
2941
+ new import_shared4.CopilotKitError({
3119
2942
  message: "observabilityHooks requires a publicApiKey to function.",
3120
- code: import_shared5.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
3121
- severity: import_shared5.Severity.CRITICAL,
3122
- 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
3123
2946
  })
3124
2947
  );
3125
- import_shared5.styledConsole.publicApiKeyRequired("observabilityHooks");
2948
+ import_shared4.styledConsole.publicApiKeyRequired("observabilityHooks");
3126
2949
  }
3127
2950
  },
3128
2951
  [publicApiKey, observabilityHooks, setBannerError]
@@ -3283,31 +3106,9 @@ function CopilotSidebar(props) {
3283
3106
  }
3284
3107
 
3285
3108
  // src/hooks/use-copilot-chat-suggestions.tsx
3286
- var import_react18 = require("react");
3287
- var import_react_core12 = require("@copilotkit/react-core");
3288
- var import_shared6 = require("@copilotkit/shared");
3289
- function useCopilotChatSuggestions({
3290
- available = "enabled",
3291
- instructions,
3292
- className,
3293
- minSuggestions = 1,
3294
- maxSuggestions = 3
3295
- }, dependencies = []) {
3296
- const context = (0, import_react_core12.useCopilotContext)();
3297
- (0, import_react18.useEffect)(() => {
3298
- if (available === "disabled")
3299
- return;
3300
- const id = (0, import_shared6.randomId)();
3301
- context.addChatSuggestionConfiguration(id, {
3302
- instructions,
3303
- minSuggestions,
3304
- maxSuggestions,
3305
- className
3306
- });
3307
- return () => {
3308
- context.removeChatSuggestionConfiguration(id);
3309
- };
3310
- }, [...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);
3311
3112
  }
3312
3113
  // Annotate the CommonJS export names for ESM import in node:
3313
3114
  0 && (module.exports = {