@copilotkit/react-core 0.0.0-fix-debug-infosys-20251107151227 → 0.0.0-fix-restore-handle-method-node-http-20251222114321
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/CHANGELOG.md +309 -4
- package/dist/chunk-36KQV2NA.mjs +1 -0
- package/dist/{chunk-RLR36R2Y.mjs → chunk-3V5TOYKW.mjs} +4 -4
- package/dist/chunk-3V5TOYKW.mjs.map +1 -0
- package/dist/chunk-4RRMC7L2.mjs +32 -0
- package/dist/chunk-4RRMC7L2.mjs.map +1 -0
- package/dist/chunk-4YZA2BZC.mjs +551 -0
- package/dist/chunk-4YZA2BZC.mjs.map +1 -0
- package/dist/{chunk-3HEGBDUK.mjs → chunk-53K6WNJG.mjs} +8 -6
- package/dist/{chunk-3HEGBDUK.mjs.map → chunk-53K6WNJG.mjs.map} +1 -1
- package/dist/{chunk-N4WEHORG.mjs → chunk-6PUNP7CD.mjs} +4 -4
- package/dist/chunk-6PUNP7CD.mjs.map +1 -0
- package/dist/chunk-7DTB7S5V.mjs +83 -0
- package/dist/chunk-7DTB7S5V.mjs.map +1 -0
- package/dist/{chunk-BBUQMG45.mjs → chunk-7IBF6RBW.mjs} +3 -3
- package/dist/{chunk-BBUQMG45.mjs.map → chunk-7IBF6RBW.mjs.map} +1 -1
- package/dist/chunk-A6NKSGH3.mjs +1 -0
- package/dist/{chunk-MGWRDFBE.mjs → chunk-ABWT4DRT.mjs} +2 -2
- package/dist/{chunk-EUX2P2E7.mjs → chunk-AFNWX62Q.mjs} +11 -9
- package/dist/chunk-AFNWX62Q.mjs.map +1 -0
- package/dist/{chunk-E6ER5C5U.mjs → chunk-BUSWSDYO.mjs} +2 -2
- package/dist/chunk-CDUIA2WM.mjs +60 -0
- package/dist/chunk-CDUIA2WM.mjs.map +1 -0
- package/dist/chunk-CYDWEPFL.mjs +1 -0
- package/dist/{chunk-ZLQVRPDS.mjs → chunk-DMLQZG75.mjs} +1 -1
- package/dist/chunk-DMLQZG75.mjs.map +1 -0
- package/dist/{chunk-GIGUZ2OK.mjs → chunk-E7SE25ZU.mjs} +3 -3
- package/dist/chunk-F555TVE4.mjs +33 -0
- package/dist/chunk-F555TVE4.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-BCZQ5BZB.mjs → chunk-FQFXYAV7.mjs} +6 -5
- package/dist/{chunk-BCZQ5BZB.mjs.map → chunk-FQFXYAV7.mjs.map} +1 -1
- package/dist/chunk-GPEJNVE5.mjs +80 -0
- package/dist/chunk-GPEJNVE5.mjs.map +1 -0
- package/dist/{chunk-FPOOU7AG.mjs → chunk-HE22TZMF.mjs} +10 -46
- package/dist/chunk-HE22TZMF.mjs.map +1 -0
- package/dist/chunk-I76HKHPJ.mjs +32 -0
- package/dist/chunk-I76HKHPJ.mjs.map +1 -0
- package/dist/chunk-JD7BAH7U.mjs +1 -0
- package/dist/{chunk-L3I57GMV.mjs → chunk-LHERIF3L.mjs} +4 -4
- package/dist/chunk-LSHFN2Y5.mjs +349 -0
- package/dist/chunk-LSHFN2Y5.mjs.map +1 -0
- 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-QNUAXSDP.mjs +166 -0
- package/dist/chunk-QNUAXSDP.mjs.map +1 -0
- package/dist/chunk-SPCZTZCY.mjs +1 -0
- package/dist/chunk-SPCZTZCY.mjs.map +1 -0
- package/dist/chunk-VV56AVPB.mjs +125 -0
- package/dist/chunk-VV56AVPB.mjs.map +1 -0
- package/dist/chunk-WF65O6HX.mjs +66 -0
- package/dist/chunk-WF65O6HX.mjs.map +1 -0
- package/dist/chunk-XDFVCQD3.mjs +27 -0
- package/dist/chunk-XDFVCQD3.mjs.map +1 -0
- package/dist/{chunk-TUTNHDM3.mjs → chunk-YCG6SNAU.mjs} +5 -5
- package/dist/{chunk-3WUDRJTT.mjs → chunk-YTQHRJUA.mjs} +9 -11
- package/dist/chunk-YTQHRJUA.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-Z6JV2LRY.mjs +37 -0
- package/dist/chunk-Z6JV2LRY.mjs.map +1 -0
- package/dist/chunk-ZVF5Q6IH.mjs +29 -0
- package/dist/chunk-ZVF5Q6IH.mjs.map +1 -0
- package/dist/chunk-ZYTXB6HH.mjs +151 -0
- package/dist/chunk-ZYTXB6HH.mjs.map +1 -0
- package/dist/components/CopilotListeners.d.ts +3 -0
- package/dist/components/CopilotListeners.js +101 -0
- package/dist/components/CopilotListeners.js.map +1 -0
- package/dist/components/CopilotListeners.mjs +9 -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 +15 -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 +491 -1361
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +14 -12
- package/dist/components/copilot-provider/index.d.ts +2 -1
- package/dist/components/copilot-provider/index.js +491 -1361
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +15 -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 +226 -6
- package/dist/components/dev-console/console-trigger.mjs.map +1 -1
- 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 +3 -3
- 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 +491 -1361
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +16 -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 +22 -6
- 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-ec77e921.d.ts} +36 -32
- package/dist/hooks/index.d.ts +9 -6
- package/dist/hooks/index.js +1109 -1841
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +50 -58
- package/dist/hooks/use-agent-nodename.d.ts +3 -0
- package/dist/hooks/use-agent-nodename.js +56 -0
- package/dist/hooks/use-agent-nodename.js.map +1 -0
- package/dist/hooks/use-agent-nodename.mjs +8 -0
- package/dist/hooks/use-agent-nodename.mjs.map +1 -0
- package/dist/hooks/use-coagent-state-render-bridge.d.ts +100 -0
- package/dist/hooks/use-coagent-state-render-bridge.js +214 -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 +138 -1898
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +2 -30
- package/dist/hooks/use-configure-chat-suggestions.d.ts +36 -0
- package/dist/hooks/use-configure-chat-suggestions.js +79 -0
- package/dist/hooks/use-configure-chat-suggestions.js.map +1 -0
- package/dist/hooks/use-configure-chat-suggestions.mjs +47 -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 +219 -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 +236 -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 +585 -1374
- 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-suggestions.d.ts +35 -0
- package/dist/hooks/use-copilot-chat-suggestions.js +60 -0
- package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -0
- package/dist/hooks/use-copilot-chat-suggestions.mjs +8 -0
- package/dist/hooks/use-copilot-chat-suggestions.mjs.map +1 -0
- package/dist/hooks/use-copilot-chat.d.ts +2 -10
- package/dist/hooks/use-copilot-chat.js +579 -1393
- 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 +77 -14
- package/dist/hooks/use-copilot-chat_internal.js +577 -1367
- 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 +25 -152
- 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 +216 -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 +42 -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 +157 -37
- package/dist/hooks/use-langgraph-interrupt-render.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt-render.mjs +7 -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 +1456 -3033
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +82 -65
- package/dist/lib/copilot-task.d.ts +2 -2
- package/dist/lib/copilot-task.js +1 -0
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +18 -14
- 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 +18 -14
- 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 +1 -21
- package/dist/utils/utils.js.map +1 -1
- package/dist/v2/index.css +4 -0
- package/dist/v2/index.css.map +1 -0
- 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 +6 -0
- package/dist/v2/index.mjs.map +1 -0
- package/jest.config.js +12 -0
- package/package.json +24 -10
- package/src/components/CopilotListeners.tsx +81 -0
- package/src/components/copilot-provider/copilot-messages.tsx +6 -48
- package/src/components/copilot-provider/copilotkit-props.tsx +15 -1
- package/src/components/copilot-provider/copilotkit.tsx +189 -148
- 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/__tests__/use-coagent-config.test.ts +189 -129
- package/src/hooks/index.ts +12 -3
- package/src/hooks/use-agent-nodename.ts +30 -0
- 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 +136 -247
- package/src/hooks/use-configure-chat-suggestions.tsx +86 -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-suggestions.tsx +124 -0
- package/src/hooks/use-copilot-chat.ts +4 -1
- package/src/hooks/use-copilot-chat_internal.ts +410 -263
- package/src/hooks/use-copilot-readable.ts +23 -25
- package/src/hooks/use-flat-category-store.ts +4 -3
- package/src/hooks/use-frontend-tool.ts +86 -8
- package/src/hooks/use-human-in-the-loop.ts +111 -13
- package/src/hooks/use-langgraph-interrupt-render.ts +108 -40
- package/src/hooks/use-langgraph-interrupt.ts +18 -48
- 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/lib/copilot-task.ts +1 -1
- package/src/types/index.ts +1 -0
- package/src/types/interrupt-action.ts +8 -7
- package/src/utils/index.ts +0 -3
- package/src/utils/utils.ts +7 -0
- package/src/v2/index.css +1 -0
- package/src/v2/index.ts +4 -0
- package/tsup.config.ts +1 -1
- package/dist/chunk-3MUCKQXM.mjs +0 -71
- package/dist/chunk-3MUCKQXM.mjs.map +0 -1
- package/dist/chunk-3WUDRJTT.mjs.map +0 -1
- package/dist/chunk-4I6ZMKGV.mjs +0 -723
- package/dist/chunk-4I6ZMKGV.mjs.map +0 -1
- package/dist/chunk-5FHSUKQL.mjs.map +0 -1
- package/dist/chunk-CUWOXXM5.mjs +0 -231
- package/dist/chunk-CUWOXXM5.mjs.map +0 -1
- package/dist/chunk-DZTU6PGS.mjs +0 -1
- package/dist/chunk-EUX2P2E7.mjs.map +0 -1
- package/dist/chunk-FPOOU7AG.mjs.map +0 -1
- package/dist/chunk-H4AHA2Y7.mjs +0 -22
- package/dist/chunk-H4AHA2Y7.mjs.map +0 -1
- package/dist/chunk-HDOG2RTM.mjs +0 -37
- package/dist/chunk-HDOG2RTM.mjs.map +0 -1
- package/dist/chunk-HI6SPUOX.mjs +0 -142
- package/dist/chunk-HI6SPUOX.mjs.map +0 -1
- package/dist/chunk-IN74FLIZ.mjs +0 -804
- package/dist/chunk-IN74FLIZ.mjs.map +0 -1
- package/dist/chunk-N4WEHORG.mjs.map +0 -1
- package/dist/chunk-R4Y45UGQ.mjs +0 -25
- package/dist/chunk-R4Y45UGQ.mjs.map +0 -1
- package/dist/chunk-RLR36R2Y.mjs.map +0 -1
- package/dist/chunk-W2UUH57V.mjs +0 -332
- package/dist/chunk-W2UUH57V.mjs.map +0 -1
- package/dist/chunk-X5GRTEAW.mjs +0 -13
- package/dist/chunk-X5GRTEAW.mjs.map +0 -1
- package/dist/chunk-YAV3YNFQ.mjs +0 -239
- package/dist/chunk-YAV3YNFQ.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-YPBKY4KY.mjs.map → chunk-A6NKSGH3.mjs.map} +0 -0
- /package/dist/{chunk-MGWRDFBE.mjs.map → chunk-ABWT4DRT.mjs.map} +0 -0
- /package/dist/{chunk-E6ER5C5U.mjs.map → chunk-BUSWSDYO.mjs.map} +0 -0
- /package/dist/{chunk-YPSGKPDA.mjs.map → chunk-CYDWEPFL.mjs.map} +0 -0
- /package/dist/{chunk-GIGUZ2OK.mjs.map → chunk-E7SE25ZU.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-L3I57GMV.mjs.map → chunk-LHERIF3L.mjs.map} +0 -0
- /package/dist/{utils/suggestions.mjs.map → chunk-NB2FKV2V.mjs.map} +0 -0
- /package/dist/{chunk-TUTNHDM3.mjs.map → chunk-YCG6SNAU.mjs.map} +0 -0
|
@@ -1,23 +1,67 @@
|
|
|
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 { AbstractAgent, AGUIConnectNotImplementedError } from "@ag-ui/client";
|
|
18
|
+
import {
|
|
19
|
+
CoAgentStateRenderBridge,
|
|
20
|
+
type CoAgentStateRenderBridgeProps,
|
|
21
|
+
} from "./use-coagent-state-render-bridge";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The type of suggestions to use in the chat.
|
|
25
|
+
*
|
|
26
|
+
* `auto` - Suggestions are generated automatically.
|
|
27
|
+
* `manual` - Suggestions are controlled programmatically.
|
|
28
|
+
* `SuggestionItem[]` - Static suggestions array.
|
|
29
|
+
*/
|
|
30
|
+
export type ChatSuggestions = "auto" | "manual" | Omit<Suggestion, "isLoading">[];
|
|
31
|
+
|
|
32
|
+
export interface AppendMessageOptions {
|
|
33
|
+
/**
|
|
34
|
+
* Whether to run the chat completion after appending the message. Defaults to `true`.
|
|
35
|
+
*/
|
|
36
|
+
followUp?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether to clear the suggestions after appending the message. Defaults to `true`.
|
|
39
|
+
*/
|
|
40
|
+
clearSuggestions?: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface OnStopGenerationArguments {
|
|
44
|
+
/**
|
|
45
|
+
* The name of the currently executing agent.
|
|
46
|
+
*/
|
|
47
|
+
currentAgentName: string | undefined;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The messages in the chat.
|
|
51
|
+
*/
|
|
52
|
+
messages: Message[];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type OnReloadMessagesArguments = OnStopGenerationArguments & {
|
|
56
|
+
/**
|
|
57
|
+
* The message on which "regenerate" was pressed
|
|
58
|
+
*/
|
|
59
|
+
messageId: string;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export type OnStopGeneration = (args: OnStopGenerationArguments) => void;
|
|
63
|
+
|
|
64
|
+
export type OnReloadMessages = (args: OnReloadMessagesArguments) => void;
|
|
21
65
|
|
|
22
66
|
export interface UseCopilotChatOptions {
|
|
23
67
|
/**
|
|
@@ -46,6 +90,29 @@ export interface UseCopilotChatOptions {
|
|
|
46
90
|
* 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
91
|
*/
|
|
48
92
|
disableSystemMessage?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Controls the behavior of suggestions in the chat interface.
|
|
95
|
+
*
|
|
96
|
+
* `auto` (default) - Suggestions are generated automatically:
|
|
97
|
+
* - When the chat is first opened (empty state)
|
|
98
|
+
* - After each message exchange completes
|
|
99
|
+
* - Uses configuration from `useCopilotChatSuggestions` hooks
|
|
100
|
+
*
|
|
101
|
+
* `manual` - Suggestions are controlled programmatically:
|
|
102
|
+
* - Use `setSuggestions()` to set custom suggestions
|
|
103
|
+
* - Use `generateSuggestions()` to trigger AI generation
|
|
104
|
+
* - Access via `useCopilotChat` hook
|
|
105
|
+
*
|
|
106
|
+
* `SuggestionItem[]` - Static suggestions array:
|
|
107
|
+
* - Always shows the same suggestions
|
|
108
|
+
* - No AI generation involved
|
|
109
|
+
*/
|
|
110
|
+
suggestions?: ChatSuggestions;
|
|
111
|
+
|
|
112
|
+
onInProgress?: (isLoading: boolean) => void;
|
|
113
|
+
onSubmitMessage?: (messageContent: string) => Promise<void> | void;
|
|
114
|
+
onStopGeneration?: OnStopGeneration;
|
|
115
|
+
onReloadMessages?: OnReloadMessages;
|
|
49
116
|
}
|
|
50
117
|
|
|
51
118
|
export interface MCPServerConfig {
|
|
@@ -53,6 +120,14 @@ export interface MCPServerConfig {
|
|
|
53
120
|
apiKey?: string;
|
|
54
121
|
}
|
|
55
122
|
|
|
123
|
+
// Old suggestion item interface, for returning from useCopilotChatInternal
|
|
124
|
+
interface SuggestionItem {
|
|
125
|
+
title: string;
|
|
126
|
+
message: string;
|
|
127
|
+
partial?: boolean;
|
|
128
|
+
className?: string;
|
|
129
|
+
}
|
|
130
|
+
|
|
56
131
|
export interface UseCopilotChatReturn {
|
|
57
132
|
/**
|
|
58
133
|
* @deprecated use `messages` instead, this is an old non ag-ui version of the messages
|
|
@@ -161,6 +236,18 @@ export interface UseCopilotChatReturn {
|
|
|
161
236
|
*/
|
|
162
237
|
isLoading: boolean;
|
|
163
238
|
|
|
239
|
+
/**
|
|
240
|
+
* Whether the chat agent is available to generate responses
|
|
241
|
+
*
|
|
242
|
+
* ```tsx
|
|
243
|
+
* if (isAvailable) {
|
|
244
|
+
* console.log("Loading...");
|
|
245
|
+
* } else {
|
|
246
|
+
* console.log("Not loading");
|
|
247
|
+
* }
|
|
248
|
+
*/
|
|
249
|
+
isAvailable: boolean;
|
|
250
|
+
|
|
164
251
|
/** Manually trigger chat completion (advanced usage) */
|
|
165
252
|
runChatCompletion: () => Promise<Message[]>;
|
|
166
253
|
|
|
@@ -174,13 +261,13 @@ export interface UseCopilotChatReturn {
|
|
|
174
261
|
* Current suggestions array
|
|
175
262
|
* Use this to read the current suggestions or in conjunction with setSuggestions for manual control
|
|
176
263
|
*/
|
|
177
|
-
suggestions:
|
|
264
|
+
suggestions: Suggestion[];
|
|
178
265
|
|
|
179
266
|
/**
|
|
180
267
|
* Manually set suggestions
|
|
181
268
|
* Useful for manual mode or custom suggestion workflows
|
|
182
269
|
*/
|
|
183
|
-
setSuggestions: (suggestions:
|
|
270
|
+
setSuggestions: (suggestions: Omit<Suggestion, "isLoading">[]) => void;
|
|
184
271
|
|
|
185
272
|
/**
|
|
186
273
|
* Trigger AI-powered suggestion generation
|
|
@@ -205,287 +292,296 @@ export interface UseCopilotChatReturn {
|
|
|
205
292
|
|
|
206
293
|
/** Interrupt content for human-in-the-loop workflows */
|
|
207
294
|
interrupt: string | React.ReactElement | null;
|
|
208
|
-
}
|
|
209
295
|
|
|
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
|
-
);
|
|
296
|
+
agent?: ReturnType<typeof useAgent>["agent"];
|
|
261
297
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
return {
|
|
265
|
-
actions,
|
|
266
|
-
copilotApiConfig,
|
|
267
|
-
chatSuggestionConfiguration,
|
|
268
|
-
messages,
|
|
269
|
-
setMessages,
|
|
270
|
-
getContextString,
|
|
271
|
-
runtimeClient,
|
|
272
|
-
};
|
|
273
|
-
}, [
|
|
274
|
-
JSON.stringify(Object.keys(actions)),
|
|
275
|
-
copilotApiConfig.chatApiEndpoint,
|
|
276
|
-
messages.length,
|
|
277
|
-
Object.keys(chatSuggestionConfiguration).length,
|
|
278
|
-
]);
|
|
298
|
+
threadId?: string;
|
|
299
|
+
}
|
|
279
300
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
301
|
+
export function useCopilotChatInternal({
|
|
302
|
+
suggestions,
|
|
303
|
+
onInProgress,
|
|
304
|
+
onSubmitMessage,
|
|
305
|
+
onStopGeneration,
|
|
306
|
+
onReloadMessages,
|
|
307
|
+
}: UseCopilotChatOptions = {}): UseCopilotChatReturn {
|
|
308
|
+
const { copilotkit } = useCopilotKit();
|
|
309
|
+
const { threadId, agentSession } = useCopilotContext();
|
|
310
|
+
const existingConfig = useCopilotChatConfiguration();
|
|
311
|
+
const [agentAvailable, setAgentAvailable] = useState(false);
|
|
312
|
+
|
|
313
|
+
// Apply priority: props > existing config > defaults
|
|
314
|
+
const resolvedAgentId = existingConfig?.agentId ?? "default";
|
|
315
|
+
const { agent } = useAgent({ agentId: resolvedAgentId });
|
|
286
316
|
|
|
287
|
-
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
const connect = async (agent: AbstractAgent) => {
|
|
319
|
+
setAgentAvailable(false);
|
|
288
320
|
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
|
-
);
|
|
321
|
+
await copilotkit.connectAgent({ agent });
|
|
322
|
+
setAgentAvailable(true);
|
|
301
323
|
} catch (error) {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
324
|
+
if (error instanceof AGUIConnectNotImplementedError) {
|
|
325
|
+
// connect not implemented, ignore
|
|
326
|
+
} else {
|
|
327
|
+
throw error;
|
|
328
|
+
}
|
|
307
329
|
}
|
|
308
|
-
}
|
|
330
|
+
};
|
|
331
|
+
if (agent && existingConfig?.threadId && agent.threadId !== existingConfig.threadId) {
|
|
332
|
+
agent.threadId = existingConfig.threadId;
|
|
333
|
+
connect(agent);
|
|
334
|
+
}
|
|
335
|
+
return () => {};
|
|
336
|
+
}, [existingConfig?.threadId, agent, copilotkit, resolvedAgentId]);
|
|
309
337
|
|
|
310
|
-
|
|
311
|
-
|
|
338
|
+
useEffect(() => {
|
|
339
|
+
onInProgress?.(Boolean(agent?.isRunning));
|
|
340
|
+
}, [agent?.isRunning, onInProgress]);
|
|
312
341
|
|
|
313
|
-
const
|
|
314
|
-
setSuggestions([]);
|
|
315
|
-
}, [setSuggestions]);
|
|
342
|
+
const interrupt = useLangGraphInterruptRender(agent);
|
|
316
343
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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,
|
|
344
|
+
const reset = () => {
|
|
345
|
+
agent?.setMessages([]);
|
|
346
|
+
agent?.setState(null);
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
const deleteMessage = useCallback(
|
|
350
|
+
(messageId: string) => {
|
|
351
|
+
const filteredMessages = (agent?.messages ?? []).filter(
|
|
352
|
+
(message) => message.id !== messageId,
|
|
339
353
|
);
|
|
340
|
-
|
|
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
|
-
}
|
|
354
|
+
agent?.setMessages(filteredMessages);
|
|
348
355
|
},
|
|
349
|
-
[
|
|
356
|
+
[agent?.setMessages, agent?.messages],
|
|
350
357
|
);
|
|
351
358
|
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
// this always gets the latest context string
|
|
355
|
-
const contextString = getContextString([], defaultCopilotContextCategories); // TODO: make the context categories configurable
|
|
356
|
-
|
|
357
|
-
return new TextMessage({
|
|
358
|
-
content: systemMessageMaker(contextString, chatInstructions),
|
|
359
|
-
role: gqlRole.System,
|
|
360
|
-
});
|
|
361
|
-
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
362
|
-
|
|
363
|
-
const deleteMessage = useCallback(
|
|
359
|
+
const latestDelete = useUpdatedRef(deleteMessage);
|
|
360
|
+
const latestDeleteFunc = useCallback(
|
|
364
361
|
(messageId: string) => {
|
|
365
|
-
|
|
362
|
+
return latestDelete.current(messageId);
|
|
366
363
|
},
|
|
367
|
-
[
|
|
364
|
+
[latestDelete],
|
|
368
365
|
);
|
|
369
366
|
|
|
370
|
-
|
|
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
|
-
});
|
|
367
|
+
const currentSuggestions = useSuggestions({ agentId: resolvedAgentId });
|
|
400
368
|
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
369
|
+
const reload = useAsyncCallback(
|
|
370
|
+
async (reloadMessageId: string): Promise<void> => {
|
|
371
|
+
const messages = agent?.messages ?? [];
|
|
372
|
+
// TODO: get isLoading
|
|
373
|
+
const isLoading = false;
|
|
374
|
+
if (isLoading || messages.length === 0) {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
const reloadMessageIndex = messages.findIndex((msg) => msg.id === reloadMessageId);
|
|
379
|
+
if (reloadMessageIndex === -1) {
|
|
380
|
+
console.warn(`Message with id ${reloadMessageId} not found`);
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const reloadMessageRole = messages[reloadMessageIndex].role;
|
|
385
|
+
if (reloadMessageRole !== "assistant") {
|
|
386
|
+
console.warn(`Regenerate cannot be performed on ${reloadMessageRole} role`);
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
let historyCutoff: Message[] = [messages[0]];
|
|
390
|
+
|
|
391
|
+
if (messages.length > 2 && reloadMessageIndex !== 0) {
|
|
392
|
+
// message to regenerate from is now first.
|
|
393
|
+
// Work backwards to find the first the closest user message
|
|
394
|
+
const lastUserMessageBeforeRegenerate = messages
|
|
395
|
+
.slice(0, reloadMessageIndex)
|
|
396
|
+
.reverse()
|
|
397
|
+
.find((msg) => msg.role === "user");
|
|
398
|
+
|
|
399
|
+
if (!lastUserMessageBeforeRegenerate) {
|
|
400
|
+
historyCutoff = [messages[0]];
|
|
401
|
+
} else {
|
|
402
|
+
const indexOfLastUserMessageBeforeRegenerate = messages.findIndex(
|
|
403
|
+
(msg) => msg.id === lastUserMessageBeforeRegenerate.id,
|
|
404
|
+
);
|
|
405
|
+
// Include the user message, remove everything after it
|
|
406
|
+
historyCutoff = messages.slice(0, indexOfLastUserMessageBeforeRegenerate + 1);
|
|
407
|
+
}
|
|
408
|
+
} else if (messages.length > 2 && reloadMessageIndex === 0) {
|
|
409
|
+
historyCutoff = [messages[0], messages[1]];
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
agent?.setMessages(historyCutoff);
|
|
413
|
+
|
|
414
|
+
if (agent) {
|
|
415
|
+
copilotkit.runAgent({ agent });
|
|
416
|
+
}
|
|
417
|
+
return;
|
|
406
418
|
},
|
|
407
|
-
[
|
|
419
|
+
[agent?.setMessages, copilotkit?.runAgent],
|
|
408
420
|
);
|
|
409
421
|
|
|
410
422
|
const latestSendMessageFunc = useAsyncCallback(
|
|
411
423
|
async (message: Message, options?: AppendMessageOptions) => {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
424
|
+
if (!agent) return;
|
|
425
|
+
const followUp = options?.followUp ?? true;
|
|
426
|
+
if (options?.clearSuggestions) {
|
|
427
|
+
copilotkit.clearSuggestions(resolvedAgentId);
|
|
428
|
+
}
|
|
429
|
+
agent?.addMessage(message);
|
|
430
|
+
if (followUp) {
|
|
431
|
+
try {
|
|
432
|
+
await copilotkit.runAgent({ agent });
|
|
433
|
+
} catch (error) {
|
|
434
|
+
console.error("CopilotChat: runAgent failed", error);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (onSubmitMessage) {
|
|
438
|
+
const content =
|
|
439
|
+
typeof message.content === "string"
|
|
440
|
+
? message.content
|
|
441
|
+
: message.content && "text" in message.content
|
|
442
|
+
? message.content.text
|
|
443
|
+
: message.content && "filename" in message.content
|
|
444
|
+
? message.content.filename
|
|
445
|
+
: "";
|
|
446
|
+
onSubmitMessage(content);
|
|
447
|
+
}
|
|
422
448
|
},
|
|
423
|
-
[
|
|
449
|
+
[agent, copilotkit, resolvedAgentId, onSubmitMessage],
|
|
424
450
|
);
|
|
425
451
|
|
|
426
|
-
const
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
}, [latestStop]);
|
|
430
|
-
|
|
431
|
-
const latestDelete = useUpdatedRef(deleteMessage);
|
|
432
|
-
const latestDeleteFunc = useCallback(
|
|
433
|
-
(messageId: string) => {
|
|
434
|
-
return latestDelete.current(messageId);
|
|
452
|
+
const latestAppendFunc = useAsyncCallback(
|
|
453
|
+
async (message: DeprecatedGqlMessage, options?: AppendMessageOptions) => {
|
|
454
|
+
return latestSendMessageFunc(gqlToAGUI([message])[0], options);
|
|
435
455
|
},
|
|
436
|
-
[
|
|
456
|
+
[latestSendMessageFunc],
|
|
437
457
|
);
|
|
438
458
|
|
|
439
|
-
const latestSetMessages = useUpdatedRef(setMessages);
|
|
440
459
|
const latestSetMessagesFunc = useCallback(
|
|
441
460
|
(messages: Message[] | DeprecatedGqlMessage[]) => {
|
|
442
461
|
if (messages.every((message) => message instanceof DeprecatedGqlMessage)) {
|
|
443
|
-
return
|
|
462
|
+
return agent?.setMessages?.(gqlToAGUI(messages));
|
|
444
463
|
}
|
|
445
|
-
return
|
|
464
|
+
return agent?.setMessages?.(messages);
|
|
446
465
|
},
|
|
447
|
-
[
|
|
466
|
+
[agent?.setMessages, agent],
|
|
448
467
|
);
|
|
449
468
|
|
|
450
|
-
const
|
|
451
|
-
const
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
}, [
|
|
470
|
-
latestStopFunc,
|
|
471
|
-
setMessages,
|
|
472
|
-
setThreadId,
|
|
473
|
-
setCoagentStatesWithRef,
|
|
474
|
-
setAgentSession,
|
|
475
|
-
agentLock,
|
|
476
|
-
resetSuggestions,
|
|
477
|
-
]);
|
|
469
|
+
const latestReload = useUpdatedRef(reload);
|
|
470
|
+
const latestReloadFunc = useAsyncCallback(
|
|
471
|
+
async (messageId: string) => {
|
|
472
|
+
onReloadMessages?.({
|
|
473
|
+
messageId,
|
|
474
|
+
currentAgentName: agent?.agentId,
|
|
475
|
+
messages: agent?.messages ?? [],
|
|
476
|
+
});
|
|
477
|
+
return await latestReload.current(messageId);
|
|
478
|
+
},
|
|
479
|
+
[latestReload, agent, onReloadMessages],
|
|
480
|
+
);
|
|
481
|
+
|
|
482
|
+
const latestStopFunc = useCallback(() => {
|
|
483
|
+
onStopGeneration?.({
|
|
484
|
+
currentAgentName: agent?.agentId,
|
|
485
|
+
messages: agent?.messages ?? [],
|
|
486
|
+
});
|
|
487
|
+
return agent?.abortRun?.();
|
|
488
|
+
}, [onStopGeneration, agent]);
|
|
478
489
|
|
|
479
490
|
const latestReset = useUpdatedRef(reset);
|
|
480
491
|
const latestResetFunc = useCallback(() => {
|
|
481
492
|
return latestReset.current();
|
|
482
493
|
}, [latestReset]);
|
|
483
494
|
|
|
484
|
-
const
|
|
495
|
+
const lazyToolRendered = useLazyToolRenderer();
|
|
496
|
+
const renderCustomMessage = useRenderCustomMessages();
|
|
497
|
+
const legacyCustomMessageRenderer = useLegacyCoagentRenderer({
|
|
498
|
+
copilotkit,
|
|
499
|
+
agent,
|
|
500
|
+
agentId: resolvedAgentId,
|
|
501
|
+
threadId: existingConfig?.threadId ?? threadId,
|
|
502
|
+
});
|
|
503
|
+
const allMessages = agent?.messages ?? [];
|
|
504
|
+
const resolvedMessages = useMemo(() => {
|
|
505
|
+
let processedMessages = allMessages.map((message) => {
|
|
506
|
+
if (message.role !== "assistant") {
|
|
507
|
+
return message;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
const lazyRendered = lazyToolRendered(message, allMessages);
|
|
511
|
+
if (lazyRendered) {
|
|
512
|
+
const renderedGenUi = lazyRendered();
|
|
513
|
+
if (renderedGenUi) {
|
|
514
|
+
return { ...message, generativeUI: () => renderedGenUi };
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
const bridgeRenderer =
|
|
519
|
+
legacyCustomMessageRenderer || renderCustomMessage
|
|
520
|
+
? () => {
|
|
521
|
+
const customRender = renderCustomMessage?.({
|
|
522
|
+
message,
|
|
523
|
+
position: "before",
|
|
524
|
+
});
|
|
525
|
+
if (customRender) {
|
|
526
|
+
return customRender;
|
|
527
|
+
}
|
|
528
|
+
return legacyCustomMessageRenderer?.({ message, position: "before" });
|
|
529
|
+
}
|
|
530
|
+
: null;
|
|
531
|
+
|
|
532
|
+
if (bridgeRenderer) {
|
|
533
|
+
return { ...message, generativeUI: bridgeRenderer };
|
|
534
|
+
}
|
|
535
|
+
return message;
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
const hasAssistantMessages = processedMessages.some((msg) => msg.role === "assistant");
|
|
539
|
+
|
|
540
|
+
// TODO: what is this?
|
|
541
|
+
// if (legacyCustomMessageRenderer && !hasAssistantMessages) {
|
|
542
|
+
// const placeholderId = `coagent-state-render-${resolvedAgentId}`;
|
|
543
|
+
// const placeholderMessage: Message = {
|
|
544
|
+
// id: placeholderId,
|
|
545
|
+
// role: "assistant",
|
|
546
|
+
// content: "",
|
|
547
|
+
// name: "coagent-state-render",
|
|
548
|
+
// };
|
|
549
|
+
// processedMessages = [
|
|
550
|
+
// ...processedMessages,
|
|
551
|
+
// {
|
|
552
|
+
// ...placeholderMessage,
|
|
553
|
+
// generativeUI: () =>
|
|
554
|
+
// legacyCustomMessageRenderer({
|
|
555
|
+
// message: placeholderMessage,
|
|
556
|
+
// position: "before",
|
|
557
|
+
// }),
|
|
558
|
+
// } as Message,
|
|
559
|
+
// ];
|
|
560
|
+
// }
|
|
561
|
+
|
|
562
|
+
return processedMessages;
|
|
563
|
+
}, [
|
|
564
|
+
agent?.messages,
|
|
565
|
+
lazyToolRendered,
|
|
566
|
+
allMessages,
|
|
567
|
+
renderCustomMessage,
|
|
568
|
+
// legacyCustomMessageRenderer,
|
|
569
|
+
resolvedAgentId,
|
|
570
|
+
]);
|
|
485
571
|
|
|
572
|
+
const renderedSuggestions = useMemo(() => {
|
|
573
|
+
if (Array.isArray(suggestions)) {
|
|
574
|
+
return {
|
|
575
|
+
suggestions: suggestions.map((s) => ({ ...s, isLoading: false })),
|
|
576
|
+
isLoading: false,
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
return currentSuggestions;
|
|
580
|
+
}, [suggestions, currentSuggestions]);
|
|
581
|
+
|
|
582
|
+
// @ts-ignore
|
|
486
583
|
return {
|
|
487
|
-
|
|
488
|
-
messages: gqlToAGUI(messages, actions, coAgentStateRenders),
|
|
584
|
+
messages: resolvedMessages,
|
|
489
585
|
sendMessage: latestSendMessageFunc,
|
|
490
586
|
appendMessage: latestAppendFunc,
|
|
491
587
|
setMessages: latestSetMessagesFunc,
|
|
@@ -493,16 +589,19 @@ export function useCopilotChat(options: UseCopilotChatOptions = {}): UseCopilotC
|
|
|
493
589
|
stopGeneration: latestStopFunc,
|
|
494
590
|
reset: latestResetFunc,
|
|
495
591
|
deleteMessage: latestDeleteFunc,
|
|
496
|
-
|
|
497
|
-
isLoading,
|
|
498
|
-
mcpServers,
|
|
499
|
-
setMcpServers,
|
|
500
|
-
suggestions,
|
|
501
|
-
setSuggestions,
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
592
|
+
isAvailable: agentAvailable,
|
|
593
|
+
isLoading: Boolean(agent?.isRunning),
|
|
594
|
+
// mcpServers,
|
|
595
|
+
// setMcpServers,
|
|
596
|
+
suggestions: renderedSuggestions.suggestions,
|
|
597
|
+
setSuggestions: (suggestions: Omit<Suggestion, "isLoading">[]) =>
|
|
598
|
+
copilotkit.addSuggestionsConfig({ suggestions }),
|
|
599
|
+
generateSuggestions: async () => copilotkit.reloadSuggestions(resolvedAgentId),
|
|
600
|
+
resetSuggestions: () => copilotkit.clearSuggestions(resolvedAgentId),
|
|
601
|
+
isLoadingSuggestions: renderedSuggestions.isLoading,
|
|
505
602
|
interrupt,
|
|
603
|
+
agent,
|
|
604
|
+
threadId,
|
|
506
605
|
};
|
|
507
606
|
}
|
|
508
607
|
|
|
@@ -518,6 +617,54 @@ function useUpdatedRef<T>(value: T) {
|
|
|
518
617
|
return ref;
|
|
519
618
|
}
|
|
520
619
|
|
|
620
|
+
type LegacyRenderParams = {
|
|
621
|
+
message: Message;
|
|
622
|
+
position: "before" | "after";
|
|
623
|
+
};
|
|
624
|
+
|
|
625
|
+
type LegacyRenderer = ((args: LegacyRenderParams) => any) | null;
|
|
626
|
+
|
|
627
|
+
function useLegacyCoagentRenderer({
|
|
628
|
+
copilotkit,
|
|
629
|
+
agent,
|
|
630
|
+
agentId,
|
|
631
|
+
threadId,
|
|
632
|
+
}: {
|
|
633
|
+
copilotkit: ReturnType<typeof useCopilotKit>["copilotkit"];
|
|
634
|
+
agent?: AbstractAgent;
|
|
635
|
+
agentId: string;
|
|
636
|
+
threadId?: string;
|
|
637
|
+
}): LegacyRenderer {
|
|
638
|
+
return useMemo(() => {
|
|
639
|
+
if (!copilotkit || !agent) {
|
|
640
|
+
return null;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
return ({ message, position }: LegacyRenderParams) => {
|
|
644
|
+
const effectiveThreadId = threadId ?? agent.threadId ?? "default";
|
|
645
|
+
const existingRunId = copilotkit.getRunIdForMessage(agentId, effectiveThreadId, message.id);
|
|
646
|
+
const runId = existingRunId || `pending:${message.id}`;
|
|
647
|
+
const messageIndex = Math.max(
|
|
648
|
+
agent.messages.findIndex((msg) => msg.id === message.id),
|
|
649
|
+
0,
|
|
650
|
+
);
|
|
651
|
+
|
|
652
|
+
const bridgeProps: CoAgentStateRenderBridgeProps = {
|
|
653
|
+
message: message as any,
|
|
654
|
+
position,
|
|
655
|
+
runId,
|
|
656
|
+
messageIndex,
|
|
657
|
+
messageIndexInRun: 0,
|
|
658
|
+
numberOfMessagesInRun: 1,
|
|
659
|
+
agentId,
|
|
660
|
+
stateSnapshot: (message as any).state,
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
return createElement(CoAgentStateRenderBridge, bridgeProps) as any;
|
|
664
|
+
};
|
|
665
|
+
}, [agent, agentId, copilotkit, threadId]);
|
|
666
|
+
}
|
|
667
|
+
|
|
521
668
|
export function defaultSystemMessage(
|
|
522
669
|
contextString: string,
|
|
523
670
|
additionalInstructions?: string,
|