@copilotkit/react-ui 1.7.2-next.2 → 1.8.0-next.4

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 (162) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/{chunk-CBBFRI3Q.mjs → chunk-5JY5QJ2W.mjs} +9 -5
  3. package/dist/chunk-5JY5QJ2W.mjs.map +1 -0
  4. package/dist/{chunk-OFYI4UU4.mjs → chunk-7RIBDD4K.mjs} +19 -3
  5. package/dist/chunk-7RIBDD4K.mjs.map +1 -0
  6. package/dist/{chunk-AELKLZSG.mjs → chunk-AIR3MXUU.mjs} +12 -12
  7. package/dist/{chunk-YAGE7RCE.mjs → chunk-CGVOCLHN.mjs} +2 -2
  8. package/dist/{chunk-DLG7BZTA.mjs → chunk-CZUP2N4J.mjs} +2 -2
  9. package/dist/chunk-FBYETUFL.mjs +118 -0
  10. package/dist/chunk-FBYETUFL.mjs.map +1 -0
  11. package/dist/chunk-GIPO7UB2.mjs +24 -0
  12. package/dist/chunk-GIPO7UB2.mjs.map +1 -0
  13. package/dist/{chunk-6FTRYYR5.mjs → chunk-GJME6MK4.mjs} +72 -62
  14. package/dist/chunk-GJME6MK4.mjs.map +1 -0
  15. package/dist/{chunk-QXQDIFOC.mjs → chunk-H24B7QWO.mjs} +49 -38
  16. package/dist/chunk-H24B7QWO.mjs.map +1 -0
  17. package/dist/{chunk-QXTRFMPM.mjs → chunk-LYHZXHTJ.mjs} +15 -12
  18. package/dist/chunk-LYHZXHTJ.mjs.map +1 -0
  19. package/dist/chunk-ORSMX3SE.mjs +244 -0
  20. package/dist/chunk-ORSMX3SE.mjs.map +1 -0
  21. package/dist/{chunk-UPTB2MVO.mjs → chunk-PCTCOQK2.mjs} +4 -10
  22. package/dist/chunk-PCTCOQK2.mjs.map +1 -0
  23. package/dist/{chunk-ZIF5JJCH.mjs → chunk-QQ4FBIGN.mjs} +30 -59
  24. package/dist/chunk-QQ4FBIGN.mjs.map +1 -0
  25. package/dist/{chunk-R2O33F44.mjs → chunk-TFIQA2P5.mjs} +2 -2
  26. package/dist/{chunk-WGAZXTUA.mjs → chunk-TOQ7P4DO.mjs} +6 -9
  27. package/dist/chunk-TOQ7P4DO.mjs.map +1 -0
  28. package/dist/{chunk-3XAXY2Z3.mjs → chunk-UZTZXMYS.mjs} +2 -2
  29. package/dist/{chunk-RQNJNK2W.mjs → chunk-VC4NO5QZ.mjs} +2 -2
  30. package/dist/{chunk-YQ3D5IQV.mjs → chunk-XNQO5AZZ.mjs} +2 -5
  31. package/dist/chunk-XNQO5AZZ.mjs.map +1 -0
  32. package/dist/chunk-YC4NBUGE.mjs +97 -0
  33. package/dist/chunk-YC4NBUGE.mjs.map +1 -0
  34. package/dist/components/chat/Button.js.map +1 -1
  35. package/dist/components/chat/Button.mjs +3 -3
  36. package/dist/components/chat/Chat.d.ts +17 -1
  37. package/dist/components/chat/Chat.js +380 -906
  38. package/dist/components/chat/Chat.js.map +1 -1
  39. package/dist/components/chat/Chat.mjs +11 -18
  40. package/dist/components/chat/ChatContext.d.ts +20 -0
  41. package/dist/components/chat/ChatContext.js +44 -74
  42. package/dist/components/chat/ChatContext.js.map +1 -1
  43. package/dist/components/chat/ChatContext.mjs +2 -2
  44. package/dist/components/chat/CodeBlock.js +58 -82
  45. package/dist/components/chat/CodeBlock.js.map +1 -1
  46. package/dist/components/chat/CodeBlock.mjs +2 -2
  47. package/dist/components/chat/Header.js +516 -4
  48. package/dist/components/chat/Header.js.map +1 -1
  49. package/dist/components/chat/Header.mjs +10 -3
  50. package/dist/components/chat/Icons.d.ts +10 -9
  51. package/dist/components/chat/Icons.js +125 -164
  52. package/dist/components/chat/Icons.js.map +1 -1
  53. package/dist/components/chat/Icons.mjs +9 -5
  54. package/dist/components/chat/Input.d.ts +1 -1
  55. package/dist/components/chat/Input.js +13 -10
  56. package/dist/components/chat/Input.js.map +1 -1
  57. package/dist/components/chat/Input.mjs +3 -3
  58. package/dist/components/chat/Markdown.js +58 -56
  59. package/dist/components/chat/Markdown.js.map +1 -1
  60. package/dist/components/chat/Markdown.mjs +3 -3
  61. package/dist/components/chat/Messages.d.ts +1 -1
  62. package/dist/components/chat/Messages.js +70 -60
  63. package/dist/components/chat/Messages.js.map +1 -1
  64. package/dist/components/chat/Messages.mjs +3 -3
  65. package/dist/components/chat/Modal.js +1709 -1749
  66. package/dist/components/chat/Modal.js.map +1 -1
  67. package/dist/components/chat/Modal.mjs +20 -20
  68. package/dist/components/chat/Popup.js +1709 -1749
  69. package/dist/components/chat/Popup.js.map +1 -1
  70. package/dist/components/chat/Popup.mjs +21 -21
  71. package/dist/components/chat/Response.js.map +1 -1
  72. package/dist/components/chat/Response.mjs +3 -3
  73. package/dist/components/chat/Sidebar.js +1711 -1751
  74. package/dist/components/chat/Sidebar.js.map +1 -1
  75. package/dist/components/chat/Sidebar.mjs +21 -21
  76. package/dist/components/chat/Suggestion.js +4 -40
  77. package/dist/components/chat/Suggestion.js.map +1 -1
  78. package/dist/components/chat/Suggestion.mjs +2 -2
  79. package/dist/components/chat/Window.js.map +1 -1
  80. package/dist/components/chat/Window.mjs +3 -3
  81. package/dist/components/chat/index.js +1711 -1751
  82. package/dist/components/chat/index.js.map +1 -1
  83. package/dist/components/chat/index.mjs +24 -24
  84. package/dist/components/chat/messages/AssistantMessage.js +211 -59
  85. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  86. package/dist/components/chat/messages/AssistantMessage.mjs +5 -5
  87. package/dist/components/chat/messages/RenderTextMessage.js +18 -2
  88. package/dist/components/chat/messages/RenderTextMessage.js.map +1 -1
  89. package/dist/components/chat/messages/RenderTextMessage.mjs +1 -1
  90. package/dist/components/chat/props.d.ts +53 -0
  91. package/dist/components/chat/props.js.map +1 -1
  92. package/dist/components/crew/index.mjs +1 -1
  93. package/dist/components/dev-console/console.js +51 -233
  94. package/dist/components/dev-console/console.js.map +1 -1
  95. package/dist/components/dev-console/console.mjs +5 -5
  96. package/dist/components/dev-console/index.js +51 -233
  97. package/dist/components/dev-console/index.js.map +1 -1
  98. package/dist/components/dev-console/index.mjs +5 -5
  99. package/dist/components/help-modal/index.js +29 -147
  100. package/dist/components/help-modal/index.js.map +1 -1
  101. package/dist/components/help-modal/index.mjs +1 -1
  102. package/dist/components/help-modal/modal.js +29 -147
  103. package/dist/components/help-modal/modal.js.map +1 -1
  104. package/dist/components/help-modal/modal.mjs +1 -1
  105. package/dist/components/index.js +1685 -1725
  106. package/dist/components/index.js.map +1 -1
  107. package/dist/components/index.mjs +30 -30
  108. package/dist/index.css +266 -98
  109. package/dist/index.css.map +1 -1
  110. package/dist/index.js +1694 -1734
  111. package/dist/index.js.map +1 -1
  112. package/dist/index.mjs +30 -30
  113. package/dist/types/css.d.ts +6 -5
  114. package/dist/types/css.js.map +1 -1
  115. package/package.json +4 -4
  116. package/src/components/chat/Chat.tsx +59 -22
  117. package/src/components/chat/ChatContext.tsx +29 -1
  118. package/src/components/chat/CodeBlock.tsx +2 -4
  119. package/src/components/chat/Header.tsx +8 -3
  120. package/src/components/chat/Icons.tsx +108 -108
  121. package/src/components/chat/Input.tsx +47 -38
  122. package/src/components/chat/Markdown.tsx +0 -3
  123. package/src/components/chat/Messages.tsx +68 -56
  124. package/src/components/chat/Suggestion.tsx +2 -3
  125. package/src/components/chat/messages/AssistantMessage.tsx +95 -3
  126. package/src/components/chat/messages/RenderTextMessage.tsx +17 -1
  127. package/src/components/chat/props.ts +66 -0
  128. package/src/components/dev-console/console.tsx +16 -54
  129. package/src/components/help-modal/modal.tsx +38 -101
  130. package/src/css/button.css +15 -4
  131. package/src/css/colors.css +56 -10
  132. package/src/css/console.css +46 -39
  133. package/src/css/header.css +23 -6
  134. package/src/css/input.css +35 -19
  135. package/src/css/markdown.css +2 -1
  136. package/src/css/messages.css +126 -16
  137. package/src/css/panel.css +1 -0
  138. package/src/css/suggestions.css +14 -6
  139. package/src/types/css.ts +6 -5
  140. package/dist/chunk-3VNMQWGT.mjs +0 -25
  141. package/dist/chunk-3VNMQWGT.mjs.map +0 -1
  142. package/dist/chunk-6FTRYYR5.mjs.map +0 -1
  143. package/dist/chunk-CBBFRI3Q.mjs.map +0 -1
  144. package/dist/chunk-FZC7X5PK.mjs +0 -262
  145. package/dist/chunk-FZC7X5PK.mjs.map +0 -1
  146. package/dist/chunk-OFYI4UU4.mjs.map +0 -1
  147. package/dist/chunk-QXQDIFOC.mjs.map +0 -1
  148. package/dist/chunk-QXTRFMPM.mjs.map +0 -1
  149. package/dist/chunk-TI7SY2RI.mjs +0 -164
  150. package/dist/chunk-TI7SY2RI.mjs.map +0 -1
  151. package/dist/chunk-UPTB2MVO.mjs.map +0 -1
  152. package/dist/chunk-VEC45H6Q.mjs +0 -18
  153. package/dist/chunk-VEC45H6Q.mjs.map +0 -1
  154. package/dist/chunk-WGAZXTUA.mjs.map +0 -1
  155. package/dist/chunk-YQ3D5IQV.mjs.map +0 -1
  156. package/dist/chunk-ZIF5JJCH.mjs.map +0 -1
  157. /package/dist/{chunk-AELKLZSG.mjs.map → chunk-AIR3MXUU.mjs.map} +0 -0
  158. /package/dist/{chunk-YAGE7RCE.mjs.map → chunk-CGVOCLHN.mjs.map} +0 -0
  159. /package/dist/{chunk-DLG7BZTA.mjs.map → chunk-CZUP2N4J.mjs.map} +0 -0
  160. /package/dist/{chunk-R2O33F44.mjs.map → chunk-TFIQA2P5.mjs.map} +0 -0
  161. /package/dist/{chunk-3XAXY2Z3.mjs.map → chunk-UZTZXMYS.mjs.map} +0 -0
  162. /package/dist/{chunk-RQNJNK2W.mjs.map → chunk-VC4NO5QZ.mjs.map} +0 -0
@@ -140,7 +140,20 @@ var SendIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
140
140
  xmlns: "http://www.w3.org/2000/svg",
141
141
  fill: "none",
142
142
  viewBox: "0 0 24 24",
143
- strokeWidth: 1.5,
143
+ strokeWidth: "1.5",
144
+ stroke: "currentColor",
145
+ width: "24",
146
+ height: "24",
147
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 19V5m0 0l-7 7m7-7l7 7" })
148
+ }
149
+ );
150
+ var MicrophoneIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
151
+ "svg",
152
+ {
153
+ xmlns: "http://www.w3.org/2000/svg",
154
+ fill: "none",
155
+ viewBox: "0 0 24 24",
156
+ strokeWidth: "1.5",
144
157
  stroke: "currentColor",
145
158
  width: "24",
146
159
  height: "24",
@@ -149,184 +162,157 @@ var SendIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
149
162
  {
150
163
  strokeLinecap: "round",
151
164
  strokeLinejoin: "round",
152
- d: "M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5"
165
+ d: "M12 18.75a6 6 0 006-6v-1.5m-6 7.5a6 6 0 01-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 01-3-3V4.5a3 3 0 116 0v8.25a3 3 0 01-3 3z"
153
166
  }
154
167
  )
155
168
  }
156
169
  );
157
- var SpinnerIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
170
+ var StopIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
158
171
  "svg",
159
172
  {
160
- style: {
161
- animation: "copilotKitSpinAnimation 1s linear infinite",
162
- color: "rgb(107 114 128)"
163
- },
164
- width: "24",
165
- height: "24",
166
173
  xmlns: "http://www.w3.org/2000/svg",
167
174
  fill: "none",
168
175
  viewBox: "0 0 24 24",
169
- children: [
170
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
171
- "circle",
172
- {
173
- style: { opacity: 0.25 },
174
- cx: "12",
175
- cy: "12",
176
- r: "10",
177
- stroke: "currentColor",
178
- strokeWidth: "4"
179
- }
180
- ),
181
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
182
- "path",
183
- {
184
- style: { opacity: 0.75 },
185
- fill: "currentColor",
186
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
187
- }
188
- )
189
- ]
176
+ strokeWidth: "1.5",
177
+ stroke: "currentColor",
178
+ width: "24",
179
+ height: "24",
180
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
181
+ "path",
182
+ {
183
+ strokeLinecap: "round",
184
+ strokeLinejoin: "round",
185
+ d: "M5.25 7.5A2.25 2.25 0 017.5 5.25h9a2.25 2.25 0 012.25 2.25v9a2.25 2.25 0 01-2.25 2.25h-9a2.25 2.25 0 01-2.25-2.25v-9z"
186
+ }
187
+ )
190
188
  }
191
189
  );
192
- var SmallSpinnerIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
190
+ var RegenerateIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
193
191
  "svg",
194
192
  {
195
- style: {
196
- animation: "copilotKitSpinAnimation 1s linear infinite"
197
- },
198
- width: "13",
199
- height: "13",
200
193
  xmlns: "http://www.w3.org/2000/svg",
201
194
  fill: "none",
202
195
  viewBox: "0 0 24 24",
203
- children: [
204
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
205
- "circle",
206
- {
207
- style: { opacity: 0.25 },
208
- cx: "12",
209
- cy: "12",
210
- r: "10",
211
- stroke: "currentColor",
212
- strokeWidth: "4"
213
- }
214
- ),
215
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
216
- "path",
217
- {
218
- style: { opacity: 0.75 },
219
- fill: "currentColor",
220
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
221
- }
222
- )
223
- ]
196
+ strokeWidth: "2",
197
+ stroke: "currentColor",
198
+ width: "16",
199
+ height: "16",
200
+ style: { minWidth: "16px", minHeight: "16px" },
201
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
202
+ "path",
203
+ {
204
+ strokeLinecap: "round",
205
+ strokeLinejoin: "round",
206
+ d: "M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
207
+ }
208
+ )
224
209
  }
225
210
  );
226
- var ActivityIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
211
+ var CopyIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
227
212
  "svg",
228
213
  {
229
- style: {
230
- display: "inline-block",
231
- marginLeft: "0.25rem",
232
- marginRight: "0.25rem"
233
- },
234
- height: "24",
235
- width: "24",
236
- viewBox: "0 0 27 27",
237
214
  xmlns: "http://www.w3.org/2000/svg",
238
- fill: "currentColor",
239
- children: [
240
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "copilotKitActivityDot1", cx: "4", cy: "12", r: "3" }),
241
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "copilotKitActivityDot1 copilotKitActivityDot2", cx: "12", cy: "12", r: "3" }),
242
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "copilotKitActivityDot1 copilotKitActivityDot3", cx: "20", cy: "12", r: "3" })
243
- ]
215
+ fill: "none",
216
+ viewBox: "0 0 24 24",
217
+ strokeWidth: "2",
218
+ stroke: "currentColor",
219
+ width: "16",
220
+ height: "16",
221
+ style: { minWidth: "16px", minHeight: "16px" },
222
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
223
+ "path",
224
+ {
225
+ strokeLinecap: "round",
226
+ strokeLinejoin: "round",
227
+ d: "M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75"
228
+ }
229
+ )
244
230
  }
245
231
  );
246
- function CheckIcon(_a) {
247
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
248
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
249
- "svg",
250
- __spreadProps(__spreadValues({
251
- xmlns: "http://www.w3.org/2000/svg",
252
- viewBox: "0 0 256 256",
253
- fill: "currentColor",
254
- style: { height: "1rem", width: "1rem" },
255
- className
256
- }, props), {
257
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m229.66 77.66-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69 218.34 66.34a8 8 0 0 1 11.32 11.32Z" })
258
- })
259
- );
260
- }
261
- function DownloadIcon(_a) {
262
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
263
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
264
- "svg",
265
- __spreadProps(__spreadValues({
266
- xmlns: "http://www.w3.org/2000/svg",
267
- viewBox: "0 0 256 256",
268
- fill: "currentColor",
269
- style: { height: "1rem", width: "1rem" },
270
- className
271
- }, props), {
272
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M224 152v56a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16v-56a8 8 0 0 1 16 0v56h160v-56a8 8 0 0 1 16 0Zm-101.66 5.66a8 8 0 0 0 11.32 0l40-40a8 8 0 0 0-11.32-11.32L136 132.69V40a8 8 0 0 0-16 0v92.69l-26.34-26.35a8 8 0 0 0-11.32 11.32Z" })
273
- })
274
- );
275
- }
276
- function CopyIcon(_a) {
277
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
278
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
279
- "svg",
280
- __spreadProps(__spreadValues({
281
- xmlns: "http://www.w3.org/2000/svg",
282
- viewBox: "0 0 256 256",
283
- fill: "currentColor",
284
- style: { height: "1rem", width: "1rem" },
285
- className
286
- }, props), {
287
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8Zm-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z" })
288
- })
289
- );
290
- }
291
- var StopIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
232
+ var SmallSpinnerIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "copilotKitSpinner", style: { width: "13px", height: "13px" } });
233
+ var SpinnerIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "copilotKitSpinner", style: { width: "24px", height: "24px" } });
234
+ var ActivityIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
235
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "copilotKitActivityDot", style: { animationDelay: "0s" } }),
236
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "copilotKitActivityDot", style: { animationDelay: "0.2s" } }),
237
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "copilotKitActivityDot", style: { animationDelay: "0.4s" } })
238
+ ] });
239
+ var ThumbsUpIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
292
240
  "svg",
293
241
  {
294
242
  xmlns: "http://www.w3.org/2000/svg",
295
- viewBox: "0 0 256 256",
296
- fill: "currentColor",
297
- style: { height: "1rem", width: "1rem" },
298
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24Zm0 192a88 88 0 1 1 88-88 88.1 88.1 0 0 1-88 88Zm24-120h-48a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8Zm-8 48h-32v-32h32Z" })
243
+ fill: "none",
244
+ viewBox: "0 0 24 24",
245
+ strokeWidth: "2",
246
+ stroke: "currentColor",
247
+ width: "16",
248
+ height: "16",
249
+ style: { minWidth: "16px", minHeight: "16px" },
250
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
251
+ "path",
252
+ {
253
+ strokeLinecap: "round",
254
+ strokeLinejoin: "round",
255
+ d: "M6.633 10.5c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75A2.25 2.25 0 0116.5 4.5c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23H5.904M14.25 9h2.25M5.904 18.75c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 01-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 10.203 4.167 9.75 5 9.75h1.053c.472 0 .745.556.5.96a8.958 8.958 0 00-1.302 4.665c0 1.194.232 2.333.654 3.375z"
256
+ }
257
+ )
299
258
  }
300
259
  );
301
- var RegenerateIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
260
+ var ThumbsDownIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
302
261
  "svg",
303
262
  {
304
263
  xmlns: "http://www.w3.org/2000/svg",
305
- viewBox: "0 0 256 256",
306
- fill: "currentColor",
307
- style: { height: "1rem", width: "1rem" },
308
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M197.67 186.37a8 8 0 0 1 0 11.29C196.58 198.73 170.82 224 128 224c-37.39 0-64.53-22.4-80-39.85V208a8 8 0 0 1-16 0v-48a8 8 0 0 1 8-8h48a8 8 0 0 1 0 16H55.44C67.76 183.35 93 208 128 208c36 0 58.14-21.46 58.36-21.68a8 8 0 0 1 11.31.05ZM216 40a8 8 0 0 0-8 8v23.85C192.53 54.4 165.39 32 128 32c-42.82 0-68.58 25.27-69.66 26.34a8 8 0 0 0 11.3 11.34C69.86 69.46 92 48 128 48c35 0 60.24 24.65 72.56 40H168a8 8 0 0 0 0 16h48a8 8 0 0 0 8-8V48a8 8 0 0 0-8-8Z" })
264
+ fill: "none",
265
+ viewBox: "0 0 24 24",
266
+ strokeWidth: "2",
267
+ stroke: "currentColor",
268
+ width: "16",
269
+ height: "16",
270
+ style: { minWidth: "16px", minHeight: "16px" },
271
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
272
+ "path",
273
+ {
274
+ strokeLinecap: "round",
275
+ strokeLinejoin: "round",
276
+ d: "M7.5 15h2.25m8.024-9.75c.011.05.028.1.052.148.591 1.2.924 2.55.924 3.977a8.96 8.96 0 01-.999 4.125m.023-8.25c-.076-.365.183-.75.575-.75h.908c.889 0 1.713.518 1.972 1.368.339 1.11.521 2.287.521 3.507 0 1.553-.295 3.036-.831 4.398C20.613 14.547 19.833 15 19 15h-1.053c-.472 0-.745-.556-.5-.96a8.95 8.95 0 00.303-.54m.023-8.25H16.48a4.5 4.5 0 01-1.423-.23l-3.114-1.04a4.5 4.5 0 00-1.423-.23H6.504c-.618 0-1.217.247-1.605.729A11.95 11.95 0 002.25 12c0 .434.023.863.068 1.285C2.427 14.306 3.346 15 4.372 15h3.126c.618 0 .991.724.725 1.282A7.471 7.471 0 007.5 19.5a2.25 2.25 0 002.25 2.25.75.75 0 00.75-.75v-.633c0-.573.11-1.14.322-1.672.304-.76.93-1.33 1.653-1.715a9.04 9.04 0 002.86-2.4c.498-.634 1.226-1.08 2.032-1.08h.384"
277
+ }
278
+ )
309
279
  }
310
280
  );
311
- var PushToTalkIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
281
+ var DownloadIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
312
282
  "svg",
313
283
  {
314
284
  xmlns: "http://www.w3.org/2000/svg",
315
285
  fill: "none",
316
286
  viewBox: "0 0 24 24",
317
- strokeWidth: 1.5,
287
+ strokeWidth: "2",
318
288
  stroke: "currentColor",
319
- className: "w-6 h-6",
289
+ width: "16",
290
+ height: "16",
291
+ style: { minWidth: "16px", minHeight: "16px" },
320
292
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
321
293
  "path",
322
294
  {
323
295
  strokeLinecap: "round",
324
296
  strokeLinejoin: "round",
325
- d: "M12 18.75a6 6 0 0 0 6-6v-1.5m-6 7.5a6 6 0 0 1-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 0 1-3-3V4.5a3 3 0 1 1 6 0v8.25a3 3 0 0 1-3 3Z"
297
+ d: "M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"
326
298
  }
327
299
  )
328
300
  }
329
301
  );
302
+ var CheckIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
303
+ "svg",
304
+ {
305
+ xmlns: "http://www.w3.org/2000/svg",
306
+ fill: "none",
307
+ viewBox: "0 0 24 24",
308
+ strokeWidth: "2",
309
+ stroke: "currentColor",
310
+ width: "16",
311
+ height: "16",
312
+ style: { minWidth: "16px", minHeight: "16px" },
313
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 12.75l6 6 9-13.5" })
314
+ }
315
+ );
330
316
 
331
317
  // src/components/chat/ChatContext.tsx
332
318
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -357,7 +343,11 @@ var ChatContextProvider = ({
357
343
  placeholder: "Type a message...",
358
344
  error: "\u274C An error occurred. Please try again.",
359
345
  stopGenerating: "Stop generating",
360
- regenerateResponse: "Regenerate response"
346
+ regenerateResponse: "Regenerate response",
347
+ copyToClipboard: "Copy to clipboard",
348
+ thumbsUp: "Thumbs up",
349
+ thumbsDown: "Thumbs down",
350
+ copied: "Copied!"
361
351
  }), labels),
362
352
  [labels]
363
353
  );
@@ -371,7 +361,7 @@ var ChatContextProvider = ({
371
361
  spinnerIcon: SpinnerIcon,
372
362
  stopIcon: StopIcon,
373
363
  regenerateIcon: RegenerateIcon,
374
- pushToTalkIcon: PushToTalkIcon
364
+ pushToTalkIcon: MicrophoneIcon
375
365
  }), icons),
376
366
  [icons]
377
367
  );
@@ -401,7 +391,11 @@ var Messages = ({
401
391
  RenderAgentStateMessage: RenderAgentStateMessage2,
402
392
  RenderResultMessage: RenderResultMessage2,
403
393
  AssistantMessage: AssistantMessage2,
404
- UserMessage: UserMessage2
394
+ UserMessage: UserMessage2,
395
+ onRegenerate,
396
+ onCopy,
397
+ onThumbsUp,
398
+ onThumbsDown
405
399
  }) => {
406
400
  const context = useChatContext();
407
401
  const initialMessages = (0, import_react2.useMemo)(
@@ -424,65 +418,71 @@ var Messages = ({
424
418
  const { messagesEndRef, messagesContainerRef } = useScrollToBottom(messages);
425
419
  const interrupt = (0, import_react_core.useLangGraphInterruptRender)();
426
420
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
427
- messages.map((message, index) => {
428
- const isCurrentMessage = index === messages.length - 1;
429
- if (message.isTextMessage()) {
430
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
431
- RenderTextMessage2,
432
- {
433
- message,
434
- inProgress,
435
- index,
436
- isCurrentMessage,
437
- AssistantMessage: AssistantMessage2,
438
- UserMessage: UserMessage2
439
- },
440
- index
441
- );
442
- } else if (message.isActionExecutionMessage()) {
443
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
444
- RenderActionExecutionMessage2,
445
- {
446
- message,
447
- inProgress,
448
- index,
449
- isCurrentMessage,
450
- actionResult: actionResults[message.id],
451
- AssistantMessage: AssistantMessage2,
452
- UserMessage: UserMessage2
453
- },
454
- index
455
- );
456
- } else if (message.isAgentStateMessage()) {
457
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
458
- RenderAgentStateMessage2,
459
- {
460
- message,
461
- inProgress,
462
- index,
463
- isCurrentMessage,
464
- AssistantMessage: AssistantMessage2,
465
- UserMessage: UserMessage2
466
- },
467
- index
468
- );
469
- } else if (message.isResultMessage()) {
470
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
471
- RenderResultMessage2,
472
- {
473
- message,
474
- inProgress,
475
- index,
476
- isCurrentMessage,
477
- AssistantMessage: AssistantMessage2,
478
- UserMessage: UserMessage2
479
- },
480
- index
481
- );
482
- }
483
- }),
484
- interrupt,
485
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("footer", { ref: messagesEndRef, children })
421
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
422
+ messages.map((message, index) => {
423
+ const isCurrentMessage = index === messages.length - 1;
424
+ if (message.isTextMessage()) {
425
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
426
+ RenderTextMessage2,
427
+ {
428
+ message,
429
+ inProgress,
430
+ index,
431
+ isCurrentMessage,
432
+ AssistantMessage: AssistantMessage2,
433
+ UserMessage: UserMessage2,
434
+ onRegenerate,
435
+ onCopy,
436
+ onThumbsUp,
437
+ onThumbsDown
438
+ },
439
+ index
440
+ );
441
+ } else if (message.isActionExecutionMessage()) {
442
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
443
+ RenderActionExecutionMessage2,
444
+ {
445
+ message,
446
+ inProgress,
447
+ index,
448
+ isCurrentMessage,
449
+ actionResult: actionResults[message.id],
450
+ AssistantMessage: AssistantMessage2,
451
+ UserMessage: UserMessage2
452
+ },
453
+ index
454
+ );
455
+ } else if (message.isAgentStateMessage()) {
456
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
457
+ RenderAgentStateMessage2,
458
+ {
459
+ message,
460
+ inProgress,
461
+ index,
462
+ isCurrentMessage,
463
+ AssistantMessage: AssistantMessage2,
464
+ UserMessage: UserMessage2
465
+ },
466
+ index
467
+ );
468
+ } else if (message.isResultMessage()) {
469
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
470
+ RenderResultMessage2,
471
+ {
472
+ message,
473
+ inProgress,
474
+ index,
475
+ isCurrentMessage,
476
+ AssistantMessage: AssistantMessage2,
477
+ UserMessage: UserMessage2
478
+ },
479
+ index
480
+ );
481
+ }
482
+ }),
483
+ interrupt
484
+ ] }),
485
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("footer", { className: "copilotKitMessagesFooter", ref: messagesEndRef, children })
486
486
  ] });
487
487
  };
488
488
  function makeInitialMessages(initial) {
@@ -720,7 +720,7 @@ var usePushToTalk = ({
720
720
  // src/components/chat/Input.tsx
721
721
  var import_react_core3 = require("@copilotkit/react-core");
722
722
  var import_jsx_runtime5 = require("react/jsx-runtime");
723
- var Input = ({ inProgress, onSend, isVisible = false }) => {
723
+ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
724
724
  const context = useChatContext();
725
725
  const copilotContext = (0, import_react_core3.useCopilotContext)();
726
726
  const pushToTalkConfigured = copilotContext.copilotApiConfig.textToSpeechUrl !== void 0 && copilotContext.copilotApiConfig.transcribeAudioUrl !== void 0;
@@ -750,16 +750,17 @@ var Input = ({ inProgress, onSend, isVisible = false }) => {
750
750
  sendFunction: onSend,
751
751
  inProgress
752
752
  });
753
- const sendIcon = inProgress || pushToTalkState === "transcribing" ? context.icons.activityIcon : context.icons.sendIcon;
753
+ const isInProgress = inProgress || pushToTalkState === "transcribing";
754
+ const buttonIcon = isInProgress ? context.icons.stopIcon : context.icons.sendIcon;
754
755
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
755
756
  const canSend = () => {
756
757
  var _a;
757
758
  const interruptEvent = (_a = copilotContext.langGraphInterruptAction) == null ? void 0 : _a.event;
758
759
  const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
759
- return !inProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
760
+ return (isInProgress || !isInProgress && text.trim().length > 0) && pushToTalkState === "idle" && !interruptInProgress;
760
761
  };
761
762
  const sendDisabled = !canSend();
762
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "copilotKitInput", onClick: handleDivClick, children: [
763
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "copilotKitInputContainer", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "copilotKitInput", onClick: handleDivClick, children: [
763
764
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
764
765
  Textarea_default,
765
766
  {
@@ -780,11 +781,12 @@ var Input = ({ inProgress, onSend, isVisible = false }) => {
780
781
  }
781
782
  ),
782
783
  /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "copilotKitInputControls", children: [
784
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { flexGrow: 1 } }),
783
785
  showPushToTalk && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
784
786
  "button",
785
787
  {
786
788
  onClick: () => setPushToTalkState(pushToTalkState === "idle" ? "recording" : "transcribing"),
787
- className: pushToTalkState === "recording" ? "copilotKitPushToTalkRecording" : "",
789
+ className: pushToTalkState === "recording" ? "copilotKitInputControlButton copilotKitPushToTalkRecording" : "copilotKitInputControlButton",
788
790
  children: context.icons.pushToTalkIcon
789
791
  }
790
792
  ),
@@ -792,14 +794,15 @@ var Input = ({ inProgress, onSend, isVisible = false }) => {
792
794
  "button",
793
795
  {
794
796
  disabled: sendDisabled,
795
- onClick: send,
796
- "data-copilotkit-in-progress": !!inProgress,
797
- "data-testid": inProgress ? "copilot-chat-request-in-progress" : void 0,
798
- children: sendIcon
797
+ onClick: isInProgress ? onStop : send,
798
+ "data-copilotkit-in-progress": inProgress,
799
+ "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
800
+ className: "copilotKitInputControlButton",
801
+ children: buttonIcon
799
802
  }
800
803
  )
801
804
  ] })
802
- ] });
805
+ ] }) });
803
806
  };
804
807
 
805
808
  // src/components/chat/Response.tsx
@@ -815,7 +818,18 @@ var ResponseButton = ({ onClick, inProgress }) => {
815
818
  // src/components/chat/messages/RenderTextMessage.tsx
816
819
  var import_jsx_runtime7 = require("react/jsx-runtime");
817
820
  function RenderTextMessage(props) {
818
- const { message, inProgress, index, isCurrentMessage, UserMessage: UserMessage2, AssistantMessage: AssistantMessage2 } = props;
821
+ const {
822
+ message,
823
+ inProgress,
824
+ index,
825
+ isCurrentMessage,
826
+ UserMessage: UserMessage2,
827
+ AssistantMessage: AssistantMessage2,
828
+ onRegenerate,
829
+ onCopy,
830
+ onThumbsUp,
831
+ onThumbsDown
832
+ } = props;
819
833
  if (message.isTextMessage()) {
820
834
  if (message.role === "user") {
821
835
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -835,7 +849,12 @@ function RenderTextMessage(props) {
835
849
  message: message.content,
836
850
  rawData: message,
837
851
  isLoading: inProgress && isCurrentMessage && !message.content,
838
- isGenerating: inProgress && isCurrentMessage && !!message.content
852
+ isGenerating: inProgress && isCurrentMessage && !!message.content,
853
+ isCurrentMessage,
854
+ onRegenerate,
855
+ onCopy,
856
+ onThumbsUp,
857
+ onThumbsDown
839
858
  },
840
859
  index
841
860
  );
@@ -1165,14 +1184,8 @@ var CodeBlock = (0, import_react6.memo)(({ language, value }) => {
1165
1184
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "copilotKitCodeBlockToolbar", children: [
1166
1185
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "copilotKitCodeBlockToolbarLanguage", children: language }),
1167
1186
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "copilotKitCodeBlockToolbarButtons", children: [
1168
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: downloadAsFile, children: [
1169
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DownloadIcon, {}),
1170
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "sr-only", children: "Download" })
1171
- ] }),
1172
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: onCopy, children: [
1173
- isCopied ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CopyIcon, {}),
1174
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "sr-only", children: "Copy code" })
1175
- ] })
1187
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: downloadAsFile, children: DownloadIcon }),
1188
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: onCopy, children: isCopied ? CheckIcon : CopyIcon })
1176
1189
  ] })
1177
1190
  ] }),
1178
1191
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
@@ -1487,9 +1500,6 @@ var Markdown = ({ content }) => {
1487
1500
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MemoizedReactMarkdown, { components, remarkPlugins: [import_remark_gfm.default, import_remark_math.default], children: content }) });
1488
1501
  };
1489
1502
  var components = {
1490
- p({ children }) {
1491
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { children });
1492
- },
1493
1503
  a(_a) {
1494
1504
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
1495
1505
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
@@ -1536,14 +1546,101 @@ var components = {
1536
1546
  };
1537
1547
 
1538
1548
  // src/components/chat/messages/AssistantMessage.tsx
1549
+ var import_react8 = require("react");
1539
1550
  var import_jsx_runtime13 = require("react/jsx-runtime");
1540
1551
  var AssistantMessage = (props) => {
1541
- const { icons } = useChatContext();
1542
- const { message, isLoading, subComponent } = props;
1552
+ const { icons, labels } = useChatContext();
1553
+ const {
1554
+ message,
1555
+ isLoading,
1556
+ subComponent,
1557
+ onRegenerate,
1558
+ onCopy,
1559
+ onThumbsUp,
1560
+ onThumbsDown,
1561
+ isCurrentMessage
1562
+ } = props;
1563
+ const [copied, setCopied] = (0, import_react8.useState)(false);
1564
+ const handleCopy = () => {
1565
+ if (message && onCopy) {
1566
+ navigator.clipboard.writeText(message);
1567
+ setCopied(true);
1568
+ onCopy(message);
1569
+ setTimeout(() => setCopied(false), 2e3);
1570
+ } else if (message) {
1571
+ navigator.clipboard.writeText(message);
1572
+ setCopied(true);
1573
+ setTimeout(() => setCopied(false), 2e3);
1574
+ }
1575
+ };
1576
+ const handleRegenerate = () => {
1577
+ if (onRegenerate) {
1578
+ onRegenerate();
1579
+ }
1580
+ };
1581
+ const handleThumbsUp = () => {
1582
+ if (onThumbsUp && message) {
1583
+ onThumbsUp(message);
1584
+ }
1585
+ };
1586
+ const handleThumbsDown = () => {
1587
+ if (onThumbsDown && message) {
1588
+ onThumbsDown(message);
1589
+ }
1590
+ };
1591
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: icons.activityIcon });
1543
1592
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1544
1593
  (message || isLoading) && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
1545
1594
  message && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Markdown, { content: message || "" }),
1546
- isLoading && icons.spinnerIcon
1595
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(LoadingIcon, {}),
1596
+ message && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1597
+ "div",
1598
+ {
1599
+ className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
1600
+ children: [
1601
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1602
+ "button",
1603
+ {
1604
+ className: "copilotKitMessageControlButton",
1605
+ onClick: handleRegenerate,
1606
+ "aria-label": labels.regenerateResponse,
1607
+ title: labels.regenerateResponse,
1608
+ children: RegenerateIcon
1609
+ }
1610
+ ),
1611
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1612
+ "button",
1613
+ {
1614
+ className: "copilotKitMessageControlButton",
1615
+ onClick: handleCopy,
1616
+ "aria-label": labels.copyToClipboard,
1617
+ title: labels.copyToClipboard,
1618
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { fontSize: "10px", fontWeight: "bold" }, children: "\u2713" }) : CopyIcon
1619
+ }
1620
+ ),
1621
+ onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1622
+ "button",
1623
+ {
1624
+ className: "copilotKitMessageControlButton",
1625
+ onClick: handleThumbsUp,
1626
+ "aria-label": labels.thumbsUp,
1627
+ title: labels.thumbsUp,
1628
+ children: ThumbsUpIcon
1629
+ }
1630
+ ),
1631
+ onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1632
+ "button",
1633
+ {
1634
+ className: "copilotKitMessageControlButton",
1635
+ onClick: handleThumbsDown,
1636
+ "aria-label": labels.thumbsDown,
1637
+ title: labels.thumbsDown,
1638
+ children: ThumbsDownIcon
1639
+ }
1640
+ )
1641
+ ]
1642
+ }
1643
+ )
1547
1644
  ] }),
1548
1645
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent })
1549
1646
  ] });
@@ -1561,7 +1658,7 @@ var import_shared = require("@copilotkit/shared");
1561
1658
  var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
1562
1659
  var import_jsx_runtime15 = require("react/jsx-runtime");
1563
1660
  function Suggestion({ title, message, onClick, partial, className }) {
1564
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1661
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1565
1662
  "button",
1566
1663
  {
1567
1664
  disabled: partial,
@@ -1569,12 +1666,9 @@ function Suggestion({ title, message, onClick, partial, className }) {
1569
1666
  e.preventDefault();
1570
1667
  onClick(message);
1571
1668
  },
1572
- className: className || "suggestion",
1669
+ className: className || (partial ? "suggestion loading" : "suggestion"),
1573
1670
  "data-test-id": "suggestion",
1574
- children: [
1575
- partial && SmallSpinnerIcon,
1576
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: title })
1577
- ]
1671
+ children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: title })
1578
1672
  }
1579
1673
  );
1580
1674
  }
@@ -1649,646 +1743,12 @@ var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggest
1649
1743
  });
1650
1744
 
1651
1745
  // src/components/chat/Chat.tsx
1652
- var import_react11 = __toESM(require("react"));
1653
- var import_react_core9 = require("@copilotkit/react-core");
1654
- var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1655
- var import_shared3 = require("@copilotkit/shared");
1656
-
1657
- // src/components/dev-console/utils.ts
1746
+ var import_react9 = __toESM(require("react"));
1658
1747
  var import_react_core7 = require("@copilotkit/react-core");
1659
- function shouldShowDevConsole(showDevConsole) {
1660
- if (typeof showDevConsole === "boolean") {
1661
- return showDevConsole;
1662
- }
1663
- return getHostname() === "localhost" || getHostname() === "127.0.0.1" || getHostname() === "0.0.0.0" || getHostname() === "::1";
1664
- }
1665
- function getHostname() {
1666
- if (typeof window !== "undefined" && window.location) {
1667
- return window.location.hostname;
1668
- }
1669
- return "";
1670
- }
1671
- function getPublishedCopilotKitVersion(current, forceCheck = false) {
1672
- return __async(this, null, function* () {
1673
- const LOCAL_STORAGE_KEY = "__copilotkit_version_check__";
1674
- const serializedVersion = localStorage.getItem(LOCAL_STORAGE_KEY);
1675
- if (serializedVersion && !forceCheck) {
1676
- try {
1677
- const parsedVersion = JSON.parse(serializedVersion);
1678
- const oneHour = 60 * 60 * 1e3;
1679
- const now = (/* @__PURE__ */ new Date()).getTime();
1680
- if (parsedVersion.current === current && now - new Date(parsedVersion.lastChecked).getTime() < oneHour) {
1681
- return parsedVersion;
1682
- }
1683
- } catch (error) {
1684
- console.error("Failed to parse CopilotKitVersion from localStorage", error);
1685
- }
1686
- }
1687
- try {
1688
- const response = yield fetch("https://api.cloud.copilotkit.ai/check-for-updates", {
1689
- method: "POST",
1690
- headers: {
1691
- "Content-Type": "application/json"
1692
- },
1693
- body: JSON.stringify({
1694
- packages: [
1695
- {
1696
- packageName: "@copilotkit/shared",
1697
- packageVersion: current
1698
- }
1699
- ]
1700
- })
1701
- });
1702
- const data = yield response.json();
1703
- const version = {
1704
- current,
1705
- lastChecked: (/* @__PURE__ */ new Date()).getTime(),
1706
- latest: data.packages[0].latestVersion,
1707
- severity: data.packages[0].severity,
1708
- advisory: data.packages[0].advisory || null
1709
- };
1710
- localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(version));
1711
- return version;
1712
- } catch (error) {
1713
- console.error("Failed to check for updates", error);
1714
- throw error;
1715
- }
1716
- });
1717
- }
1718
- function logReadables(context) {
1719
- console.log("%cCurrent Readables:", "font-size: 16px; font-weight: bold;");
1720
- const readables = context.getContextString([], import_react_core7.defaultCopilotContextCategories).trim();
1721
- if (readables.length === 0) {
1722
- console.log("No readables found");
1723
- return;
1724
- }
1725
- console.log(readables);
1726
- }
1727
- function logActions(context) {
1728
- console.log("%cCurrent Actions:", "font-size: 16px; font-weight: bold;");
1729
- if (Object.values(context.actions).length === 0) {
1730
- console.log("No actions found");
1731
- return;
1732
- }
1733
- for (const action of Object.values(context.actions)) {
1734
- console.group(action.name);
1735
- console.log("name", action.name);
1736
- console.log("description", action.description);
1737
- console.log("parameters", action.parameters);
1738
- console.groupEnd();
1739
- }
1740
- }
1741
- function logMessages(context) {
1742
- console.log("%cCurrent Messages:", "font-size: 16px; font-weight: bold;");
1743
- if (context.messages.length === 0) {
1744
- console.log("No messages found");
1745
- return;
1746
- }
1747
- const tableData = context.messages.map((message) => {
1748
- if (message.isTextMessage()) {
1749
- return {
1750
- id: message.id,
1751
- type: "TextMessage",
1752
- role: message.role,
1753
- name: void 0,
1754
- scope: void 0,
1755
- content: message.content
1756
- };
1757
- } else if (message.isActionExecutionMessage()) {
1758
- return {
1759
- id: message.id,
1760
- type: "ActionExecutionMessage",
1761
- role: void 0,
1762
- name: message.name,
1763
- scope: message.parentMessageId,
1764
- content: message.arguments
1765
- };
1766
- } else if (message.isResultMessage()) {
1767
- return {
1768
- id: message.id,
1769
- type: "ResultMessage",
1770
- role: void 0,
1771
- name: message.actionName,
1772
- scope: message.actionExecutionId,
1773
- content: message.result
1774
- };
1775
- } else if (message.isAgentStateMessage()) {
1776
- return {
1777
- id: message.id,
1778
- type: `AgentStateMessage (running: ${message.running})`,
1779
- role: message.role,
1780
- name: void 0,
1781
- scope: message.threadId,
1782
- content: message.state
1783
- };
1784
- }
1785
- });
1786
- console.table(tableData);
1787
- }
1788
-
1789
- // src/components/dev-console/console.tsx
1748
+ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1749
+ var import_shared2 = require("@copilotkit/shared");
1790
1750
  var import_react_core8 = require("@copilotkit/react-core");
1791
- var import_react9 = require("react");
1792
-
1793
- // src/components/dev-console/icons.tsx
1794
1751
  var import_jsx_runtime16 = require("react/jsx-runtime");
1795
- var ExclamationMarkTriangleIcon = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1796
- "svg",
1797
- {
1798
- width: "13.3967723px",
1799
- height: "12px",
1800
- viewBox: "0 0 13.3967723 12",
1801
- version: "1.1",
1802
- xmlns: "http://www.w3.org/2000/svg",
1803
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "exclamation-triangle", fill: "#CD2121", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1804
- "path",
1805
- {
1806
- d: "M5.39935802,0.75 C5.97670802,-0.25 7.42007802,-0.25 7.99742802,0.75 L13.193588,9.75 C13.770888,10.75 13.049288,12 11.894588,12 L1.50223802,12 C0.34753802,12 -0.37414898,10.75 0.20319802,9.75 L5.39935802,0.75 Z M6.69838802,2.5 C7.11260802,2.5 7.44838802,2.83579 7.44838802,3.25 L7.44838802,6.25 C7.44838802,6.66421 7.11260802,7 6.69838802,7 C6.28417802,7 5.94838802,6.66421 5.94838802,6.25 L5.94838802,3.25 C5.94838802,2.83579 6.28417802,2.5 6.69838802,2.5 Z M6.69838802,10.5 C7.25067802,10.5 7.69838802,10.0523 7.69838802,9.5 C7.69838802,8.9477 7.25067802,8.5 6.69838802,8.5 C6.14610802,8.5 5.69838802,8.9477 5.69838802,9.5 C5.69838802,10.0523 6.14610802,10.5 6.69838802,10.5 Z",
1807
- id: "Shape"
1808
- }
1809
- ) }) })
1810
- }
1811
- );
1812
- var ExclamationMarkIcon = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1813
- "svg",
1814
- {
1815
- width: "14px",
1816
- height: "14px",
1817
- viewBox: "0 0 14 14",
1818
- version: "1.1",
1819
- xmlns: "http://www.w3.org/2000/svg",
1820
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "exclamation-circle", fill: "#EC662C", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1821
- "path",
1822
- {
1823
- d: "M7,14 C10.866,14 14,10.866 14,7 C14,3.13401 10.866,0 7,0 C3.13401,0 0,3.13401 0,7 C0,10.866 3.13401,14 7,14 Z M7,3 C7.41421,3 7.75,3.33579 7.75,3.75 L7.75,6.75 C7.75,7.16421 7.41421,7.5 7,7.5 C6.58579,7.5 6.25,7.16421 6.25,6.75 L6.25,3.75 C6.25,3.33579 6.58579,3 7,3 Z M7,11 C7.55228,11 8,10.5523 8,10 C8,9.4477 7.55228,9 7,9 C6.44772,9 6,9.4477 6,10 C6,10.5523 6.44772,11 7,11 Z",
1824
- id: "Shape"
1825
- }
1826
- ) }) })
1827
- }
1828
- );
1829
- var ChevronDownIcon = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("svg", { width: "7px", height: "4px", viewBox: "0 0 7 4", version: "1.1", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Group", fill: "#000000", fillRule: "nonzero", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1830
- "path",
1831
- {
1832
- d: "M3.71690723,3.90271086 C3.59268176,4.03242971 3.39143629,4.03242971 3.26721082,3.90271086 L0.0853966595,0.57605615 C-0.0314221035,0.444981627 -0.0279751448,0.240725043 0.0931934622,0.114040675 C0.214362069,-0.0126436935 0.409725445,-0.0162475626 0.535093061,0.105888951 L3.49205902,3.19746006 L6.44902499,0.105888951 C6.52834574,0.0168884389 6.64780588,-0.0197473458 6.7605411,0.0103538404 C6.87327633,0.0404550266 6.96130636,0.132492308 6.99009696,0.250359396 C7.01888756,0.368226483 6.98384687,0.493124608 6.89872139,0.57605615 L3.71690723,3.90271086 Z",
1833
- id: "Path"
1834
- }
1835
- ) }) }) });
1836
- var CheckIcon2 = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1837
- "svg",
1838
- {
1839
- width: "14px",
1840
- height: "14px",
1841
- viewBox: "0 0 14 14",
1842
- version: "1.1",
1843
- xmlns: "http://www.w3.org/2000/svg",
1844
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Group-2", transform: "translate(-118, 0)", fill: "#1BC030", fillRule: "nonzero", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Group", transform: "translate(118, 0)", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1845
- "path",
1846
- {
1847
- d: "M0,7 C0,3.13384615 3.13384615,0 7,0 C10.8661538,0 14,3.13384615 14,7 C14,10.8661538 10.8661538,14 7,14 C3.13384615,14 0,10.8661538 0,7 Z M9.59179487,5.69764103 C9.70905818,5.54139023 9.73249341,5.33388318 9.65303227,5.15541491 C9.57357113,4.97694665 9.40367989,4.85551619 9.20909814,4.83811118 C9.01451638,4.82070616 8.82577109,4.91005717 8.71589744,5.07158974 L6.39261538,8.32389744 L5.22666667,7.15794872 C5.01450582,6.96025518 4.68389046,6.9660885 4.47883563,7.17114332 C4.27378081,7.37619815 4.26794748,7.70681351 4.46564103,7.91897436 L6.08102564,9.53435897 C6.19289944,9.64614839 6.3482622,9.70310251 6.50588106,9.69010587 C6.66349993,9.67710922 6.80743532,9.59547613 6.89948718,9.46687179 L9.59179487,5.69764103 L9.59179487,5.69764103 Z",
1848
- id: "Shape"
1849
- }
1850
- ) }) }) })
1851
- }
1852
- );
1853
- var CopilotKitIcon = /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1854
- "svg",
1855
- {
1856
- width: "33px",
1857
- height: "35px",
1858
- viewBox: "0 0 33 35",
1859
- version: "1.1",
1860
- xmlns: "http://www.w3.org/2000/svg",
1861
- children: [
1862
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("title", { children: "bd5c9079-929b-4d55-bdc9-16d1c8181b71" }),
1863
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1864
- "image",
1865
- {
1866
- x: "0",
1867
- y: "0",
1868
- width: "33",
1869
- height: "35",
1870
- xlinkHref: "data:image/png;base64,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"
1871
- }
1872
- ) })
1873
- ]
1874
- }
1875
- );
1876
-
1877
- // src/components/dev-console/console.tsx
1878
- var import_react10 = require("@headlessui/react");
1879
- var import_shared2 = require("@copilotkit/shared");
1880
-
1881
- // src/components/help-modal/modal.tsx
1882
- var import_react8 = require("react");
1883
-
1884
- // src/components/help-modal/icons.tsx
1885
- var import_jsx_runtime17 = require("react/jsx-runtime");
1886
- var CloseIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1887
- "svg",
1888
- {
1889
- xmlns: "http://www.w3.org/2000/svg",
1890
- fill: "none",
1891
- viewBox: "0 0 24 24",
1892
- strokeWidth: "1.5",
1893
- stroke: "currentColor",
1894
- width: "20",
1895
- height: "20",
1896
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
1897
- }
1898
- );
1899
- var LoadingSpinnerIcon = ({ color = "rgb(107 114 128)" }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1900
- "svg",
1901
- {
1902
- style: {
1903
- animation: "copilotKitSpinAnimation 1s linear infinite",
1904
- color
1905
- },
1906
- width: "24",
1907
- height: "24",
1908
- xmlns: "http://www.w3.org/2000/svg",
1909
- fill: "none",
1910
- viewBox: "0 0 24 24",
1911
- children: [
1912
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1913
- "circle",
1914
- {
1915
- style: { opacity: 0.25 },
1916
- cx: "12",
1917
- cy: "12",
1918
- r: "10",
1919
- stroke: "currentColor",
1920
- strokeWidth: "4"
1921
- }
1922
- ),
1923
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1924
- "path",
1925
- {
1926
- style: { opacity: 0.75 },
1927
- fill: "currentColor",
1928
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
1929
- }
1930
- )
1931
- ]
1932
- }
1933
- );
1934
-
1935
- // src/components/help-modal/modal.tsx
1936
- var import_jsx_runtime18 = require("react/jsx-runtime");
1937
- function CopilotKitHelpModal() {
1938
- const [showHelpModal, setShowHelpModal] = (0, import_react8.useState)(false);
1939
- const [issueDescription, setIssueDescription] = (0, import_react8.useState)("");
1940
- const [email, setEmail] = (0, import_react8.useState)("");
1941
- const [emailError, setEmailError] = (0, import_react8.useState)("");
1942
- const [submitting, setSubmitting] = (0, import_react8.useState)(false);
1943
- const validateEmail = (email2) => {
1944
- const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
1945
- return re.test(email2);
1946
- };
1947
- const handleSubmit = (e) => __async(this, null, function* () {
1948
- e.preventDefault();
1949
- if ((email == null ? void 0 : email.length) > 0 && !validateEmail(email)) {
1950
- setEmailError("Please enter a valid email address");
1951
- return;
1952
- }
1953
- setSubmitting(true);
1954
- yield fetch("https://api.segment.io/v1/track", {
1955
- method: "POST",
1956
- headers: {
1957
- "Content-Type": "application/json"
1958
- },
1959
- body: JSON.stringify({
1960
- event: "oss.dev-console.help",
1961
- anonymousId: window.crypto.randomUUID(),
1962
- properties: { email, text: issueDescription },
1963
- writeKey: "q0gQqvGYyw9pNyhIocNzefSYKGO1aiwW"
1964
- })
1965
- });
1966
- setEmailError("");
1967
- setEmail("");
1968
- setIssueDescription("");
1969
- setSubmitting(false);
1970
- setShowHelpModal(false);
1971
- });
1972
- const HelpButton = () => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1973
- "button",
1974
- {
1975
- onClick: () => setShowHelpModal(true),
1976
- style: { width: "50px", height: "30px", marginRight: "0.25rem" },
1977
- className: "text-sm p-0 bg-transparent rounded border border-blue-500",
1978
- "aria-label": "Open Help",
1979
- children: "Help"
1980
- }
1981
- );
1982
- const submitButtonDisabled = (0, import_react8.useMemo)(
1983
- () => submitting || !!emailError || issueDescription == null || (issueDescription == null ? void 0 : issueDescription.length) == 0,
1984
- [submitting, emailError, issueDescription]
1985
- );
1986
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
1987
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(HelpButton, {}),
1988
- showHelpModal && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1989
- "div",
1990
- {
1991
- className: "fixed inset-0 flex items-center justify-center p-4",
1992
- style: { backgroundColor: "rgba(11, 15, 26, 0.5)", zIndex: 99 },
1993
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "bg-white rounded-lg shadow-xl max-w-md w-full p-4 flex-col relative", children: [
1994
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1995
- "button",
1996
- {
1997
- className: "absolute text-gray-400 hover:text-gray-600 focus:outline-none",
1998
- style: { top: "10px", right: "10px" },
1999
- onClick: () => setShowHelpModal(false),
2000
- "aria-label": "Close",
2001
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CloseIcon2, {})
2002
- }
2003
- ),
2004
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "w-full flex mb-6 justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h2", { className: "text-2xl font-bold", children: "Help Options" }) }),
2005
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "space-y-4 mb-4", children: [
2006
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "block w-full text-center py-2 px-4 bg-blue-500 text-white rounded hover:bg-blue-600 transition duration-150 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2007
- "a",
2008
- {
2009
- href: "https://docs.copilotkit.ai/coagents/troubleshooting/common-issues",
2010
- target: "_blank",
2011
- rel: "noopener noreferrer",
2012
- children: "Visit the Troubleshooting and FAQ section in the docs"
2013
- }
2014
- ) }),
2015
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "block w-full text-center py-2 px-4 bg-blue-500 text-white rounded hover:bg-blue-600 transition duration-150 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2016
- "a",
2017
- {
2018
- href: "https://go.copilotkit.ai/dev-console-support-discord",
2019
- target: "_blank",
2020
- rel: "noopener noreferrer",
2021
- children: "Go to Discord Support Channel (Community Support)"
2022
- }
2023
- ) }),
2024
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "block w-full text-center py-2 px-4 bg-blue-500 text-white rounded hover:bg-blue-600 transition duration-150 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2025
- "a",
2026
- {
2027
- href: "https://go.copilotkit.ai/dev-console-support-slack",
2028
- target: "_blank",
2029
- rel: "noopener noreferrer",
2030
- children: "Apply for Priority Direct Slack Support"
2031
- }
2032
- ) })
2033
- ] }),
2034
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("form", { onSubmit: handleSubmit, className: "flex flex-col space-y-2", children: [
2035
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { children: [
2036
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("label", { htmlFor: "feedback", className: "block text-sm font-medium text-gray-700 mb-1", children: "Let us know what your issue is:" }),
2037
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2038
- "textarea",
2039
- {
2040
- id: "feedback",
2041
- rows: 4,
2042
- className: "w-full px-3 py-2 text-gray-700 border rounded-lg focus:outline-none focus:border-blue-500",
2043
- placeholder: "A Loom link / screen recording is always great!",
2044
- onChange: (e) => setIssueDescription(e.target.value),
2045
- value: issueDescription,
2046
- required: true
2047
- }
2048
- )
2049
- ] }),
2050
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { children: [
2051
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700 mb-1", children: "Email (optional):" }),
2052
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2053
- "input",
2054
- {
2055
- type: "email",
2056
- id: "email",
2057
- className: `w-full px-3 py-2 text-gray-700 border rounded-lg focus:outline-none focus:border-blue-500 ${emailError ? "border-red-500" : ""}`,
2058
- placeholder: "Enter your email for follow-up",
2059
- onChange: (e) => {
2060
- setEmail(e.target.value);
2061
- setEmailError("");
2062
- },
2063
- value: email
2064
- }
2065
- ),
2066
- emailError && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-red-500 text-sm mt-1", children: emailError })
2067
- ] }),
2068
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "bg-gray-50 px-4 py-4 sm:px-6 sm:flex sm:flex-row-reverse rounded-b-lg", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2069
- "button",
2070
- {
2071
- type: "submit",
2072
- onClick: handleSubmit,
2073
- disabled: submitButtonDisabled,
2074
- style: submitButtonDisabled ? { backgroundColor: "rgb(216, 216, 216)", color: "rgb(129, 129, 129)" } : void 0,
2075
- className: "w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-500 text-base font-medium text-white hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm disabled:shadow-none",
2076
- children: submitting ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(LoadingSpinnerIcon, { color: "white" }) : "Submit"
2077
- }
2078
- ) })
2079
- ] })
2080
- ] })
2081
- }
2082
- )
2083
- ] });
2084
- }
2085
-
2086
- // src/components/dev-console/console.tsx
2087
- var import_jsx_runtime19 = require("react/jsx-runtime");
2088
- function CopilotDevConsole() {
2089
- const currentVersion = import_shared2.COPILOTKIT_VERSION;
2090
- const context = (0, import_react_core8.useCopilotContext)();
2091
- const [showDevConsole, setShowDevConsole] = (0, import_react9.useState)(false);
2092
- (0, import_react9.useEffect)(() => {
2093
- setShowDevConsole(shouldShowDevConsole(context.showDevConsole));
2094
- }, [context.showDevConsole]);
2095
- const dontRunTwiceInDevMode = (0, import_react9.useRef)(false);
2096
- const [versionStatus, setVersionStatus] = (0, import_react9.useState)("unknown");
2097
- const [latestVersion, setLatestVersion] = (0, import_react9.useState)("");
2098
- const consoleRef = (0, import_react9.useRef)(null);
2099
- const [debugButtonMode, setDebugButtonMode] = (0, import_react9.useState)("full");
2100
- const checkForUpdates = (force = false) => {
2101
- setVersionStatus("checking");
2102
- getPublishedCopilotKitVersion(currentVersion, force).then((v) => {
2103
- setLatestVersion(v.latest);
2104
- let versionOk = false;
2105
- if (v.current === v.latest) {
2106
- versionOk = true;
2107
- } else if (/[a-zA-Z]/.test(v.current)) {
2108
- versionOk = true;
2109
- }
2110
- if (versionOk) {
2111
- setVersionStatus("latest");
2112
- } else if (v.severity !== "low") {
2113
- setVersionStatus("outdated");
2114
- } else {
2115
- setVersionStatus("update-available");
2116
- }
2117
- }).catch((e) => {
2118
- console.error(e);
2119
- setVersionStatus("unknown");
2120
- });
2121
- };
2122
- (0, import_react9.useEffect)(() => {
2123
- if (dontRunTwiceInDevMode.current === true) {
2124
- return;
2125
- }
2126
- dontRunTwiceInDevMode.current = true;
2127
- checkForUpdates();
2128
- }, []);
2129
- (0, import_react9.useEffect)(() => {
2130
- const handleResize = (entries) => {
2131
- for (let entry of entries) {
2132
- if (entry.target === consoleRef.current) {
2133
- const width = entry.contentRect.width;
2134
- if (width < 400) {
2135
- setDebugButtonMode("compact");
2136
- } else {
2137
- setDebugButtonMode("full");
2138
- }
2139
- }
2140
- }
2141
- };
2142
- const observer = new ResizeObserver(handleResize);
2143
- if (consoleRef.current) {
2144
- observer.observe(consoleRef.current);
2145
- const initialWidth = consoleRef.current.getBoundingClientRect().width;
2146
- if (initialWidth < 400) {
2147
- setDebugButtonMode("compact");
2148
- } else {
2149
- setDebugButtonMode("full");
2150
- }
2151
- }
2152
- return () => {
2153
- if (consoleRef.current) {
2154
- observer.unobserve(consoleRef.current);
2155
- }
2156
- };
2157
- }, [consoleRef.current]);
2158
- if (!showDevConsole) {
2159
- return null;
2160
- }
2161
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2162
- "div",
2163
- {
2164
- ref: consoleRef,
2165
- className: "copilotKitDevConsole " + (versionStatus === "update-available" ? "copilotKitDevConsoleUpgrade" : "") + (versionStatus === "outdated" ? "copilotKitDevConsoleWarnOutdated" : ""),
2166
- children: [
2167
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "copilotKitDevConsoleLogo", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("a", { href: "https://copilotkit.ai", target: "_blank", children: CopilotKitIcon }) }),
2168
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2169
- VersionInfo,
2170
- {
2171
- showDevConsole: context.showDevConsole,
2172
- versionStatus,
2173
- currentVersion,
2174
- latestVersion
2175
- }
2176
- ),
2177
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CopilotKitHelpModal, {}),
2178
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2179
- DebugMenuButton,
2180
- {
2181
- setShowDevConsole,
2182
- checkForUpdates,
2183
- mode: debugButtonMode
2184
- }
2185
- )
2186
- ]
2187
- }
2188
- );
2189
- }
2190
- function VersionInfo({
2191
- showDevConsole,
2192
- versionStatus,
2193
- currentVersion,
2194
- latestVersion
2195
- }) {
2196
- const [copyStatus, setCopyStatus] = (0, import_react9.useState)("");
2197
- let versionLabel = "";
2198
- let versionIcon = "";
2199
- let currentVersionLabel = currentVersion;
2200
- if (versionStatus === "latest") {
2201
- versionLabel = "latest";
2202
- versionIcon = CheckIcon2;
2203
- } else if (versionStatus === "checking") {
2204
- versionLabel = "checking";
2205
- versionIcon = SmallSpinnerIcon;
2206
- } else if (versionStatus === "update-available") {
2207
- versionLabel = "update available";
2208
- versionIcon = ExclamationMarkIcon;
2209
- currentVersionLabel = `${currentVersion} \u2192 ${latestVersion}`;
2210
- } else if (versionStatus === "outdated") {
2211
- versionLabel = "outdated";
2212
- versionIcon = ExclamationMarkTriangleIcon;
2213
- currentVersionLabel = `${currentVersion} \u2192 ${latestVersion}`;
2214
- }
2215
- let asideLabel = "";
2216
- if (showDevConsole === "auto") {
2217
- asideLabel = "(localhost only)";
2218
- } else if (showDevConsole === true) {
2219
- asideLabel = "(always on)";
2220
- }
2221
- const installCommand = [
2222
- `npm install`,
2223
- `@copilotkit/react-core@${latestVersion}`,
2224
- `@copilotkit/react-ui@${latestVersion}`,
2225
- `@copilotkit/react-textarea@${latestVersion}`,
2226
- `&& npm install @copilotkit/runtime@${latestVersion}`
2227
- ].join(" ");
2228
- const handleCopyClick = () => {
2229
- navigator.clipboard.writeText(installCommand.trim()).then(() => {
2230
- setCopyStatus("Command copied to clipboard!");
2231
- setTimeout(() => setCopyStatus(""), 1e3);
2232
- });
2233
- };
2234
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "copilotKitVersionInfo", children: [
2235
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("header", { children: [
2236
- "COPILOTKIT DEV CONSOLE",
2237
- showDevConsole === "auto" && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("aside", { children: asideLabel })
2238
- ] }),
2239
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("section", { children: [
2240
- "Version: ",
2241
- versionLabel,
2242
- " (",
2243
- currentVersionLabel,
2244
- ") ",
2245
- versionIcon
2246
- ] }),
2247
- (versionStatus === "update-available" || versionStatus === "outdated") && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("footer", { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("button", { onClick: handleCopyClick, children: copyStatus || installCommand }) })
2248
- ] });
2249
- }
2250
- function DebugMenuButton({
2251
- setShowDevConsole,
2252
- checkForUpdates,
2253
- mode
2254
- }) {
2255
- const context = (0, import_react_core8.useCopilotContext)();
2256
- const messagesContext = (0, import_react_core8.useCopilotMessagesContext)();
2257
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "bg-black top-24 w-52 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react10.Menu, { children: [
2258
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react10.MenuButton, { className: `copilotKitDebugMenuButton ${mode === "compact" ? "compact" : ""}`, children: mode == "compact" ? "Debug" : /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
2259
- "Debug ",
2260
- ChevronDownIcon
2261
- ] }) }),
2262
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2263
- import_react10.MenuItems,
2264
- {
2265
- transition: true,
2266
- anchor: "bottom end",
2267
- className: "copilotKitDebugMenu",
2268
- style: { zIndex: 40 },
2269
- children: [
2270
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react10.MenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("button", { className: "copilotKitDebugMenuItem", onClick: () => logReadables(context), children: "Log Readables" }) }),
2271
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react10.MenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("button", { className: "copilotKitDebugMenuItem", onClick: () => logActions(context), children: "Log Actions" }) }),
2272
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react10.MenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2273
- "button",
2274
- {
2275
- className: "copilotKitDebugMenuItem",
2276
- onClick: () => logMessages(messagesContext),
2277
- children: "Log Messages"
2278
- }
2279
- ) }),
2280
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react10.MenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("button", { className: "copilotKitDebugMenuItem", onClick: () => checkForUpdates(true), children: "Check for Updates" }) }),
2281
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("hr", {}),
2282
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react10.MenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("button", { className: "copilotKitDebugMenuItem", onClick: () => setShowDevConsole(false), children: "Hide Dev Console" }) })
2283
- ]
2284
- }
2285
- )
2286
- ] }) });
2287
- }
2288
-
2289
- // src/components/chat/Chat.tsx
2290
- var import_react_core10 = require("@copilotkit/react-core");
2291
- var import_jsx_runtime20 = require("react/jsx-runtime");
2292
1752
  function CopilotChat({
2293
1753
  instructions,
2294
1754
  onSubmitMessage,
@@ -2297,6 +1757,10 @@ function CopilotChat({
2297
1757
  onInProgress,
2298
1758
  onStopGeneration,
2299
1759
  onReloadMessages,
1760
+ onRegenerate,
1761
+ onCopy,
1762
+ onThumbsUp,
1763
+ onThumbsDown,
2300
1764
  Messages: Messages2 = Messages,
2301
1765
  RenderTextMessage: RenderTextMessage2 = RenderTextMessage,
2302
1766
  RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
@@ -2310,8 +1774,8 @@ function CopilotChat({
2310
1774
  AssistantMessage: AssistantMessage2 = AssistantMessage,
2311
1775
  UserMessage: UserMessage2 = UserMessage
2312
1776
  }) {
2313
- const { additionalInstructions, setChatInstructions } = (0, import_react_core9.useCopilotContext)();
2314
- (0, import_react11.useEffect)(() => {
1777
+ const { additionalInstructions, setChatInstructions } = (0, import_react_core7.useCopilotContext)();
1778
+ (0, import_react9.useEffect)(() => {
2315
1779
  if (!(additionalInstructions == null ? void 0 : additionalInstructions.length)) {
2316
1780
  setChatInstructions(instructions || "");
2317
1781
  return;
@@ -2338,11 +1802,21 @@ function CopilotChat({
2338
1802
  onStopGeneration,
2339
1803
  onReloadMessages
2340
1804
  );
2341
- const chatContext = import_react11.default.useContext(ChatContext);
1805
+ const chatContext = import_react9.default.useContext(ChatContext);
2342
1806
  const isVisible = chatContext ? chatContext.open : true;
2343
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
2344
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CopilotDevConsole, {}),
2345
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1807
+ const handleRegenerate = () => {
1808
+ if (onRegenerate) {
1809
+ onRegenerate();
1810
+ }
1811
+ reloadMessages();
1812
+ };
1813
+ const handleCopy = (message) => {
1814
+ if (onCopy) {
1815
+ onCopy(message);
1816
+ }
1817
+ };
1818
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
1819
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2346
1820
  Messages2,
2347
1821
  {
2348
1822
  AssistantMessage: AssistantMessage2,
@@ -2353,32 +1827,32 @@ function CopilotChat({
2353
1827
  RenderResultMessage: RenderResultMessage2,
2354
1828
  messages: visibleMessages,
2355
1829
  inProgress: isLoading,
2356
- children: [
2357
- currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { children: [
2358
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h6", { children: "Suggested:" }),
2359
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2360
- Suggestion,
2361
- {
2362
- title: suggestion.title,
2363
- message: suggestion.message,
2364
- partial: suggestion.partial,
2365
- className: suggestion.className,
2366
- onClick: (message) => sendMessage(message)
2367
- },
2368
- index
2369
- )) })
2370
- ] }),
2371
- showResponseButton && visibleMessages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2372
- ResponseButton2,
2373
- {
2374
- onClick: isLoading ? stopGeneration : reloadMessages,
2375
- inProgress: isLoading
2376
- }
2377
- )
2378
- ]
1830
+ onRegenerate: handleRegenerate,
1831
+ onCopy: handleCopy,
1832
+ onThumbsUp,
1833
+ onThumbsDown,
1834
+ children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1835
+ Suggestion,
1836
+ {
1837
+ title: suggestion.title,
1838
+ message: suggestion.message,
1839
+ partial: suggestion.partial,
1840
+ className: suggestion.className,
1841
+ onClick: (message) => sendMessage(message)
1842
+ },
1843
+ index
1844
+ )) })
2379
1845
  }
2380
1846
  ),
2381
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Input2, { inProgress: isLoading, onSend: sendMessage, isVisible })
1847
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1848
+ Input2,
1849
+ {
1850
+ inProgress: isLoading,
1851
+ onSend: sendMessage,
1852
+ isVisible,
1853
+ onStop: stopGeneration
1854
+ }
1855
+ )
2382
1856
  ] });
2383
1857
  }
2384
1858
  function WrappedCopilotChat({
@@ -2387,12 +1861,12 @@ function WrappedCopilotChat({
2387
1861
  labels,
2388
1862
  className
2389
1863
  }) {
2390
- const chatContext = import_react11.default.useContext(ChatContext);
1864
+ const chatContext = import_react9.default.useContext(ChatContext);
2391
1865
  if (!chatContext) {
2392
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
2393
- }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: `copilotKitChat ${className}`, children }) });
1866
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
1867
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: `copilotKitChat ${className}`, children }) });
2394
1868
  }
2395
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_jsx_runtime20.Fragment, { children });
1869
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children });
2396
1870
  }
2397
1871
  var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
2398
1872
  var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
@@ -2404,22 +1878,22 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2404
1878
  stopGeneration: defaultStopGeneration,
2405
1879
  runChatCompletion,
2406
1880
  isLoading
2407
- } = (0, import_react_core9.useCopilotChat)({
2408
- id: (0, import_shared3.randomId)(),
1881
+ } = (0, import_react_core7.useCopilotChat)({
1882
+ id: (0, import_shared2.randomId)(),
2409
1883
  makeSystemMessage
2410
1884
  });
2411
- const [currentSuggestions, setCurrentSuggestions] = (0, import_react11.useState)([]);
2412
- const suggestionsAbortControllerRef = (0, import_react11.useRef)(null);
2413
- const debounceTimerRef = (0, import_react11.useRef)();
1885
+ const [currentSuggestions, setCurrentSuggestions] = (0, import_react9.useState)([]);
1886
+ const suggestionsAbortControllerRef = (0, import_react9.useRef)(null);
1887
+ const debounceTimerRef = (0, import_react9.useRef)();
2414
1888
  const abortSuggestions = () => {
2415
1889
  var _a2;
2416
1890
  (_a2 = suggestionsAbortControllerRef.current) == null ? void 0 : _a2.abort();
2417
1891
  suggestionsAbortControllerRef.current = null;
2418
1892
  };
2419
- const generalContext = (0, import_react_core9.useCopilotContext)();
2420
- const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
1893
+ const generalContext = (0, import_react_core7.useCopilotContext)();
1894
+ const messagesContext = (0, import_react_core7.useCopilotMessagesContext)();
2421
1895
  const context = __spreadValues(__spreadValues({}, generalContext), messagesContext);
2422
- (0, import_react11.useEffect)(() => {
1896
+ (0, import_react9.useEffect)(() => {
2423
1897
  onInProgress == null ? void 0 : onInProgress(isLoading);
2424
1898
  abortSuggestions();
2425
1899
  debounceTimerRef.current = setTimeout(
@@ -2485,7 +1959,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2485
1959
  });
2486
1960
  const runCurrentAgent = (hint) => __async(void 0, null, function* () {
2487
1961
  if (generalContext.agentSession) {
2488
- yield (0, import_react_core10.runAgent)(
1962
+ yield (0, import_react_core8.runAgent)(
2489
1963
  generalContext.agentSession.agentName,
2490
1964
  context,
2491
1965
  appendMessage,
@@ -2496,7 +1970,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2496
1970
  });
2497
1971
  const stopCurrentAgent = () => {
2498
1972
  if (generalContext.agentSession) {
2499
- (0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, context);
1973
+ (0, import_react_core8.stopAgent)(generalContext.agentSession.agentName, context);
2500
1974
  }
2501
1975
  };
2502
1976
  const setCurrentAgentState = (state) => {