@copilotkitnext/react 0.0.22-alpha.3 → 0.0.22-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/{chunk-3TA5QBSZ.mjs → chunk-7HM7CU5A.mjs} +2 -2
  2. package/dist/{chunk-VUHFLJWI.mjs → chunk-BNT754Z2.mjs} +2 -2
  3. package/dist/{chunk-TKFOXPXF.mjs → chunk-CDSO65ZY.mjs} +5 -5
  4. package/dist/{chunk-IH5VFJ4L.mjs → chunk-GK4NXPLC.mjs} +4 -4
  5. package/dist/{chunk-F43IPGPA.mjs → chunk-N5HC66HU.mjs} +5 -5
  6. package/dist/{chunk-QFBM3ZT2.mjs → chunk-TBE7ZI5G.mjs} +4 -4
  7. package/dist/components/chat/CopilotChat.mjs +21 -21
  8. package/dist/components/chat/CopilotChatAssistantMessage.mjs +13 -13
  9. package/dist/components/chat/CopilotChatInput.mjs +3 -3
  10. package/dist/components/chat/CopilotChatMessageView.mjs +14 -14
  11. package/dist/components/chat/CopilotChatToolCallsView.mjs +12 -12
  12. package/dist/components/chat/CopilotChatView.d.mts +1 -1
  13. package/dist/components/chat/CopilotChatView.d.ts +1 -1
  14. package/dist/components/chat/CopilotChatView.mjs +20 -20
  15. package/dist/components/chat/CopilotModalHeader.d.mts +1 -1
  16. package/dist/components/chat/CopilotModalHeader.d.ts +1 -1
  17. package/dist/components/chat/CopilotPopup.mjs +24 -24
  18. package/dist/components/chat/CopilotPopupView.mjs +22 -22
  19. package/dist/components/chat/CopilotSidebar.mjs +24 -24
  20. package/dist/components/chat/CopilotSidebarView.mjs +22 -22
  21. package/dist/components/chat/index.mjs +37 -37
  22. package/dist/components/index.mjs +38 -38
  23. package/dist/components/ui/button.d.mts +1 -1
  24. package/dist/components/ui/button.d.ts +1 -1
  25. package/dist/hooks/index.mjs +20 -20
  26. package/dist/hooks/use-agent-context.mjs +3 -3
  27. package/dist/hooks/use-agent.mjs +3 -3
  28. package/dist/hooks/use-configure-suggestions.mjs +3 -3
  29. package/dist/hooks/use-frontend-tool.mjs +3 -3
  30. package/dist/hooks/use-human-in-the-loop.mjs +4 -4
  31. package/dist/hooks/use-render-activity-message.mjs +3 -3
  32. package/dist/hooks/use-render-custom-messages.mjs +3 -3
  33. package/dist/hooks/use-render-tool-call.mjs +3 -3
  34. package/dist/hooks/use-suggestions.mjs +3 -3
  35. package/dist/index.mjs +51 -51
  36. package/dist/providers/CopilotKitProvider.mjs +2 -2
  37. package/dist/providers/index.mjs +2 -2
  38. package/dist/types/index.mjs +2 -2
  39. package/package.json +6 -6
  40. package/dist/chunk-5AAT4Z3C.mjs +0 -107
  41. package/dist/chunk-5AAT4Z3C.mjs.map +0 -1
  42. package/dist/chunk-CSHBUHRW.mjs +0 -69
  43. package/dist/chunk-CSHBUHRW.mjs.map +0 -1
  44. package/dist/chunk-CZ3GI3IF.mjs +0 -283
  45. package/dist/chunk-CZ3GI3IF.mjs.map +0 -1
  46. package/dist/chunk-E4HD4M7R.mjs +0 -76
  47. package/dist/chunk-E4HD4M7R.mjs.map +0 -1
  48. package/dist/chunk-EJ5ZEAAN.mjs +0 -57
  49. package/dist/chunk-EJ5ZEAAN.mjs.map +0 -1
  50. package/dist/chunk-NASFZS3N.mjs +0 -43
  51. package/dist/chunk-NASFZS3N.mjs.map +0 -1
  52. package/dist/chunk-QJ6DZ645.mjs +0 -78
  53. package/dist/chunk-QJ6DZ645.mjs.map +0 -1
  54. package/dist/chunk-VE3SBLU7.mjs +0 -215
  55. package/dist/chunk-VE3SBLU7.mjs.map +0 -1
  56. package/dist/chunk-W5DUKRCI.mjs +0 -97
  57. package/dist/chunk-W5DUKRCI.mjs.map +0 -1
  58. package/dist/chunk-WNRDFAZ5.mjs +0 -22
  59. package/dist/chunk-WNRDFAZ5.mjs.map +0 -1
  60. package/dist/chunk-YVPPF62K.mjs +0 -32
  61. package/dist/chunk-YVPPF62K.mjs.map +0 -1
  62. package/dist/chunk-Z3OIGQCZ.mjs +0 -75
  63. package/dist/chunk-Z3OIGQCZ.mjs.map +0 -1
  64. package/dist/chunk-ZIDT52TM.mjs +0 -131
  65. package/dist/chunk-ZIDT52TM.mjs.map +0 -1
  66. /package/dist/{chunk-3TA5QBSZ.mjs.map → chunk-7HM7CU5A.mjs.map} +0 -0
  67. /package/dist/{chunk-VUHFLJWI.mjs.map → chunk-BNT754Z2.mjs.map} +0 -0
  68. /package/dist/{chunk-TKFOXPXF.mjs.map → chunk-CDSO65ZY.mjs.map} +0 -0
  69. /package/dist/{chunk-IH5VFJ4L.mjs.map → chunk-GK4NXPLC.mjs.map} +0 -0
  70. /package/dist/{chunk-F43IPGPA.mjs.map → chunk-N5HC66HU.mjs.map} +0 -0
  71. /package/dist/{chunk-QFBM3ZT2.mjs.map → chunk-TBE7ZI5G.mjs.map} +0 -0
@@ -1,283 +0,0 @@
1
- import {
2
- CopilotChatToolCallsView_default
3
- } from "./chunk-YVPPF62K.mjs";
4
- import {
5
- Button
6
- } from "./chunk-TAUOEJH2.mjs";
7
- import {
8
- Tooltip,
9
- TooltipContent,
10
- TooltipTrigger
11
- } from "./chunk-VVAXSF3M.mjs";
12
- import {
13
- renderSlot
14
- } from "./chunk-FIBK3DYE.mjs";
15
- import {
16
- CopilotChatDefaultLabels,
17
- useCopilotChatConfiguration
18
- } from "./chunk-4XJK5IVQ.mjs";
19
-
20
- // src/components/chat/CopilotChatAssistantMessage.tsx
21
- import { useState } from "react";
22
- import {
23
- Copy,
24
- Check,
25
- ThumbsUp,
26
- ThumbsDown,
27
- Volume2,
28
- RefreshCw
29
- } from "lucide-react";
30
- import { twMerge } from "tailwind-merge";
31
- import "katex/dist/katex.min.css";
32
- import { Streamdown } from "streamdown";
33
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
34
- function CopilotChatAssistantMessage({
35
- message,
36
- messages,
37
- isRunning,
38
- onThumbsUp,
39
- onThumbsDown,
40
- onReadAloud,
41
- onRegenerate,
42
- additionalToolbarItems,
43
- toolbarVisible = true,
44
- markdownRenderer,
45
- toolbar,
46
- copyButton,
47
- thumbsUpButton,
48
- thumbsDownButton,
49
- readAloudButton,
50
- regenerateButton,
51
- toolCallsView,
52
- children,
53
- className,
54
- ...props
55
- }) {
56
- const boundMarkdownRenderer = renderSlot(
57
- markdownRenderer,
58
- CopilotChatAssistantMessage.MarkdownRenderer,
59
- {
60
- content: message.content || ""
61
- }
62
- );
63
- const boundCopyButton = renderSlot(
64
- copyButton,
65
- CopilotChatAssistantMessage.CopyButton,
66
- {
67
- onClick: async () => {
68
- if (message.content) {
69
- try {
70
- await navigator.clipboard.writeText(message.content);
71
- } catch (err) {
72
- console.error("Failed to copy message:", err);
73
- }
74
- }
75
- }
76
- }
77
- );
78
- const boundThumbsUpButton = renderSlot(
79
- thumbsUpButton,
80
- CopilotChatAssistantMessage.ThumbsUpButton,
81
- {
82
- onClick: onThumbsUp
83
- }
84
- );
85
- const boundThumbsDownButton = renderSlot(
86
- thumbsDownButton,
87
- CopilotChatAssistantMessage.ThumbsDownButton,
88
- {
89
- onClick: onThumbsDown
90
- }
91
- );
92
- const boundReadAloudButton = renderSlot(
93
- readAloudButton,
94
- CopilotChatAssistantMessage.ReadAloudButton,
95
- {
96
- onClick: onReadAloud
97
- }
98
- );
99
- const boundRegenerateButton = renderSlot(
100
- regenerateButton,
101
- CopilotChatAssistantMessage.RegenerateButton,
102
- {
103
- onClick: onRegenerate
104
- }
105
- );
106
- const boundToolbar = renderSlot(
107
- toolbar,
108
- CopilotChatAssistantMessage.Toolbar,
109
- {
110
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
111
- boundCopyButton,
112
- (onThumbsUp || thumbsUpButton) && boundThumbsUpButton,
113
- (onThumbsDown || thumbsDownButton) && boundThumbsDownButton,
114
- (onReadAloud || readAloudButton) && boundReadAloudButton,
115
- (onRegenerate || regenerateButton) && boundRegenerateButton,
116
- additionalToolbarItems
117
- ] })
118
- }
119
- );
120
- const boundToolCallsView = renderSlot(
121
- toolCallsView,
122
- CopilotChatToolCallsView_default,
123
- {
124
- message,
125
- messages
126
- }
127
- );
128
- const hasContent = !!(message.content && message.content.trim().length > 0);
129
- const isLatestAssistantMessage = message.role === "assistant" && messages?.[messages.length - 1]?.id === message.id;
130
- const shouldShowToolbar = toolbarVisible && hasContent && !(isRunning && isLatestAssistantMessage);
131
- if (children) {
132
- return /* @__PURE__ */ jsx(Fragment, { children: children({
133
- markdownRenderer: boundMarkdownRenderer,
134
- toolbar: boundToolbar,
135
- toolCallsView: boundToolCallsView,
136
- copyButton: boundCopyButton,
137
- thumbsUpButton: boundThumbsUpButton,
138
- thumbsDownButton: boundThumbsDownButton,
139
- readAloudButton: boundReadAloudButton,
140
- regenerateButton: boundRegenerateButton,
141
- message,
142
- messages,
143
- isRunning,
144
- onThumbsUp,
145
- onThumbsDown,
146
- onReadAloud,
147
- onRegenerate,
148
- additionalToolbarItems,
149
- toolbarVisible: shouldShowToolbar
150
- }) });
151
- }
152
- return /* @__PURE__ */ jsxs(
153
- "div",
154
- {
155
- className: twMerge(
156
- "prose max-w-full break-words dark:prose-invert",
157
- className
158
- ),
159
- ...props,
160
- "data-message-id": message.id,
161
- children: [
162
- boundMarkdownRenderer,
163
- boundToolCallsView,
164
- shouldShowToolbar && boundToolbar
165
- ]
166
- }
167
- );
168
- }
169
- ((CopilotChatAssistantMessage2) => {
170
- CopilotChatAssistantMessage2.MarkdownRenderer = ({ content, className, ...props }) => /* @__PURE__ */ jsx(Streamdown, { className, ...props, children: content ?? "" });
171
- CopilotChatAssistantMessage2.Toolbar = ({
172
- className,
173
- ...props
174
- }) => /* @__PURE__ */ jsx(
175
- "div",
176
- {
177
- className: twMerge(
178
- "w-full bg-transparent flex items-center -ml-[5px] -mt-[0px]",
179
- className
180
- ),
181
- ...props
182
- }
183
- );
184
- CopilotChatAssistantMessage2.ToolbarButton = ({ title, children, ...props }) => {
185
- return /* @__PURE__ */ jsxs(Tooltip, { children: [
186
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
187
- Button,
188
- {
189
- type: "button",
190
- variant: "assistantMessageToolbarButton",
191
- "aria-label": title,
192
- ...props,
193
- children
194
- }
195
- ) }),
196
- /* @__PURE__ */ jsx(TooltipContent, { side: "bottom", children: /* @__PURE__ */ jsx("p", { children: title }) })
197
- ] });
198
- };
199
- CopilotChatAssistantMessage2.CopyButton = ({ className, title, onClick, ...props }) => {
200
- const config = useCopilotChatConfiguration();
201
- const labels = config?.labels ?? CopilotChatDefaultLabels;
202
- const [copied, setCopied] = useState(false);
203
- const handleClick = (event) => {
204
- setCopied(true);
205
- setTimeout(() => setCopied(false), 2e3);
206
- if (onClick) {
207
- onClick(event);
208
- }
209
- };
210
- return /* @__PURE__ */ jsx(
211
- CopilotChatAssistantMessage2.ToolbarButton,
212
- {
213
- title: title || labels.assistantMessageToolbarCopyMessageLabel,
214
- onClick: handleClick,
215
- className,
216
- ...props,
217
- children: copied ? /* @__PURE__ */ jsx(Check, { className: "size-[18px]" }) : /* @__PURE__ */ jsx(Copy, { className: "size-[18px]" })
218
- }
219
- );
220
- };
221
- CopilotChatAssistantMessage2.ThumbsUpButton = ({ title, ...props }) => {
222
- const config = useCopilotChatConfiguration();
223
- const labels = config?.labels ?? CopilotChatDefaultLabels;
224
- return /* @__PURE__ */ jsx(
225
- CopilotChatAssistantMessage2.ToolbarButton,
226
- {
227
- title: title || labels.assistantMessageToolbarThumbsUpLabel,
228
- ...props,
229
- children: /* @__PURE__ */ jsx(ThumbsUp, { className: "size-[18px]" })
230
- }
231
- );
232
- };
233
- CopilotChatAssistantMessage2.ThumbsDownButton = ({ title, ...props }) => {
234
- const config = useCopilotChatConfiguration();
235
- const labels = config?.labels ?? CopilotChatDefaultLabels;
236
- return /* @__PURE__ */ jsx(
237
- CopilotChatAssistantMessage2.ToolbarButton,
238
- {
239
- title: title || labels.assistantMessageToolbarThumbsDownLabel,
240
- ...props,
241
- children: /* @__PURE__ */ jsx(ThumbsDown, { className: "size-[18px]" })
242
- }
243
- );
244
- };
245
- CopilotChatAssistantMessage2.ReadAloudButton = ({ title, ...props }) => {
246
- const config = useCopilotChatConfiguration();
247
- const labels = config?.labels ?? CopilotChatDefaultLabels;
248
- return /* @__PURE__ */ jsx(
249
- CopilotChatAssistantMessage2.ToolbarButton,
250
- {
251
- title: title || labels.assistantMessageToolbarReadAloudLabel,
252
- ...props,
253
- children: /* @__PURE__ */ jsx(Volume2, { className: "size-[20px]" })
254
- }
255
- );
256
- };
257
- CopilotChatAssistantMessage2.RegenerateButton = ({ title, ...props }) => {
258
- const config = useCopilotChatConfiguration();
259
- const labels = config?.labels ?? CopilotChatDefaultLabels;
260
- return /* @__PURE__ */ jsx(
261
- CopilotChatAssistantMessage2.ToolbarButton,
262
- {
263
- title: title || labels.assistantMessageToolbarRegenerateLabel,
264
- ...props,
265
- children: /* @__PURE__ */ jsx(RefreshCw, { className: "size-[18px]" })
266
- }
267
- );
268
- };
269
- })(CopilotChatAssistantMessage || (CopilotChatAssistantMessage = {}));
270
- CopilotChatAssistantMessage.MarkdownRenderer.displayName = "CopilotChatAssistantMessage.MarkdownRenderer";
271
- CopilotChatAssistantMessage.Toolbar.displayName = "CopilotChatAssistantMessage.Toolbar";
272
- CopilotChatAssistantMessage.CopyButton.displayName = "CopilotChatAssistantMessage.CopyButton";
273
- CopilotChatAssistantMessage.ThumbsUpButton.displayName = "CopilotChatAssistantMessage.ThumbsUpButton";
274
- CopilotChatAssistantMessage.ThumbsDownButton.displayName = "CopilotChatAssistantMessage.ThumbsDownButton";
275
- CopilotChatAssistantMessage.ReadAloudButton.displayName = "CopilotChatAssistantMessage.ReadAloudButton";
276
- CopilotChatAssistantMessage.RegenerateButton.displayName = "CopilotChatAssistantMessage.RegenerateButton";
277
- var CopilotChatAssistantMessage_default = CopilotChatAssistantMessage;
278
-
279
- export {
280
- CopilotChatAssistantMessage,
281
- CopilotChatAssistantMessage_default
282
- };
283
- //# sourceMappingURL=chunk-CZ3GI3IF.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/chat/CopilotChatAssistantMessage.tsx"],"sourcesContent":["import { AssistantMessage, Message } from \"@ag-ui/core\";\nimport { useState } from \"react\";\nimport {\n Copy,\n Check,\n ThumbsUp,\n ThumbsDown,\n Volume2,\n RefreshCw,\n} from \"lucide-react\";\nimport {\n useCopilotChatConfiguration,\n CopilotChatDefaultLabels,\n} from \"@/providers/CopilotChatConfigurationProvider\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport \"katex/dist/katex.min.css\";\nimport { WithSlots, renderSlot } from \"@/lib/slots\";\nimport { Streamdown } from \"streamdown\";\nimport CopilotChatToolCallsView from \"./CopilotChatToolCallsView\";\n\nexport type CopilotChatAssistantMessageProps = WithSlots<\n {\n markdownRenderer: typeof CopilotChatAssistantMessage.MarkdownRenderer;\n toolbar: typeof CopilotChatAssistantMessage.Toolbar;\n copyButton: typeof CopilotChatAssistantMessage.CopyButton;\n thumbsUpButton: typeof CopilotChatAssistantMessage.ThumbsUpButton;\n thumbsDownButton: typeof CopilotChatAssistantMessage.ThumbsDownButton;\n readAloudButton: typeof CopilotChatAssistantMessage.ReadAloudButton;\n regenerateButton: typeof CopilotChatAssistantMessage.RegenerateButton;\n toolCallsView: typeof CopilotChatToolCallsView;\n },\n {\n onThumbsUp?: (message: AssistantMessage) => void;\n onThumbsDown?: (message: AssistantMessage) => void;\n onReadAloud?: (message: AssistantMessage) => void;\n onRegenerate?: (message: AssistantMessage) => void;\n message: AssistantMessage;\n messages?: Message[];\n isRunning?: boolean;\n additionalToolbarItems?: React.ReactNode;\n toolbarVisible?: boolean;\n } & React.HTMLAttributes<HTMLDivElement>\n>;\n\nexport function CopilotChatAssistantMessage({\n message,\n messages,\n isRunning,\n onThumbsUp,\n onThumbsDown,\n onReadAloud,\n onRegenerate,\n additionalToolbarItems,\n toolbarVisible = true,\n markdownRenderer,\n toolbar,\n copyButton,\n thumbsUpButton,\n thumbsDownButton,\n readAloudButton,\n regenerateButton,\n toolCallsView,\n children,\n className,\n ...props\n}: CopilotChatAssistantMessageProps) {\n const boundMarkdownRenderer = renderSlot(\n markdownRenderer,\n CopilotChatAssistantMessage.MarkdownRenderer,\n {\n content: message.content || \"\",\n \n }\n );\n\n const boundCopyButton = renderSlot(\n copyButton,\n CopilotChatAssistantMessage.CopyButton,\n {\n onClick: async () => {\n if (message.content) {\n try {\n await navigator.clipboard.writeText(message.content);\n } catch (err) {\n console.error(\"Failed to copy message:\", err);\n }\n }\n },\n }\n );\n\n const boundThumbsUpButton = renderSlot(\n thumbsUpButton,\n CopilotChatAssistantMessage.ThumbsUpButton,\n {\n onClick: onThumbsUp,\n }\n );\n\n const boundThumbsDownButton = renderSlot(\n thumbsDownButton,\n CopilotChatAssistantMessage.ThumbsDownButton,\n {\n onClick: onThumbsDown,\n }\n );\n\n const boundReadAloudButton = renderSlot(\n readAloudButton,\n CopilotChatAssistantMessage.ReadAloudButton,\n {\n onClick: onReadAloud,\n }\n );\n\n const boundRegenerateButton = renderSlot(\n regenerateButton,\n CopilotChatAssistantMessage.RegenerateButton,\n {\n onClick: onRegenerate,\n }\n );\n\n const boundToolbar = renderSlot(\n toolbar,\n CopilotChatAssistantMessage.Toolbar,\n {\n children: (\n <div className=\"flex items-center gap-1\">\n {boundCopyButton}\n {(onThumbsUp || thumbsUpButton) && boundThumbsUpButton}\n {(onThumbsDown || thumbsDownButton) && boundThumbsDownButton}\n {(onReadAloud || readAloudButton) && boundReadAloudButton}\n {(onRegenerate || regenerateButton) && boundRegenerateButton}\n {additionalToolbarItems}\n </div>\n ),\n }\n );\n\n const boundToolCallsView = renderSlot(\n toolCallsView,\n CopilotChatToolCallsView,\n {\n message,\n messages,\n }\n );\n\n // Don't show toolbar if message has no content (only tool calls)\n const hasContent = !!(message.content && message.content.trim().length > 0);\n const isLatestAssistantMessage =\n message.role === \"assistant\" && messages?.[messages.length - 1]?.id === message.id;\n const shouldShowToolbar = toolbarVisible && hasContent && !(isRunning && isLatestAssistantMessage);\n\n if (children) {\n return (\n <>\n {children({\n markdownRenderer: boundMarkdownRenderer,\n toolbar: boundToolbar,\n toolCallsView: boundToolCallsView,\n copyButton: boundCopyButton,\n thumbsUpButton: boundThumbsUpButton,\n thumbsDownButton: boundThumbsDownButton,\n readAloudButton: boundReadAloudButton,\n regenerateButton: boundRegenerateButton,\n message,\n messages,\n isRunning,\n onThumbsUp,\n onThumbsDown,\n onReadAloud,\n onRegenerate,\n additionalToolbarItems,\n toolbarVisible: shouldShowToolbar,\n })}\n </>\n );\n }\n\n return (\n <div\n className={twMerge(\n \"prose max-w-full break-words dark:prose-invert\",\n className\n )}\n {...props}\n data-message-id={message.id}\n >\n {boundMarkdownRenderer}\n {boundToolCallsView}\n {shouldShowToolbar && boundToolbar}\n </div>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace CopilotChatAssistantMessage {\n export const MarkdownRenderer: React.FC<\n Omit<React.ComponentProps<typeof Streamdown>, \"children\"> & {\n content: string;\n }\n > = ({ content, className, ...props }) => (\n <Streamdown className={className} {...props}>\n {content ?? \"\"}\n </Streamdown>\n );\n\n export const Toolbar: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n }) => (\n <div\n className={twMerge(\n \"w-full bg-transparent flex items-center -ml-[5px] -mt-[0px]\",\n className\n )}\n {...props}\n />\n );\n\n export const ToolbarButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n title: string;\n children: React.ReactNode;\n }\n > = ({ title, children, ...props }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"assistantMessageToolbarButton\"\n aria-label={title}\n {...props}\n >\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <p>{title}</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n export const CopyButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement>\n > = ({ className, title, onClick, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n const [copied, setCopied] = useState(false);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n\n if (onClick) {\n onClick(event);\n }\n };\n\n return (\n <ToolbarButton\n title={title || labels.assistantMessageToolbarCopyMessageLabel}\n onClick={handleClick}\n className={className}\n {...props}\n >\n {copied ? (\n <Check className=\"size-[18px]\" />\n ) : (\n <Copy className=\"size-[18px]\" />\n )}\n </ToolbarButton>\n );\n };\n\n export const ThumbsUpButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement>\n > = ({ title, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n return (\n <ToolbarButton\n title={title || labels.assistantMessageToolbarThumbsUpLabel}\n {...props}\n >\n <ThumbsUp className=\"size-[18px]\" />\n </ToolbarButton>\n );\n };\n\n export const ThumbsDownButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement>\n > = ({ title, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n return (\n <ToolbarButton\n title={title || labels.assistantMessageToolbarThumbsDownLabel}\n {...props}\n >\n <ThumbsDown className=\"size-[18px]\" />\n </ToolbarButton>\n );\n };\n\n export const ReadAloudButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement>\n > = ({ title, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n return (\n <ToolbarButton\n title={title || labels.assistantMessageToolbarReadAloudLabel}\n {...props}\n >\n <Volume2 className=\"size-[20px]\" />\n </ToolbarButton>\n );\n };\n\n export const RegenerateButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement>\n > = ({ title, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n return (\n <ToolbarButton\n title={title || labels.assistantMessageToolbarRegenerateLabel}\n {...props}\n >\n <RefreshCw className=\"size-[18px]\" />\n </ToolbarButton>\n );\n };\n}\n\nCopilotChatAssistantMessage.MarkdownRenderer.displayName =\n \"CopilotChatAssistantMessage.MarkdownRenderer\";\nCopilotChatAssistantMessage.Toolbar.displayName =\n \"CopilotChatAssistantMessage.Toolbar\";\nCopilotChatAssistantMessage.CopyButton.displayName =\n \"CopilotChatAssistantMessage.CopyButton\";\nCopilotChatAssistantMessage.ThumbsUpButton.displayName =\n \"CopilotChatAssistantMessage.ThumbsUpButton\";\nCopilotChatAssistantMessage.ThumbsDownButton.displayName =\n \"CopilotChatAssistantMessage.ThumbsDownButton\";\nCopilotChatAssistantMessage.ReadAloudButton.displayName =\n \"CopilotChatAssistantMessage.ReadAloudButton\";\nCopilotChatAssistantMessage.RegenerateButton.displayName =\n \"CopilotChatAssistantMessage.RegenerateButton\";\n\nexport default CopilotChatAssistantMessage;\n"],"mappings":"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","names":["CopilotChatAssistantMessage"]}
@@ -1,76 +0,0 @@
1
- import {
2
- useCopilotKit
3
- } from "./chunk-VE3SBLU7.mjs";
4
-
5
- // src/hooks/use-agent.tsx
6
- import { useMemo, useEffect, useReducer } from "react";
7
- import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
8
- var UseAgentUpdate = /* @__PURE__ */ ((UseAgentUpdate2) => {
9
- UseAgentUpdate2["OnMessagesChanged"] = "OnMessagesChanged";
10
- UseAgentUpdate2["OnStateChanged"] = "OnStateChanged";
11
- UseAgentUpdate2["OnRunStatusChanged"] = "OnRunStatusChanged";
12
- return UseAgentUpdate2;
13
- })(UseAgentUpdate || {});
14
- var ALL_UPDATES = [
15
- "OnMessagesChanged" /* OnMessagesChanged */,
16
- "OnStateChanged" /* OnStateChanged */,
17
- "OnRunStatusChanged" /* OnRunStatusChanged */
18
- ];
19
- function useAgent({ agentId, updates } = {}) {
20
- agentId ??= DEFAULT_AGENT_ID;
21
- const { copilotkit } = useCopilotKit();
22
- const [, forceUpdate] = useReducer((x) => x + 1, 0);
23
- const updateFlags = useMemo(
24
- () => updates ?? ALL_UPDATES,
25
- [JSON.stringify(updates)]
26
- );
27
- const agent = useMemo(() => {
28
- return copilotkit.getAgent(agentId);
29
- }, [
30
- agentId,
31
- copilotkit.agents,
32
- copilotkit.runtimeConnectionStatus,
33
- copilotkit
34
- ]);
35
- useEffect(() => {
36
- if (!agent) {
37
- return;
38
- }
39
- if (updateFlags.length === 0) {
40
- return;
41
- }
42
- const handlers = {};
43
- if (updateFlags.includes("OnMessagesChanged" /* OnMessagesChanged */)) {
44
- handlers.onMessagesChanged = () => {
45
- forceUpdate();
46
- };
47
- }
48
- if (updateFlags.includes("OnStateChanged" /* OnStateChanged */)) {
49
- handlers.onStateChanged = () => {
50
- forceUpdate();
51
- };
52
- }
53
- if (updateFlags.includes("OnRunStatusChanged" /* OnRunStatusChanged */)) {
54
- handlers.onRunInitialized = () => {
55
- forceUpdate();
56
- };
57
- handlers.onRunFinalized = () => {
58
- forceUpdate();
59
- };
60
- handlers.onRunFailed = () => {
61
- forceUpdate();
62
- };
63
- }
64
- const subscription = agent.subscribe(handlers);
65
- return () => subscription.unsubscribe();
66
- }, [agent, forceUpdate, JSON.stringify(updateFlags)]);
67
- return {
68
- agent
69
- };
70
- }
71
-
72
- export {
73
- UseAgentUpdate,
74
- useAgent
75
- };
76
- //# sourceMappingURL=chunk-E4HD4M7R.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-agent.tsx"],"sourcesContent":["import { useCopilotKit } from \"@/providers/CopilotKitProvider\";\nimport { useMemo, useEffect, useReducer } from \"react\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\n\nexport enum UseAgentUpdate {\n OnMessagesChanged = \"OnMessagesChanged\",\n OnStateChanged = \"OnStateChanged\",\n OnRunStatusChanged = \"OnRunStatusChanged\",\n}\n\nconst ALL_UPDATES: UseAgentUpdate[] = [\n UseAgentUpdate.OnMessagesChanged,\n UseAgentUpdate.OnStateChanged,\n UseAgentUpdate.OnRunStatusChanged,\n];\n\nexport interface UseAgentProps {\n agentId?: string;\n updates?: UseAgentUpdate[];\n}\n\nexport function useAgent({ agentId, updates }: UseAgentProps = {}) {\n agentId ??= DEFAULT_AGENT_ID;\n\n const { copilotkit } = useCopilotKit();\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n const updateFlags = useMemo(\n () => updates ?? ALL_UPDATES,\n [JSON.stringify(updates)]\n );\n\n const agent: AbstractAgent | undefined = useMemo(() => {\n return copilotkit.getAgent(agentId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n agentId,\n copilotkit.agents,\n copilotkit.runtimeConnectionStatus,\n copilotkit,\n ]);\n\n useEffect(() => {\n if (!agent) {\n return;\n }\n\n if (updateFlags.length === 0) {\n return;\n }\n\n const handlers: Parameters<AbstractAgent[\"subscribe\"]>[0] = {};\n\n if (updateFlags.includes(UseAgentUpdate.OnMessagesChanged)) {\n handlers.onMessagesChanged = () => {\n forceUpdate();\n };\n }\n\n if (updateFlags.includes(UseAgentUpdate.OnStateChanged)) {\n handlers.onStateChanged = () => {\n forceUpdate();\n };\n }\n\n if (updateFlags.includes(UseAgentUpdate.OnRunStatusChanged)) {\n handlers.onRunInitialized = () => {\n forceUpdate();\n };\n handlers.onRunFinalized = () => {\n forceUpdate();\n };\n handlers.onRunFailed = () => {\n forceUpdate();\n };\n }\n\n const subscription = agent.subscribe(handlers);\n return () => subscription.unsubscribe();\n }, [agent, forceUpdate, JSON.stringify(updateFlags)]);\n\n return {\n agent,\n };\n}\n"],"mappings":";;;;;AACA,SAAS,SAAS,WAAW,kBAAkB;AAC/C,SAAS,wBAAwB;AAG1B,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,uBAAoB;AACpB,EAAAA,gBAAA,oBAAiB;AACjB,EAAAA,gBAAA,wBAAqB;AAHX,SAAAA;AAAA,GAAA;AAMZ,IAAM,cAAgC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF;AAOO,SAAS,SAAS,EAAE,SAAS,QAAQ,IAAmB,CAAC,GAAG;AACjE,cAAY;AAEZ,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,GAAG,CAAC;AAElD,QAAM,cAAc;AAAA,IAClB,MAAM,WAAW;AAAA,IACjB,CAAC,KAAK,UAAU,OAAO,CAAC;AAAA,EAC1B;AAEA,QAAM,QAAmC,QAAQ,MAAM;AACrD,WAAO,WAAW,SAAS,OAAO;AAAA,EAEpC,GAAG;AAAA,IACD;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,QAAI,YAAY,WAAW,GAAG;AAC5B;AAAA,IACF;AAEA,UAAM,WAAsD,CAAC;AAE7D,QAAI,YAAY,SAAS,2CAAgC,GAAG;AAC1D,eAAS,oBAAoB,MAAM;AACjC,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,YAAY,SAAS,qCAA6B,GAAG;AACvD,eAAS,iBAAiB,MAAM;AAC9B,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,YAAY,SAAS,6CAAiC,GAAG;AAC3D,eAAS,mBAAmB,MAAM;AAChC,oBAAY;AAAA,MACd;AACA,eAAS,iBAAiB,MAAM;AAC9B,oBAAY;AAAA,MACd;AACA,eAAS,cAAc,MAAM;AAC3B,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,UAAU,QAAQ;AAC7C,WAAO,MAAM,aAAa,YAAY;AAAA,EACxC,GAAG,CAAC,OAAO,aAAa,KAAK,UAAU,WAAW,CAAC,CAAC;AAEpD,SAAO;AAAA,IACL;AAAA,EACF;AACF;","names":["UseAgentUpdate"]}
@@ -1,57 +0,0 @@
1
- import {
2
- useCopilotChatConfiguration
3
- } from "./chunk-4XJK5IVQ.mjs";
4
- import {
5
- useCopilotKit
6
- } from "./chunk-VE3SBLU7.mjs";
7
-
8
- // src/hooks/use-render-activity-message.tsx
9
- import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
10
- import { useCallback } from "react";
11
- import { jsx } from "react/jsx-runtime";
12
- function useRenderActivityMessage() {
13
- const { copilotkit } = useCopilotKit();
14
- const config = useCopilotChatConfiguration();
15
- const agentId = config?.agentId ?? DEFAULT_AGENT_ID;
16
- const renderers = copilotkit.renderActivityMessages;
17
- return useCallback(
18
- (message) => {
19
- if (!renderers.length) {
20
- return null;
21
- }
22
- const matches = renderers.filter(
23
- (renderer2) => renderer2.activityType === message.activityType
24
- );
25
- const renderer = matches.find((candidate) => candidate.agentId === agentId) ?? matches.find((candidate) => candidate.agentId === void 0) ?? renderers.find((candidate) => candidate.activityType === "*");
26
- if (!renderer) {
27
- return null;
28
- }
29
- const parseResult = renderer.content.safeParse(message.content);
30
- if (!parseResult.success) {
31
- console.warn(
32
- `Failed to parse content for activity message '${message.activityType}':`,
33
- parseResult.error
34
- );
35
- return null;
36
- }
37
- const Component = renderer.render;
38
- const agent = copilotkit.getAgent(agentId);
39
- return /* @__PURE__ */ jsx(
40
- Component,
41
- {
42
- activityType: message.activityType,
43
- content: parseResult.data,
44
- message,
45
- agent
46
- },
47
- message.id
48
- );
49
- },
50
- [agentId, copilotkit, renderers]
51
- );
52
- }
53
-
54
- export {
55
- useRenderActivityMessage
56
- };
57
- //# sourceMappingURL=chunk-EJ5ZEAAN.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-render-activity-message.tsx"],"sourcesContent":["import { ActivityMessage } from \"@ag-ui/core\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkitnext/shared\";\nimport { useCopilotKit, useCopilotChatConfiguration } from \"@/providers\";\nimport { useCallback } from \"react\";\n\nexport function useRenderActivityMessage() {\n const { copilotkit } = useCopilotKit();\n const config = useCopilotChatConfiguration();\n const agentId = config?.agentId ?? DEFAULT_AGENT_ID;\n\n const renderers = copilotkit.renderActivityMessages;\n\n return useCallback(\n (message: ActivityMessage): React.ReactElement | null => {\n if (!renderers.length) {\n return null;\n }\n\n const matches = renderers.filter(\n (renderer) => renderer.activityType === message.activityType\n );\n\n const renderer =\n matches.find((candidate) => candidate.agentId === agentId) ??\n matches.find((candidate) => candidate.agentId === undefined) ??\n renderers.find((candidate) => candidate.activityType === \"*\");\n\n if (!renderer) {\n return null;\n }\n\n const parseResult = renderer.content.safeParse(message.content);\n\n if (!parseResult.success) {\n console.warn(\n `Failed to parse content for activity message '${message.activityType}':`,\n parseResult.error\n );\n return null;\n }\n\n const Component = renderer.render;\n\n const agent = copilotkit.getAgent(agentId);\n\n return (\n <Component\n key={message.id}\n activityType={message.activityType}\n content={parseResult.data}\n message={message}\n agent={agent}\n />\n );\n },\n [agentId, copilotkit, renderers]\n );\n}\n"],"mappings":";;;;;;;;AACA,SAAS,wBAAwB;AAEjC,SAAS,mBAAmB;AA2CpB;AAzCD,SAAS,2BAA2B;AACzC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,SAAS,4BAA4B;AAC3C,QAAM,UAAU,QAAQ,WAAW;AAEnC,QAAM,YAAY,WAAW;AAE7B,SAAO;AAAA,IACL,CAAC,YAAwD;AACvD,UAAI,CAAC,UAAU,QAAQ;AACrB,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,UAAU;AAAA,QACxB,CAACA,cAAaA,UAAS,iBAAiB,QAAQ;AAAA,MAClD;AAEA,YAAM,WACJ,QAAQ,KAAK,CAAC,cAAc,UAAU,YAAY,OAAO,KACzD,QAAQ,KAAK,CAAC,cAAc,UAAU,YAAY,MAAS,KAC3D,UAAU,KAAK,CAAC,cAAc,UAAU,iBAAiB,GAAG;AAE9D,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,SAAS,QAAQ,UAAU,QAAQ,OAAO;AAE9D,UAAI,CAAC,YAAY,SAAS;AACxB,gBAAQ;AAAA,UACN,iDAAiD,QAAQ,YAAY;AAAA,UACrE,YAAY;AAAA,QACd;AACA,eAAO;AAAA,MACT;AAEA,YAAM,YAAY,SAAS;AAE3B,YAAM,QAAQ,WAAW,SAAS,OAAO;AAEzC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,cAAc,QAAQ;AAAA,UACtB,SAAS,YAAY;AAAA,UACrB;AAAA,UACA;AAAA;AAAA,QAJK,QAAQ;AAAA,MAKf;AAAA,IAEJ;AAAA,IACA,CAAC,SAAS,YAAY,SAAS;AAAA,EACjC;AACF;","names":["renderer"]}
@@ -1,43 +0,0 @@
1
- import {
2
- useCopilotKit
3
- } from "./chunk-VE3SBLU7.mjs";
4
-
5
- // src/hooks/use-frontend-tool.tsx
6
- import { useEffect } from "react";
7
- function useFrontendTool(tool) {
8
- const { copilotkit } = useCopilotKit();
9
- useEffect(() => {
10
- const name = tool.name;
11
- if (copilotkit.getTool({ toolName: name, agentId: tool.agentId })) {
12
- console.warn(
13
- `Tool '${name}' already exists for agent '${tool.agentId || "global"}'. Overriding with latest registration.`
14
- );
15
- copilotkit.removeTool(name, tool.agentId);
16
- }
17
- copilotkit.addTool(tool);
18
- if (tool.render) {
19
- const keyOf = (rc) => `${rc.agentId ?? ""}:${rc.name}`;
20
- const currentRenderToolCalls = copilotkit.renderToolCalls;
21
- const mergedMap = /* @__PURE__ */ new Map();
22
- for (const rc of currentRenderToolCalls) {
23
- mergedMap.set(keyOf(rc), rc);
24
- }
25
- const newEntry = {
26
- name,
27
- args: tool.parameters,
28
- agentId: tool.agentId,
29
- render: tool.render
30
- };
31
- mergedMap.set(keyOf(newEntry), newEntry);
32
- copilotkit.setRenderToolCalls(Array.from(mergedMap.values()));
33
- }
34
- return () => {
35
- copilotkit.removeTool(name, tool.agentId);
36
- };
37
- }, [tool.name, copilotkit]);
38
- }
39
-
40
- export {
41
- useFrontendTool
42
- };
43
- //# sourceMappingURL=chunk-NASFZS3N.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-frontend-tool.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { ReactFrontendTool } from \"../types/frontend-tool\";\nimport { ReactToolCallRenderer } from \"../types/react-tool-call-renderer\";\n\nexport function useFrontendTool<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(tool: ReactFrontendTool<T>) {\n const { copilotkit } = useCopilotKit();\n\n useEffect(() => {\n const name = tool.name;\n\n // Always register/override the tool for this name on mount\n if (copilotkit.getTool({ toolName: name, agentId: tool.agentId })) {\n console.warn(\n `Tool '${name}' already exists for agent '${tool.agentId || 'global'}'. Overriding with latest registration.`\n );\n copilotkit.removeTool(name, tool.agentId);\n }\n copilotkit.addTool(tool);\n\n // Register/override renderer by name and agentId through core\n if (tool.render) {\n // Get current render tool calls and merge with new entry\n const keyOf = (rc: ReactToolCallRenderer<any>) => `${rc.agentId ?? \"\"}:${rc.name}`;\n const currentRenderToolCalls = copilotkit.renderToolCalls as ReactToolCallRenderer<any>[];\n\n // Build map from existing entries\n const mergedMap = new Map<string, ReactToolCallRenderer<any>>();\n for (const rc of currentRenderToolCalls) {\n mergedMap.set(keyOf(rc), rc);\n }\n\n // Add/overwrite with new entry\n const newEntry = {\n name,\n args: tool.parameters,\n agentId: tool.agentId,\n render: tool.render,\n } as ReactToolCallRenderer<any>;\n mergedMap.set(keyOf(newEntry), newEntry);\n\n // Set the merged list back\n copilotkit.setRenderToolCalls(Array.from(mergedMap.values()));\n }\n\n return () => {\n copilotkit.removeTool(name, tool.agentId);\n // we are intentionally not removing the render here so that the tools can still render in the chat history\n };\n // Depend only on stable keys to avoid re-register loops due to object identity\n }, [tool.name, copilotkit]);\n}\n"],"mappings":";;;;;AAAA,SAAS,iBAAiB;AAKnB,SAAS,gBAEd,MAA4B;AAC5B,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,YAAU,MAAM;AACd,UAAM,OAAO,KAAK;AAGlB,QAAI,WAAW,QAAQ,EAAE,UAAU,MAAM,SAAS,KAAK,QAAQ,CAAC,GAAG;AACjE,cAAQ;AAAA,QACN,SAAS,IAAI,+BAA+B,KAAK,WAAW,QAAQ;AAAA,MACtE;AACA,iBAAW,WAAW,MAAM,KAAK,OAAO;AAAA,IAC1C;AACA,eAAW,QAAQ,IAAI;AAGvB,QAAI,KAAK,QAAQ;AAEf,YAAM,QAAQ,CAAC,OAAmC,GAAG,GAAG,WAAW,EAAE,IAAI,GAAG,IAAI;AAChF,YAAM,yBAAyB,WAAW;AAG1C,YAAM,YAAY,oBAAI,IAAwC;AAC9D,iBAAW,MAAM,wBAAwB;AACvC,kBAAU,IAAI,MAAM,EAAE,GAAG,EAAE;AAAA,MAC7B;AAGA,YAAM,WAAW;AAAA,QACf;AAAA,QACA,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,QAAQ,KAAK;AAAA,MACf;AACA,gBAAU,IAAI,MAAM,QAAQ,GAAG,QAAQ;AAGvC,iBAAW,mBAAmB,MAAM,KAAK,UAAU,OAAO,CAAC,CAAC;AAAA,IAC9D;AAEA,WAAO,MAAM;AACX,iBAAW,WAAW,MAAM,KAAK,OAAO;AAAA,IAE1C;AAAA,EAEF,GAAG,CAAC,KAAK,MAAM,UAAU,CAAC;AAC5B;","names":[]}
@@ -1,78 +0,0 @@
1
- import {
2
- useFrontendTool
3
- } from "./chunk-NASFZS3N.mjs";
4
- import {
5
- useCopilotKit
6
- } from "./chunk-VE3SBLU7.mjs";
7
-
8
- // src/hooks/use-human-in-the-loop.tsx
9
- import { useCallback, useRef, useEffect } from "react";
10
- import React from "react";
11
- function useHumanInTheLoop(tool) {
12
- const { copilotkit } = useCopilotKit();
13
- const resolvePromiseRef = useRef(null);
14
- const respond = useCallback(async (result) => {
15
- if (resolvePromiseRef.current) {
16
- resolvePromiseRef.current(result);
17
- resolvePromiseRef.current = null;
18
- }
19
- }, []);
20
- const handler = useCallback(async () => {
21
- return new Promise((resolve) => {
22
- resolvePromiseRef.current = resolve;
23
- });
24
- }, []);
25
- const RenderComponent = useCallback(
26
- (props) => {
27
- const ToolComponent = tool.render;
28
- if (props.status === "inProgress") {
29
- const enhancedProps = {
30
- ...props,
31
- name: tool.name,
32
- description: tool.description || "",
33
- respond: void 0
34
- };
35
- return React.createElement(ToolComponent, enhancedProps);
36
- } else if (props.status === "executing") {
37
- const enhancedProps = {
38
- ...props,
39
- name: tool.name,
40
- description: tool.description || "",
41
- respond
42
- };
43
- return React.createElement(ToolComponent, enhancedProps);
44
- } else if (props.status === "complete") {
45
- const enhancedProps = {
46
- ...props,
47
- name: tool.name,
48
- description: tool.description || "",
49
- respond: void 0
50
- };
51
- return React.createElement(ToolComponent, enhancedProps);
52
- }
53
- return React.createElement(ToolComponent, props);
54
- },
55
- [tool.render, tool.name, tool.description, respond]
56
- );
57
- const frontendTool = {
58
- ...tool,
59
- handler,
60
- render: RenderComponent
61
- };
62
- useFrontendTool(frontendTool);
63
- useEffect(() => {
64
- return () => {
65
- const keyOf = (rc) => `${rc.agentId ?? ""}:${rc.name}`;
66
- const currentRenderToolCalls = copilotkit.renderToolCalls;
67
- const filtered = currentRenderToolCalls.filter(
68
- (rc) => keyOf(rc) !== keyOf({ name: tool.name, agentId: tool.agentId })
69
- );
70
- copilotkit.setRenderToolCalls(filtered);
71
- };
72
- }, [copilotkit, tool.name, tool.agentId]);
73
- }
74
-
75
- export {
76
- useHumanInTheLoop
77
- };
78
- //# sourceMappingURL=chunk-QJ6DZ645.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-human-in-the-loop.tsx"],"sourcesContent":["import { ReactToolCallRenderer } from \"@/types/react-tool-call-renderer\";\nimport { useFrontendTool } from \"./use-frontend-tool\";\nimport { ReactFrontendTool } from \"@/types/frontend-tool\";\nimport { ReactHumanInTheLoop } from \"@/types/human-in-the-loop\";\nimport { useCallback, useRef, useEffect } from \"react\";\nimport React from \"react\";\nimport { useCopilotKit } from \"@/providers/CopilotKitProvider\";\n\nexport function useHumanInTheLoop<T extends Record<string, unknown> = Record<string, unknown>>(\n tool: ReactHumanInTheLoop<T>,\n) {\n const { copilotkit } = useCopilotKit();\n const resolvePromiseRef = useRef<((result: unknown) => void) | null>(null);\n\n const respond = useCallback(async (result: unknown) => {\n if (resolvePromiseRef.current) {\n resolvePromiseRef.current(result);\n resolvePromiseRef.current = null;\n }\n }, []);\n\n const handler = useCallback(async () => {\n return new Promise((resolve) => {\n resolvePromiseRef.current = resolve;\n });\n }, []);\n\n const RenderComponent: ReactToolCallRenderer<T>[\"render\"] = useCallback(\n (props) => {\n const ToolComponent = tool.render;\n\n // Enhance props based on current status\n if (props.status === \"inProgress\") {\n const enhancedProps = {\n ...props,\n name: tool.name,\n description: tool.description || \"\",\n respond: undefined,\n };\n return React.createElement(ToolComponent, enhancedProps);\n } else if (props.status === \"executing\") {\n const enhancedProps = {\n ...props,\n name: tool.name,\n description: tool.description || \"\",\n respond,\n };\n return React.createElement(ToolComponent, enhancedProps);\n } else if (props.status === \"complete\") {\n const enhancedProps = {\n ...props,\n name: tool.name,\n description: tool.description || \"\",\n respond: undefined,\n };\n return React.createElement(ToolComponent, enhancedProps);\n }\n\n // Fallback - just render with original props\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.createElement(ToolComponent, props as any);\n },\n [tool.render, tool.name, tool.description, respond],\n );\n\n const frontendTool: ReactFrontendTool<T> = {\n ...tool,\n handler,\n render: RenderComponent,\n };\n\n useFrontendTool(frontendTool);\n\n // Human-in-the-loop tools should remove their renderer on unmount\n // since they can't respond to user interactions anymore\n useEffect(() => {\n return () => {\n const keyOf = (rc: ReactToolCallRenderer<any>) => `${rc.agentId ?? \"\"}:${rc.name}`;\n const currentRenderToolCalls = copilotkit.renderToolCalls as ReactToolCallRenderer<any>[];\n const filtered = currentRenderToolCalls.filter(\n (rc) => keyOf(rc) !== keyOf({ name: tool.name, agentId: tool.agentId } as any),\n );\n copilotkit.setRenderToolCalls(filtered);\n };\n }, [copilotkit, tool.name, tool.agentId]);\n}\n"],"mappings":";;;;;;;;AAIA,SAAS,aAAa,QAAQ,iBAAiB;AAC/C,OAAO,WAAW;AAGX,SAAS,kBACd,MACA;AACA,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,oBAAoB,OAA2C,IAAI;AAEzE,QAAM,UAAU,YAAY,OAAO,WAAoB;AACrD,QAAI,kBAAkB,SAAS;AAC7B,wBAAkB,QAAQ,MAAM;AAChC,wBAAkB,UAAU;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU,YAAY,YAAY;AACtC,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,wBAAkB,UAAU;AAAA,IAC9B,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAsD;AAAA,IAC1D,CAAC,UAAU;AACT,YAAM,gBAAgB,KAAK;AAG3B,UAAI,MAAM,WAAW,cAAc;AACjC,cAAM,gBAAgB;AAAA,UACpB,GAAG;AAAA,UACH,MAAM,KAAK;AAAA,UACX,aAAa,KAAK,eAAe;AAAA,UACjC,SAAS;AAAA,QACX;AACA,eAAO,MAAM,cAAc,eAAe,aAAa;AAAA,MACzD,WAAW,MAAM,WAAW,aAAa;AACvC,cAAM,gBAAgB;AAAA,UACpB,GAAG;AAAA,UACH,MAAM,KAAK;AAAA,UACX,aAAa,KAAK,eAAe;AAAA,UACjC;AAAA,QACF;AACA,eAAO,MAAM,cAAc,eAAe,aAAa;AAAA,MACzD,WAAW,MAAM,WAAW,YAAY;AACtC,cAAM,gBAAgB;AAAA,UACpB,GAAG;AAAA,UACH,MAAM,KAAK;AAAA,UACX,aAAa,KAAK,eAAe;AAAA,UACjC,SAAS;AAAA,QACX;AACA,eAAO,MAAM,cAAc,eAAe,aAAa;AAAA,MACzD;AAIA,aAAO,MAAM,cAAc,eAAe,KAAY;AAAA,IACxD;AAAA,IACA,CAAC,KAAK,QAAQ,KAAK,MAAM,KAAK,aAAa,OAAO;AAAA,EACpD;AAEA,QAAM,eAAqC;AAAA,IACzC,GAAG;AAAA,IACH;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,kBAAgB,YAAY;AAI5B,YAAU,MAAM;AACd,WAAO,MAAM;AACX,YAAM,QAAQ,CAAC,OAAmC,GAAG,GAAG,WAAW,EAAE,IAAI,GAAG,IAAI;AAChF,YAAM,yBAAyB,WAAW;AAC1C,YAAM,WAAW,uBAAuB;AAAA,QACtC,CAAC,OAAO,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ,CAAQ;AAAA,MAC/E;AACA,iBAAW,mBAAmB,QAAQ;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,YAAY,KAAK,MAAM,KAAK,OAAO,CAAC;AAC1C;","names":[]}