@copilotkit/react-core 1.10.6 → 1.50.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-24SCZAB4.mjs +143 -0
- package/dist/chunk-24SCZAB4.mjs.map +1 -0
- package/dist/chunk-36KQV2NA.mjs +1 -0
- package/dist/{chunk-U7QULEVO.mjs → chunk-3GURHDG7.mjs} +3 -3
- package/dist/{chunk-4BHIQMN6.mjs → chunk-3R423LZT.mjs} +6 -5
- package/dist/{chunk-4BHIQMN6.mjs.map → chunk-3R423LZT.mjs.map} +1 -1
- package/dist/chunk-5X5DJRQQ.mjs +71 -0
- package/dist/chunk-5X5DJRQQ.mjs.map +1 -0
- package/dist/{chunk-N4WEHORG.mjs → chunk-6PUNP7CD.mjs} +4 -4
- package/dist/chunk-6PUNP7CD.mjs.map +1 -0
- package/dist/chunk-7BYHZLPL.mjs +32 -0
- package/dist/chunk-7BYHZLPL.mjs.map +1 -0
- package/dist/chunk-7DTB7S5V.mjs +83 -0
- package/dist/chunk-7DTB7S5V.mjs.map +1 -0
- package/dist/chunk-A6NKSGH3.mjs +1 -0
- package/dist/{chunk-GT5WI3AF.mjs → chunk-BR5YEYZJ.mjs} +7 -9
- package/dist/chunk-BR5YEYZJ.mjs.map +1 -0
- package/dist/chunk-CB7CRBDG.mjs +48 -0
- package/dist/chunk-CB7CRBDG.mjs.map +1 -0
- package/dist/chunk-CYDWEPFL.mjs +1 -0
- package/dist/{chunk-BBUQMG45.mjs → chunk-D3QSYDJR.mjs} +3 -3
- package/dist/{chunk-BBUQMG45.mjs.map → chunk-D3QSYDJR.mjs.map} +1 -1
- package/dist/chunk-DCHSCK62.mjs +549 -0
- package/dist/chunk-DCHSCK62.mjs.map +1 -0
- package/dist/{chunk-ZLQVRPDS.mjs → chunk-DMLQZG75.mjs} +1 -1
- package/dist/chunk-DMLQZG75.mjs.map +1 -0
- package/dist/chunk-F555TVE4.mjs +33 -0
- package/dist/chunk-F555TVE4.mjs.map +1 -0
- package/dist/{chunk-C6IANC2R.mjs → chunk-FBD24VEH.mjs} +7 -43
- package/dist/chunk-FBD24VEH.mjs.map +1 -0
- package/dist/chunk-FD6FGKYY.mjs +1 -0
- package/dist/chunk-FDOMAPJY.mjs +59 -0
- package/dist/chunk-FDOMAPJY.mjs.map +1 -0
- package/dist/{chunk-X7MJWPI7.mjs → chunk-GMI4KO4X.mjs} +8 -6
- package/dist/{chunk-X7MJWPI7.mjs.map → chunk-GMI4KO4X.mjs.map} +1 -1
- package/dist/chunk-IUSKVYUI.mjs +13 -0
- package/dist/chunk-IUSKVYUI.mjs.map +1 -0
- package/dist/chunk-JD7BAH7U.mjs +1 -0
- package/dist/{chunk-N5HOP3PG.mjs → chunk-JRT5BJF3.mjs} +2 -2
- package/dist/{chunk-N4VN2B5S.mjs → chunk-LHERIF3L.mjs} +2 -2
- package/dist/{chunk-DXEQPN43.mjs → chunk-LHKZJ2ND.mjs} +3 -3
- package/dist/chunk-NB2FKV2V.mjs +1 -0
- package/dist/chunk-NBK4KBLX.mjs +54 -0
- package/dist/chunk-NBK4KBLX.mjs.map +1 -0
- package/dist/chunk-NG26QEGF.mjs +46 -0
- package/dist/chunk-NG26QEGF.mjs.map +1 -0
- package/dist/chunk-NROJOTQP.mjs +163 -0
- package/dist/chunk-NROJOTQP.mjs.map +1 -0
- package/dist/{chunk-MGWRDFBE.mjs → chunk-OVYFRPSN.mjs} +2 -2
- package/dist/{chunk-MQYWH4E6.mjs → chunk-QU6NONOD.mjs} +2 -2
- package/dist/chunk-R4MR43UQ.mjs +101 -0
- package/dist/chunk-R4MR43UQ.mjs.map +1 -0
- package/dist/chunk-SPCZTZCY.mjs +1 -0
- package/dist/chunk-SPCZTZCY.mjs.map +1 -0
- package/dist/chunk-TXI72QHK.mjs +80 -0
- package/dist/chunk-TXI72QHK.mjs.map +1 -0
- package/dist/chunk-UJBV5GAG.mjs +767 -0
- package/dist/chunk-UJBV5GAG.mjs.map +1 -0
- package/dist/{chunk-OKCYPO4I.mjs → chunk-WMJVBMUX.mjs} +3 -3
- package/dist/{chunk-EUX2P2E7.mjs → chunk-WVLHXIFP.mjs} +11 -9
- package/dist/chunk-WVLHXIFP.mjs.map +1 -0
- package/dist/{chunk-5FHSUKQL.mjs → chunk-YYN33GSG.mjs} +5 -2
- package/dist/chunk-YYN33GSG.mjs.map +1 -0
- package/dist/chunk-ZVF5Q6IH.mjs +29 -0
- package/dist/chunk-ZVF5Q6IH.mjs.map +1 -0
- package/dist/components/CopilotListeners.d.ts +3 -0
- package/dist/components/CopilotListeners.js +234 -0
- package/dist/components/CopilotListeners.js.map +1 -0
- package/dist/components/CopilotListeners.mjs +14 -0
- package/dist/components/CopilotListeners.mjs.map +1 -0
- package/dist/components/copilot-provider/copilot-messages.js +14 -48
- package/dist/components/copilot-provider/copilot-messages.js.map +1 -1
- package/dist/components/copilot-provider/copilot-messages.mjs +3 -3
- package/dist/components/copilot-provider/copilotkit-props.d.ts +9 -2
- package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.d.ts +2 -1
- package/dist/components/copilot-provider/copilotkit.js +528 -370
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +17 -12
- package/dist/components/copilot-provider/index.d.ts +2 -1
- package/dist/components/copilot-provider/index.js +528 -370
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +18 -12
- package/dist/components/dev-console/console-trigger.js +10 -8
- package/dist/components/dev-console/console-trigger.js.map +1 -1
- package/dist/components/dev-console/console-trigger.mjs +4 -4
- package/dist/components/dev-console/developer-console-modal.js +10 -8
- package/dist/components/dev-console/developer-console-modal.js.map +1 -1
- package/dist/components/dev-console/developer-console-modal.mjs +3 -3
- package/dist/components/error-boundary/error-boundary.d.ts +7 -7
- package/dist/components/error-boundary/error-boundary.js +3 -3
- package/dist/components/error-boundary/error-boundary.js.map +1 -1
- package/dist/components/error-boundary/error-boundary.mjs +2 -2
- package/dist/components/error-boundary/error-utils.d.ts +1 -1
- package/dist/components/error-boundary/error-utils.js +3 -3
- package/dist/components/error-boundary/error-utils.js.map +1 -1
- package/dist/components/error-boundary/error-utils.mjs +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +528 -370
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +19 -12
- package/dist/components/toast/exclamation-mark-icon.d.ts +2 -2
- package/dist/components/toast/toast-provider.d.ts +3 -3
- package/dist/components/usage-banner.d.ts +2 -2
- package/dist/context/coagent-state-renders-context.d.ts +24 -0
- package/dist/context/coagent-state-renders-context.js +91 -0
- package/dist/context/coagent-state-renders-context.js.map +1 -0
- package/dist/context/coagent-state-renders-context.mjs +12 -0
- package/dist/context/coagent-state-renders-context.mjs.map +1 -0
- package/dist/context/copilot-context.d.ts +1 -1
- package/dist/context/copilot-context.js +10 -8
- package/dist/context/copilot-context.js.map +1 -1
- package/dist/context/copilot-context.mjs +1 -1
- package/dist/context/copilot-messages-context.d.ts +18 -11
- package/dist/context/copilot-messages-context.js.map +1 -1
- package/dist/context/copilot-messages-context.mjs +1 -1
- package/dist/context/index.d.ts +6 -2
- package/dist/context/index.js +110 -10
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +20 -4
- package/dist/context/threads-context.d.ts +16 -0
- package/dist/context/threads-context.js +59 -0
- package/dist/context/threads-context.js.map +1 -0
- package/dist/context/threads-context.mjs +12 -0
- package/dist/context/threads-context.mjs.map +1 -0
- package/dist/{copilot-context-cf9de848.d.ts → copilot-context-1cd70a3f.d.ts} +36 -32
- package/dist/hooks/index.d.ts +9 -6
- package/dist/hooks/index.js +1445 -1839
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +47 -56
- package/dist/hooks/use-coagent-state-render-bridge.d.ts +100 -0
- package/dist/hooks/use-coagent-state-render-bridge.js +211 -0
- package/dist/hooks/use-coagent-state-render-bridge.js.map +1 -0
- package/dist/hooks/use-coagent-state-render-bridge.mjs +15 -0
- package/dist/hooks/use-coagent-state-render-bridge.mjs.map +1 -0
- package/dist/hooks/use-coagent-state-render.js +31 -20
- package/dist/hooks/use-coagent-state-render.js.map +1 -1
- package/dist/hooks/use-coagent-state-render.mjs +3 -2
- package/dist/hooks/use-coagent.d.ts +2 -14
- package/dist/hooks/use-coagent.js +109 -1906
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +1 -30
- package/dist/hooks/use-configure-chat-suggestions.d.ts +36 -0
- package/dist/hooks/use-configure-chat-suggestions.js +210 -0
- package/dist/hooks/use-configure-chat-suggestions.js.map +1 -0
- package/dist/hooks/use-configure-chat-suggestions.mjs +13 -0
- package/dist/hooks/use-configure-chat-suggestions.mjs.map +1 -0
- package/dist/hooks/use-copilot-action.d.ts +8 -45
- package/dist/hooks/use-copilot-action.js +207 -349
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +4 -5
- package/dist/hooks/use-copilot-additional-instructions.js +10 -8
- package/dist/hooks/use-copilot-additional-instructions.js.map +1 -1
- package/dist/hooks/use-copilot-additional-instructions.mjs +2 -2
- package/dist/hooks/use-copilot-authenticated-action.js +224 -248
- package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
- package/dist/hooks/use-copilot-authenticated-action.mjs +6 -6
- package/dist/hooks/use-copilot-chat-headless_c.d.ts +2 -10
- package/dist/hooks/use-copilot-chat-headless_c.js +973 -1369
- package/dist/hooks/use-copilot-chat-headless_c.js.map +1 -1
- package/dist/hooks/use-copilot-chat-headless_c.mjs +12 -22
- package/dist/hooks/use-copilot-chat.d.ts +2 -10
- package/dist/hooks/use-copilot-chat.js +967 -1388
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +12 -22
- package/dist/hooks/use-copilot-chat_internal.d.ts +38 -14
- package/dist/hooks/use-copilot-chat_internal.js +965 -1362
- package/dist/hooks/use-copilot-chat_internal.js.map +1 -1
- package/dist/hooks/use-copilot-chat_internal.mjs +13 -23
- package/dist/hooks/use-copilot-readable.d.ts +1 -1
- package/dist/hooks/use-copilot-readable.js +6 -157
- package/dist/hooks/use-copilot-readable.js.map +1 -1
- package/dist/hooks/use-copilot-readable.mjs +1 -2
- package/dist/hooks/use-default-tool.js +204 -349
- package/dist/hooks/use-default-tool.js.map +1 -1
- package/dist/hooks/use-default-tool.mjs +5 -6
- package/dist/hooks/use-flat-category-store.js +4 -1
- package/dist/hooks/use-flat-category-store.js.map +1 -1
- package/dist/hooks/use-flat-category-store.mjs +1 -1
- package/dist/hooks/use-frontend-tool.d.ts +3 -3
- package/dist/hooks/use-frontend-tool.js +30 -370
- package/dist/hooks/use-frontend-tool.js.map +1 -1
- package/dist/hooks/use-frontend-tool.mjs +1 -6
- package/dist/hooks/use-human-in-the-loop.d.ts +4 -3
- package/dist/hooks/use-human-in-the-loop.js +61 -393
- package/dist/hooks/use-human-in-the-loop.js.map +1 -1
- package/dist/hooks/use-human-in-the-loop.mjs +1 -6
- package/dist/hooks/use-langgraph-interrupt-render.d.ts +3 -2
- package/dist/hooks/use-langgraph-interrupt-render.js +92 -36
- package/dist/hooks/use-langgraph-interrupt-render.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt-render.mjs +6 -4
- package/dist/hooks/use-langgraph-interrupt.d.ts +1 -1
- package/dist/hooks/use-langgraph-interrupt.js +24 -1642
- package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt.mjs +2 -23
- package/dist/hooks/use-lazy-tool-renderer.d.ts +6 -0
- package/dist/hooks/use-lazy-tool-renderer.js +53 -0
- package/dist/hooks/use-lazy-tool-renderer.js.map +1 -0
- package/dist/hooks/use-lazy-tool-renderer.mjs +8 -0
- package/dist/hooks/use-lazy-tool-renderer.mjs.map +1 -0
- package/dist/hooks/use-make-copilot-document-readable.js +11 -9
- package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
- package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
- package/dist/hooks/use-render-tool-call.d.ts +7 -6
- package/dist/hooks/use-render-tool-call.js +36 -386
- package/dist/hooks/use-render-tool-call.js.map +1 -1
- package/dist/hooks/use-render-tool-call.mjs +1 -6
- package/dist/index.d.ts +11 -6
- package/dist/index.js +1841 -2056
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +82 -63
- package/dist/lib/copilot-task.d.ts +1 -1
- package/dist/lib/copilot-task.js +1 -0
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +20 -13
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +20 -13
- package/dist/setupTests.d.ts +2 -2
- package/dist/types/frontend-action.d.ts +5 -5
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs +2 -1
- package/dist/types/interrupt-action.d.ts +1 -1
- package/dist/types/interrupt-action.js.map +1 -1
- package/dist/types/interrupt-action.mjs +1 -0
- package/dist/utils/index.d.ts +0 -12
- package/dist/utils/index.js +6 -325
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +3 -23
- package/dist/utils/utils.js.map +1 -1
- package/dist/v2/index.d.ts +2 -0
- package/dist/v2/index.js +27 -0
- package/dist/v2/index.js.map +1 -0
- package/dist/v2/index.mjs +4 -0
- package/dist/v2/index.mjs.map +1 -0
- package/package.json +34 -23
- package/src/components/CopilotListeners.tsx +82 -0
- package/src/components/copilot-provider/copilot-messages.tsx +46 -47
- package/src/components/copilot-provider/copilotkit-props.tsx +8 -1
- package/src/components/copilot-provider/copilotkit.tsx +177 -144
- package/src/components/error-boundary/error-utils.tsx +3 -3
- package/src/context/coagent-state-renders-context.tsx +76 -0
- package/src/context/copilot-context.tsx +21 -21
- package/src/context/copilot-messages-context.tsx +3 -3
- package/src/context/index.ts +8 -0
- package/src/context/threads-context.tsx +41 -0
- package/src/hooks/index.ts +7 -3
- package/src/hooks/use-coagent-state-render-bridge.tsx +293 -0
- package/src/hooks/use-coagent-state-render.ts +4 -7
- package/src/hooks/use-coagent.ts +129 -249
- package/src/hooks/use-configure-chat-suggestions.tsx +85 -0
- package/src/hooks/use-copilot-action.ts +88 -199
- package/src/hooks/use-copilot-chat-headless_c.ts +2 -1
- package/src/hooks/use-copilot-chat.ts +4 -1
- package/src/hooks/use-copilot-chat_internal.ts +349 -258
- package/src/hooks/use-copilot-readable.ts +6 -26
- package/src/hooks/use-flat-category-store.ts +4 -3
- package/src/hooks/use-frontend-tool.ts +67 -8
- package/src/hooks/use-human-in-the-loop.ts +111 -13
- package/src/hooks/use-langgraph-interrupt-render.ts +90 -40
- package/src/hooks/use-langgraph-interrupt.ts +18 -47
- package/src/hooks/use-lazy-tool-renderer.tsx +30 -0
- package/src/hooks/use-make-copilot-document-readable.ts +1 -1
- package/src/hooks/use-render-tool-call.ts +73 -13
- package/src/types/index.ts +1 -0
- package/src/types/interrupt-action.ts +8 -4
- package/src/utils/index.ts +0 -3
- package/src/utils/utils.ts +7 -0
- package/src/v2/index.ts +2 -0
- package/src/v2/styles.css +1 -0
- package/tsup.config.ts +1 -1
- package/dist/chunk-5FHSUKQL.mjs.map +0 -1
- package/dist/chunk-6GPVUMBU.mjs +0 -13
- package/dist/chunk-6GPVUMBU.mjs.map +0 -1
- package/dist/chunk-AKR2SSUJ.mjs +0 -22
- package/dist/chunk-AKR2SSUJ.mjs.map +0 -1
- package/dist/chunk-C6IANC2R.mjs.map +0 -1
- package/dist/chunk-CI4KD357.mjs +0 -804
- package/dist/chunk-CI4KD357.mjs.map +0 -1
- package/dist/chunk-DZTU6PGS.mjs +0 -1
- package/dist/chunk-EUX2P2E7.mjs.map +0 -1
- package/dist/chunk-EVVO67QO.mjs +0 -25
- package/dist/chunk-EVVO67QO.mjs.map +0 -1
- package/dist/chunk-GT5WI3AF.mjs.map +0 -1
- package/dist/chunk-HDOG2RTM.mjs +0 -37
- package/dist/chunk-HDOG2RTM.mjs.map +0 -1
- package/dist/chunk-N4WEHORG.mjs.map +0 -1
- package/dist/chunk-OT5NHMEC.mjs +0 -723
- package/dist/chunk-OT5NHMEC.mjs.map +0 -1
- package/dist/chunk-QHCLJODF.mjs +0 -332
- package/dist/chunk-QHCLJODF.mjs.map +0 -1
- package/dist/chunk-QV5SBF2S.mjs +0 -239
- package/dist/chunk-QV5SBF2S.mjs.map +0 -1
- package/dist/chunk-T3376SZS.mjs +0 -142
- package/dist/chunk-T3376SZS.mjs.map +0 -1
- package/dist/chunk-U3DQY67T.mjs +0 -71
- package/dist/chunk-U3DQY67T.mjs.map +0 -1
- package/dist/chunk-YPBKY4KY.mjs +0 -1
- package/dist/chunk-YPSGKPDA.mjs +0 -1
- package/dist/chunk-ZLQVRPDS.mjs.map +0 -1
- package/dist/chunk-ZVOLWJCY.mjs +0 -47
- package/dist/chunk-ZVOLWJCY.mjs.map +0 -1
- package/dist/hooks/use-chat.d.ts +0 -145
- package/dist/hooks/use-chat.js +0 -1129
- package/dist/hooks/use-chat.js.map +0 -1
- package/dist/hooks/use-chat.mjs +0 -14
- package/dist/index-1f5b66ac.d.ts +0 -36
- package/dist/utils/extract.d.ts +0 -43
- package/dist/utils/extract.js +0 -208
- package/dist/utils/extract.js.map +0 -1
- package/dist/utils/extract.mjs +0 -25
- package/dist/utils/suggestions.d.ts +0 -11
- package/dist/utils/suggestions.js +0 -343
- package/dist/utils/suggestions.js.map +0 -1
- package/dist/utils/suggestions.mjs +0 -25
- package/src/hooks/use-chat.ts +0 -1142
- package/src/utils/extract.ts +0 -215
- package/src/utils/suggestions.ts +0 -208
- /package/dist/{chunk-DZTU6PGS.mjs.map → chunk-36KQV2NA.mjs.map} +0 -0
- /package/dist/{chunk-U7QULEVO.mjs.map → chunk-3GURHDG7.mjs.map} +0 -0
- /package/dist/{chunk-YPBKY4KY.mjs.map → chunk-A6NKSGH3.mjs.map} +0 -0
- /package/dist/{chunk-YPSGKPDA.mjs.map → chunk-CYDWEPFL.mjs.map} +0 -0
- /package/dist/{hooks/use-chat.mjs.map → chunk-FD6FGKYY.mjs.map} +0 -0
- /package/dist/{utils/extract.mjs.map → chunk-JD7BAH7U.mjs.map} +0 -0
- /package/dist/{chunk-N5HOP3PG.mjs.map → chunk-JRT5BJF3.mjs.map} +0 -0
- /package/dist/{chunk-N4VN2B5S.mjs.map → chunk-LHERIF3L.mjs.map} +0 -0
- /package/dist/{chunk-DXEQPN43.mjs.map → chunk-LHKZJ2ND.mjs.map} +0 -0
- /package/dist/{utils/suggestions.mjs.map → chunk-NB2FKV2V.mjs.map} +0 -0
- /package/dist/{chunk-MGWRDFBE.mjs.map → chunk-OVYFRPSN.mjs.map} +0 -0
- /package/dist/{chunk-MQYWH4E6.mjs.map → chunk-QU6NONOD.mjs.map} +0 -0
- /package/dist/{chunk-OKCYPO4I.mjs.map → chunk-WMJVBMUX.mjs.map} +0 -0
|
@@ -1,23 +1,48 @@
|
|
|
1
|
-
import { useRef, useEffect, useCallback, useState,
|
|
2
|
-
import {
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
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
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
-
|
|
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
|
-
|
|
290
|
-
|
|
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
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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
|
-
|
|
311
|
-
}, [stableContext, chatSuggestionConfiguration, setSuggestions, abortSuggestions]);
|
|
316
|
+
const interrupt = useLangGraphInterruptRender(agent);
|
|
312
317
|
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
318
|
+
const reset = () => {
|
|
319
|
+
agent?.setMessages([]);
|
|
320
|
+
agent?.setState(null);
|
|
321
|
+
};
|
|
316
322
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
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
|
-
[
|
|
338
|
+
[latestDelete],
|
|
350
339
|
);
|
|
351
340
|
|
|
352
|
-
const
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
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
|
-
|
|
364
|
-
|
|
365
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
-
|
|
405
|
-
return await latestAppend.current(message, options);
|
|
417
|
+
return latestSendMessageFunc(gqlToAGUI([message])[0], options);
|
|
406
418
|
},
|
|
407
|
-
[
|
|
419
|
+
[latestSendMessageFunc],
|
|
408
420
|
);
|
|
409
421
|
|
|
410
|
-
const
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
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
|
-
[
|
|
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(
|
|
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
|
|
432
|
-
const
|
|
433
|
-
(
|
|
434
|
-
|
|
435
|
-
},
|
|
436
|
-
[latestDelete],
|
|
437
|
-
);
|
|
446
|
+
const latestReset = useUpdatedRef(reset);
|
|
447
|
+
const latestResetFunc = useCallback(() => {
|
|
448
|
+
return latestReset.current();
|
|
449
|
+
}, [latestReset]);
|
|
438
450
|
|
|
439
|
-
const
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
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
|
-
|
|
467
|
-
|
|
468
|
-
resetSuggestions();
|
|
515
|
+
|
|
516
|
+
return processedMessages;
|
|
469
517
|
}, [
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
resetSuggestions,
|
|
518
|
+
agent?.messages,
|
|
519
|
+
lazyToolRendered,
|
|
520
|
+
allMessages,
|
|
521
|
+
renderCustomMessage,
|
|
522
|
+
legacyCustomMessageRenderer,
|
|
523
|
+
resolvedAgentId,
|
|
477
524
|
]);
|
|
478
525
|
|
|
479
|
-
|
|
480
|
-
const latestResetFunc = useCallback(() => {
|
|
481
|
-
return latestReset.current();
|
|
482
|
-
}, [latestReset]);
|
|
483
|
-
|
|
484
|
-
const interrupt = useLangGraphInterruptRender();
|
|
485
|
-
|
|
526
|
+
// @ts-ignore
|
|
486
527
|
return {
|
|
487
|
-
|
|
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
|
-
|
|
497
|
-
isLoading,
|
|
498
|
-
mcpServers,
|
|
499
|
-
setMcpServers,
|
|
500
|
-
suggestions,
|
|
501
|
-
setSuggestions,
|
|
502
|
-
generateSuggestions:
|
|
503
|
-
resetSuggestions,
|
|
504
|
-
isLoadingSuggestions:
|
|
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,
|