{"version":3,"file":"CopilotKitProvider.mjs","names":[],"sources":["../../src/providers/CopilotKitProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport type { FrontendTool } from \"@copilotkitnext/core\";\nimport type React from \"react\";\nimport {\n createContext,\n useContext,\n type ReactNode,\n useMemo,\n useEffect,\n useReducer,\n useRef,\n useState,\n} from \"react\";\nimport { z } from \"zod\";\nimport { CopilotKitInspector } from \"../components/CopilotKitInspector\";\nimport type { CopilotKitCoreErrorCode } from \"@copilotkitnext/core\";\nimport {\n MCPAppsActivityContentSchema,\n MCPAppsActivityRenderer,\n MCPAppsActivityType,\n} from \"../components/MCPAppsActivityRenderer\";\nimport { createA2UIMessageRenderer } from \"../a2ui/A2UIMessageRenderer\";\nimport { viewerTheme } from \"@copilotkit/a2ui-renderer\";\nimport type { Theme as A2UITheme } from \"@copilotkit/a2ui-renderer\";\nimport { CopilotKitCoreReact } from \"../lib/react-core\";\nimport type {\n ReactActivityMessageRenderer,\n ReactToolCallRenderer,\n} from \"../types\";\nimport type { ReactFrontendTool } from \"../types/frontend-tool\";\nimport type { ReactHumanInTheLoop } from \"../types/human-in-the-loop\";\nimport type { ReactCustomMessageRenderer } from \"../types/react-custom-message-renderer\";\n\nconst HEADER_NAME = \"X-CopilotCloud-Public-Api-Key\";\nconst COPILOT_CLOUD_CHAT_URL = \"https://api.cloud.copilotkit.ai/copilotkit/v1\";\n\n// Define the context value interface - idiomatic React naming\nexport interface CopilotKitContextValue {\n copilotkit: CopilotKitCoreReact;\n /**\n * Set of tool call IDs currently being executed.\n * This is tracked at the provider level to ensure tool execution events\n * are captured even before child components mount.\n */\n executingToolCallIds: ReadonlySet;\n}\n\n// Empty set for default context value\nconst EMPTY_SET: ReadonlySet = new Set();\n\n// Create the CopilotKit context\nconst CopilotKitContext = createContext({\n copilotkit: null!,\n executingToolCallIds: EMPTY_SET,\n});\n\n// Provider props interface\nexport interface CopilotKitProviderProps {\n children: ReactNode;\n runtimeUrl?: string;\n headers?: Record;\n /**\n * Credentials mode for fetch requests (e.g., \"include\" for HTTP-only cookies in cross-origin requests).\n */\n credentials?: RequestCredentials;\n /**\n * The Copilot Cloud public API key.\n */\n publicApiKey?: string;\n /**\n * Alias for `publicApiKey`\n **/\n publicLicenseKey?: string;\n properties?: Record;\n useSingleEndpoint?: boolean;\n agents__unsafe_dev_only?: Record;\n selfManagedAgents?: Record;\n renderToolCalls?: ReactToolCallRenderer[];\n renderActivityMessages?: ReactActivityMessageRenderer[];\n renderCustomMessages?: ReactCustomMessageRenderer[];\n frontendTools?: ReactFrontendTool[];\n humanInTheLoop?: ReactHumanInTheLoop[];\n showDevConsole?: boolean | \"auto\";\n /**\n * Error handler called when CopilotKit encounters an error.\n * Fires for all error types (runtime connection failures, agent errors, tool errors).\n */\n onError?: (event: {\n error: Error;\n code: CopilotKitCoreErrorCode;\n context: Record;\n }) => void | Promise;\n /**\n * Configuration for the A2UI (Agent-to-UI) renderer.\n * The built-in A2UI renderer is activated automatically when the runtime reports\n * that `a2ui` is configured in `CopilotRuntime`. This prop is optional and only\n * needed if you want to override the default theme.\n *\n * @example\n * ```tsx\n * \n * {children}\n * \n * ```\n */\n a2ui?: {\n /**\n * Override the default A2UI viewer theme.\n * When omitted, the built-in `viewerTheme` from `@copilotkit/a2ui-renderer` is used.\n */\n theme?: A2UITheme;\n };\n}\n\n// Small helper to normalize array props to a stable reference and warn\nfunction useStableArrayProp(\n prop: T[] | undefined,\n warningMessage?: string,\n isMeaningfulChange?: (initial: T[], next: T[]) => boolean,\n): T[] {\n const empty = useMemo(() => [], []);\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 = ({\n children,\n runtimeUrl,\n headers = {},\n credentials,\n publicApiKey,\n publicLicenseKey,\n properties = {},\n agents__unsafe_dev_only: agents = {},\n selfManagedAgents = {},\n renderToolCalls,\n renderActivityMessages,\n renderCustomMessages,\n frontendTools,\n humanInTheLoop,\n showDevConsole = false,\n useSingleEndpoint = false,\n onError,\n a2ui,\n}) => {\n const [shouldRenderInspector, setShouldRenderInspector] = useState(false);\n const [runtimeA2UIEnabled, setRuntimeA2UIEnabled] = 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>(\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) =>\n `${rc?.agentId ?? \"\"}:${rc?.name ?? \"\"}`;\n const setFrom = (arr: ReactToolCallRenderer[]) =>\n 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 =\n useStableArrayProp(\n renderCustomMessages,\n \"renderCustomMessages must be a stable array.\",\n );\n\n const renderActivityMessagesList = useStableArrayProp<\n ReactActivityMessageRenderer\n >(renderActivityMessages, \"renderActivityMessages must be a stable array.\");\n\n // Built-in activity renderers that are always included\n const builtInActivityRenderers = useMemo<\n ReactActivityMessageRenderer[]\n >(() => {\n const renderers: ReactActivityMessageRenderer[] = [\n {\n activityType: MCPAppsActivityType,\n content: MCPAppsActivityContentSchema,\n render: MCPAppsActivityRenderer,\n },\n ];\n\n if (runtimeA2UIEnabled) {\n renderers.unshift(\n createA2UIMessageRenderer({ theme: a2ui?.theme ?? viewerTheme }),\n );\n }\n\n return renderers;\n }, [runtimeA2UIEnabled, a2ui]);\n\n // Combine user-provided activity renderers with built-in ones\n // User-provided renderers take precedence (come first) so they can override built-ins\n const allActivityRenderers = useMemo(() => {\n return [...renderActivityMessagesList, ...builtInActivityRenderers];\n }, [renderActivityMessagesList, builtInActivityRenderers]);\n\n const resolvedPublicKey = publicApiKey ?? publicLicenseKey;\n const mergedAgents = useMemo(\n () => ({ ...agents, ...selfManagedAgents }),\n [agents, selfManagedAgents],\n );\n const hasLocalAgents = mergedAgents && Object.keys(mergedAgents).length > 0;\n\n // Merge a provided publicApiKey into headers (without overwriting an explicit header).\n const mergedHeaders = useMemo(() => {\n if (!resolvedPublicKey) return headers;\n if (headers[HEADER_NAME]) return headers;\n return {\n ...headers,\n [HEADER_NAME]: resolvedPublicKey,\n };\n }, [headers, resolvedPublicKey]);\n\n if (!runtimeUrl && !resolvedPublicKey && !hasLocalAgents) {\n const message =\n \"Missing required prop: 'runtimeUrl' or 'publicApiKey' or 'publicLicenseKey'\";\n if (process.env.NODE_ENV === \"production\") {\n throw new Error(message);\n } else {\n // In dev/test we warn but allow to facilitate local agents and unit tests.\n console.warn(message);\n }\n }\n\n const chatApiEndpoint =\n runtimeUrl ?? (resolvedPublicKey ? COPILOT_CLOUD_CHAT_URL : undefined);\n\n const frontendToolsList = useStableArrayProp(\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(\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[] = [];\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(\n `Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`,\n );\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);\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[] = [...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 =\n 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);\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 // Stable instance: created once for the provider lifetime.\n // Updates are applied via setter effects below rather than recreating the instance.\n const copilotkitRef = useRef(null);\n if (copilotkitRef.current === null) {\n copilotkitRef.current = new CopilotKitCoreReact({\n runtimeUrl: chatApiEndpoint,\n runtimeTransport: useSingleEndpoint ? \"single\" : \"rest\",\n headers: mergedHeaders,\n credentials,\n properties,\n agents__unsafe_dev_only: mergedAgents,\n tools: allTools,\n renderToolCalls: allRenderToolCalls,\n renderActivityMessages: allActivityRenderers,\n renderCustomMessages: renderCustomMessagesList,\n });\n }\n const copilotkit = copilotkitRef.current;\n\n // Sync runtimeA2UIEnabled from the core once runtime info is fetched\n useEffect(() => {\n const subscription = copilotkit.subscribe({\n onRuntimeConnectionStatusChanged: () => {\n setRuntimeA2UIEnabled(copilotkit.a2uiEnabled);\n },\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [copilotkit]);\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 subscription = copilotkit.subscribe({\n onRenderToolCallsChanged: () => {\n forceUpdate();\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [copilotkit]);\n\n // Track executing tool call IDs at the provider level.\n // This is critical for HITL reconnection: when connecting to a thread with\n // pending tool calls, the onToolExecutionStart event fires before child components\n // (like CopilotChatToolCallsView) mount. By tracking at the provider level,\n // we ensure the executing state is captured and available when children mount.\n const [executingToolCallIds, setExecutingToolCallIds] = useState<\n ReadonlySet\n >(() => new Set());\n\n useEffect(() => {\n const subscription = copilotkit.subscribe({\n onToolExecutionStart: ({ toolCallId }) => {\n setExecutingToolCallIds((prev) => {\n if (prev.has(toolCallId)) return prev;\n const next = new Set(prev);\n next.add(toolCallId);\n return next;\n });\n },\n onToolExecutionEnd: ({ toolCallId }) => {\n setExecutingToolCallIds((prev) => {\n if (!prev.has(toolCallId)) return prev;\n const next = new Set(prev);\n next.delete(toolCallId);\n return next;\n });\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [copilotkit]);\n\n // onError subscription — forward core errors to user callback\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onErrorRef.current = onError;\n }, [onError]);\n\n useEffect(() => {\n if (!onErrorRef.current) return;\n\n const subscription = copilotkit.subscribe({\n onError: (event) => {\n onErrorRef.current?.({\n error: event.error,\n code: event.code,\n context: event.context,\n });\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [copilotkit]);\n\n useEffect(() => {\n copilotkit.setRuntimeUrl(chatApiEndpoint);\n copilotkit.setRuntimeTransport(useSingleEndpoint ? \"single\" : \"rest\");\n copilotkit.setHeaders(mergedHeaders);\n copilotkit.setCredentials(credentials);\n copilotkit.setProperties(properties);\n copilotkit.setAgents__unsafe_dev_only(mergedAgents);\n }, [\n copilotkit,\n chatApiEndpoint,\n mergedHeaders,\n credentials,\n properties,\n mergedAgents,\n useSingleEndpoint,\n ]);\n\n // Sync render/tool arrays to the stable instance via setters.\n // On mount, the constructor already receives the correct initial values,\n // so we skip the first invocation. This is critical because child hooks\n // (e.g., useFrontendTool, useHumanInTheLoop) register tools dynamically\n // via addTool()/setRenderToolCalls() in their own effects, which fire\n // BEFORE parent effects (React fires effects bottom-up). If the parent\n // setter effects ran on mount, they would overwrite the children's tools.\n const didMountRef = useRef(false);\n\n useEffect(() => {\n if (!didMountRef.current) return;\n copilotkit.setTools(allTools);\n }, [copilotkit, allTools]);\n\n useEffect(() => {\n if (!didMountRef.current) return;\n copilotkit.setRenderToolCalls(allRenderToolCalls);\n }, [copilotkit, allRenderToolCalls]);\n\n useEffect(() => {\n if (!didMountRef.current) return;\n copilotkit.setRenderActivityMessages(allActivityRenderers);\n }, [copilotkit, allActivityRenderers]);\n\n useEffect(() => {\n if (!didMountRef.current) return;\n copilotkit.setRenderCustomMessages(renderCustomMessagesList);\n }, [copilotkit, renderCustomMessagesList]);\n\n // Mark mount complete — must be declared AFTER the setter effects\n // so it runs last in the effect queue on the initial mount cycle.\n useEffect(() => {\n didMountRef.current = true;\n }, []);\n\n const contextValue = useMemo(\n () => ({ copilotkit, executingToolCallIds }),\n [copilotkit, executingToolCallIds],\n );\n\n return (\n \n {children}\n {shouldRenderInspector ? : null}\n \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 subscription = context.copilotkit.subscribe({\n onRuntimeConnectionStatusChanged: () => {\n forceUpdate();\n },\n });\n return () => {\n subscription.unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return context;\n};\n"],"mappings":"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"}