@copilotkit/react-core 1.50.0-beta.11 → 1.50.0-beta.13

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 (58) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{chunk-7SHWECGN.mjs → chunk-6MMP5LPV.mjs} +2 -2
  3. package/dist/{chunk-U2ZRVVKT.mjs → chunk-7VKOBXCY.mjs} +2 -2
  4. package/dist/{chunk-LHERIF3L.mjs → chunk-7X3E6GHT.mjs} +5 -5
  5. package/dist/{chunk-YJGPIN3R.mjs → chunk-EV2FIZFH.mjs} +2 -2
  6. package/dist/{chunk-4HRUQH6U.mjs → chunk-NX57QKMK.mjs} +2 -2
  7. package/dist/{chunk-B5ELMVT7.mjs → chunk-OJVWPLC4.mjs} +2 -2
  8. package/dist/{chunk-EG56H77V.mjs → chunk-PLXQ2PM6.mjs} +4 -4
  9. package/dist/{chunk-3775VM7Y.mjs → chunk-QHAYENR3.mjs} +5 -5
  10. package/dist/{chunk-FYMZKPOL.mjs → chunk-UUMLIYAK.mjs} +28 -20
  11. package/dist/chunk-UUMLIYAK.mjs.map +1 -0
  12. package/dist/components/copilot-provider/copilotkit-props.d.ts +6 -0
  13. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  14. package/dist/components/copilot-provider/copilotkit.js +127 -1150
  15. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  16. package/dist/components/copilot-provider/copilotkit.mjs +9 -12
  17. package/dist/components/copilot-provider/index.js +127 -1150
  18. package/dist/components/copilot-provider/index.js.map +1 -1
  19. package/dist/components/copilot-provider/index.mjs +9 -12
  20. package/dist/components/dev-console/console-trigger.mjs +225 -5
  21. package/dist/components/dev-console/console-trigger.mjs.map +1 -1
  22. package/dist/components/error-boundary/error-boundary.mjs +2 -2
  23. package/dist/components/index.js +127 -1150
  24. package/dist/components/index.js.map +1 -1
  25. package/dist/components/index.mjs +9 -12
  26. package/dist/context/index.mjs +5 -5
  27. package/dist/hooks/index.mjs +22 -22
  28. package/dist/hooks/use-coagent-state-render-bridge.mjs +1 -1
  29. package/dist/hooks/use-copilot-action.mjs +2 -2
  30. package/dist/hooks/use-copilot-authenticated-action.mjs +3 -3
  31. package/dist/hooks/use-copilot-chat-headless_c.mjs +7 -7
  32. package/dist/hooks/use-copilot-chat.mjs +7 -7
  33. package/dist/hooks/use-copilot-chat_internal.mjs +6 -6
  34. package/dist/hooks/use-default-tool.mjs +3 -3
  35. package/dist/hooks/use-langgraph-interrupt-render.mjs +1 -1
  36. package/dist/index.js +274 -1288
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +47 -50
  39. package/dist/lib/copilot-task.js.map +1 -1
  40. package/dist/lib/copilot-task.mjs +10 -13
  41. package/dist/lib/index.js.map +1 -1
  42. package/dist/lib/index.mjs +10 -13
  43. package/dist/types/index.mjs +1 -1
  44. package/dist/utils/index.mjs +3 -3
  45. package/package.json +5 -5
  46. package/src/components/copilot-provider/copilotkit-props.tsx +7 -0
  47. package/src/components/copilot-provider/copilotkit.tsx +13 -5
  48. package/dist/chunk-FYMZKPOL.mjs.map +0 -1
  49. package/dist/chunk-PMWUKW3Z.mjs +0 -231
  50. package/dist/chunk-PMWUKW3Z.mjs.map +0 -1
  51. /package/dist/{chunk-7SHWECGN.mjs.map → chunk-6MMP5LPV.mjs.map} +0 -0
  52. /package/dist/{chunk-U2ZRVVKT.mjs.map → chunk-7VKOBXCY.mjs.map} +0 -0
  53. /package/dist/{chunk-LHERIF3L.mjs.map → chunk-7X3E6GHT.mjs.map} +0 -0
  54. /package/dist/{chunk-YJGPIN3R.mjs.map → chunk-EV2FIZFH.mjs.map} +0 -0
  55. /package/dist/{chunk-4HRUQH6U.mjs.map → chunk-NX57QKMK.mjs.map} +0 -0
  56. /package/dist/{chunk-B5ELMVT7.mjs.map → chunk-OJVWPLC4.mjs.map} +0 -0
  57. /package/dist/{chunk-EG56H77V.mjs.map → chunk-PLXQ2PM6.mjs.map} +0 -0
  58. /package/dist/{chunk-3775VM7Y.mjs.map → chunk-QHAYENR3.mjs.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  import "../chunk-CYDWEPFL.mjs";
2
- import {
3
- shouldShowDevConsole
4
- } from "../chunk-ICIK2BSB.mjs";
5
2
  import {
6
3
  SUGGESTION_RETRY_CONFIG
7
4
  } from "../chunk-2IDV5OHF.mjs";
5
+ import {
6
+ shouldShowDevConsole
7
+ } from "../chunk-ICIK2BSB.mjs";
8
8
  import "../chunk-SKC7AJIV.mjs";
9
9
  export {
10
10
  SUGGESTION_RETRY_CONFIG,
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
- "version": "1.50.0-beta.11",
12
+ "version": "1.50.0-beta.13",
13
13
  "sideEffects": [
14
14
  "**/*.css"
15
15
  ],
@@ -56,13 +56,13 @@
56
56
  "tsconfig": "1.4.6"
57
57
  },
58
58
  "dependencies": {
59
- "@copilotkitnext/core": "0.0.28",
60
- "@copilotkitnext/react": "0.0.28",
59
+ "@copilotkitnext/core": "0.0.30",
60
+ "@copilotkitnext/react": "0.0.30",
61
61
  "@scarf/scarf": "^1.3.0",
62
62
  "react-markdown": "^8.0.7",
63
63
  "untruncate-json": "^0.0.1",
64
- "@copilotkit/shared": "1.50.0-beta.11",
65
- "@copilotkit/runtime-client-gql": "1.50.0-beta.11"
64
+ "@copilotkit/runtime-client-gql": "1.50.0-beta.13",
65
+ "@copilotkit/shared": "1.50.0-beta.13"
66
66
  },
67
67
  "keywords": [
68
68
  "copilotkit",
@@ -159,4 +159,11 @@ export interface CopilotKitProps extends Omit<CopilotKitProviderProps, "children
159
159
  * ```
160
160
  */
161
161
  onError?: CopilotErrorHandler;
162
+
163
+ /**
164
+ * Enable or disable the CopilotKit Inspector, letting you inspect AG-UI events,
165
+ * view agent messages, check agent state, and visualize agent context. Defaults
166
+ * to enabled.
167
+ */
168
+ enableInspector?: boolean;
162
169
  }
@@ -15,7 +15,11 @@
15
15
  */
16
16
 
17
17
  import { useCallback, useEffect, useMemo, useRef, useState, SetStateAction } from "react";
18
- import { CopilotChatConfigurationProvider, CopilotKitProvider } from "@copilotkitnext/react";
18
+ import {
19
+ CopilotChatConfigurationProvider,
20
+ CopilotKitInspector,
21
+ CopilotKitProvider as CopilotKitNextProvider,
22
+ } from "@copilotkitnext/react";
19
23
  import {
20
24
  CopilotContext,
21
25
  CopilotApiConfig,
@@ -53,7 +57,6 @@ import {
53
57
  LangGraphInterruptActionSetterArgs,
54
58
  QueuedInterruptEvent,
55
59
  } from "../../types/interrupt-action";
56
- import { ConsoleTrigger } from "../dev-console/console-trigger";
57
60
  import { CoAgentStateRendersProvider } from "../../context/coagent-state-renders-context";
58
61
  import { CoAgentStateRenderBridge } from "../../hooks/use-coagent-state-render-bridge";
59
62
  import { ThreadsProvider, useThreads } from "../../context/threads-context";
@@ -61,6 +64,7 @@ import { CopilotListeners } from "../CopilotListeners";
61
64
 
62
65
  export function CopilotKit({ children, ...props }: CopilotKitProps) {
63
66
  const enabled = shouldShowDevConsole(props.showDevConsole);
67
+ const showInspector = shouldShowDevConsole(props.enableInspector);
64
68
 
65
69
  // Use API key if provided, otherwise use the license key
66
70
  const publicApiKey = props.publicApiKey || props.publicLicenseKey;
@@ -71,9 +75,14 @@ export function CopilotKit({ children, ...props }: CopilotKitProps) {
71
75
  <ToastProvider enabled={enabled}>
72
76
  <CopilotErrorBoundary publicApiKey={publicApiKey} showUsageBanner={enabled}>
73
77
  <ThreadsProvider threadId={props.threadId}>
74
- <CopilotKitProvider {...props} renderCustomMessages={renderArr} useSingleEndpoint={true}>
78
+ <CopilotKitNextProvider
79
+ {...props}
80
+ showDevConsole={showInspector}
81
+ renderCustomMessages={renderArr}
82
+ useSingleEndpoint={true}
83
+ >
75
84
  <CopilotKitInternal {...props}>{children}</CopilotKitInternal>
76
- </CopilotKitProvider>
85
+ </CopilotKitNextProvider>
77
86
  </ThreadsProvider>
78
87
  </CopilotErrorBoundary>
79
88
  </ToastProvider>
@@ -587,7 +596,6 @@ export function CopilotKitInternal(cpkProps: CopilotKitProps) {
587
596
  <MessagesTapProvider>
588
597
  <CopilotMessages>
589
598
  {memoizedChildren}
590
- {showDevConsole && <ConsoleTrigger />}
591
599
  <RegisteredActionsRenderer />
592
600
  </CopilotMessages>
593
601
  </MessagesTapProvider>
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/copilot-provider/copilotkit.tsx"],"sourcesContent":["/**\n * This component will typically wrap your entire application (or a sub-tree of your application where you want to have a copilot). It provides the copilot context to all other components and hooks.\n *\n * ## Example\n *\n * You can find more information about self-hosting CopilotKit [here](/guides/self-hosting).\n *\n * ```tsx\n * import { CopilotKit } from \"@copilotkit/react-core\";\n *\n * <CopilotKit runtimeUrl=\"<your-runtime-url>\">\n * // ... your app ...\n * </CopilotKit>\n * ```\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, SetStateAction } from \"react\";\nimport { CopilotChatConfigurationProvider, CopilotKitProvider } from \"@copilotkitnext/react\";\nimport {\n CopilotContext,\n CopilotApiConfig,\n ChatComponentsCache,\n AgentSession,\n AuthState,\n} from \"../../context/copilot-context\";\nimport useTree from \"../../hooks/use-tree\";\nimport { CopilotChatSuggestionConfiguration, DocumentPointer } from \"../../types\";\nimport { flushSync } from \"react-dom\";\nimport {\n COPILOT_CLOUD_CHAT_URL,\n CopilotCloudConfig,\n FunctionCallHandler,\n COPILOT_CLOUD_PUBLIC_API_KEY_HEADER,\n randomUUID,\n ConfigurationError,\n MissingPublicApiKeyError,\n CopilotKitError,\n CopilotErrorEvent,\n CopilotErrorHandler,\n} from \"@copilotkit/shared\";\nimport { FrontendAction } from \"../../types/frontend-action\";\nimport useFlatCategoryStore from \"../../hooks/use-flat-category-store\";\nimport { CopilotKitProps } from \"./copilotkit-props\";\nimport { CoagentState } from \"../../types/coagent-state\";\nimport { CopilotMessages, MessagesTapProvider } from \"./copilot-messages\";\nimport { ToastProvider } from \"../toast/toast-provider\";\nimport { getErrorActions, UsageBanner } from \"../usage-banner\";\nimport { shouldShowDevConsole } from \"../../utils\";\nimport { CopilotErrorBoundary } from \"../error-boundary/error-boundary\";\nimport { Agent, ExtensionsInput } from \"@copilotkit/runtime-client-gql\";\nimport {\n LangGraphInterruptRender,\n LangGraphInterruptActionSetterArgs,\n QueuedInterruptEvent,\n} from \"../../types/interrupt-action\";\nimport { ConsoleTrigger } from \"../dev-console/console-trigger\";\nimport { CoAgentStateRendersProvider } from \"../../context/coagent-state-renders-context\";\nimport { CoAgentStateRenderBridge } from \"../../hooks/use-coagent-state-render-bridge\";\nimport { ThreadsProvider, useThreads } from \"../../context/threads-context\";\nimport { CopilotListeners } from \"../CopilotListeners\";\n\nexport function CopilotKit({ children, ...props }: CopilotKitProps) {\n const enabled = shouldShowDevConsole(props.showDevConsole);\n\n // Use API key if provided, otherwise use the license key\n const publicApiKey = props.publicApiKey || props.publicLicenseKey;\n\n const renderArr = useMemo(() => [{ render: CoAgentStateRenderBridge }], []);\n\n return (\n <ToastProvider enabled={enabled}>\n <CopilotErrorBoundary publicApiKey={publicApiKey} showUsageBanner={enabled}>\n <ThreadsProvider threadId={props.threadId}>\n <CopilotKitProvider {...props} renderCustomMessages={renderArr} useSingleEndpoint={true}>\n <CopilotKitInternal {...props}>{children}</CopilotKitInternal>\n </CopilotKitProvider>\n </ThreadsProvider>\n </CopilotErrorBoundary>\n </ToastProvider>\n );\n}\n\nexport function CopilotKitInternal(cpkProps: CopilotKitProps) {\n const { children, ...props } = cpkProps;\n\n /**\n * This will throw an error if the props are invalid.\n */\n validateProps(cpkProps);\n\n // Use license key as API key if provided, otherwise use the API key\n const publicApiKey = props.publicLicenseKey || props.publicApiKey;\n\n const chatApiEndpoint = props.runtimeUrl || COPILOT_CLOUD_CHAT_URL;\n\n const [actions, setActions] = useState<Record<string, FrontendAction<any>>>({});\n\n // State for registered actions from useCopilotAction\n const [registeredActionConfigs, setRegisteredActionConfigs] = useState<\n Map<string, { type: string; action: any; component: any }>\n >(new Map());\n\n const chatComponentsCache = useRef<ChatComponentsCache>({\n actions: {},\n coAgentStateRenders: {},\n });\n\n const { addElement, removeElement, printTree, getAllElements } = useTree();\n const [isLoading, setIsLoading] = useState(false);\n const [chatInstructions, setChatInstructions] = useState(\"\");\n const [authStates, setAuthStates] = useState<Record<string, AuthState>>({});\n const [extensions, setExtensions] = useState<ExtensionsInput>({});\n const [additionalInstructions, setAdditionalInstructions] = useState<string[]>([]);\n\n const {\n addElement: addDocument,\n removeElement: removeDocument,\n allElements: allDocuments,\n } = useFlatCategoryStore<DocumentPointer>();\n\n // Compute all the functions and properties that we need to pass\n const setAction = useCallback((id: string, action: FrontendAction<any>) => {\n setActions((prevPoints) => {\n return {\n ...prevPoints,\n [id]: action,\n };\n });\n }, []);\n\n const removeAction = useCallback((id: string) => {\n setActions((prevPoints) => {\n const newPoints = { ...prevPoints };\n delete newPoints[id];\n return newPoints;\n });\n }, []);\n\n const getContextString = useCallback(\n (documents: DocumentPointer[], categories: string[]) => {\n const documentsString = documents\n .map((document) => {\n return `${document.name} (${document.sourceApplication}):\\n${document.getContents()}`;\n })\n .join(\"\\n\\n\");\n\n const nonDocumentStrings = printTree(categories);\n\n return `${documentsString}\\n\\n${nonDocumentStrings}`;\n },\n [printTree],\n );\n\n const addContext = useCallback(\n (\n context: string,\n parentId?: string,\n categories: string[] = defaultCopilotContextCategories,\n ) => {\n return addElement(context, categories, parentId);\n },\n [addElement],\n );\n\n const removeContext = useCallback(\n (id: string) => {\n removeElement(id);\n },\n [removeElement],\n );\n\n const getAllContext = useCallback(() => {\n return getAllElements();\n }, [getAllElements]);\n\n const getFunctionCallHandler = useCallback(\n (customEntryPoints?: Record<string, FrontendAction<any>>) => {\n return entryPointsToFunctionCallHandler(Object.values(customEntryPoints || actions));\n },\n [actions],\n );\n\n const getDocumentsContext = useCallback(\n (categories: string[]) => {\n return allDocuments(categories);\n },\n [allDocuments],\n );\n\n const addDocumentContext = useCallback(\n (documentPointer: DocumentPointer, categories: string[] = defaultCopilotContextCategories) => {\n return addDocument(documentPointer, categories);\n },\n [addDocument],\n );\n\n const removeDocumentContext = useCallback(\n (documentId: string) => {\n removeDocument(documentId);\n },\n [removeDocument],\n );\n\n // get the appropriate CopilotApiConfig from the props\n const copilotApiConfig: CopilotApiConfig = useMemo(() => {\n let cloud: CopilotCloudConfig | undefined = undefined;\n if (publicApiKey) {\n cloud = {\n guardrails: {\n input: {\n restrictToTopic: {\n enabled: Boolean(props.guardrails_c),\n validTopics: props.guardrails_c?.validTopics || [],\n invalidTopics: props.guardrails_c?.invalidTopics || [],\n },\n },\n },\n };\n }\n\n return {\n publicApiKey: publicApiKey,\n ...(cloud ? { cloud } : {}),\n chatApiEndpoint: chatApiEndpoint,\n headers: props.headers || {},\n properties: props.properties || {},\n transcribeAudioUrl: props.transcribeAudioUrl,\n textToSpeechUrl: props.textToSpeechUrl,\n credentials: props.credentials,\n };\n }, [\n publicApiKey,\n props.headers,\n props.properties,\n props.transcribeAudioUrl,\n props.textToSpeechUrl,\n props.credentials,\n props.cloudRestrictToTopic,\n props.guardrails_c,\n ]);\n\n const headers = useMemo(() => {\n const authHeaders = Object.values(authStates || {}).reduce((acc, state) => {\n if (state.status === \"authenticated\" && state.authHeaders) {\n return {\n ...acc,\n ...Object.entries(state.authHeaders).reduce(\n (headers, [key, value]) => ({\n ...headers,\n [key.startsWith(\"X-Custom-\") ? key : `X-Custom-${key}`]: value,\n }),\n {},\n ),\n };\n }\n return acc;\n }, {});\n\n return {\n ...(copilotApiConfig.headers || {}),\n ...(copilotApiConfig.publicApiKey\n ? { [COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: copilotApiConfig.publicApiKey }\n : {}),\n ...authHeaders,\n };\n }, [copilotApiConfig.headers, copilotApiConfig.publicApiKey, authStates]);\n\n const [internalErrorHandlers, _setInternalErrorHandler] = useState<\n Record<string, CopilotErrorHandler>\n >({});\n const setInternalErrorHandler = useCallback((handler: Record<string, CopilotErrorHandler>) => {\n _setInternalErrorHandler((prev: Record<string, CopilotErrorHandler>) => ({\n ...prev,\n ...handler,\n }));\n }, []);\n const removeInternalErrorHandler = useCallback((key: string) => {\n _setInternalErrorHandler((prev) => {\n const { [key]: _removed, ...rest } = prev;\n return rest;\n });\n }, []);\n\n // Keep latest values in refs\n const onErrorRef = useRef<CopilotErrorHandler | undefined>(props.onError);\n useEffect(() => {\n onErrorRef.current = props.onError;\n }, [props.onError]);\n\n const internalHandlersRef = useRef<Record<string, CopilotErrorHandler>>({});\n useEffect(() => {\n internalHandlersRef.current = internalErrorHandlers;\n }, [internalErrorHandlers]);\n\n const handleErrors = useCallback(\n async (error: CopilotErrorEvent) => {\n if (copilotApiConfig.publicApiKey && onErrorRef.current) {\n try {\n await onErrorRef.current(error);\n } catch (e) {\n console.error(\"Error in public onError handler:\", e);\n }\n }\n const handlers = Object.values(internalHandlersRef.current);\n await Promise.all(\n handlers.map((h) =>\n Promise.resolve(h(error)).catch((e) =>\n console.error(\"Error in internal error handler:\", e),\n ),\n ),\n );\n },\n [copilotApiConfig.publicApiKey],\n );\n\n const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = useState<{\n [key: string]: CopilotChatSuggestionConfiguration;\n }>({});\n\n const addChatSuggestionConfiguration = useCallback(\n (id: string, suggestion: CopilotChatSuggestionConfiguration) => {\n setChatSuggestionConfiguration((prev) => ({ ...prev, [id]: suggestion }));\n },\n [setChatSuggestionConfiguration],\n );\n\n const removeChatSuggestionConfiguration = useCallback(\n (id: string) => {\n setChatSuggestionConfiguration((prev) => {\n const { [id]: _, ...rest } = prev;\n return rest;\n });\n },\n [setChatSuggestionConfiguration],\n );\n\n const [availableAgents, setAvailableAgents] = useState<Agent[]>([]);\n const [coagentStates, setCoagentStates] = useState<Record<string, CoagentState>>({});\n const coagentStatesRef = useRef<Record<string, CoagentState>>({});\n const setCoagentStatesWithRef = useCallback(\n (\n value:\n | Record<string, CoagentState>\n | ((prev: Record<string, CoagentState>) => Record<string, CoagentState>),\n ) => {\n const newValue = typeof value === \"function\" ? value(coagentStatesRef.current) : value;\n coagentStatesRef.current = newValue;\n setCoagentStates((prev) => {\n return newValue;\n });\n },\n [],\n );\n\n let initialAgentSession: AgentSession | null = null;\n if (props.agent) {\n initialAgentSession = {\n agentName: props.agent,\n };\n }\n\n const [agentSession, setAgentSession] = useState<AgentSession | null>(initialAgentSession);\n\n // Update agentSession when props.agent changes\n useEffect(() => {\n if (props.agent) {\n setAgentSession({\n agentName: props.agent,\n });\n } else {\n setAgentSession(null);\n }\n }, [props.agent]);\n\n const { threadId, setThreadId: setInternalThreadId } = useThreads();\n\n const setThreadId = useCallback(\n (value: SetStateAction<string>) => {\n if (props.threadId) {\n throw new Error(\"Cannot call setThreadId() when threadId is provided via props.\");\n }\n setInternalThreadId(value);\n },\n [props.threadId],\n );\n\n const [runId, setRunId] = useState<string | null>(null);\n\n const chatAbortControllerRef = useRef<AbortController | null>(null);\n\n const showDevConsole = shouldShowDevConsole(props.showDevConsole);\n\n const [interruptActions, _setInterruptActions] = useState<\n Record<string, LangGraphInterruptRender>\n >({});\n const setInterruptAction = useCallback((action: LangGraphInterruptActionSetterArgs) => {\n _setInterruptActions((prev) => {\n if (action == null || !action.id) {\n // Cannot set action without id\n return prev;\n }\n return {\n ...prev,\n [action.id]: { ...(prev[action.id] ?? {}), ...action } as LangGraphInterruptRender,\n };\n });\n }, []);\n const removeInterruptAction = useCallback((actionId: string): void => {\n _setInterruptActions((prev) => {\n const { [actionId]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n\n const [interruptEventQueue, setInterruptEventQueue] = useState<\n Record<string, QueuedInterruptEvent[]>\n >({});\n\n const addInterruptEvent = useCallback((queuedEvent: QueuedInterruptEvent) => {\n setInterruptEventQueue((prev) => {\n const threadQueue = prev[queuedEvent.threadId] || [];\n return {\n ...prev,\n [queuedEvent.threadId]: [...threadQueue, queuedEvent],\n };\n });\n }, []);\n\n const resolveInterruptEvent = useCallback(\n (threadId: string, eventId: string, response: string) => {\n setInterruptEventQueue((prev) => {\n const threadQueue = prev[threadId] || [];\n return {\n ...prev,\n [threadId]: threadQueue.map((queuedEvent) =>\n queuedEvent.eventId === eventId\n ? { ...queuedEvent, event: { ...queuedEvent.event, response } }\n : queuedEvent,\n ),\n };\n });\n },\n [],\n );\n\n const memoizedChildren = useMemo(() => children, [children]);\n const [bannerError, setBannerError] = useState<CopilotKitError | null>(null);\n\n const agentLock = useMemo(() => props.agent ?? null, [props.agent]);\n\n const forwardedParameters = useMemo(\n () => props.forwardedParameters ?? {},\n [props.forwardedParameters],\n );\n\n const updateExtensions = useCallback(\n (newExtensions: SetStateAction<ExtensionsInput>) => {\n setExtensions((prev: ExtensionsInput) => {\n const resolved = typeof newExtensions === \"function\" ? newExtensions(prev) : newExtensions;\n const isSameLength = Object.keys(resolved).length === Object.keys(prev).length;\n const isEqual =\n isSameLength &&\n // @ts-ignore\n Object.entries(resolved).every(([key, value]) => prev[key] === value);\n\n return isEqual ? prev : resolved;\n });\n },\n [setExtensions],\n );\n\n const updateAuthStates = useCallback(\n (newAuthStates: SetStateAction<Record<string, AuthState>>) => {\n setAuthStates((prev) => {\n const resolved = typeof newAuthStates === \"function\" ? newAuthStates(prev) : newAuthStates;\n const isSameLength = Object.keys(resolved).length === Object.keys(prev).length;\n const isEqual =\n isSameLength &&\n // @ts-ignore\n Object.entries(resolved).every(([key, value]) => prev[key] === value);\n\n return isEqual ? prev : resolved;\n });\n },\n [setAuthStates],\n );\n\n const handleSetRegisteredActions = useCallback((actionConfig: any): string => {\n const key = actionConfig.action.name || randomUUID();\n setRegisteredActionConfigs((prev) => {\n const newMap = new Map(prev);\n newMap.set(key, actionConfig);\n return newMap;\n });\n return key;\n }, []);\n\n const handleRemoveRegisteredAction = useCallback((actionKey: string) => {\n setRegisteredActionConfigs((prev) => {\n const newMap = new Map(prev);\n newMap.delete(actionKey);\n return newMap;\n });\n }, []);\n\n // Component to render all registered actions\n const RegisteredActionsRenderer = useMemo(() => {\n return () => (\n <>\n {Array.from(registeredActionConfigs.entries()).map(([key, config]) => {\n const Component = config.component;\n return <Component key={key} action={config.action} />;\n })}\n </>\n );\n }, [registeredActionConfigs]);\n\n return (\n <CopilotChatConfigurationProvider\n // labels={labels}\n // isModalDefaultOpen={isModalDefaultOpen}\n agentId={props.agent ?? \"default\"}\n threadId={threadId}\n >\n <CopilotContext.Provider\n value={{\n actions,\n chatComponentsCache,\n getFunctionCallHandler,\n setAction,\n removeAction,\n setRegisteredActions: handleSetRegisteredActions,\n removeRegisteredAction: handleRemoveRegisteredAction,\n getContextString,\n addContext,\n removeContext,\n getAllContext,\n getDocumentsContext,\n addDocumentContext,\n removeDocumentContext,\n copilotApiConfig: copilotApiConfig,\n isLoading,\n setIsLoading,\n chatSuggestionConfiguration,\n addChatSuggestionConfiguration,\n removeChatSuggestionConfiguration,\n chatInstructions,\n setChatInstructions,\n additionalInstructions,\n setAdditionalInstructions,\n showDevConsole,\n coagentStates,\n setCoagentStates,\n coagentStatesRef,\n setCoagentStatesWithRef,\n agentSession,\n setAgentSession,\n forwardedParameters,\n agentLock,\n threadId,\n setThreadId,\n runId,\n setRunId,\n chatAbortControllerRef,\n availableAgents,\n authConfig_c: props.authConfig_c,\n authStates_c: authStates,\n setAuthStates_c: updateAuthStates,\n extensions,\n setExtensions: updateExtensions,\n interruptActions,\n setInterruptAction,\n removeInterruptAction,\n interruptEventQueue,\n addInterruptEvent,\n resolveInterruptEvent,\n bannerError,\n setBannerError,\n onError: handleErrors,\n internalErrorHandlers,\n setInternalErrorHandler,\n removeInternalErrorHandler,\n }}\n >\n <CopilotListeners />\n <CoAgentStateRendersProvider>\n <MessagesTapProvider>\n <CopilotMessages>\n {memoizedChildren}\n {showDevConsole && <ConsoleTrigger />}\n <RegisteredActionsRenderer />\n </CopilotMessages>\n </MessagesTapProvider>\n {bannerError && showDevConsole && (\n <UsageBanner\n severity={bannerError.severity}\n message={bannerError.message}\n onClose={() => setBannerError(null)}\n actions={getErrorActions(bannerError)}\n />\n )}\n </CoAgentStateRendersProvider>\n </CopilotContext.Provider>\n </CopilotChatConfigurationProvider>\n );\n}\n\nexport const defaultCopilotContextCategories = [\"global\"];\n\nfunction entryPointsToFunctionCallHandler(actions: FrontendAction<any>[]): FunctionCallHandler {\n return async ({ name, args }: { name: string; args: Record<string, any> }) => {\n let actionsByFunctionName: Record<string, FrontendAction<any>> = {};\n for (let action of actions) {\n actionsByFunctionName[action.name] = action;\n }\n\n const action = actionsByFunctionName[name];\n let result: any = undefined;\n if (action) {\n await new Promise<void>((resolve, reject) => {\n flushSync(async () => {\n try {\n result = await action.handler?.(args);\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n });\n await new Promise((resolve) => setTimeout(resolve, 20));\n }\n return result;\n };\n}\n\nfunction formatFeatureName(featureName: string): string {\n return featureName\n .replace(/_c$/, \"\")\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\" \");\n}\n\nfunction validateProps(props: CopilotKitProps): never | void {\n const cloudFeatures = Object.keys(props).filter((key) => key.endsWith(\"_c\"));\n\n // Check if we have either a runtimeUrl or one of the API keys\n const hasApiKey = props.publicApiKey || props.publicLicenseKey;\n\n if (!props.runtimeUrl && !hasApiKey) {\n throw new ConfigurationError(\n \"Missing required prop: 'runtimeUrl' or 'publicApiKey' or 'publicLicenseKey'\",\n );\n }\n\n if (cloudFeatures.length > 0 && !hasApiKey) {\n throw new MissingPublicApiKeyError(\n `Missing required prop: 'publicApiKey' or 'publicLicenseKey' to use cloud features: ${cloudFeatures\n .map(formatFeatureName)\n .join(\", \")}`,\n );\n }\n}\n"],"mappings":"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","names":["_a","_b","headers","threadId","action"]}
@@ -1,231 +0,0 @@
1
- import {
2
- DeveloperConsoleModal
3
- } from "./chunk-YCG6SNAU.mjs";
4
- import {
5
- CopilotKitIcon
6
- } from "./chunk-PIF5KJYI.mjs";
7
- import {
8
- useCopilotContext
9
- } from "./chunk-AFNWX62Q.mjs";
10
-
11
- // src/components/dev-console/console-trigger.tsx
12
- import { useState, useEffect, useRef } from "react";
13
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
14
- var INSPECTOR_HIDE_KEY = "cpk:inspector:hidden";
15
- function ConsoleTrigger({ position = "bottom-right" }) {
16
- const context = useCopilotContext();
17
- const hasApiKey = Boolean(context.copilotApiConfig.publicApiKey);
18
- const [isModalOpen, setIsModalOpen] = useState(false);
19
- const [isHovered, setIsHovered] = useState(false);
20
- const [isDragging, setIsDragging] = useState(false);
21
- const [buttonPosition, setButtonPosition] = useState(null);
22
- const [mounted, setMounted] = useState(false);
23
- const [isHidden, setIsHidden] = useState(false);
24
- const dragRef = useRef(null);
25
- const buttonRef = useRef(null);
26
- useEffect(() => {
27
- setMounted(true);
28
- try {
29
- const hidden = typeof window !== "undefined" ? localStorage.getItem(INSPECTOR_HIDE_KEY) : null;
30
- if (hidden === "1" || hidden === "true") {
31
- setIsHidden(true);
32
- }
33
- } catch (e) {
34
- }
35
- if (typeof window !== "undefined" && !buttonPosition) {
36
- const buttonSize = 60;
37
- const margin = 24;
38
- const initialPosition = {
39
- x: margin,
40
- y: window.innerHeight - buttonSize - margin
41
- };
42
- setButtonPosition(initialPosition);
43
- }
44
- }, [position]);
45
- const handleMouseDown = (e) => {
46
- e.preventDefault();
47
- if (!buttonPosition)
48
- return;
49
- dragRef.current = {
50
- startX: e.clientX,
51
- startY: e.clientY,
52
- buttonX: buttonPosition.x,
53
- buttonY: buttonPosition.y
54
- };
55
- setIsDragging(true);
56
- };
57
- useEffect(() => {
58
- if (!isDragging)
59
- return;
60
- const handleMouseMove = (e) => {
61
- e.preventDefault();
62
- e.stopPropagation();
63
- if (!dragRef.current)
64
- return;
65
- const deltaX = e.clientX - dragRef.current.startX;
66
- const deltaY = e.clientY - dragRef.current.startY;
67
- let newX = dragRef.current.buttonX + deltaX;
68
- let newY = dragRef.current.buttonY + deltaY;
69
- newX = Math.max(0, Math.min(newX, window.innerWidth - 60));
70
- newY = Math.max(0, Math.min(newY, window.innerHeight - 60));
71
- setButtonPosition({ x: newX, y: newY });
72
- };
73
- const handleMouseUp = (e) => {
74
- e.preventDefault();
75
- e.stopPropagation();
76
- setIsDragging(false);
77
- dragRef.current = null;
78
- };
79
- document.addEventListener("mousemove", handleMouseMove, { capture: true, passive: false });
80
- document.addEventListener("mouseup", handleMouseUp, { capture: true, passive: false });
81
- return () => {
82
- document.removeEventListener("mousemove", handleMouseMove, { capture: true });
83
- document.removeEventListener("mouseup", handleMouseUp, { capture: true });
84
- };
85
- }, [isDragging]);
86
- if (!mounted || !buttonPosition || isHidden) {
87
- return null;
88
- }
89
- return /* @__PURE__ */ jsxs(Fragment, { children: [
90
- /* @__PURE__ */ jsxs(
91
- "button",
92
- {
93
- ref: buttonRef,
94
- onClick: (e) => {
95
- if (!isDragging) {
96
- if (e.metaKey || e.altKey) {
97
- try {
98
- localStorage.setItem(INSPECTOR_HIDE_KEY, "1");
99
- } catch (e2) {
100
- }
101
- setIsHidden(true);
102
- return;
103
- }
104
- setIsModalOpen(true);
105
- }
106
- },
107
- onContextMenu: (e) => {
108
- e.preventDefault();
109
- try {
110
- localStorage.setItem(INSPECTOR_HIDE_KEY, "1");
111
- } catch (e2) {
112
- }
113
- setIsHidden(true);
114
- },
115
- onMouseDown: handleMouseDown,
116
- onMouseEnter: () => setIsHovered(true),
117
- onMouseLeave: () => setIsHovered(false),
118
- style: {
119
- position: "fixed",
120
- left: `${buttonPosition.x}px`,
121
- top: `${buttonPosition.y}px`,
122
- zIndex: 2147483647,
123
- width: "60px",
124
- height: "60px",
125
- background: isDragging ? "#000000" : isHovered ? "#111111" : "#000000",
126
- color: "white",
127
- borderRadius: "50%",
128
- boxShadow: isDragging ? "0 8px 32px rgba(0, 0, 0, 0.6), 0 4px 16px rgba(0, 0, 0, 0.4)" : isHovered ? "0 12px 40px rgba(0, 0, 0, 0.7), 0 6px 20px rgba(0, 0, 0, 0.5)" : "0 6px 20px rgba(0, 0, 0, 0.5), 0 3px 10px rgba(0, 0, 0, 0.3)",
129
- transition: isDragging ? "none" : "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
130
- display: "flex",
131
- alignItems: "center",
132
- justifyContent: "center",
133
- border: "none",
134
- cursor: isDragging ? "grabbing" : "grab",
135
- opacity: 1,
136
- userSelect: "none",
137
- transform: isDragging ? "scale(1.05)" : isHovered ? "scale(1.1)" : "scale(1)",
138
- backdropFilter: "blur(10px)",
139
- pointerEvents: "auto",
140
- isolation: "isolate"
141
- },
142
- title: hasApiKey ? "Open Inspector (Drag to move)" : "Inspector (License Key Required, Drag to move)",
143
- children: [
144
- /* @__PURE__ */ jsx(
145
- "div",
146
- {
147
- onClick: (e) => {
148
- e.preventDefault();
149
- e.stopPropagation();
150
- try {
151
- localStorage.setItem(INSPECTOR_HIDE_KEY, "1");
152
- } catch (e2) {
153
- }
154
- setIsHidden(true);
155
- },
156
- style: {
157
- position: "absolute",
158
- bottom: "2px",
159
- right: "2px",
160
- width: "20px",
161
- height: "20px",
162
- borderRadius: "50%",
163
- background: "#ffffff",
164
- color: "#ef4444",
165
- fontSize: "14px",
166
- lineHeight: "18px",
167
- textAlign: "center",
168
- boxShadow: "0 2px 6px rgba(0,0,0,0.35)",
169
- cursor: "pointer",
170
- border: "1px solid #e5e7eb",
171
- display: "flex",
172
- alignItems: "center",
173
- justifyContent: "center",
174
- zIndex: 1
175
- },
176
- title: "Hide Inspector",
177
- children: "\xD7"
178
- }
179
- ),
180
- /* @__PURE__ */ jsx(
181
- "div",
182
- {
183
- style: {
184
- width: "28px",
185
- height: "28px",
186
- display: "flex",
187
- alignItems: "center",
188
- justifyContent: "center",
189
- filter: "drop-shadow(0 2px 4px rgba(0,0,0,0.2))"
190
- },
191
- children: /* @__PURE__ */ jsx(CopilotKitIcon, {})
192
- }
193
- ),
194
- !hasApiKey && /* @__PURE__ */ jsx(
195
- "div",
196
- {
197
- style: {
198
- position: "absolute",
199
- top: "-2px",
200
- right: "-2px",
201
- width: "18px",
202
- height: "18px",
203
- background: "linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%)",
204
- borderRadius: "50%",
205
- display: "flex",
206
- alignItems: "center",
207
- justifyContent: "center",
208
- boxShadow: "0 2px 8px rgba(255, 107, 107, 0.4)",
209
- border: "2px solid white"
210
- },
211
- children: /* @__PURE__ */ jsx("span", { style: { fontSize: "10px", color: "white", fontWeight: "bold" }, children: "!" })
212
- }
213
- )
214
- ]
215
- }
216
- ),
217
- /* @__PURE__ */ jsx(
218
- DeveloperConsoleModal,
219
- {
220
- isOpen: isModalOpen,
221
- onClose: () => setIsModalOpen(false),
222
- hasApiKey
223
- }
224
- )
225
- ] });
226
- }
227
-
228
- export {
229
- ConsoleTrigger
230
- };
231
- //# sourceMappingURL=chunk-PMWUKW3Z.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dev-console/console-trigger.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useEffect, useRef } from \"react\";\nimport { useCopilotContext } from \"../../context/copilot-context\";\nimport { CopilotKitIcon } from \"./icons\";\nimport { DeveloperConsoleModal } from \"./developer-console-modal\";\n\n// Storage key for hiding the Inspector trigger/modal\nconst INSPECTOR_HIDE_KEY = \"cpk:inspector:hidden\";\n\ninterface ConsoleTriggerProps {\n position?: \"bottom-left\" | \"bottom-right\";\n}\n\nexport function ConsoleTrigger({ position = \"bottom-right\" }: ConsoleTriggerProps) {\n const context = useCopilotContext();\n const hasApiKey = Boolean(context.copilotApiConfig.publicApiKey);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [buttonPosition, setButtonPosition] = useState<{ x: number; y: number } | null>(null);\n const [mounted, setMounted] = useState(false);\n const [isHidden, setIsHidden] = useState(false);\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n buttonX: number;\n buttonY: number;\n } | null>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Initialize on client side only\n useEffect(() => {\n setMounted(true);\n try {\n const hidden =\n typeof window !== \"undefined\" ? localStorage.getItem(INSPECTOR_HIDE_KEY) : null;\n if (hidden === \"1\" || hidden === \"true\") {\n setIsHidden(true);\n }\n } catch {\n // ignore\n }\n if (typeof window !== \"undefined\" && !buttonPosition) {\n const buttonSize = 60;\n const margin = 24;\n\n const initialPosition = {\n x: margin,\n y: window.innerHeight - buttonSize - margin,\n };\n\n setButtonPosition(initialPosition);\n }\n }, [position]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n if (!buttonPosition) return;\n\n dragRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n buttonX: buttonPosition.x,\n buttonY: buttonPosition.y,\n };\n setIsDragging(true);\n };\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!dragRef.current) return;\n\n const deltaX = e.clientX - dragRef.current.startX;\n const deltaY = e.clientY - dragRef.current.startY;\n\n // Calculate new position\n let newX = dragRef.current.buttonX + deltaX;\n let newY = dragRef.current.buttonY + deltaY;\n\n // Keep button within viewport bounds\n newX = Math.max(0, Math.min(newX, window.innerWidth - 60));\n newY = Math.max(0, Math.min(newY, window.innerHeight - 60));\n\n setButtonPosition({ x: newX, y: newY });\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n dragRef.current = null;\n };\n\n // Use capture phase to intercept events before they reach other handlers\n document.addEventListener(\"mousemove\", handleMouseMove, { capture: true, passive: false });\n document.addEventListener(\"mouseup\", handleMouseUp, { capture: true, passive: false });\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove, { capture: true });\n document.removeEventListener(\"mouseup\", handleMouseUp, { capture: true });\n };\n }, [isDragging]);\n\n // Don't render until mounted and position is initialized\n if (!mounted || !buttonPosition || isHidden) {\n return null;\n }\n\n return (\n <>\n <button\n ref={buttonRef}\n onClick={(e) => {\n if (!isDragging) {\n // Modifier-click hides\n if (e.metaKey || e.altKey) {\n try {\n localStorage.setItem(INSPECTOR_HIDE_KEY, \"1\");\n } catch {}\n setIsHidden(true);\n return;\n }\n setIsModalOpen(true);\n }\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n try {\n localStorage.setItem(INSPECTOR_HIDE_KEY, \"1\");\n } catch {}\n setIsHidden(true);\n }}\n onMouseDown={handleMouseDown}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: \"fixed\",\n left: `${buttonPosition.x}px`,\n top: `${buttonPosition.y}px`,\n zIndex: 2147483647,\n width: \"60px\",\n height: \"60px\",\n background: isDragging ? \"#000000\" : isHovered ? \"#111111\" : \"#000000\",\n color: \"white\",\n borderRadius: \"50%\",\n boxShadow: isDragging\n ? \"0 8px 32px rgba(0, 0, 0, 0.6), 0 4px 16px rgba(0, 0, 0, 0.4)\"\n : isHovered\n ? \"0 12px 40px rgba(0, 0, 0, 0.7), 0 6px 20px rgba(0, 0, 0, 0.5)\"\n : \"0 6px 20px rgba(0, 0, 0, 0.5), 0 3px 10px rgba(0, 0, 0, 0.3)\",\n transition: isDragging ? \"none\" : \"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n cursor: isDragging ? \"grabbing\" : \"grab\",\n opacity: 1,\n userSelect: \"none\",\n transform: isDragging ? \"scale(1.05)\" : isHovered ? \"scale(1.1)\" : \"scale(1)\",\n backdropFilter: \"blur(10px)\",\n pointerEvents: \"auto\",\n isolation: \"isolate\",\n }}\n title={\n hasApiKey\n ? \"Open Inspector (Drag to move)\"\n : \"Inspector (License Key Required, Drag to move)\"\n }\n >\n {/* Close (hide) control */}\n <div\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n localStorage.setItem(INSPECTOR_HIDE_KEY, \"1\");\n } catch {\n // ignore\n }\n setIsHidden(true);\n }}\n style={{\n position: \"absolute\",\n bottom: \"2px\",\n right: \"2px\",\n width: \"20px\",\n height: \"20px\",\n borderRadius: \"50%\",\n background: \"#ffffff\",\n color: \"#ef4444\",\n fontSize: \"14px\",\n lineHeight: \"18px\",\n textAlign: \"center\",\n boxShadow: \"0 2px 6px rgba(0,0,0,0.35)\",\n cursor: \"pointer\",\n border: \"1px solid #e5e7eb\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 1,\n }}\n title=\"Hide Inspector\"\n >\n ×\n </div>\n <div\n style={{\n width: \"28px\",\n height: \"28px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n filter: \"drop-shadow(0 2px 4px rgba(0,0,0,0.2))\",\n }}\n >\n <CopilotKitIcon />\n </div>\n {!hasApiKey && (\n <div\n style={{\n position: \"absolute\",\n top: \"-2px\",\n right: \"-2px\",\n width: \"18px\",\n height: \"18px\",\n background: \"linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%)\",\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n boxShadow: \"0 2px 8px rgba(255, 107, 107, 0.4)\",\n border: \"2px solid white\",\n }}\n >\n <span style={{ fontSize: \"10px\", color: \"white\", fontWeight: \"bold\" }}>!</span>\n </div>\n )}\n </button>\n\n <DeveloperConsoleModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n hasApiKey={hasApiKey}\n />\n </>\n );\n}\n"],"mappings":"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","names":["e"]}