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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/CHANGELOG.md +0 -7
  2. package/dist/chunk-24SCZAB4.mjs +143 -0
  3. package/dist/chunk-24SCZAB4.mjs.map +1 -0
  4. package/dist/chunk-36KQV2NA.mjs +1 -0
  5. package/dist/{chunk-U7QULEVO.mjs → chunk-3GURHDG7.mjs} +3 -3
  6. package/dist/{chunk-OAGAFMUM.mjs → chunk-3R423LZT.mjs} +6 -5
  7. package/dist/{chunk-OAGAFMUM.mjs.map → chunk-3R423LZT.mjs.map} +1 -1
  8. package/dist/chunk-5X5DJRQQ.mjs +71 -0
  9. package/dist/chunk-5X5DJRQQ.mjs.map +1 -0
  10. package/dist/{chunk-N4WEHORG.mjs → chunk-6PUNP7CD.mjs} +4 -4
  11. package/dist/chunk-6PUNP7CD.mjs.map +1 -0
  12. package/dist/chunk-7BYHZLPL.mjs +32 -0
  13. package/dist/chunk-7BYHZLPL.mjs.map +1 -0
  14. package/dist/chunk-7DTB7S5V.mjs +83 -0
  15. package/dist/chunk-7DTB7S5V.mjs.map +1 -0
  16. package/dist/chunk-A6NKSGH3.mjs +1 -0
  17. package/dist/{chunk-GT5WI3AF.mjs → chunk-BR5YEYZJ.mjs} +7 -9
  18. package/dist/chunk-BR5YEYZJ.mjs.map +1 -0
  19. package/dist/chunk-CB7CRBDG.mjs +48 -0
  20. package/dist/chunk-CB7CRBDG.mjs.map +1 -0
  21. package/dist/chunk-CYDWEPFL.mjs +1 -0
  22. package/dist/{chunk-BBUQMG45.mjs → chunk-D3QSYDJR.mjs} +3 -3
  23. package/dist/{chunk-BBUQMG45.mjs.map → chunk-D3QSYDJR.mjs.map} +1 -1
  24. package/dist/chunk-DCHSCK62.mjs +549 -0
  25. package/dist/chunk-DCHSCK62.mjs.map +1 -0
  26. package/dist/{chunk-ZLQVRPDS.mjs → chunk-DMLQZG75.mjs} +1 -1
  27. package/dist/chunk-DMLQZG75.mjs.map +1 -0
  28. package/dist/chunk-F555TVE4.mjs +33 -0
  29. package/dist/chunk-F555TVE4.mjs.map +1 -0
  30. package/dist/{chunk-C6IANC2R.mjs → chunk-FBD24VEH.mjs} +7 -43
  31. package/dist/chunk-FBD24VEH.mjs.map +1 -0
  32. package/dist/chunk-FD6FGKYY.mjs +1 -0
  33. package/dist/chunk-FDOMAPJY.mjs +59 -0
  34. package/dist/chunk-FDOMAPJY.mjs.map +1 -0
  35. package/dist/{chunk-E3624YDU.mjs → chunk-GMI4KO4X.mjs} +8 -6
  36. package/dist/{chunk-E3624YDU.mjs.map → chunk-GMI4KO4X.mjs.map} +1 -1
  37. package/dist/chunk-IUSKVYUI.mjs +13 -0
  38. package/dist/chunk-IUSKVYUI.mjs.map +1 -0
  39. package/dist/chunk-JD7BAH7U.mjs +1 -0
  40. package/dist/{chunk-EDBI5PCJ.mjs → chunk-JRT5BJF3.mjs} +2 -2
  41. package/dist/{chunk-N4VN2B5S.mjs → chunk-LHERIF3L.mjs} +2 -2
  42. package/dist/{chunk-DXEQPN43.mjs → chunk-LHKZJ2ND.mjs} +3 -3
  43. package/dist/chunk-NB2FKV2V.mjs +1 -0
  44. package/dist/chunk-NBK4KBLX.mjs +54 -0
  45. package/dist/chunk-NBK4KBLX.mjs.map +1 -0
  46. package/dist/chunk-NG26QEGF.mjs +46 -0
  47. package/dist/chunk-NG26QEGF.mjs.map +1 -0
  48. package/dist/chunk-NROJOTQP.mjs +163 -0
  49. package/dist/chunk-NROJOTQP.mjs.map +1 -0
  50. package/dist/{chunk-MGWRDFBE.mjs → chunk-OVYFRPSN.mjs} +2 -2
  51. package/dist/{chunk-MQYWH4E6.mjs → chunk-QU6NONOD.mjs} +2 -2
  52. package/dist/chunk-R4MR43UQ.mjs +101 -0
  53. package/dist/chunk-R4MR43UQ.mjs.map +1 -0
  54. package/dist/chunk-SPCZTZCY.mjs +1 -0
  55. package/dist/chunk-SPCZTZCY.mjs.map +1 -0
  56. package/dist/chunk-TXI72QHK.mjs +80 -0
  57. package/dist/chunk-TXI72QHK.mjs.map +1 -0
  58. package/dist/chunk-UJBV5GAG.mjs +767 -0
  59. package/dist/chunk-UJBV5GAG.mjs.map +1 -0
  60. package/dist/{chunk-OKCYPO4I.mjs → chunk-WMJVBMUX.mjs} +3 -3
  61. package/dist/{chunk-EUX2P2E7.mjs → chunk-WVLHXIFP.mjs} +11 -9
  62. package/dist/chunk-WVLHXIFP.mjs.map +1 -0
  63. package/dist/{chunk-5FHSUKQL.mjs → chunk-YYN33GSG.mjs} +5 -2
  64. package/dist/chunk-YYN33GSG.mjs.map +1 -0
  65. package/dist/chunk-ZVF5Q6IH.mjs +29 -0
  66. package/dist/chunk-ZVF5Q6IH.mjs.map +1 -0
  67. package/dist/components/CopilotListeners.d.ts +3 -0
  68. package/dist/components/CopilotListeners.js +234 -0
  69. package/dist/components/CopilotListeners.js.map +1 -0
  70. package/dist/components/CopilotListeners.mjs +14 -0
  71. package/dist/components/CopilotListeners.mjs.map +1 -0
  72. package/dist/components/copilot-provider/copilot-messages.js +14 -48
  73. package/dist/components/copilot-provider/copilot-messages.js.map +1 -1
  74. package/dist/components/copilot-provider/copilot-messages.mjs +3 -3
  75. package/dist/components/copilot-provider/copilotkit-props.d.ts +9 -2
  76. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  77. package/dist/components/copilot-provider/copilotkit.d.ts +2 -1
  78. package/dist/components/copilot-provider/copilotkit.js +528 -370
  79. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  80. package/dist/components/copilot-provider/copilotkit.mjs +15 -10
  81. package/dist/components/copilot-provider/index.d.ts +2 -1
  82. package/dist/components/copilot-provider/index.js +528 -370
  83. package/dist/components/copilot-provider/index.js.map +1 -1
  84. package/dist/components/copilot-provider/index.mjs +16 -10
  85. package/dist/components/dev-console/console-trigger.js +10 -8
  86. package/dist/components/dev-console/console-trigger.js.map +1 -1
  87. package/dist/components/dev-console/console-trigger.mjs +4 -4
  88. package/dist/components/dev-console/developer-console-modal.js +10 -8
  89. package/dist/components/dev-console/developer-console-modal.js.map +1 -1
  90. package/dist/components/dev-console/developer-console-modal.mjs +3 -3
  91. package/dist/components/error-boundary/error-boundary.d.ts +7 -7
  92. package/dist/components/error-boundary/error-boundary.js +3 -3
  93. package/dist/components/error-boundary/error-boundary.js.map +1 -1
  94. package/dist/components/error-boundary/error-boundary.mjs +2 -2
  95. package/dist/components/error-boundary/error-utils.d.ts +1 -1
  96. package/dist/components/error-boundary/error-utils.js +3 -3
  97. package/dist/components/error-boundary/error-utils.js.map +1 -1
  98. package/dist/components/error-boundary/error-utils.mjs +1 -1
  99. package/dist/components/index.d.ts +2 -1
  100. package/dist/components/index.js +528 -370
  101. package/dist/components/index.js.map +1 -1
  102. package/dist/components/index.mjs +17 -10
  103. package/dist/components/toast/exclamation-mark-icon.d.ts +2 -2
  104. package/dist/components/toast/toast-provider.d.ts +3 -3
  105. package/dist/components/usage-banner.d.ts +2 -2
  106. package/dist/context/coagent-state-renders-context.d.ts +24 -0
  107. package/dist/context/coagent-state-renders-context.js +91 -0
  108. package/dist/context/coagent-state-renders-context.js.map +1 -0
  109. package/dist/context/coagent-state-renders-context.mjs +12 -0
  110. package/dist/context/coagent-state-renders-context.mjs.map +1 -0
  111. package/dist/context/copilot-context.d.ts +1 -1
  112. package/dist/context/copilot-context.js +10 -8
  113. package/dist/context/copilot-context.js.map +1 -1
  114. package/dist/context/copilot-context.mjs +1 -1
  115. package/dist/context/copilot-messages-context.d.ts +18 -11
  116. package/dist/context/copilot-messages-context.js.map +1 -1
  117. package/dist/context/copilot-messages-context.mjs +1 -1
  118. package/dist/context/index.d.ts +6 -2
  119. package/dist/context/index.js +110 -10
  120. package/dist/context/index.js.map +1 -1
  121. package/dist/context/index.mjs +20 -4
  122. package/dist/context/threads-context.d.ts +16 -0
  123. package/dist/context/threads-context.js +59 -0
  124. package/dist/context/threads-context.js.map +1 -0
  125. package/dist/context/threads-context.mjs +12 -0
  126. package/dist/context/threads-context.mjs.map +1 -0
  127. package/dist/{copilot-context-cf9de848.d.ts → copilot-context-1cd70a3f.d.ts} +36 -32
  128. package/dist/hooks/index.d.ts +9 -6
  129. package/dist/hooks/index.js +1445 -1839
  130. package/dist/hooks/index.js.map +1 -1
  131. package/dist/hooks/index.mjs +47 -56
  132. package/dist/hooks/use-coagent-state-render-bridge.d.ts +100 -0
  133. package/dist/hooks/use-coagent-state-render-bridge.js +211 -0
  134. package/dist/hooks/use-coagent-state-render-bridge.js.map +1 -0
  135. package/dist/hooks/use-coagent-state-render-bridge.mjs +15 -0
  136. package/dist/hooks/use-coagent-state-render-bridge.mjs.map +1 -0
  137. package/dist/hooks/use-coagent-state-render.js +31 -20
  138. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  139. package/dist/hooks/use-coagent-state-render.mjs +3 -2
  140. package/dist/hooks/use-coagent.d.ts +2 -14
  141. package/dist/hooks/use-coagent.js +109 -1906
  142. package/dist/hooks/use-coagent.js.map +1 -1
  143. package/dist/hooks/use-coagent.mjs +1 -30
  144. package/dist/hooks/use-configure-chat-suggestions.d.ts +36 -0
  145. package/dist/hooks/use-configure-chat-suggestions.js +210 -0
  146. package/dist/hooks/use-configure-chat-suggestions.js.map +1 -0
  147. package/dist/hooks/use-configure-chat-suggestions.mjs +13 -0
  148. package/dist/hooks/use-configure-chat-suggestions.mjs.map +1 -0
  149. package/dist/hooks/use-copilot-action.d.ts +8 -45
  150. package/dist/hooks/use-copilot-action.js +207 -349
  151. package/dist/hooks/use-copilot-action.js.map +1 -1
  152. package/dist/hooks/use-copilot-action.mjs +4 -5
  153. package/dist/hooks/use-copilot-additional-instructions.js +10 -8
  154. package/dist/hooks/use-copilot-additional-instructions.js.map +1 -1
  155. package/dist/hooks/use-copilot-additional-instructions.mjs +2 -2
  156. package/dist/hooks/use-copilot-authenticated-action.js +224 -248
  157. package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
  158. package/dist/hooks/use-copilot-authenticated-action.mjs +6 -6
  159. package/dist/hooks/use-copilot-chat-headless_c.d.ts +2 -10
  160. package/dist/hooks/use-copilot-chat-headless_c.js +973 -1369
  161. package/dist/hooks/use-copilot-chat-headless_c.js.map +1 -1
  162. package/dist/hooks/use-copilot-chat-headless_c.mjs +12 -22
  163. package/dist/hooks/use-copilot-chat.d.ts +2 -10
  164. package/dist/hooks/use-copilot-chat.js +967 -1388
  165. package/dist/hooks/use-copilot-chat.js.map +1 -1
  166. package/dist/hooks/use-copilot-chat.mjs +12 -22
  167. package/dist/hooks/use-copilot-chat_internal.d.ts +38 -14
  168. package/dist/hooks/use-copilot-chat_internal.js +965 -1362
  169. package/dist/hooks/use-copilot-chat_internal.js.map +1 -1
  170. package/dist/hooks/use-copilot-chat_internal.mjs +13 -23
  171. package/dist/hooks/use-copilot-readable.d.ts +1 -1
  172. package/dist/hooks/use-copilot-readable.js +6 -157
  173. package/dist/hooks/use-copilot-readable.js.map +1 -1
  174. package/dist/hooks/use-copilot-readable.mjs +1 -2
  175. package/dist/hooks/use-default-tool.js +204 -349
  176. package/dist/hooks/use-default-tool.js.map +1 -1
  177. package/dist/hooks/use-default-tool.mjs +5 -6
  178. package/dist/hooks/use-flat-category-store.js +4 -1
  179. package/dist/hooks/use-flat-category-store.js.map +1 -1
  180. package/dist/hooks/use-flat-category-store.mjs +1 -1
  181. package/dist/hooks/use-frontend-tool.d.ts +3 -3
  182. package/dist/hooks/use-frontend-tool.js +30 -370
  183. package/dist/hooks/use-frontend-tool.js.map +1 -1
  184. package/dist/hooks/use-frontend-tool.mjs +1 -6
  185. package/dist/hooks/use-human-in-the-loop.d.ts +4 -3
  186. package/dist/hooks/use-human-in-the-loop.js +61 -393
  187. package/dist/hooks/use-human-in-the-loop.js.map +1 -1
  188. package/dist/hooks/use-human-in-the-loop.mjs +1 -6
  189. package/dist/hooks/use-langgraph-interrupt-render.d.ts +3 -2
  190. package/dist/hooks/use-langgraph-interrupt-render.js +92 -36
  191. package/dist/hooks/use-langgraph-interrupt-render.js.map +1 -1
  192. package/dist/hooks/use-langgraph-interrupt-render.mjs +6 -4
  193. package/dist/hooks/use-langgraph-interrupt.d.ts +1 -1
  194. package/dist/hooks/use-langgraph-interrupt.js +24 -1642
  195. package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
  196. package/dist/hooks/use-langgraph-interrupt.mjs +2 -23
  197. package/dist/hooks/use-lazy-tool-renderer.d.ts +6 -0
  198. package/dist/hooks/use-lazy-tool-renderer.js +53 -0
  199. package/dist/hooks/use-lazy-tool-renderer.js.map +1 -0
  200. package/dist/hooks/use-lazy-tool-renderer.mjs +8 -0
  201. package/dist/hooks/use-lazy-tool-renderer.mjs.map +1 -0
  202. package/dist/hooks/use-make-copilot-document-readable.js +11 -9
  203. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  204. package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
  205. package/dist/hooks/use-render-tool-call.d.ts +7 -6
  206. package/dist/hooks/use-render-tool-call.js +36 -386
  207. package/dist/hooks/use-render-tool-call.js.map +1 -1
  208. package/dist/hooks/use-render-tool-call.mjs +1 -6
  209. package/dist/index.d.ts +11 -6
  210. package/dist/index.js +1841 -2056
  211. package/dist/index.js.map +1 -1
  212. package/dist/index.mjs +78 -59
  213. package/dist/lib/copilot-task.d.ts +1 -1
  214. package/dist/lib/copilot-task.js +1 -0
  215. package/dist/lib/copilot-task.js.map +1 -1
  216. package/dist/lib/copilot-task.mjs +18 -11
  217. package/dist/lib/index.d.ts +1 -1
  218. package/dist/lib/index.js +1 -0
  219. package/dist/lib/index.js.map +1 -1
  220. package/dist/lib/index.mjs +18 -11
  221. package/dist/setupTests.d.ts +2 -2
  222. package/dist/types/frontend-action.d.ts +5 -5
  223. package/dist/types/index.d.ts +4 -0
  224. package/dist/types/index.js.map +1 -1
  225. package/dist/types/index.mjs +2 -1
  226. package/dist/types/interrupt-action.d.ts +1 -1
  227. package/dist/types/interrupt-action.js.map +1 -1
  228. package/dist/types/interrupt-action.mjs +1 -0
  229. package/dist/utils/index.d.ts +0 -12
  230. package/dist/utils/index.js +6 -325
  231. package/dist/utils/index.js.map +1 -1
  232. package/dist/utils/index.mjs +1 -21
  233. package/dist/utils/utils.js.map +1 -1
  234. package/dist/v2/index.d.ts +2 -0
  235. package/dist/v2/index.js +27 -0
  236. package/dist/v2/index.js.map +1 -0
  237. package/dist/v2/index.mjs +4 -0
  238. package/dist/v2/index.mjs.map +1 -0
  239. package/package.json +20 -9
  240. package/src/components/CopilotListeners.tsx +82 -0
  241. package/src/components/copilot-provider/copilot-messages.tsx +46 -47
  242. package/src/components/copilot-provider/copilotkit-props.tsx +8 -1
  243. package/src/components/copilot-provider/copilotkit.tsx +177 -144
  244. package/src/components/error-boundary/error-utils.tsx +3 -3
  245. package/src/context/coagent-state-renders-context.tsx +76 -0
  246. package/src/context/copilot-context.tsx +21 -21
  247. package/src/context/copilot-messages-context.tsx +3 -3
  248. package/src/context/index.ts +8 -0
  249. package/src/context/threads-context.tsx +41 -0
  250. package/src/hooks/index.ts +7 -3
  251. package/src/hooks/use-coagent-state-render-bridge.tsx +293 -0
  252. package/src/hooks/use-coagent-state-render.ts +4 -7
  253. package/src/hooks/use-coagent.ts +129 -249
  254. package/src/hooks/use-configure-chat-suggestions.tsx +85 -0
  255. package/src/hooks/use-copilot-action.ts +88 -199
  256. package/src/hooks/use-copilot-chat-headless_c.ts +2 -1
  257. package/src/hooks/use-copilot-chat.ts +4 -1
  258. package/src/hooks/use-copilot-chat_internal.ts +349 -258
  259. package/src/hooks/use-copilot-readable.ts +6 -26
  260. package/src/hooks/use-flat-category-store.ts +4 -3
  261. package/src/hooks/use-frontend-tool.ts +67 -8
  262. package/src/hooks/use-human-in-the-loop.ts +111 -13
  263. package/src/hooks/use-langgraph-interrupt-render.ts +90 -40
  264. package/src/hooks/use-langgraph-interrupt.ts +18 -47
  265. package/src/hooks/use-lazy-tool-renderer.tsx +30 -0
  266. package/src/hooks/use-make-copilot-document-readable.ts +1 -1
  267. package/src/hooks/use-render-tool-call.ts +73 -13
  268. package/src/types/index.ts +1 -0
  269. package/src/types/interrupt-action.ts +8 -4
  270. package/src/utils/index.ts +0 -3
  271. package/src/utils/utils.ts +7 -0
  272. package/src/v2/index.ts +2 -0
  273. package/src/v2/styles.css +1 -0
  274. package/tsup.config.ts +1 -1
  275. package/dist/chunk-5FHSUKQL.mjs.map +0 -1
  276. package/dist/chunk-6GPVUMBU.mjs +0 -13
  277. package/dist/chunk-6GPVUMBU.mjs.map +0 -1
  278. package/dist/chunk-AKR2SSUJ.mjs +0 -22
  279. package/dist/chunk-AKR2SSUJ.mjs.map +0 -1
  280. package/dist/chunk-BXXJQ2BL.mjs +0 -239
  281. package/dist/chunk-BXXJQ2BL.mjs.map +0 -1
  282. package/dist/chunk-C6IANC2R.mjs.map +0 -1
  283. package/dist/chunk-DZTU6PGS.mjs +0 -1
  284. package/dist/chunk-EUX2P2E7.mjs.map +0 -1
  285. package/dist/chunk-EVVO67QO.mjs +0 -25
  286. package/dist/chunk-EVVO67QO.mjs.map +0 -1
  287. package/dist/chunk-GGLAHG3I.mjs +0 -804
  288. package/dist/chunk-GGLAHG3I.mjs.map +0 -1
  289. package/dist/chunk-GT5WI3AF.mjs.map +0 -1
  290. package/dist/chunk-HDOG2RTM.mjs +0 -37
  291. package/dist/chunk-HDOG2RTM.mjs.map +0 -1
  292. package/dist/chunk-MIXSWZSB.mjs +0 -71
  293. package/dist/chunk-MIXSWZSB.mjs.map +0 -1
  294. package/dist/chunk-N4WEHORG.mjs.map +0 -1
  295. package/dist/chunk-NSBAWITG.mjs +0 -332
  296. package/dist/chunk-NSBAWITG.mjs.map +0 -1
  297. package/dist/chunk-OT5NHMEC.mjs +0 -723
  298. package/dist/chunk-OT5NHMEC.mjs.map +0 -1
  299. package/dist/chunk-T3376SZS.mjs +0 -142
  300. package/dist/chunk-T3376SZS.mjs.map +0 -1
  301. package/dist/chunk-YPBKY4KY.mjs +0 -1
  302. package/dist/chunk-YPSGKPDA.mjs +0 -1
  303. package/dist/chunk-ZLQVRPDS.mjs.map +0 -1
  304. package/dist/chunk-ZVOLWJCY.mjs +0 -47
  305. package/dist/chunk-ZVOLWJCY.mjs.map +0 -1
  306. package/dist/hooks/use-chat.d.ts +0 -145
  307. package/dist/hooks/use-chat.js +0 -1129
  308. package/dist/hooks/use-chat.js.map +0 -1
  309. package/dist/hooks/use-chat.mjs +0 -14
  310. package/dist/index-1f5b66ac.d.ts +0 -36
  311. package/dist/utils/extract.d.ts +0 -43
  312. package/dist/utils/extract.js +0 -208
  313. package/dist/utils/extract.js.map +0 -1
  314. package/dist/utils/extract.mjs +0 -25
  315. package/dist/utils/suggestions.d.ts +0 -11
  316. package/dist/utils/suggestions.js +0 -343
  317. package/dist/utils/suggestions.js.map +0 -1
  318. package/dist/utils/suggestions.mjs +0 -25
  319. package/src/hooks/use-chat.ts +0 -1142
  320. package/src/utils/extract.ts +0 -215
  321. package/src/utils/suggestions.ts +0 -208
  322. /package/dist/{chunk-DZTU6PGS.mjs.map → chunk-36KQV2NA.mjs.map} +0 -0
  323. /package/dist/{chunk-U7QULEVO.mjs.map → chunk-3GURHDG7.mjs.map} +0 -0
  324. /package/dist/{chunk-YPBKY4KY.mjs.map → chunk-A6NKSGH3.mjs.map} +0 -0
  325. /package/dist/{chunk-YPSGKPDA.mjs.map → chunk-CYDWEPFL.mjs.map} +0 -0
  326. /package/dist/{hooks/use-chat.mjs.map → chunk-FD6FGKYY.mjs.map} +0 -0
  327. /package/dist/{utils/extract.mjs.map → chunk-JD7BAH7U.mjs.map} +0 -0
  328. /package/dist/{chunk-EDBI5PCJ.mjs.map → chunk-JRT5BJF3.mjs.map} +0 -0
  329. /package/dist/{chunk-N4VN2B5S.mjs.map → chunk-LHERIF3L.mjs.map} +0 -0
  330. /package/dist/{chunk-DXEQPN43.mjs.map → chunk-LHKZJ2ND.mjs.map} +0 -0
  331. /package/dist/{utils/suggestions.mjs.map → chunk-NB2FKV2V.mjs.map} +0 -0
  332. /package/dist/{chunk-MGWRDFBE.mjs.map → chunk-OVYFRPSN.mjs.map} +0 -0
  333. /package/dist/{chunk-MQYWH4E6.mjs.map → chunk-QU6NONOD.mjs.map} +0 -0
  334. /package/dist/{chunk-OKCYPO4I.mjs.map → chunk-WMJVBMUX.mjs.map} +0 -0
@@ -1,23 +1,48 @@
1
- import { useRef, useEffect, useCallback, useState, useMemo } from "react";
2
- import { AgentSession, useCopilotContext, CopilotContextParams } from "../context/copilot-context";
3
- import { useCopilotMessagesContext, CopilotMessagesContextParams } from "../context";
1
+ import { useRef, useEffect, useCallback, useMemo, useState, createElement } from "react";
2
+ import { useCopilotContext } from "../context/copilot-context";
4
3
  import { SystemMessageFunction } from "../types";
5
- import { useChat, AppendMessageOptions } from "./use-chat";
6
- import { defaultCopilotContextCategories } from "../components";
7
- import { CoAgentStateRenderHandlerArguments } from "@copilotkit/shared";
8
4
  import { useAsyncCallback } from "../components/error-boundary/error-utils";
9
- import { reloadSuggestions as generateSuggestions } from "../utils";
10
- import type { SuggestionItem } from "../utils";
11
-
12
5
  import { Message } from "@copilotkit/shared";
13
- import {
14
- Role as gqlRole,
15
- TextMessage,
16
- aguiToGQL,
17
- gqlToAGUI,
18
- Message as DeprecatedGqlMessage,
19
- } from "@copilotkit/runtime-client-gql";
6
+ import { gqlToAGUI, Message as DeprecatedGqlMessage } from "@copilotkit/runtime-client-gql";
20
7
  import { useLangGraphInterruptRender } from "./use-langgraph-interrupt-render";
8
+ import {
9
+ useAgent,
10
+ useCopilotChatConfiguration,
11
+ useCopilotKit,
12
+ useRenderCustomMessages,
13
+ useSuggestions,
14
+ } from "@copilotkitnext/react";
15
+ import { Suggestion } from "@copilotkitnext/core";
16
+ import { useLazyToolRenderer } from "./use-lazy-tool-renderer";
17
+ import {
18
+ useConfigureChatSuggestions,
19
+ UseCopilotChatSuggestionsConfiguration,
20
+ } from "./use-configure-chat-suggestions";
21
+ import { AbstractAgent, AGUIConnectNotImplementedError } from "@ag-ui/client";
22
+ import {
23
+ CoAgentStateRenderBridge,
24
+ type CoAgentStateRenderBridgeProps,
25
+ } from "./use-coagent-state-render-bridge";
26
+
27
+ /**
28
+ * The type of suggestions to use in the chat.
29
+ *
30
+ * `auto` - Suggestions are generated automatically.
31
+ * `manual` - Suggestions are controlled programmatically.
32
+ * `SuggestionItem[]` - Static suggestions array.
33
+ */
34
+ export type ChatSuggestions = "auto" | "manual" | Omit<Suggestion, "isLoading">[];
35
+
36
+ export interface AppendMessageOptions {
37
+ /**
38
+ * Whether to run the chat completion after appending the message. Defaults to `true`.
39
+ */
40
+ followUp?: boolean;
41
+ /**
42
+ * Whether to clear the suggestions after appending the message. Defaults to `true`.
43
+ */
44
+ clearSuggestions?: boolean;
45
+ }
21
46
 
22
47
  export interface UseCopilotChatOptions {
23
48
  /**
@@ -46,6 +71,8 @@ export interface UseCopilotChatOptions {
46
71
  * Disables inclusion of CopilotKit’s default system message. When true, no system message is sent (this also suppresses any custom message from <code>makeSystemMessage</code>).
47
72
  */
48
73
  disableSystemMessage?: boolean;
74
+
75
+ suggestions?: ChatSuggestions;
49
76
  }
50
77
 
51
78
  export interface MCPServerConfig {
@@ -53,6 +80,14 @@ export interface MCPServerConfig {
53
80
  apiKey?: string;
54
81
  }
55
82
 
83
+ // Old suggestion item interface, for returning from useCopilotChatInternal
84
+ interface SuggestionItem {
85
+ title: string;
86
+ message: string;
87
+ partial?: boolean;
88
+ className?: string;
89
+ }
90
+
56
91
  export interface UseCopilotChatReturn {
57
92
  /**
58
93
  * @deprecated use `messages` instead, this is an old non ag-ui version of the messages
@@ -161,6 +196,18 @@ export interface UseCopilotChatReturn {
161
196
  */
162
197
  isLoading: boolean;
163
198
 
199
+ /**
200
+ * Whether the chat agent is available to generate responses
201
+ *
202
+ * ```tsx
203
+ * if (isAvailable) {
204
+ * console.log("Loading...");
205
+ * } else {
206
+ * console.log("Not loading");
207
+ * }
208
+ */
209
+ isAvailable: boolean;
210
+
164
211
  /** Manually trigger chat completion (advanced usage) */
165
212
  runChatCompletion: () => Promise<Message[]>;
166
213
 
@@ -174,13 +221,13 @@ export interface UseCopilotChatReturn {
174
221
  * Current suggestions array
175
222
  * Use this to read the current suggestions or in conjunction with setSuggestions for manual control
176
223
  */
177
- suggestions: SuggestionItem[];
224
+ suggestions: Suggestion[];
178
225
 
179
226
  /**
180
227
  * Manually set suggestions
181
228
  * Useful for manual mode or custom suggestion workflows
182
229
  */
183
- setSuggestions: (suggestions: SuggestionItem[]) => void;
230
+ setSuggestions: (suggestions: Suggestion[]) => void;
184
231
 
185
232
  /**
186
233
  * Trigger AI-powered suggestion generation
@@ -205,214 +252,182 @@ export interface UseCopilotChatReturn {
205
252
 
206
253
  /** Interrupt content for human-in-the-loop workflows */
207
254
  interrupt: string | React.ReactElement | null;
255
+
256
+ agent?: ReturnType<typeof useAgent>["agent"];
257
+
258
+ threadId?: string;
208
259
  }
209
260
 
210
- let globalSuggestionPromise: Promise<void> | null = null;
211
-
212
- export function useCopilotChat(options: UseCopilotChatOptions = {}): UseCopilotChatReturn {
213
- const makeSystemMessage = options.makeSystemMessage ?? defaultSystemMessage;
214
- const {
215
- getContextString,
216
- getFunctionCallHandler,
217
- copilotApiConfig,
218
- isLoading,
219
- setIsLoading,
220
- chatInstructions,
221
- actions,
222
- coagentStatesRef,
223
- setCoagentStatesWithRef,
224
- coAgentStateRenders,
225
- agentSession,
226
- setAgentSession,
227
- forwardedParameters,
228
- agentLock,
229
- threadId,
230
- setThreadId,
231
- runId,
232
- setRunId,
233
- chatAbortControllerRef,
234
- extensions,
235
- setExtensions,
236
- langGraphInterruptAction,
237
- setLangGraphInterruptAction,
238
- chatSuggestionConfiguration,
239
-
240
- runtimeClient,
241
- } = useCopilotContext();
242
- const { messages, setMessages, suggestions, setSuggestions } = useCopilotMessagesContext();
243
-
244
- // Simple state for MCP servers (keep for interface compatibility)
245
- const [mcpServers, setLocalMcpServers] = useState<MCPServerConfig[]>([]);
246
-
247
- // Basic suggestion state for programmatic control
248
- const suggestionsAbortControllerRef = useRef<AbortController | null>(null);
249
- const isLoadingSuggestionsRef = useRef<boolean>(false);
250
-
251
- const abortSuggestions = useCallback(
252
- (clear: boolean = true) => {
253
- suggestionsAbortControllerRef.current?.abort("suggestions aborted by user");
254
- suggestionsAbortControllerRef.current = null;
255
- if (clear) {
256
- setSuggestions([]);
257
- }
258
- },
259
- [setSuggestions],
260
- );
261
+ function useConfigureSuggestions(suggestions?: UseCopilotChatOptions["suggestions"]) {
262
+ let suggestionsConfig: UseCopilotChatSuggestionsConfiguration;
261
263
 
262
- // Memoize context with stable dependencies only
263
- const stableContext = useMemo(() => {
264
- return {
265
- actions,
266
- copilotApiConfig,
267
- chatSuggestionConfiguration,
268
- messages,
269
- setMessages,
270
- getContextString,
271
- runtimeClient,
264
+ if (Array.isArray(suggestions)) {
265
+ suggestionsConfig = {
266
+ suggestions,
267
+ available: "always",
272
268
  };
273
- }, [
274
- JSON.stringify(Object.keys(actions)),
275
- copilotApiConfig.chatApiEndpoint,
276
- messages.length,
277
- Object.keys(chatSuggestionConfiguration).length,
278
- ]);
269
+ } else if (suggestions === "auto") {
270
+ suggestionsConfig = {
271
+ available: suggestions === "auto" ? "always" : "disabled",
272
+ instructions:
273
+ "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls.",
274
+ };
275
+ } else {
276
+ suggestionsConfig = { available: "disabled" } as UseCopilotChatSuggestionsConfiguration;
277
+ }
279
278
 
280
- // Programmatic suggestion generation function
281
- const generateSuggestionsFunc = useCallback(async () => {
282
- // If a global suggestion is running, ignore this call
283
- if (globalSuggestionPromise) {
284
- return globalSuggestionPromise;
285
- }
279
+ useConfigureChatSuggestions(suggestionsConfig);
280
+ }
281
+
282
+ export function useCopilotChatInternal({
283
+ suggestions,
284
+ }: UseCopilotChatOptions = {}): UseCopilotChatReturn {
285
+ const { copilotkit } = useCopilotKit();
286
+ const { threadId, agentSession } = useCopilotContext();
287
+ const existingConfig = useCopilotChatConfiguration();
288
+ const [agentAvailable, setAgentAvailable] = useState(false);
289
+ useConfigureSuggestions(suggestions);
286
290
 
287
- globalSuggestionPromise = (async () => {
291
+ // Apply priority: props > existing config > defaults
292
+ const resolvedAgentId = agentSession?.agentName ?? existingConfig?.agentId ?? "default";
293
+ const { agent } = useAgent({ agentId: resolvedAgentId });
294
+
295
+ useEffect(() => {
296
+ const connect = async (agent: AbstractAgent) => {
297
+ setAgentAvailable(false);
288
298
  try {
289
- abortSuggestions();
290
- isLoadingSuggestionsRef.current = true;
291
- suggestionsAbortControllerRef.current = new AbortController();
292
-
293
- setSuggestions([]);
294
-
295
- await generateSuggestions(
296
- stableContext as CopilotContextParams & CopilotMessagesContextParams,
297
- chatSuggestionConfiguration,
298
- setSuggestions,
299
- suggestionsAbortControllerRef,
300
- );
299
+ await copilotkit.connectAgent({ agent });
300
+ setAgentAvailable(true);
301
301
  } catch (error) {
302
- // Re-throw to allow caller to handle the error
303
- throw error;
304
- } finally {
305
- isLoadingSuggestionsRef.current = false;
306
- globalSuggestionPromise = null;
302
+ if (error instanceof AGUIConnectNotImplementedError) {
303
+ // connect not implemented, ignore
304
+ } else {
305
+ throw error;
306
+ }
307
307
  }
308
- })();
308
+ };
309
+ if (agent && existingConfig?.threadId && agent.threadId !== existingConfig.threadId) {
310
+ agent.threadId = existingConfig.threadId;
311
+ connect(agent);
312
+ }
313
+ return () => {};
314
+ }, [existingConfig?.threadId, agent, copilotkit, resolvedAgentId]);
309
315
 
310
- return globalSuggestionPromise;
311
- }, [stableContext, chatSuggestionConfiguration, setSuggestions, abortSuggestions]);
316
+ const interrupt = useLangGraphInterruptRender(agent);
312
317
 
313
- const resetSuggestions = useCallback(() => {
314
- setSuggestions([]);
315
- }, [setSuggestions]);
318
+ const reset = () => {
319
+ agent?.setMessages([]);
320
+ agent?.setState(null);
321
+ };
316
322
 
317
- // MCP servers logic
318
- useEffect(() => {
319
- if (mcpServers.length > 0) {
320
- const serversCopy = [...mcpServers];
321
- copilotApiConfig.mcpServers = serversCopy;
322
- if (!copilotApiConfig.properties) {
323
- copilotApiConfig.properties = {};
324
- }
325
- copilotApiConfig.properties.mcpServers = serversCopy;
326
- }
327
- }, [mcpServers, copilotApiConfig]);
328
-
329
- const setMcpServers = useCallback((servers: MCPServerConfig[]) => {
330
- setLocalMcpServers(servers);
331
- }, []);
332
-
333
- // Move these function declarations above the useChat call
334
- const onCoAgentStateRender = useAsyncCallback(
335
- async (args: CoAgentStateRenderHandlerArguments) => {
336
- const { name, nodeName, state } = args;
337
- let action = Object.values(coAgentStateRenders).find(
338
- (action) => action.name === name && action.nodeName === nodeName,
323
+ const deleteMessage = useCallback(
324
+ (messageId: string) => {
325
+ const filteredMessages = (agent?.messages ?? []).filter(
326
+ (message) => message.id !== messageId,
339
327
  );
340
- if (!action) {
341
- action = Object.values(coAgentStateRenders).find(
342
- (action) => action.name === name && !action.nodeName,
343
- );
344
- }
345
- if (action) {
346
- await action.handler?.({ state, nodeName });
347
- }
328
+ agent?.setMessages(filteredMessages);
329
+ },
330
+ [agent?.setMessages, agent?.messages],
331
+ );
332
+
333
+ const latestDelete = useUpdatedRef(deleteMessage);
334
+ const latestDeleteFunc = useCallback(
335
+ (messageId: string) => {
336
+ return latestDelete.current(messageId);
348
337
  },
349
- [coAgentStateRenders],
338
+ [latestDelete],
350
339
  );
351
340
 
352
- const makeSystemMessageCallback = useCallback(() => {
353
- const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
354
- // this always gets the latest context string
355
- const contextString = getContextString([], defaultCopilotContextCategories); // TODO: make the context categories configurable
341
+ const currentSuggestions = useSuggestions({ agentId: resolvedAgentId });
356
342
 
357
- return new TextMessage({
358
- content: systemMessageMaker(contextString, chatInstructions),
359
- role: gqlRole.System,
360
- });
361
- }, [getContextString, makeSystemMessage, chatInstructions]);
343
+ const reload = useAsyncCallback(
344
+ async (reloadMessageId: string): Promise<void> => {
345
+ const messages = agent?.messages ?? [];
346
+ // TODO: get isLoading
347
+ const isLoading = false;
348
+ if (isLoading || messages.length === 0) {
349
+ return;
350
+ }
362
351
 
363
- const deleteMessage = useCallback(
364
- (messageId: string) => {
365
- setMessages((prev) => prev.filter((message) => message.id !== messageId));
352
+ const reloadMessageIndex = messages.findIndex((msg) => msg.id === reloadMessageId);
353
+ if (reloadMessageIndex === -1) {
354
+ console.warn(`Message with id ${reloadMessageId} not found`);
355
+ return;
356
+ }
357
+
358
+ const reloadMessageRole = messages[reloadMessageIndex].role;
359
+ if (reloadMessageRole !== "assistant") {
360
+ console.warn(`Regenerate cannot be performed on ${reloadMessageRole} role`);
361
+ return;
362
+ }
363
+ let historyCutoff: Message[] = [messages[0]];
364
+
365
+ if (messages.length > 2 && reloadMessageIndex !== 0) {
366
+ // message to regenerate from is now first.
367
+ // Work backwards to find the first the closest user message
368
+ const lastUserMessageBeforeRegenerate = messages
369
+ .slice(0, reloadMessageIndex)
370
+ .reverse()
371
+ .find((msg) => msg.role === "user");
372
+
373
+ if (!lastUserMessageBeforeRegenerate) {
374
+ historyCutoff = [messages[0]];
375
+ } else {
376
+ const indexOfLastUserMessageBeforeRegenerate = messages.findIndex(
377
+ (msg) => msg.id === lastUserMessageBeforeRegenerate.id,
378
+ );
379
+ // Include the user message, remove everything after it
380
+ historyCutoff = messages.slice(0, indexOfLastUserMessageBeforeRegenerate + 1);
381
+ }
382
+ } else if (messages.length > 2 && reloadMessageIndex === 0) {
383
+ historyCutoff = [messages[0], messages[1]];
384
+ }
385
+
386
+ agent?.setMessages(historyCutoff);
387
+
388
+ if (agent) {
389
+ copilotkit.runAgent({ agent });
390
+ }
391
+ return;
366
392
  },
367
- [setMessages],
393
+ [agent?.setMessages, copilotkit?.runAgent],
368
394
  );
369
395
 
370
- // Get chat helpers with updated config
371
- const { append, reload, stop, runChatCompletion } = useChat({
372
- ...options,
373
- actions: Object.values(actions),
374
- copilotConfig: copilotApiConfig,
375
- initialMessages: aguiToGQL(options.initialMessages || []),
376
- onFunctionCall: getFunctionCallHandler(),
377
- onCoAgentStateRender,
378
- messages,
379
- setMessages,
380
- makeSystemMessageCallback,
381
- isLoading,
382
- setIsLoading,
383
- coagentStatesRef,
384
- setCoagentStatesWithRef,
385
- agentSession,
386
- setAgentSession,
387
- forwardedParameters,
388
- threadId,
389
- setThreadId,
390
- runId,
391
- setRunId,
392
- chatAbortControllerRef,
393
- agentLock,
394
- extensions,
395
- setExtensions,
396
- langGraphInterruptAction,
397
- setLangGraphInterruptAction,
398
- disableSystemMessage: options.disableSystemMessage,
399
- });
396
+ const latestSendMessageFunc = useAsyncCallback(
397
+ async (message: Message, options?: AppendMessageOptions) => {
398
+ if (!agent) return;
399
+ const followUp = options?.followUp ?? true;
400
+ if (options?.clearSuggestions) {
401
+ copilotkit.clearSuggestions(resolvedAgentId);
402
+ }
403
+ agent?.addMessage(message);
404
+ if (followUp) {
405
+ try {
406
+ await copilotkit.runAgent({ agent });
407
+ } catch (error) {
408
+ console.error("CopilotChat: runAgent failed", error);
409
+ }
410
+ }
411
+ },
412
+ [agent, copilotkit, resolvedAgentId],
413
+ );
400
414
 
401
- const latestAppend = useUpdatedRef(append);
402
415
  const latestAppendFunc = useAsyncCallback(
403
416
  async (message: DeprecatedGqlMessage, options?: AppendMessageOptions) => {
404
- abortSuggestions(options?.clearSuggestions);
405
- return await latestAppend.current(message, options);
417
+ return latestSendMessageFunc(gqlToAGUI([message])[0], options);
406
418
  },
407
- [latestAppend],
419
+ [latestSendMessageFunc],
408
420
  );
409
421
 
410
- const latestSendMessageFunc = useAsyncCallback(
411
- async (message: Message, options?: AppendMessageOptions) => {
412
- abortSuggestions(options?.clearSuggestions);
413
- return await latestAppend.current(aguiToGQL([message])[0] as DeprecatedGqlMessage, options);
422
+ const latestSetMessages = useUpdatedRef(agent?.setMessages);
423
+ const latestSetMessagesFunc = useCallback(
424
+ (messages: Message[] | DeprecatedGqlMessage[]) => {
425
+ if (messages.every((message) => message instanceof DeprecatedGqlMessage)) {
426
+ return latestSetMessages.current?.(gqlToAGUI(messages));
427
+ }
428
+ return latestSetMessages.current?.(messages);
414
429
  },
415
- [latestAppend],
430
+ [latestSetMessages, agent],
416
431
  );
417
432
 
418
433
  const latestReload = useUpdatedRef(reload);
@@ -423,69 +438,94 @@ export function useCopilotChat(options: UseCopilotChatOptions = {}): UseCopilotC
423
438
  [latestReload],
424
439
  );
425
440
 
426
- const latestStop = useUpdatedRef(stop);
441
+ const latestStop = useUpdatedRef(agent?.abortRun);
427
442
  const latestStopFunc = useCallback(() => {
428
- return latestStop.current();
443
+ return latestStop.current?.();
429
444
  }, [latestStop]);
430
445
 
431
- const latestDelete = useUpdatedRef(deleteMessage);
432
- const latestDeleteFunc = useCallback(
433
- (messageId: string) => {
434
- return latestDelete.current(messageId);
435
- },
436
- [latestDelete],
437
- );
446
+ const latestReset = useUpdatedRef(reset);
447
+ const latestResetFunc = useCallback(() => {
448
+ return latestReset.current();
449
+ }, [latestReset]);
438
450
 
439
- const latestSetMessages = useUpdatedRef(setMessages);
440
- const latestSetMessagesFunc = useCallback(
441
- (messages: Message[] | DeprecatedGqlMessage[]) => {
442
- if (messages.every((message) => message instanceof DeprecatedGqlMessage)) {
443
- return latestSetMessages.current(messages as DeprecatedGqlMessage[]);
451
+ const lazyToolRendered = useLazyToolRenderer();
452
+ const renderCustomMessage = useRenderCustomMessages();
453
+ const legacyCustomMessageRenderer = useLegacyCoagentRenderer({
454
+ copilotkit,
455
+ agent,
456
+ agentId: resolvedAgentId,
457
+ threadId: existingConfig?.threadId ?? threadId,
458
+ });
459
+ const allMessages = agent?.messages ?? [];
460
+ const resolvedMessages = useMemo(() => {
461
+ let processedMessages = allMessages.map((message) => {
462
+ if (message.role !== "assistant") {
463
+ return message;
444
464
  }
445
- return latestSetMessages.current(aguiToGQL(messages));
446
- },
447
- [latestSetMessages],
448
- );
449
465
 
450
- const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
451
- const latestRunChatCompletionFunc = useAsyncCallback(async () => {
452
- return await latestRunChatCompletion.current!();
453
- }, [latestRunChatCompletion]);
454
-
455
- const reset = useCallback(() => {
456
- latestStopFunc();
457
- setMessages([]);
458
- setRunId(null);
459
- setCoagentStatesWithRef({});
460
- let initialAgentSession: AgentSession | null = null;
461
- if (agentLock) {
462
- initialAgentSession = {
463
- agentName: agentLock,
466
+ const lazyRendered = lazyToolRendered(message, allMessages);
467
+ if (lazyRendered) {
468
+ const renderedGenUi = lazyRendered();
469
+ if (renderedGenUi) {
470
+ return { ...message, generativeUI: () => renderedGenUi };
471
+ }
472
+ }
473
+
474
+ const bridgeRenderer = legacyCustomMessageRenderer || renderCustomMessage
475
+ ? () => {
476
+ const customRender = renderCustomMessage?.({
477
+ message,
478
+ position: "before",
479
+ });
480
+ if (customRender) {
481
+ return customRender;
482
+ }
483
+ return legacyCustomMessageRenderer?.({ message, position: "before" });
484
+ }
485
+ : null;
486
+
487
+ if (bridgeRenderer) {
488
+ return { ...message, generativeUI: bridgeRenderer };
489
+ }
490
+ return message;
491
+ });
492
+
493
+ const hasAssistantMessages = processedMessages.some((msg) => msg.role === "assistant");
494
+
495
+ if (legacyCustomMessageRenderer && !hasAssistantMessages) {
496
+ const placeholderId = `coagent-state-render-${resolvedAgentId}`;
497
+ const placeholderMessage: Message = {
498
+ id: placeholderId,
499
+ role: "assistant",
500
+ content: "",
501
+ name: "coagent-state-render",
464
502
  };
503
+ processedMessages = [
504
+ ...processedMessages,
505
+ {
506
+ ...placeholderMessage,
507
+ generativeUI: () =>
508
+ legacyCustomMessageRenderer({
509
+ message: placeholderMessage,
510
+ position: "before",
511
+ }),
512
+ } as Message,
513
+ ];
465
514
  }
466
- setAgentSession(initialAgentSession);
467
- // Reset suggestions when chat is reset
468
- resetSuggestions();
515
+
516
+ return processedMessages;
469
517
  }, [
470
- latestStopFunc,
471
- setMessages,
472
- setThreadId,
473
- setCoagentStatesWithRef,
474
- setAgentSession,
475
- agentLock,
476
- resetSuggestions,
518
+ agent?.messages,
519
+ lazyToolRendered,
520
+ allMessages,
521
+ renderCustomMessage,
522
+ legacyCustomMessageRenderer,
523
+ resolvedAgentId,
477
524
  ]);
478
525
 
479
- const latestReset = useUpdatedRef(reset);
480
- const latestResetFunc = useCallback(() => {
481
- return latestReset.current();
482
- }, [latestReset]);
483
-
484
- const interrupt = useLangGraphInterruptRender();
485
-
526
+ // @ts-ignore
486
527
  return {
487
- visibleMessages: messages,
488
- messages: gqlToAGUI(messages, actions, coAgentStateRenders),
528
+ messages: resolvedMessages,
489
529
  sendMessage: latestSendMessageFunc,
490
530
  appendMessage: latestAppendFunc,
491
531
  setMessages: latestSetMessagesFunc,
@@ -493,16 +533,18 @@ export function useCopilotChat(options: UseCopilotChatOptions = {}): UseCopilotC
493
533
  stopGeneration: latestStopFunc,
494
534
  reset: latestResetFunc,
495
535
  deleteMessage: latestDeleteFunc,
496
- runChatCompletion: latestRunChatCompletionFunc,
497
- isLoading,
498
- mcpServers,
499
- setMcpServers,
500
- suggestions,
501
- setSuggestions,
502
- generateSuggestions: generateSuggestionsFunc,
503
- resetSuggestions,
504
- isLoadingSuggestions: isLoadingSuggestionsRef.current,
536
+ isAvailable: !agentAvailable,
537
+ isLoading: Boolean(agent?.isRunning),
538
+ // mcpServers,
539
+ // setMcpServers,
540
+ suggestions: currentSuggestions.suggestions,
541
+ setSuggestions: (suggestions: Suggestion[]) => copilotkit.addSuggestionsConfig({ suggestions }),
542
+ generateSuggestions: async () => copilotkit.reloadSuggestions(resolvedAgentId),
543
+ resetSuggestions: () => copilotkit.clearSuggestions(resolvedAgentId),
544
+ isLoadingSuggestions: currentSuggestions.isLoading,
505
545
  interrupt,
546
+ agent,
547
+ threadId,
506
548
  };
507
549
  }
508
550
 
@@ -518,6 +560,55 @@ function useUpdatedRef<T>(value: T) {
518
560
  return ref;
519
561
  }
520
562
 
563
+ type LegacyRenderParams = {
564
+ message: Message;
565
+ position: "before" | "after";
566
+ };
567
+
568
+ type LegacyRenderer = ((args: LegacyRenderParams) => any) | null;
569
+
570
+ function useLegacyCoagentRenderer({
571
+ copilotkit,
572
+ agent,
573
+ agentId,
574
+ threadId,
575
+ }: {
576
+ copilotkit: ReturnType<typeof useCopilotKit>["copilotkit"];
577
+ agent?: AbstractAgent;
578
+ agentId: string;
579
+ threadId?: string;
580
+ }): LegacyRenderer {
581
+ return useMemo(() => {
582
+ if (!copilotkit || !agent) {
583
+ return null;
584
+ }
585
+
586
+ return ({ message, position }: LegacyRenderParams) => {
587
+ const effectiveThreadId = threadId ?? agent.threadId ?? "default";
588
+ const existingRunId = copilotkit.getRunIdForMessage(
589
+ agentId,
590
+ effectiveThreadId,
591
+ message.id,
592
+ );
593
+ const runId = existingRunId || `pending:${message.id}`;
594
+ const messageIndex = Math.max(agent.messages.findIndex((msg) => msg.id === message.id), 0);
595
+
596
+ const bridgeProps: CoAgentStateRenderBridgeProps = {
597
+ message: message as any,
598
+ position,
599
+ runId,
600
+ messageIndex,
601
+ messageIndexInRun: 0,
602
+ numberOfMessagesInRun: 1,
603
+ agentId,
604
+ stateSnapshot: (message as any).state,
605
+ };
606
+
607
+ return createElement(CoAgentStateRenderBridge, bridgeProps) as any;
608
+ };
609
+ }, [agent, agentId, copilotkit, threadId]);
610
+ }
611
+
521
612
  export function defaultSystemMessage(
522
613
  contextString: string,
523
614
  additionalInstructions?: string,