@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.
- package/dist/{chunk-3TA5QBSZ.mjs → chunk-7HM7CU5A.mjs} +2 -2
- package/dist/{chunk-VUHFLJWI.mjs → chunk-BNT754Z2.mjs} +2 -2
- package/dist/{chunk-TKFOXPXF.mjs → chunk-CDSO65ZY.mjs} +5 -5
- package/dist/{chunk-IH5VFJ4L.mjs → chunk-GK4NXPLC.mjs} +4 -4
- package/dist/{chunk-F43IPGPA.mjs → chunk-N5HC66HU.mjs} +5 -5
- package/dist/{chunk-QFBM3ZT2.mjs → chunk-TBE7ZI5G.mjs} +4 -4
- package/dist/components/chat/CopilotChat.mjs +21 -21
- package/dist/components/chat/CopilotChatAssistantMessage.mjs +13 -13
- package/dist/components/chat/CopilotChatInput.mjs +3 -3
- package/dist/components/chat/CopilotChatMessageView.mjs +14 -14
- package/dist/components/chat/CopilotChatToolCallsView.mjs +12 -12
- package/dist/components/chat/CopilotChatView.d.mts +1 -1
- package/dist/components/chat/CopilotChatView.d.ts +1 -1
- package/dist/components/chat/CopilotChatView.mjs +20 -20
- package/dist/components/chat/CopilotModalHeader.d.mts +1 -1
- package/dist/components/chat/CopilotModalHeader.d.ts +1 -1
- package/dist/components/chat/CopilotPopup.mjs +24 -24
- package/dist/components/chat/CopilotPopupView.mjs +22 -22
- package/dist/components/chat/CopilotSidebar.mjs +24 -24
- package/dist/components/chat/CopilotSidebarView.mjs +22 -22
- package/dist/components/chat/index.mjs +37 -37
- package/dist/components/index.mjs +38 -38
- package/dist/components/ui/button.d.mts +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/hooks/index.mjs +20 -20
- package/dist/hooks/use-agent-context.mjs +3 -3
- package/dist/hooks/use-agent.mjs +3 -3
- package/dist/hooks/use-configure-suggestions.mjs +3 -3
- package/dist/hooks/use-frontend-tool.mjs +3 -3
- package/dist/hooks/use-human-in-the-loop.mjs +4 -4
- package/dist/hooks/use-render-activity-message.mjs +3 -3
- package/dist/hooks/use-render-custom-messages.mjs +3 -3
- package/dist/hooks/use-render-tool-call.mjs +3 -3
- package/dist/hooks/use-suggestions.mjs +3 -3
- package/dist/index.mjs +51 -51
- package/dist/providers/CopilotKitProvider.mjs +2 -2
- package/dist/providers/index.mjs +2 -2
- package/dist/types/index.mjs +2 -2
- package/package.json +6 -6
- package/dist/chunk-5AAT4Z3C.mjs +0 -107
- package/dist/chunk-5AAT4Z3C.mjs.map +0 -1
- package/dist/chunk-CSHBUHRW.mjs +0 -69
- package/dist/chunk-CSHBUHRW.mjs.map +0 -1
- package/dist/chunk-CZ3GI3IF.mjs +0 -283
- package/dist/chunk-CZ3GI3IF.mjs.map +0 -1
- package/dist/chunk-E4HD4M7R.mjs +0 -76
- package/dist/chunk-E4HD4M7R.mjs.map +0 -1
- package/dist/chunk-EJ5ZEAAN.mjs +0 -57
- package/dist/chunk-EJ5ZEAAN.mjs.map +0 -1
- package/dist/chunk-NASFZS3N.mjs +0 -43
- package/dist/chunk-NASFZS3N.mjs.map +0 -1
- package/dist/chunk-QJ6DZ645.mjs +0 -78
- package/dist/chunk-QJ6DZ645.mjs.map +0 -1
- package/dist/chunk-VE3SBLU7.mjs +0 -215
- package/dist/chunk-VE3SBLU7.mjs.map +0 -1
- package/dist/chunk-W5DUKRCI.mjs +0 -97
- package/dist/chunk-W5DUKRCI.mjs.map +0 -1
- package/dist/chunk-WNRDFAZ5.mjs +0 -22
- package/dist/chunk-WNRDFAZ5.mjs.map +0 -1
- package/dist/chunk-YVPPF62K.mjs +0 -32
- package/dist/chunk-YVPPF62K.mjs.map +0 -1
- package/dist/chunk-Z3OIGQCZ.mjs +0 -75
- package/dist/chunk-Z3OIGQCZ.mjs.map +0 -1
- package/dist/chunk-ZIDT52TM.mjs +0 -131
- package/dist/chunk-ZIDT52TM.mjs.map +0 -1
- /package/dist/{chunk-3TA5QBSZ.mjs.map → chunk-7HM7CU5A.mjs.map} +0 -0
- /package/dist/{chunk-VUHFLJWI.mjs.map → chunk-BNT754Z2.mjs.map} +0 -0
- /package/dist/{chunk-TKFOXPXF.mjs.map → chunk-CDSO65ZY.mjs.map} +0 -0
- /package/dist/{chunk-IH5VFJ4L.mjs.map → chunk-GK4NXPLC.mjs.map} +0 -0
- /package/dist/{chunk-F43IPGPA.mjs.map → chunk-N5HC66HU.mjs.map} +0 -0
- /package/dist/{chunk-QFBM3ZT2.mjs.map → chunk-TBE7ZI5G.mjs.map} +0 -0
package/dist/chunk-CZ3GI3IF.mjs
DELETED
|
@@ -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"]}
|
package/dist/chunk-E4HD4M7R.mjs
DELETED
|
@@ -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"]}
|
package/dist/chunk-EJ5ZEAAN.mjs
DELETED
|
@@ -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"]}
|
package/dist/chunk-NASFZS3N.mjs
DELETED
|
@@ -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":[]}
|
package/dist/chunk-QJ6DZ645.mjs
DELETED
|
@@ -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":[]}
|