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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/{chunk-3TA5QBSZ.mjs → chunk-7HM7CU5A.mjs} +2 -2
  2. package/dist/{chunk-VUHFLJWI.mjs → chunk-BNT754Z2.mjs} +2 -2
  3. package/dist/{chunk-TKFOXPXF.mjs → chunk-CDSO65ZY.mjs} +5 -5
  4. package/dist/{chunk-IH5VFJ4L.mjs → chunk-GK4NXPLC.mjs} +4 -4
  5. package/dist/{chunk-F43IPGPA.mjs → chunk-N5HC66HU.mjs} +5 -5
  6. package/dist/{chunk-QFBM3ZT2.mjs → chunk-TBE7ZI5G.mjs} +4 -4
  7. package/dist/components/chat/CopilotChat.mjs +21 -21
  8. package/dist/components/chat/CopilotChatAssistantMessage.mjs +13 -13
  9. package/dist/components/chat/CopilotChatInput.mjs +3 -3
  10. package/dist/components/chat/CopilotChatMessageView.mjs +14 -14
  11. package/dist/components/chat/CopilotChatToolCallsView.mjs +12 -12
  12. package/dist/components/chat/CopilotChatView.d.mts +1 -1
  13. package/dist/components/chat/CopilotChatView.d.ts +1 -1
  14. package/dist/components/chat/CopilotChatView.mjs +20 -20
  15. package/dist/components/chat/CopilotModalHeader.d.mts +1 -1
  16. package/dist/components/chat/CopilotModalHeader.d.ts +1 -1
  17. package/dist/components/chat/CopilotPopup.mjs +24 -24
  18. package/dist/components/chat/CopilotPopupView.mjs +22 -22
  19. package/dist/components/chat/CopilotSidebar.mjs +24 -24
  20. package/dist/components/chat/CopilotSidebarView.mjs +22 -22
  21. package/dist/components/chat/index.mjs +37 -37
  22. package/dist/components/index.mjs +38 -38
  23. package/dist/components/ui/button.d.mts +1 -1
  24. package/dist/components/ui/button.d.ts +1 -1
  25. package/dist/hooks/index.mjs +20 -20
  26. package/dist/hooks/use-agent-context.mjs +3 -3
  27. package/dist/hooks/use-agent.mjs +3 -3
  28. package/dist/hooks/use-configure-suggestions.mjs +3 -3
  29. package/dist/hooks/use-frontend-tool.mjs +3 -3
  30. package/dist/hooks/use-human-in-the-loop.mjs +4 -4
  31. package/dist/hooks/use-render-activity-message.mjs +3 -3
  32. package/dist/hooks/use-render-custom-messages.mjs +3 -3
  33. package/dist/hooks/use-render-tool-call.mjs +3 -3
  34. package/dist/hooks/use-suggestions.mjs +3 -3
  35. package/dist/index.mjs +51 -51
  36. package/dist/providers/CopilotKitProvider.mjs +2 -2
  37. package/dist/providers/index.mjs +2 -2
  38. package/dist/types/index.mjs +2 -2
  39. package/package.json +6 -6
  40. package/dist/chunk-5AAT4Z3C.mjs +0 -107
  41. package/dist/chunk-5AAT4Z3C.mjs.map +0 -1
  42. package/dist/chunk-CSHBUHRW.mjs +0 -69
  43. package/dist/chunk-CSHBUHRW.mjs.map +0 -1
  44. package/dist/chunk-CZ3GI3IF.mjs +0 -283
  45. package/dist/chunk-CZ3GI3IF.mjs.map +0 -1
  46. package/dist/chunk-E4HD4M7R.mjs +0 -76
  47. package/dist/chunk-E4HD4M7R.mjs.map +0 -1
  48. package/dist/chunk-EJ5ZEAAN.mjs +0 -57
  49. package/dist/chunk-EJ5ZEAAN.mjs.map +0 -1
  50. package/dist/chunk-NASFZS3N.mjs +0 -43
  51. package/dist/chunk-NASFZS3N.mjs.map +0 -1
  52. package/dist/chunk-QJ6DZ645.mjs +0 -78
  53. package/dist/chunk-QJ6DZ645.mjs.map +0 -1
  54. package/dist/chunk-VE3SBLU7.mjs +0 -215
  55. package/dist/chunk-VE3SBLU7.mjs.map +0 -1
  56. package/dist/chunk-W5DUKRCI.mjs +0 -97
  57. package/dist/chunk-W5DUKRCI.mjs.map +0 -1
  58. package/dist/chunk-WNRDFAZ5.mjs +0 -22
  59. package/dist/chunk-WNRDFAZ5.mjs.map +0 -1
  60. package/dist/chunk-YVPPF62K.mjs +0 -32
  61. package/dist/chunk-YVPPF62K.mjs.map +0 -1
  62. package/dist/chunk-Z3OIGQCZ.mjs +0 -75
  63. package/dist/chunk-Z3OIGQCZ.mjs.map +0 -1
  64. package/dist/chunk-ZIDT52TM.mjs +0 -131
  65. package/dist/chunk-ZIDT52TM.mjs.map +0 -1
  66. /package/dist/{chunk-3TA5QBSZ.mjs.map → chunk-7HM7CU5A.mjs.map} +0 -0
  67. /package/dist/{chunk-VUHFLJWI.mjs.map → chunk-BNT754Z2.mjs.map} +0 -0
  68. /package/dist/{chunk-TKFOXPXF.mjs.map → chunk-CDSO65ZY.mjs.map} +0 -0
  69. /package/dist/{chunk-IH5VFJ4L.mjs.map → chunk-GK4NXPLC.mjs.map} +0 -0
  70. /package/dist/{chunk-F43IPGPA.mjs.map → chunk-N5HC66HU.mjs.map} +0 -0
  71. /package/dist/{chunk-QFBM3ZT2.mjs.map → chunk-TBE7ZI5G.mjs.map} +0 -0
@@ -1,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"]}
@@ -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":[]}
@@ -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":[]}
@@ -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":[]}
@@ -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"]}
@@ -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":[]}