@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-VE3SBLU7.mjs
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CopilotKitInspector
|
|
3
|
-
} from "./chunk-YPH4BHOY.mjs";
|
|
4
|
-
import {
|
|
5
|
-
CopilotKitCoreReact
|
|
6
|
-
} from "./chunk-NNAYEAP2.mjs";
|
|
7
|
-
|
|
8
|
-
// src/providers/CopilotKitProvider.tsx
|
|
9
|
-
import {
|
|
10
|
-
createContext,
|
|
11
|
-
useContext,
|
|
12
|
-
useMemo,
|
|
13
|
-
useEffect,
|
|
14
|
-
useReducer,
|
|
15
|
-
useRef,
|
|
16
|
-
useState
|
|
17
|
-
} from "react";
|
|
18
|
-
import { z } from "zod";
|
|
19
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
-
var CopilotKitContext = createContext({
|
|
21
|
-
copilotkit: null
|
|
22
|
-
});
|
|
23
|
-
function useStableArrayProp(prop, warningMessage, isMeaningfulChange) {
|
|
24
|
-
const empty = useMemo(() => [], []);
|
|
25
|
-
const value = prop ?? empty;
|
|
26
|
-
const initial = useRef(value);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (warningMessage && value !== initial.current && (isMeaningfulChange ? isMeaningfulChange(initial.current, value) : true)) {
|
|
29
|
-
console.error(warningMessage);
|
|
30
|
-
}
|
|
31
|
-
}, [value, warningMessage]);
|
|
32
|
-
return value;
|
|
33
|
-
}
|
|
34
|
-
var CopilotKitProvider = ({
|
|
35
|
-
children,
|
|
36
|
-
runtimeUrl,
|
|
37
|
-
headers = {},
|
|
38
|
-
properties = {},
|
|
39
|
-
agents__unsafe_dev_only: agents = {},
|
|
40
|
-
renderToolCalls,
|
|
41
|
-
renderActivityMessages,
|
|
42
|
-
renderCustomMessages,
|
|
43
|
-
frontendTools,
|
|
44
|
-
humanInTheLoop,
|
|
45
|
-
showDevConsole = false,
|
|
46
|
-
useSingleEndpoint = false
|
|
47
|
-
}) => {
|
|
48
|
-
const [shouldRenderInspector, setShouldRenderInspector] = useState(false);
|
|
49
|
-
useEffect(() => {
|
|
50
|
-
if (typeof window === "undefined") {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (showDevConsole === true) {
|
|
54
|
-
setShouldRenderInspector(true);
|
|
55
|
-
} else if (showDevConsole === "auto") {
|
|
56
|
-
const localhostHosts = /* @__PURE__ */ new Set(["localhost", "127.0.0.1"]);
|
|
57
|
-
if (localhostHosts.has(window.location.hostname)) {
|
|
58
|
-
setShouldRenderInspector(true);
|
|
59
|
-
} else {
|
|
60
|
-
setShouldRenderInspector(false);
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
setShouldRenderInspector(false);
|
|
64
|
-
}
|
|
65
|
-
}, [showDevConsole]);
|
|
66
|
-
const renderToolCallsList = useStableArrayProp(
|
|
67
|
-
renderToolCalls,
|
|
68
|
-
"renderToolCalls must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.",
|
|
69
|
-
(initial, next) => {
|
|
70
|
-
const key = (rc) => `${rc?.agentId ?? ""}:${rc?.name ?? ""}`;
|
|
71
|
-
const setFrom = (arr) => new Set(arr.map(key));
|
|
72
|
-
const a = setFrom(initial);
|
|
73
|
-
const b = setFrom(next);
|
|
74
|
-
if (a.size !== b.size) return true;
|
|
75
|
-
for (const k of a) if (!b.has(k)) return true;
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
);
|
|
79
|
-
const renderCustomMessagesList = useStableArrayProp(
|
|
80
|
-
renderCustomMessages,
|
|
81
|
-
"renderCustomMessages must be a stable array."
|
|
82
|
-
);
|
|
83
|
-
const renderActivityMessagesList = useStableArrayProp(
|
|
84
|
-
renderActivityMessages,
|
|
85
|
-
"renderActivityMessages must be a stable array."
|
|
86
|
-
);
|
|
87
|
-
const frontendToolsList = useStableArrayProp(
|
|
88
|
-
frontendTools,
|
|
89
|
-
"frontendTools must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead."
|
|
90
|
-
);
|
|
91
|
-
const humanInTheLoopList = useStableArrayProp(
|
|
92
|
-
humanInTheLoop,
|
|
93
|
-
"humanInTheLoop must be a stable array. If you want to dynamically add or remove human-in-the-loop tools, use `useHumanInTheLoop` instead."
|
|
94
|
-
);
|
|
95
|
-
const processedHumanInTheLoopTools = useMemo(() => {
|
|
96
|
-
const processedTools = [];
|
|
97
|
-
const processedRenderToolCalls = [];
|
|
98
|
-
humanInTheLoopList.forEach((tool) => {
|
|
99
|
-
const frontendTool = {
|
|
100
|
-
name: tool.name,
|
|
101
|
-
description: tool.description,
|
|
102
|
-
parameters: tool.parameters,
|
|
103
|
-
followUp: tool.followUp,
|
|
104
|
-
...tool.agentId && { agentId: tool.agentId },
|
|
105
|
-
handler: async () => {
|
|
106
|
-
return new Promise((resolve) => {
|
|
107
|
-
console.warn(`Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`);
|
|
108
|
-
resolve(void 0);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
processedTools.push(frontendTool);
|
|
113
|
-
if (tool.render) {
|
|
114
|
-
processedRenderToolCalls.push({
|
|
115
|
-
name: tool.name,
|
|
116
|
-
args: tool.parameters,
|
|
117
|
-
render: tool.render,
|
|
118
|
-
...tool.agentId && { agentId: tool.agentId }
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
return { tools: processedTools, renderToolCalls: processedRenderToolCalls };
|
|
123
|
-
}, [humanInTheLoopList]);
|
|
124
|
-
const allTools = useMemo(() => {
|
|
125
|
-
const tools = [];
|
|
126
|
-
tools.push(...frontendToolsList);
|
|
127
|
-
tools.push(...processedHumanInTheLoopTools.tools);
|
|
128
|
-
return tools;
|
|
129
|
-
}, [frontendToolsList, processedHumanInTheLoopTools]);
|
|
130
|
-
const allRenderToolCalls = useMemo(() => {
|
|
131
|
-
const combined = [...renderToolCallsList];
|
|
132
|
-
frontendToolsList.forEach((tool) => {
|
|
133
|
-
if (tool.render) {
|
|
134
|
-
const args = tool.parameters || (tool.name === "*" ? z.any() : void 0);
|
|
135
|
-
if (args) {
|
|
136
|
-
combined.push({
|
|
137
|
-
name: tool.name,
|
|
138
|
-
args,
|
|
139
|
-
render: tool.render
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
combined.push(...processedHumanInTheLoopTools.renderToolCalls);
|
|
145
|
-
return combined;
|
|
146
|
-
}, [renderToolCallsList, frontendToolsList, processedHumanInTheLoopTools]);
|
|
147
|
-
const copilotkit = useMemo(() => {
|
|
148
|
-
const copilotkit2 = new CopilotKitCoreReact({
|
|
149
|
-
runtimeUrl,
|
|
150
|
-
runtimeTransport: useSingleEndpoint ? "single" : "rest",
|
|
151
|
-
headers,
|
|
152
|
-
properties,
|
|
153
|
-
agents__unsafe_dev_only: agents,
|
|
154
|
-
tools: allTools,
|
|
155
|
-
renderToolCalls: allRenderToolCalls,
|
|
156
|
-
renderActivityMessages: renderActivityMessagesList,
|
|
157
|
-
renderCustomMessages: renderCustomMessagesList
|
|
158
|
-
});
|
|
159
|
-
return copilotkit2;
|
|
160
|
-
}, [allTools, allRenderToolCalls, renderActivityMessagesList, renderCustomMessagesList, useSingleEndpoint]);
|
|
161
|
-
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
|
162
|
-
useEffect(() => {
|
|
163
|
-
const unsubscribe = copilotkit.subscribe({
|
|
164
|
-
onRenderToolCallsChanged: () => {
|
|
165
|
-
forceUpdate();
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
return () => {
|
|
169
|
-
unsubscribe();
|
|
170
|
-
};
|
|
171
|
-
}, [copilotkit]);
|
|
172
|
-
useEffect(() => {
|
|
173
|
-
copilotkit.setRuntimeUrl(runtimeUrl);
|
|
174
|
-
copilotkit.setRuntimeTransport(useSingleEndpoint ? "single" : "rest");
|
|
175
|
-
copilotkit.setHeaders(headers);
|
|
176
|
-
copilotkit.setProperties(properties);
|
|
177
|
-
copilotkit.setAgents__unsafe_dev_only(agents);
|
|
178
|
-
}, [runtimeUrl, headers, properties, agents, useSingleEndpoint]);
|
|
179
|
-
return /* @__PURE__ */ jsxs(
|
|
180
|
-
CopilotKitContext.Provider,
|
|
181
|
-
{
|
|
182
|
-
value: {
|
|
183
|
-
copilotkit
|
|
184
|
-
},
|
|
185
|
-
children: [
|
|
186
|
-
children,
|
|
187
|
-
shouldRenderInspector ? /* @__PURE__ */ jsx(CopilotKitInspector, { core: copilotkit }) : null
|
|
188
|
-
]
|
|
189
|
-
}
|
|
190
|
-
);
|
|
191
|
-
};
|
|
192
|
-
var useCopilotKit = () => {
|
|
193
|
-
const context = useContext(CopilotKitContext);
|
|
194
|
-
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
|
195
|
-
if (!context) {
|
|
196
|
-
throw new Error("useCopilotKit must be used within CopilotKitProvider");
|
|
197
|
-
}
|
|
198
|
-
useEffect(() => {
|
|
199
|
-
const unsubscribe = context.copilotkit.subscribe({
|
|
200
|
-
onRuntimeConnectionStatusChanged: () => {
|
|
201
|
-
forceUpdate();
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
return () => {
|
|
205
|
-
unsubscribe();
|
|
206
|
-
};
|
|
207
|
-
}, []);
|
|
208
|
-
return context;
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
export {
|
|
212
|
-
CopilotKitProvider,
|
|
213
|
-
useCopilotKit
|
|
214
|
-
};
|
|
215
|
-
//# sourceMappingURL=chunk-VE3SBLU7.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/CopilotKitProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport React, {\n createContext,\n useContext,\n ReactNode,\n useMemo,\n useEffect,\n useReducer,\n useRef,\n useState,\n} from \"react\";\nimport { ReactActivityMessageRenderer, ReactToolCallRenderer } from \"../types\";\nimport { ReactCustomMessageRenderer } from \"../types/react-custom-message-renderer\";\nimport { ReactFrontendTool } from \"../types/frontend-tool\";\nimport { ReactHumanInTheLoop } from \"../types/human-in-the-loop\";\nimport { z } from \"zod\";\nimport { FrontendTool } from \"@copilotkitnext/core\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { CopilotKitCoreReact } from \"../lib/react-core\";\nimport { CopilotKitInspector } from \"../components/CopilotKitInspector\";\n\n// Define the context value interface - idiomatic React naming\nexport interface CopilotKitContextValue {\n copilotkit: CopilotKitCoreReact;\n}\n\n// Create the CopilotKit context\nconst CopilotKitContext = createContext<CopilotKitContextValue>({\n copilotkit: null!,\n});\n\n// Provider props interface\nexport interface CopilotKitProviderProps {\n children: ReactNode;\n runtimeUrl?: string;\n headers?: Record<string, string>;\n properties?: Record<string, unknown>;\n useSingleEndpoint?: boolean;\n agents__unsafe_dev_only?: Record<string, AbstractAgent>;\n renderToolCalls?: ReactToolCallRenderer<any>[];\n renderActivityMessages?: ReactActivityMessageRenderer<any>[];\n renderCustomMessages?: ReactCustomMessageRenderer[];\n frontendTools?: ReactFrontendTool[];\n humanInTheLoop?: ReactHumanInTheLoop[];\n showDevConsole?: boolean | \"auto\";\n}\n\n// Small helper to normalize array props to a stable reference and warn\nfunction useStableArrayProp<T>(\n prop: T[] | undefined,\n warningMessage?: string,\n isMeaningfulChange?: (initial: T[], next: T[]) => boolean,\n): T[] {\n const empty = useMemo<T[]>(() => [], []);\n const value = prop ?? empty;\n const initial = useRef(value);\n\n useEffect(() => {\n if (\n warningMessage &&\n value !== initial.current &&\n (isMeaningfulChange ? isMeaningfulChange(initial.current, value) : true)\n ) {\n console.error(warningMessage);\n }\n }, [value, warningMessage]);\n\n return value;\n}\n\n// Provider component\nexport const CopilotKitProvider: React.FC<CopilotKitProviderProps> = ({\n children,\n runtimeUrl,\n headers = {},\n properties = {},\n agents__unsafe_dev_only: agents = {},\n renderToolCalls,\n renderActivityMessages,\n renderCustomMessages,\n frontendTools,\n humanInTheLoop,\n showDevConsole = false,\n useSingleEndpoint = false,\n}) => {\n const [shouldRenderInspector, setShouldRenderInspector] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (showDevConsole === true) {\n // Explicitly show the inspector\n setShouldRenderInspector(true);\n } else if (showDevConsole === \"auto\") {\n // Show on localhost or 127.0.0.1 only\n const localhostHosts = new Set([\"localhost\", \"127.0.0.1\"]);\n if (localhostHosts.has(window.location.hostname)) {\n setShouldRenderInspector(true);\n } else {\n setShouldRenderInspector(false);\n }\n } else {\n // showDevConsole is false or undefined (default false)\n setShouldRenderInspector(false);\n }\n }, [showDevConsole]);\n\n // Normalize array props to stable references with clear dev warnings\n const renderToolCallsList = useStableArrayProp<ReactToolCallRenderer<any>>(\n renderToolCalls,\n \"renderToolCalls must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.\",\n (initial, next) => {\n // Only warn if the shape (names+agentId) changed. Allow identity changes\n // to support updated closures from parents (e.g., Storybook state).\n const key = (rc?: ReactToolCallRenderer<unknown>) => `${rc?.agentId ?? \"\"}:${rc?.name ?? \"\"}`;\n const setFrom = (arr: ReactToolCallRenderer<unknown>[]) => new Set(arr.map(key));\n const a = setFrom(initial);\n const b = setFrom(next);\n if (a.size !== b.size) return true;\n for (const k of a) if (!b.has(k)) return true;\n return false;\n },\n );\n\n const renderCustomMessagesList = useStableArrayProp<ReactCustomMessageRenderer>(\n renderCustomMessages,\n \"renderCustomMessages must be a stable array.\",\n );\n\n const renderActivityMessagesList = useStableArrayProp<ReactActivityMessageRenderer<any>>(\n renderActivityMessages,\n \"renderActivityMessages must be a stable array.\",\n );\n\n const frontendToolsList = useStableArrayProp<ReactFrontendTool>(\n frontendTools,\n \"frontendTools must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.\",\n );\n const humanInTheLoopList = useStableArrayProp<ReactHumanInTheLoop>(\n humanInTheLoop,\n \"humanInTheLoop must be a stable array. If you want to dynamically add or remove human-in-the-loop tools, use `useHumanInTheLoop` instead.\",\n );\n\n // Note: warnings for array identity changes are handled by useStableArrayProp\n\n // Process humanInTheLoop tools to create handlers and add render components\n const processedHumanInTheLoopTools = useMemo(() => {\n const processedTools: FrontendTool[] = [];\n const processedRenderToolCalls: ReactToolCallRenderer<unknown>[] = [];\n\n humanInTheLoopList.forEach((tool) => {\n // Create a promise-based handler for each human-in-the-loop tool\n const frontendTool: FrontendTool = {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n followUp: tool.followUp,\n ...(tool.agentId && { agentId: tool.agentId }),\n handler: async () => {\n // This handler will be replaced by the hook when it runs\n // For provider-level tools, we create a basic handler that waits for user interaction\n return new Promise((resolve) => {\n // The actual implementation will be handled by the render component\n // This is a placeholder that the hook will override\n console.warn(`Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`);\n resolve(undefined);\n });\n },\n };\n processedTools.push(frontendTool);\n\n // Add the render component to renderToolCalls\n if (tool.render) {\n processedRenderToolCalls.push({\n name: tool.name,\n args: tool.parameters!,\n render: tool.render,\n ...(tool.agentId && { agentId: tool.agentId }),\n } as ReactToolCallRenderer<unknown>);\n }\n });\n\n return { tools: processedTools, renderToolCalls: processedRenderToolCalls };\n }, [humanInTheLoopList]);\n\n // Combine all tools for CopilotKitCore\n const allTools = useMemo(() => {\n const tools: FrontendTool[] = [];\n\n // Add frontend tools\n tools.push(...frontendToolsList);\n\n // Add processed human-in-the-loop tools\n tools.push(...processedHumanInTheLoopTools.tools);\n\n return tools;\n }, [frontendToolsList, processedHumanInTheLoopTools]);\n\n // Combine all render tool calls\n const allRenderToolCalls = useMemo(() => {\n const combined: ReactToolCallRenderer<unknown>[] = [...renderToolCallsList];\n\n // Add render components from frontend tools\n frontendToolsList.forEach((tool) => {\n if (tool.render) {\n // For wildcard tools without parameters, default to z.any()\n const args = tool.parameters || (tool.name === \"*\" ? z.any() : undefined);\n if (args) {\n combined.push({\n name: tool.name,\n args: args,\n render: tool.render,\n } as ReactToolCallRenderer<unknown>);\n }\n }\n });\n\n // Add render components from human-in-the-loop tools\n combined.push(...processedHumanInTheLoopTools.renderToolCalls);\n\n return combined;\n }, [renderToolCallsList, frontendToolsList, processedHumanInTheLoopTools]);\n\n const copilotkit = useMemo(() => {\n const copilotkit = new CopilotKitCoreReact({\n runtimeUrl,\n runtimeTransport: useSingleEndpoint ? \"single\" : \"rest\",\n headers,\n properties,\n agents__unsafe_dev_only: agents,\n tools: allTools,\n renderToolCalls: allRenderToolCalls,\n renderActivityMessages: renderActivityMessagesList,\n renderCustomMessages: renderCustomMessagesList,\n });\n\n return copilotkit;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allTools, allRenderToolCalls, renderActivityMessagesList, renderCustomMessagesList, useSingleEndpoint]);\n\n // Subscribe to render tool calls changes to force re-renders\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n useEffect(() => {\n const unsubscribe = copilotkit.subscribe({\n onRenderToolCallsChanged: () => {\n forceUpdate();\n },\n });\n\n return () => {\n unsubscribe();\n };\n }, [copilotkit]);\n\n useEffect(() => {\n copilotkit.setRuntimeUrl(runtimeUrl);\n copilotkit.setRuntimeTransport(useSingleEndpoint ? \"single\" : \"rest\");\n copilotkit.setHeaders(headers);\n copilotkit.setProperties(properties);\n copilotkit.setAgents__unsafe_dev_only(agents);\n }, [runtimeUrl, headers, properties, agents, useSingleEndpoint]);\n\n return (\n <CopilotKitContext.Provider\n value={{\n copilotkit,\n }}\n >\n {children}\n {shouldRenderInspector ? <CopilotKitInspector core={copilotkit} /> : null}\n </CopilotKitContext.Provider>\n );\n};\n\n// Hook to use the CopilotKit instance - returns the full context value\nexport const useCopilotKit = (): CopilotKitContextValue => {\n const context = useContext(CopilotKitContext);\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n if (!context) {\n throw new Error(\"useCopilotKit must be used within CopilotKitProvider\");\n }\n useEffect(() => {\n const unsubscribe = context.copilotkit.subscribe({\n onRuntimeConnectionStatusChanged: () => {\n forceUpdate();\n },\n });\n return () => {\n unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return context;\n};\n"],"mappings":"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","names":["copilotkit"]}
|
package/dist/chunk-W5DUKRCI.mjs
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CopilotChatUserMessage_default
|
|
3
|
-
} from "./chunk-BT6C5OPU.mjs";
|
|
4
|
-
import {
|
|
5
|
-
CopilotChatAssistantMessage_default
|
|
6
|
-
} from "./chunk-CZ3GI3IF.mjs";
|
|
7
|
-
import {
|
|
8
|
-
renderSlot
|
|
9
|
-
} from "./chunk-FIBK3DYE.mjs";
|
|
10
|
-
import {
|
|
11
|
-
useRenderActivityMessage
|
|
12
|
-
} from "./chunk-EJ5ZEAAN.mjs";
|
|
13
|
-
import {
|
|
14
|
-
useRenderCustomMessages
|
|
15
|
-
} from "./chunk-CSHBUHRW.mjs";
|
|
16
|
-
|
|
17
|
-
// src/components/chat/CopilotChatMessageView.tsx
|
|
18
|
-
import { twMerge } from "tailwind-merge";
|
|
19
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
-
function CopilotChatMessageView({
|
|
21
|
-
messages = [],
|
|
22
|
-
assistantMessage,
|
|
23
|
-
userMessage,
|
|
24
|
-
cursor,
|
|
25
|
-
isRunning = false,
|
|
26
|
-
children,
|
|
27
|
-
className,
|
|
28
|
-
...props
|
|
29
|
-
}) {
|
|
30
|
-
const renderCustomMessage = useRenderCustomMessages();
|
|
31
|
-
const renderActivityMessage = useRenderActivityMessage();
|
|
32
|
-
const messageElements = messages.flatMap((message) => {
|
|
33
|
-
const elements = [];
|
|
34
|
-
if (renderCustomMessage) {
|
|
35
|
-
elements.push(
|
|
36
|
-
renderCustomMessage({
|
|
37
|
-
message,
|
|
38
|
-
position: "before"
|
|
39
|
-
})
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
if (message.role === "assistant") {
|
|
43
|
-
elements.push(
|
|
44
|
-
renderSlot(assistantMessage, CopilotChatAssistantMessage_default, {
|
|
45
|
-
key: message.id,
|
|
46
|
-
message,
|
|
47
|
-
messages,
|
|
48
|
-
isRunning
|
|
49
|
-
})
|
|
50
|
-
);
|
|
51
|
-
} else if (message.role === "user") {
|
|
52
|
-
elements.push(
|
|
53
|
-
renderSlot(userMessage, CopilotChatUserMessage_default, {
|
|
54
|
-
key: message.id,
|
|
55
|
-
message
|
|
56
|
-
})
|
|
57
|
-
);
|
|
58
|
-
} else if (message.role === "activity") {
|
|
59
|
-
const renderedActivity = renderActivityMessage(message);
|
|
60
|
-
if (renderedActivity) {
|
|
61
|
-
elements.push(renderedActivity);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (renderCustomMessage) {
|
|
65
|
-
elements.push(
|
|
66
|
-
renderCustomMessage({
|
|
67
|
-
message,
|
|
68
|
-
position: "after"
|
|
69
|
-
})
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
return elements;
|
|
73
|
-
}).filter(Boolean);
|
|
74
|
-
if (children) {
|
|
75
|
-
return children({ messageElements, messages, isRunning });
|
|
76
|
-
}
|
|
77
|
-
return /* @__PURE__ */ jsxs("div", { className: twMerge("flex flex-col", className), ...props, children: [
|
|
78
|
-
messageElements,
|
|
79
|
-
isRunning && renderSlot(cursor, CopilotChatMessageView.Cursor, {})
|
|
80
|
-
] });
|
|
81
|
-
}
|
|
82
|
-
CopilotChatMessageView.Cursor = function Cursor({ className, ...props }) {
|
|
83
|
-
return /* @__PURE__ */ jsx(
|
|
84
|
-
"div",
|
|
85
|
-
{
|
|
86
|
-
className: twMerge("w-[11px] h-[11px] rounded-full bg-foreground animate-pulse-cursor ml-1", className),
|
|
87
|
-
...props
|
|
88
|
-
}
|
|
89
|
-
);
|
|
90
|
-
};
|
|
91
|
-
var CopilotChatMessageView_default = CopilotChatMessageView;
|
|
92
|
-
|
|
93
|
-
export {
|
|
94
|
-
CopilotChatMessageView,
|
|
95
|
-
CopilotChatMessageView_default
|
|
96
|
-
};
|
|
97
|
-
//# sourceMappingURL=chunk-W5DUKRCI.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chat/CopilotChatMessageView.tsx"],"sourcesContent":["import { WithSlots, renderSlot } from \"@/lib/slots\";\nimport CopilotChatAssistantMessage from \"./CopilotChatAssistantMessage\";\nimport CopilotChatUserMessage from \"./CopilotChatUserMessage\";\nimport { Message } from \"@ag-ui/core\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useRenderActivityMessage, useRenderCustomMessages } from \"@/hooks\";\n\nexport type CopilotChatMessageViewProps = Omit<\n WithSlots<\n {\n assistantMessage: typeof CopilotChatAssistantMessage;\n userMessage: typeof CopilotChatUserMessage;\n cursor: typeof CopilotChatMessageView.Cursor;\n },\n {\n isRunning?: boolean;\n messages?: Message[];\n } & React.HTMLAttributes<HTMLDivElement>\n >,\n \"children\"\n> & {\n children?: (props: {\n isRunning: boolean;\n messages: Message[];\n messageElements: React.ReactElement[];\n }) => React.ReactElement;\n};\n\nexport function CopilotChatMessageView({\n messages = [],\n assistantMessage,\n userMessage,\n cursor,\n isRunning = false,\n children,\n className,\n ...props\n}: CopilotChatMessageViewProps) {\n const renderCustomMessage = useRenderCustomMessages();\n const renderActivityMessage = useRenderActivityMessage();\n\n const messageElements: React.ReactElement[] = messages\n .flatMap((message) => {\n const elements: (React.ReactElement | null | undefined)[] = [];\n\n // Render custom message before\n if (renderCustomMessage) {\n elements.push(\n renderCustomMessage({\n message,\n position: \"before\",\n }),\n );\n }\n\n // Render the main message\n if (message.role === \"assistant\") {\n elements.push(\n renderSlot(assistantMessage, CopilotChatAssistantMessage, {\n key: message.id,\n message,\n messages,\n isRunning,\n }),\n );\n } else if (message.role === \"user\") {\n elements.push(\n renderSlot(userMessage, CopilotChatUserMessage, {\n key: message.id,\n message,\n }),\n );\n } else if (message.role === \"activity\") {\n const renderedActivity = renderActivityMessage(message);\n\n if (renderedActivity) {\n elements.push(renderedActivity);\n }\n }\n\n // Render custom message after\n if (renderCustomMessage) {\n elements.push(\n renderCustomMessage({\n message,\n position: \"after\",\n }),\n );\n }\n\n return elements;\n })\n .filter(Boolean) as React.ReactElement[];\n\n if (children) {\n return children({ messageElements, messages, isRunning });\n }\n\n return (\n <div className={twMerge(\"flex flex-col\", className)} {...props}>\n {messageElements}\n {isRunning && renderSlot(cursor, CopilotChatMessageView.Cursor, {})}\n </div>\n );\n}\n\nCopilotChatMessageView.Cursor = function Cursor({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={twMerge(\"w-[11px] h-[11px] rounded-full bg-foreground animate-pulse-cursor ml-1\", className)}\n {...props}\n />\n );\n};\n\nexport default CopilotChatMessageView;\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA,SAAS,eAAe;AA+FpB,SASA,KATA;AAvEG,SAAS,uBAAuB;AAAA,EACrC,WAAW,CAAC;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,QAAM,sBAAsB,wBAAwB;AACpD,QAAM,wBAAwB,yBAAyB;AAEvD,QAAM,kBAAwC,SAC3C,QAAQ,CAAC,YAAY;AACpB,UAAM,WAAsD,CAAC;AAG7D,QAAI,qBAAqB;AACvB,eAAS;AAAA,QACP,oBAAoB;AAAA,UAClB;AAAA,UACA,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAGA,QAAI,QAAQ,SAAS,aAAa;AAChC,eAAS;AAAA,QACP,WAAW,kBAAkB,qCAA6B;AAAA,UACxD,KAAK,QAAQ;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,WAAW,QAAQ,SAAS,QAAQ;AAClC,eAAS;AAAA,QACP,WAAW,aAAa,gCAAwB;AAAA,UAC9C,KAAK,QAAQ;AAAA,UACb;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,WAAW,QAAQ,SAAS,YAAY;AACtC,YAAM,mBAAmB,sBAAsB,OAAO;AAEtD,UAAI,kBAAkB;AACpB,iBAAS,KAAK,gBAAgB;AAAA,MAChC;AAAA,IACF;AAGA,QAAI,qBAAqB;AACvB,eAAS;AAAA,QACP,oBAAoB;AAAA,UAClB;AAAA,UACA,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,OAAO;AAEjB,MAAI,UAAU;AACZ,WAAO,SAAS,EAAE,iBAAiB,UAAU,UAAU,CAAC;AAAA,EAC1D;AAEA,SACE,qBAAC,SAAI,WAAW,QAAQ,iBAAiB,SAAS,GAAI,GAAG,OACtD;AAAA;AAAA,IACA,aAAa,WAAW,QAAQ,uBAAuB,QAAQ,CAAC,CAAC;AAAA,KACpE;AAEJ;AAEA,uBAAuB,SAAS,SAAS,OAAO,EAAE,WAAW,GAAG,MAAM,GAAyC;AAC7G,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,QAAQ,0EAA0E,SAAS;AAAA,MACrG,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,IAAO,iCAAQ;","names":[]}
|
package/dist/chunk-WNRDFAZ5.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useCopilotKit
|
|
3
|
-
} from "./chunk-VE3SBLU7.mjs";
|
|
4
|
-
|
|
5
|
-
// src/hooks/use-agent-context.tsx
|
|
6
|
-
import { useEffect } from "react";
|
|
7
|
-
function useAgentContext(context) {
|
|
8
|
-
const { description, value } = context;
|
|
9
|
-
const { copilotkit } = useCopilotKit();
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
if (!copilotkit) return;
|
|
12
|
-
const id = copilotkit.addContext(context);
|
|
13
|
-
return () => {
|
|
14
|
-
copilotkit.removeContext(id);
|
|
15
|
-
};
|
|
16
|
-
}, [description, value, copilotkit]);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
useAgentContext
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=chunk-WNRDFAZ5.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-agent-context.tsx"],"sourcesContent":["import { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { Context } from \"@ag-ui/client\";\nimport { useEffect } from \"react\";\n\nexport function useAgentContext(context: Context) {\n const { description, value } = context;\n const { copilotkit } = useCopilotKit();\n\n useEffect(() => {\n if (!copilotkit) return;\n\n const id = copilotkit.addContext(context);\n return () => {\n copilotkit.removeContext(id);\n };\n }, [description, value, copilotkit]);\n}\n"],"mappings":";;;;;AAEA,SAAS,iBAAiB;AAEnB,SAAS,gBAAgB,SAAkB;AAChD,QAAM,EAAE,aAAa,MAAM,IAAI;AAC/B,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AAEjB,UAAM,KAAK,WAAW,WAAW,OAAO;AACxC,WAAO,MAAM;AACX,iBAAW,cAAc,EAAE;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,UAAU,CAAC;AACrC;","names":[]}
|
package/dist/chunk-YVPPF62K.mjs
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useRenderToolCall
|
|
3
|
-
} from "./chunk-5AAT4Z3C.mjs";
|
|
4
|
-
|
|
5
|
-
// src/components/chat/CopilotChatToolCallsView.tsx
|
|
6
|
-
import React from "react";
|
|
7
|
-
import { Fragment, jsx } from "react/jsx-runtime";
|
|
8
|
-
function CopilotChatToolCallsView({
|
|
9
|
-
message,
|
|
10
|
-
messages = []
|
|
11
|
-
}) {
|
|
12
|
-
const renderToolCall = useRenderToolCall();
|
|
13
|
-
if (!message.toolCalls || message.toolCalls.length === 0) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
return /* @__PURE__ */ jsx(Fragment, { children: message.toolCalls.map((toolCall) => {
|
|
17
|
-
const toolMessage = messages.find(
|
|
18
|
-
(m) => m.role === "tool" && m.toolCallId === toolCall.id
|
|
19
|
-
);
|
|
20
|
-
return /* @__PURE__ */ jsx(React.Fragment, { children: renderToolCall({
|
|
21
|
-
toolCall,
|
|
22
|
-
toolMessage
|
|
23
|
-
}) }, toolCall.id);
|
|
24
|
-
}) });
|
|
25
|
-
}
|
|
26
|
-
var CopilotChatToolCallsView_default = CopilotChatToolCallsView;
|
|
27
|
-
|
|
28
|
-
export {
|
|
29
|
-
CopilotChatToolCallsView,
|
|
30
|
-
CopilotChatToolCallsView_default
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=chunk-YVPPF62K.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chat/CopilotChatToolCallsView.tsx"],"sourcesContent":["import { useRenderToolCall } from \"@/hooks\";\nimport { AssistantMessage, Message, ToolMessage } from \"@ag-ui/core\";\nimport React from \"react\";\n\nexport type CopilotChatToolCallsViewProps = {\n message: AssistantMessage;\n messages?: Message[];\n};\n\nexport function CopilotChatToolCallsView({\n message,\n messages = [],\n}: CopilotChatToolCallsViewProps) {\n const renderToolCall = useRenderToolCall();\n\n if (!message.toolCalls || message.toolCalls.length === 0) {\n return null;\n }\n\n return (\n <>\n {message.toolCalls.map((toolCall) => {\n const toolMessage = messages.find(\n (m) => m.role === \"tool\" && m.toolCallId === toolCall.id\n ) as ToolMessage | undefined;\n\n return (\n <React.Fragment key={toolCall.id}>\n {renderToolCall({\n toolCall,\n toolMessage,\n })}\n </React.Fragment>\n );\n })}\n </>\n );\n}\n\nexport default CopilotChatToolCallsView;\n"],"mappings":";;;;;AAEA,OAAO,WAAW;AAkBd,mBAOM,WAPN;AAXG,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA,WAAW,CAAC;AACd,GAAkC;AAChC,QAAM,iBAAiB,kBAAkB;AAEzC,MAAI,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,GAAG;AACxD,WAAO;AAAA,EACT;AAEA,SACE,gCACG,kBAAQ,UAAU,IAAI,CAAC,aAAa;AACnC,UAAM,cAAc,SAAS;AAAA,MAC3B,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,eAAe,SAAS;AAAA,IACxD;AAEA,WACE,oBAAC,MAAM,UAAN,EACE,yBAAe;AAAA,MACd;AAAA,MACA;AAAA,IACF,CAAC,KAJkB,SAAS,EAK9B;AAAA,EAEJ,CAAC,GACH;AAEJ;AAEA,IAAO,mCAAQ;","names":[]}
|
package/dist/chunk-Z3OIGQCZ.mjs
DELETED
|
@@ -1,75 +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-suggestions.tsx
|
|
9
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
10
|
-
import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
|
|
11
|
-
function useSuggestions({ agentId } = {}) {
|
|
12
|
-
const { copilotkit } = useCopilotKit();
|
|
13
|
-
const config = useCopilotChatConfiguration();
|
|
14
|
-
const resolvedAgentId = useMemo(() => agentId ?? config?.agentId ?? DEFAULT_AGENT_ID, [agentId, config?.agentId]);
|
|
15
|
-
const [suggestions, setSuggestions] = useState(() => {
|
|
16
|
-
const result = copilotkit.getSuggestions(resolvedAgentId);
|
|
17
|
-
return result.suggestions;
|
|
18
|
-
});
|
|
19
|
-
const [isLoading, setIsLoading] = useState(() => {
|
|
20
|
-
const result = copilotkit.getSuggestions(resolvedAgentId);
|
|
21
|
-
return result.isLoading;
|
|
22
|
-
});
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
const result = copilotkit.getSuggestions(resolvedAgentId);
|
|
25
|
-
setSuggestions(result.suggestions);
|
|
26
|
-
setIsLoading(result.isLoading);
|
|
27
|
-
}, [copilotkit, resolvedAgentId]);
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
const unsubscribe = copilotkit.subscribe({
|
|
30
|
-
onSuggestionsChanged: ({ agentId: changedAgentId, suggestions: suggestions2 }) => {
|
|
31
|
-
if (changedAgentId !== resolvedAgentId) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
setSuggestions(suggestions2);
|
|
35
|
-
},
|
|
36
|
-
onSuggestionsStartedLoading: ({ agentId: changedAgentId }) => {
|
|
37
|
-
if (changedAgentId !== resolvedAgentId) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
setIsLoading(true);
|
|
41
|
-
},
|
|
42
|
-
onSuggestionsFinishedLoading: ({ agentId: changedAgentId }) => {
|
|
43
|
-
if (changedAgentId !== resolvedAgentId) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
setIsLoading(false);
|
|
47
|
-
},
|
|
48
|
-
onSuggestionsConfigChanged: () => {
|
|
49
|
-
const result = copilotkit.getSuggestions(resolvedAgentId);
|
|
50
|
-
setSuggestions(result.suggestions);
|
|
51
|
-
setIsLoading(result.isLoading);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
return () => {
|
|
55
|
-
unsubscribe();
|
|
56
|
-
};
|
|
57
|
-
}, [copilotkit, resolvedAgentId]);
|
|
58
|
-
const reloadSuggestions = useCallback(() => {
|
|
59
|
-
copilotkit.reloadSuggestions(resolvedAgentId);
|
|
60
|
-
}, [copilotkit, resolvedAgentId]);
|
|
61
|
-
const clearSuggestions = useCallback(() => {
|
|
62
|
-
copilotkit.clearSuggestions(resolvedAgentId);
|
|
63
|
-
}, [copilotkit, resolvedAgentId]);
|
|
64
|
-
return {
|
|
65
|
-
suggestions,
|
|
66
|
-
reloadSuggestions,
|
|
67
|
-
clearSuggestions,
|
|
68
|
-
isLoading
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export {
|
|
73
|
-
useSuggestions
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=chunk-Z3OIGQCZ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-suggestions.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Suggestion } from \"@copilotkitnext/core\";\nimport { useCopilotKit } from \"@/providers/CopilotKitProvider\";\nimport { useCopilotChatConfiguration } from \"@/providers/CopilotChatConfigurationProvider\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkitnext/shared\";\n\nexport interface UseSuggestionsOptions {\n agentId?: string;\n}\n\nexport interface UseSuggestionsResult {\n suggestions: Suggestion[];\n reloadSuggestions: () => void;\n clearSuggestions: () => void;\n isLoading: boolean;\n}\n\nexport function useSuggestions({ agentId }: UseSuggestionsOptions = {}): UseSuggestionsResult {\n const { copilotkit } = useCopilotKit();\n const config = useCopilotChatConfiguration();\n const resolvedAgentId = useMemo(() => agentId ?? config?.agentId ?? DEFAULT_AGENT_ID, [agentId, config?.agentId]);\n\n const [suggestions, setSuggestions] = useState<Suggestion[]>(() => {\n const result = copilotkit.getSuggestions(resolvedAgentId);\n return result.suggestions;\n });\n const [isLoading, setIsLoading] = useState(() => {\n const result = copilotkit.getSuggestions(resolvedAgentId);\n return result.isLoading;\n });\n\n useEffect(() => {\n const result = copilotkit.getSuggestions(resolvedAgentId);\n setSuggestions(result.suggestions);\n setIsLoading(result.isLoading);\n }, [copilotkit, resolvedAgentId]);\n\n useEffect(() => {\n const unsubscribe = copilotkit.subscribe({\n onSuggestionsChanged: ({ agentId: changedAgentId, suggestions }) => {\n if (changedAgentId !== resolvedAgentId) {\n return;\n }\n setSuggestions(suggestions);\n },\n onSuggestionsStartedLoading: ({ agentId: changedAgentId }) => {\n if (changedAgentId !== resolvedAgentId) {\n return;\n }\n setIsLoading(true);\n },\n onSuggestionsFinishedLoading: ({ agentId: changedAgentId }) => {\n if (changedAgentId !== resolvedAgentId) {\n return;\n }\n setIsLoading(false);\n },\n onSuggestionsConfigChanged: () => {\n const result = copilotkit.getSuggestions(resolvedAgentId);\n setSuggestions(result.suggestions);\n setIsLoading(result.isLoading);\n },\n });\n\n return () => {\n unsubscribe();\n };\n }, [copilotkit, resolvedAgentId]);\n\n const reloadSuggestions = useCallback(() => {\n copilotkit.reloadSuggestions(resolvedAgentId);\n // Loading state is handled by onSuggestionsStartedLoading event\n }, [copilotkit, resolvedAgentId]);\n\n const clearSuggestions = useCallback(() => {\n copilotkit.clearSuggestions(resolvedAgentId);\n // State updates are handled by onSuggestionsChanged event\n }, [copilotkit, resolvedAgentId]);\n\n return {\n suggestions,\n reloadSuggestions,\n clearSuggestions,\n isLoading,\n };\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAI1D,SAAS,wBAAwB;AAa1B,SAAS,eAAe,EAAE,QAAQ,IAA2B,CAAC,GAAyB;AAC5F,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,SAAS,4BAA4B;AAC3C,QAAM,kBAAkB,QAAQ,MAAM,WAAW,QAAQ,WAAW,kBAAkB,CAAC,SAAS,QAAQ,OAAO,CAAC;AAEhH,QAAM,CAAC,aAAa,cAAc,IAAI,SAAuB,MAAM;AACjE,UAAM,SAAS,WAAW,eAAe,eAAe;AACxD,WAAO,OAAO;AAAA,EAChB,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,MAAM;AAC/C,UAAM,SAAS,WAAW,eAAe,eAAe;AACxD,WAAO,OAAO;AAAA,EAChB,CAAC;AAED,YAAU,MAAM;AACd,UAAM,SAAS,WAAW,eAAe,eAAe;AACxD,mBAAe,OAAO,WAAW;AACjC,iBAAa,OAAO,SAAS;AAAA,EAC/B,GAAG,CAAC,YAAY,eAAe,CAAC;AAEhC,YAAU,MAAM;AACd,UAAM,cAAc,WAAW,UAAU;AAAA,MACvC,sBAAsB,CAAC,EAAE,SAAS,gBAAgB,aAAAA,aAAY,MAAM;AAClE,YAAI,mBAAmB,iBAAiB;AACtC;AAAA,QACF;AACA,uBAAeA,YAAW;AAAA,MAC5B;AAAA,MACA,6BAA6B,CAAC,EAAE,SAAS,eAAe,MAAM;AAC5D,YAAI,mBAAmB,iBAAiB;AACtC;AAAA,QACF;AACA,qBAAa,IAAI;AAAA,MACnB;AAAA,MACA,8BAA8B,CAAC,EAAE,SAAS,eAAe,MAAM;AAC7D,YAAI,mBAAmB,iBAAiB;AACtC;AAAA,QACF;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,MACA,4BAA4B,MAAM;AAChC,cAAM,SAAS,WAAW,eAAe,eAAe;AACxD,uBAAe,OAAO,WAAW;AACjC,qBAAa,OAAO,SAAS;AAAA,MAC/B;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,YAAY,eAAe,CAAC;AAEhC,QAAM,oBAAoB,YAAY,MAAM;AAC1C,eAAW,kBAAkB,eAAe;AAAA,EAE9C,GAAG,CAAC,YAAY,eAAe,CAAC;AAEhC,QAAM,mBAAmB,YAAY,MAAM;AACzC,eAAW,iBAAiB,eAAe;AAAA,EAE7C,GAAG,CAAC,YAAY,eAAe,CAAC;AAEhC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["suggestions"]}
|
package/dist/chunk-ZIDT52TM.mjs
DELETED
|
@@ -1,131 +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-configure-suggestions.tsx
|
|
9
|
-
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
10
|
-
import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
|
|
11
|
-
var EMPTY_DEPS = [];
|
|
12
|
-
function useConfigureSuggestions(config, options) {
|
|
13
|
-
const { copilotkit } = useCopilotKit();
|
|
14
|
-
const chatConfig = useCopilotChatConfiguration();
|
|
15
|
-
const extraDeps = options?.deps ?? EMPTY_DEPS;
|
|
16
|
-
const resolvedConsumerAgentId = useMemo(() => chatConfig?.agentId ?? DEFAULT_AGENT_ID, [chatConfig?.agentId]);
|
|
17
|
-
const rawConsumerAgentId = useMemo(() => config ? config.consumerAgentId : void 0, [config]);
|
|
18
|
-
const normalizationCacheRef = useRef({
|
|
19
|
-
serialized: null,
|
|
20
|
-
config: null
|
|
21
|
-
});
|
|
22
|
-
const { normalizedConfig, serializedConfig } = useMemo(() => {
|
|
23
|
-
if (!config) {
|
|
24
|
-
normalizationCacheRef.current = { serialized: null, config: null };
|
|
25
|
-
return { normalizedConfig: null, serializedConfig: null };
|
|
26
|
-
}
|
|
27
|
-
if (config.available === "disabled") {
|
|
28
|
-
normalizationCacheRef.current = { serialized: null, config: null };
|
|
29
|
-
return { normalizedConfig: null, serializedConfig: null };
|
|
30
|
-
}
|
|
31
|
-
let built;
|
|
32
|
-
if (isDynamicConfig(config)) {
|
|
33
|
-
built = {
|
|
34
|
-
...config
|
|
35
|
-
};
|
|
36
|
-
} else {
|
|
37
|
-
const normalizedSuggestions = normalizeStaticSuggestions(config.suggestions);
|
|
38
|
-
const baseConfig = {
|
|
39
|
-
...config,
|
|
40
|
-
suggestions: normalizedSuggestions
|
|
41
|
-
};
|
|
42
|
-
built = baseConfig;
|
|
43
|
-
}
|
|
44
|
-
const serialized = JSON.stringify(built);
|
|
45
|
-
const cache = normalizationCacheRef.current;
|
|
46
|
-
if (cache.serialized === serialized && cache.config) {
|
|
47
|
-
return { normalizedConfig: cache.config, serializedConfig: serialized };
|
|
48
|
-
}
|
|
49
|
-
normalizationCacheRef.current = { serialized, config: built };
|
|
50
|
-
return { normalizedConfig: built, serializedConfig: serialized };
|
|
51
|
-
}, [config, resolvedConsumerAgentId, ...extraDeps]);
|
|
52
|
-
const latestConfigRef = useRef(null);
|
|
53
|
-
latestConfigRef.current = normalizedConfig;
|
|
54
|
-
const previousSerializedConfigRef = useRef(null);
|
|
55
|
-
const targetAgentId = useMemo(() => {
|
|
56
|
-
if (!normalizedConfig) {
|
|
57
|
-
return resolvedConsumerAgentId;
|
|
58
|
-
}
|
|
59
|
-
const consumer = normalizedConfig.consumerAgentId;
|
|
60
|
-
if (!consumer || consumer === "*") {
|
|
61
|
-
return resolvedConsumerAgentId;
|
|
62
|
-
}
|
|
63
|
-
return consumer;
|
|
64
|
-
}, [normalizedConfig, resolvedConsumerAgentId]);
|
|
65
|
-
const isGlobalConfig = rawConsumerAgentId === void 0 || rawConsumerAgentId === "*";
|
|
66
|
-
const requestReload = useCallback(() => {
|
|
67
|
-
if (!normalizedConfig) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (isGlobalConfig) {
|
|
71
|
-
const agents = Object.values(copilotkit.agents ?? {});
|
|
72
|
-
for (const entry of agents) {
|
|
73
|
-
const agentId = entry.agentId;
|
|
74
|
-
if (!agentId) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (!entry.isRunning) {
|
|
78
|
-
copilotkit.reloadSuggestions(agentId);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
if (!targetAgentId) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
copilotkit.reloadSuggestions(targetAgentId);
|
|
87
|
-
}, [copilotkit, isGlobalConfig, normalizedConfig, targetAgentId]);
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
if (!serializedConfig || !latestConfigRef.current) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const id = copilotkit.addSuggestionsConfig(latestConfigRef.current);
|
|
93
|
-
requestReload();
|
|
94
|
-
return () => {
|
|
95
|
-
copilotkit.removeSuggestionsConfig(id);
|
|
96
|
-
};
|
|
97
|
-
}, [copilotkit, serializedConfig, requestReload]);
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
if (!normalizedConfig) {
|
|
100
|
-
previousSerializedConfigRef.current = null;
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (serializedConfig && previousSerializedConfigRef.current === serializedConfig) {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
if (serializedConfig) {
|
|
107
|
-
previousSerializedConfigRef.current = serializedConfig;
|
|
108
|
-
}
|
|
109
|
-
requestReload();
|
|
110
|
-
}, [normalizedConfig, requestReload, serializedConfig]);
|
|
111
|
-
useEffect(() => {
|
|
112
|
-
if (!normalizedConfig || extraDeps.length === 0) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
requestReload();
|
|
116
|
-
}, [extraDeps.length, normalizedConfig, requestReload, ...extraDeps]);
|
|
117
|
-
}
|
|
118
|
-
function isDynamicConfig(config) {
|
|
119
|
-
return "instructions" in config;
|
|
120
|
-
}
|
|
121
|
-
function normalizeStaticSuggestions(suggestions) {
|
|
122
|
-
return suggestions.map((suggestion) => ({
|
|
123
|
-
...suggestion,
|
|
124
|
-
isLoading: suggestion.isLoading ?? false
|
|
125
|
-
}));
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export {
|
|
129
|
-
useConfigureSuggestions
|
|
130
|
-
};
|
|
131
|
-
//# sourceMappingURL=chunk-ZIDT52TM.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-configure-suggestions.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { useCopilotKit } from \"@/providers/CopilotKitProvider\";\nimport { useCopilotChatConfiguration } from \"@/providers/CopilotChatConfigurationProvider\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkitnext/shared\";\nimport {\n DynamicSuggestionsConfig,\n StaticSuggestionsConfig,\n SuggestionsConfig,\n Suggestion,\n} from \"@copilotkitnext/core\";\n\ntype StaticSuggestionInput = Omit<Suggestion, \"isLoading\"> & Partial<Pick<Suggestion, \"isLoading\">>;\n\ntype StaticSuggestionsConfigInput = Omit<StaticSuggestionsConfig, \"suggestions\"> & {\n suggestions: StaticSuggestionInput[];\n};\n\ntype SuggestionsConfigInput = DynamicSuggestionsConfig | StaticSuggestionsConfigInput;\n\nconst EMPTY_DEPS: ReadonlyArray<unknown> = [];\n\nexport interface UseConfigureSuggestionsOptions {\n deps?: ReadonlyArray<unknown>;\n}\n\nexport function useConfigureSuggestions(\n config: SuggestionsConfigInput | null | undefined,\n options?: UseConfigureSuggestionsOptions,\n): void {\n const { copilotkit } = useCopilotKit();\n const chatConfig = useCopilotChatConfiguration();\n const extraDeps = options?.deps ?? EMPTY_DEPS;\n\n const resolvedConsumerAgentId = useMemo(() => chatConfig?.agentId ?? DEFAULT_AGENT_ID, [chatConfig?.agentId]);\n\n const rawConsumerAgentId = useMemo(() => (config ? (config as SuggestionsConfigInput).consumerAgentId : undefined), [config]);\n\n const normalizationCacheRef = useRef<{ serialized: string | null; config: SuggestionsConfig | null }>({\n serialized: null,\n config: null,\n });\n\n const { normalizedConfig, serializedConfig } = useMemo(() => {\n if (!config) {\n normalizationCacheRef.current = { serialized: null, config: null };\n return { normalizedConfig: null, serializedConfig: null };\n }\n\n if (config.available === \"disabled\") {\n normalizationCacheRef.current = { serialized: null, config: null };\n return { normalizedConfig: null, serializedConfig: null };\n }\n\n let built: SuggestionsConfig;\n if (isDynamicConfig(config)) {\n built = {\n ...config,\n } satisfies DynamicSuggestionsConfig;\n } else {\n const normalizedSuggestions = normalizeStaticSuggestions(config.suggestions);\n const baseConfig: StaticSuggestionsConfig = {\n ...config,\n suggestions: normalizedSuggestions,\n };\n built = baseConfig;\n }\n\n const serialized = JSON.stringify(built);\n const cache = normalizationCacheRef.current;\n if (cache.serialized === serialized && cache.config) {\n return { normalizedConfig: cache.config, serializedConfig: serialized };\n }\n\n normalizationCacheRef.current = { serialized, config: built };\n return { normalizedConfig: built, serializedConfig: serialized };\n }, [config, resolvedConsumerAgentId, ...extraDeps]);\n const latestConfigRef = useRef<SuggestionsConfig | null>(null);\n latestConfigRef.current = normalizedConfig;\n const previousSerializedConfigRef = useRef<string | null>(null);\n\n const targetAgentId = useMemo(() => {\n if (!normalizedConfig) {\n return resolvedConsumerAgentId;\n }\n const consumer = (normalizedConfig as StaticSuggestionsConfig | DynamicSuggestionsConfig).consumerAgentId;\n if (!consumer || consumer === \"*\") {\n return resolvedConsumerAgentId;\n }\n return consumer;\n }, [normalizedConfig, resolvedConsumerAgentId]);\n\n const isGlobalConfig = rawConsumerAgentId === undefined || rawConsumerAgentId === \"*\";\n\n const requestReload = useCallback(() => {\n if (!normalizedConfig) {\n return;\n }\n\n if (isGlobalConfig) {\n const agents = Object.values(copilotkit.agents ?? {});\n for (const entry of agents) {\n const agentId = entry.agentId;\n if (!agentId) {\n continue;\n }\n if (!entry.isRunning) {\n copilotkit.reloadSuggestions(agentId);\n }\n }\n return;\n }\n\n if (!targetAgentId) {\n return;\n }\n\n copilotkit.reloadSuggestions(targetAgentId);\n }, [copilotkit, isGlobalConfig, normalizedConfig, targetAgentId]);\n\n useEffect(() => {\n if (!serializedConfig || !latestConfigRef.current) {\n return;\n }\n\n const id = copilotkit.addSuggestionsConfig(latestConfigRef.current);\n\n requestReload();\n\n return () => {\n copilotkit.removeSuggestionsConfig(id);\n };\n }, [copilotkit, serializedConfig, requestReload]);\n\n useEffect(() => {\n if (!normalizedConfig) {\n previousSerializedConfigRef.current = null;\n return;\n }\n if (serializedConfig && previousSerializedConfigRef.current === serializedConfig) {\n return;\n }\n if (serializedConfig) {\n previousSerializedConfigRef.current = serializedConfig;\n }\n requestReload();\n }, [normalizedConfig, requestReload, serializedConfig]);\n\n useEffect(() => {\n if (!normalizedConfig || extraDeps.length === 0) {\n return;\n }\n requestReload();\n }, [extraDeps.length, normalizedConfig, requestReload, ...extraDeps]);\n\n}\n\nfunction isDynamicConfig(config: SuggestionsConfigInput): config is DynamicSuggestionsConfig {\n return \"instructions\" in config;\n}\n\nfunction normalizeStaticSuggestions(suggestions: StaticSuggestionInput[]): Suggestion[] {\n return suggestions.map((suggestion) => ({\n ...suggestion,\n isLoading: suggestion.isLoading ?? false,\n }));\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|