@copilotkit/runtime 1.9.2-next.4 → 1.9.2-next.5

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 (30) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{chunk-6W7TKZNY.mjs → chunk-5WRXYU4R.mjs} +2 -2
  3. package/dist/{chunk-5FNEYAWH.mjs → chunk-BLBS3CQH.mjs} +2 -2
  4. package/dist/{chunk-CJ44W4R2.mjs → chunk-RK7WRNH6.mjs} +2 -2
  5. package/dist/{chunk-NK2XARWT.mjs → chunk-T4U5EWYD.mjs} +2 -2
  6. package/dist/{chunk-ZUF3A5TW.mjs → chunk-ZVJSUAD7.mjs} +2 -2
  7. package/dist/{chunk-ZUF3A5TW.mjs.map → chunk-ZVJSUAD7.mjs.map} +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +5 -5
  11. package/dist/lib/index.js +1 -1
  12. package/dist/lib/index.js.map +1 -1
  13. package/dist/lib/index.mjs +5 -5
  14. package/dist/lib/integrations/index.js +1 -1
  15. package/dist/lib/integrations/index.js.map +1 -1
  16. package/dist/lib/integrations/index.mjs +4 -4
  17. package/dist/lib/integrations/nest/index.js +1 -1
  18. package/dist/lib/integrations/nest/index.js.map +1 -1
  19. package/dist/lib/integrations/nest/index.mjs +2 -2
  20. package/dist/lib/integrations/node-express/index.js +1 -1
  21. package/dist/lib/integrations/node-express/index.js.map +1 -1
  22. package/dist/lib/integrations/node-express/index.mjs +2 -2
  23. package/dist/lib/integrations/node-http/index.js +1 -1
  24. package/dist/lib/integrations/node-http/index.js.map +1 -1
  25. package/dist/lib/integrations/node-http/index.mjs +1 -1
  26. package/package.json +2 -2
  27. /package/dist/{chunk-6W7TKZNY.mjs.map → chunk-5WRXYU4R.mjs.map} +0 -0
  28. /package/dist/{chunk-5FNEYAWH.mjs.map → chunk-BLBS3CQH.mjs.map} +0 -0
  29. /package/dist/{chunk-CJ44W4R2.mjs.map → chunk-RK7WRNH6.mjs.map} +0 -0
  30. /package/dist/{chunk-NK2XARWT.mjs.map → chunk-T4U5EWYD.mjs.map} +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/index.ts","../src/service-adapters/openai/openai-adapter.ts","../src/service-adapters/openai/utils.ts","../src/service-adapters/langchain/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/google/google-genai-adapter.ts","../src/service-adapters/openai/openai-assistant-adapter.ts","../src/service-adapters/unify/unify-adapter.ts","../src/service-adapters/groq/groq-adapter.ts","../src/lib/integrations/shared.ts","../src/graphql/resolvers/copilot.resolver.ts","../src/graphql/inputs/generate-copilot-response.input.ts","../src/graphql/inputs/message.input.ts","../src/graphql/types/enums.ts","../src/graphql/types/base/index.ts","../src/graphql/inputs/frontend.input.ts","../src/graphql/inputs/action.input.ts","../src/graphql/inputs/cloud.input.ts","../src/graphql/inputs/cloud-guardrails.input.ts","../src/graphql/inputs/forwarded-parameters.input.ts","../src/graphql/inputs/agent-session.input.ts","../src/graphql/inputs/agent-state.input.ts","../src/graphql/inputs/extensions.input.ts","../src/graphql/inputs/meta-event.input.ts","../src/graphql/types/meta-events.type.ts","../src/graphql/types/copilot-response.type.ts","../src/graphql/types/message-status.type.ts","../src/graphql/types/response-status.type.ts","../src/graphql/types/extensions-response.type.ts","../src/service-adapters/events.ts","../src/lib/telemetry-client.ts","../src/lib/runtime/remote-actions.ts","../src/lib/runtime/remote-action-constructors.ts","../src/agents/langgraph/event-source.ts","../src/agents/langgraph/events.ts","../src/lib/runtime/remote-lg-action.ts","../src/lib/runtime/retry-utils.ts","../src/lib/streaming.ts","../src/lib/runtime/agui-action.ts","../src/lib/runtime/copilot-runtime.ts","../src/service-adapters/langchain/langserve.ts","../src/service-adapters/anthropic/anthropic-adapter.ts","../src/service-adapters/anthropic/utils.ts","../src/service-adapters/experimental/ollama/ollama-adapter.ts","../src/service-adapters/bedrock/bedrock-adapter.ts","../src/service-adapters/empty/empty-adapter.ts","../src/graphql/types/converted/index.ts","../src/service-adapters/conversion.ts","../src/lib/runtime/mcp-tools-utils.ts","../src/utils/failed-response-status-reasons.ts","../src/graphql/types/agents-response.type.ts","../src/lib/logger.ts","../src/graphql/resolvers/state.resolver.ts","../src/graphql/types/load-agent-state-response.type.ts","../src/graphql/inputs/load-agent-state.input.ts","../src/lib/integrations/nextjs/app-router.ts","../src/lib/integrations/nextjs/pages-router.ts","../src/lib/integrations/node-http/index.ts","../src/lib/integrations/node-express/index.ts","../src/lib/integrations/nest/index.ts","../src/lib/runtime/langgraph/langgraph-agent.ts"],"sourcesContent":["{\n \"name\": \"@copilotkit/runtime\",\n \"private\": false,\n \"homepage\": \"https://github.com/CopilotKit/CopilotKit\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/CopilotKit/CopilotKit.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"version\": \"1.9.2-next.4\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"dev\": \"tsup --watch --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"test\": \"jest --passWithNoTests\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist && rm -rf .next && rm -rf __snapshots__\",\n \"generate-graphql-schema\": \"rm -rf __snapshots__ && ts-node ./scripts/generate-gql-schema.ts\",\n \"link:global\": \"pnpm link --global\",\n \"unlink:global\": \"pnpm unlink --global\"\n },\n \"devDependencies\": {\n \"@jest/globals\": \"^29.7.0\",\n \"@swc/core\": \"1.5.28\",\n \"@types/express\": \"^4.17.21\",\n \"@types/jest\": \"^29.5.12\",\n \"@types/node\": \"^18.11.17\",\n \"@whatwg-node/server\": \"^0.9.34\",\n \"eslint\": \"^8.56.0\",\n \"eslint-config-custom\": \"workspace:*\",\n \"jest\": \"^29.6.4\",\n \"nodemon\": \"^3.1.3\",\n \"ts-jest\": \"^29.1.1\",\n \"ts-node\": \"^10.9.2\",\n \"tsconfig\": \"workspace:*\",\n \"tsup\": \"^6.7.0\",\n \"typescript\": \"^5.2.3\",\n \"zod-to-json-schema\": \"^3.23.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.28\",\n \"@ag-ui/core\": \"0.0.28\",\n \"@ag-ui/encoder\": \"0.0.28\",\n \"@ag-ui/langgraph\": \"0.0.4\",\n \"@ag-ui/proto\": \"0.0.28\",\n \"@anthropic-ai/sdk\": \"^0.27.3\",\n \"@copilotkit/shared\": \"workspace:*\",\n \"@graphql-yoga/plugin-defer-stream\": \"^3.3.1\",\n \"@langchain/aws\": \"^0.1.9\",\n \"@langchain/community\": \"^0.3.29\",\n \"@langchain/core\": \"^0.3.38\",\n \"@langchain/google-gauth\": \"^0.1.0\",\n \"@langchain/langgraph-sdk\": \"^0.0.70\",\n \"@langchain/openai\": \"^0.4.2\",\n \"class-transformer\": \"^0.5.1\",\n \"class-validator\": \"^0.14.1\",\n \"express\": \"^4.19.2\",\n \"graphql\": \"^16.8.1\",\n \"graphql-scalars\": \"^1.23.0\",\n \"graphql-yoga\": \"^5.3.1\",\n \"groq-sdk\": \"^0.5.0\",\n \"langchain\": \"^0.3.3\",\n \"openai\": \"^4.85.1\",\n \"partial-json\": \"^0.1.7\",\n \"pino\": \"^9.2.0\",\n \"pino-pretty\": \"^11.2.1\",\n \"reflect-metadata\": \"^0.2.2\",\n \"rxjs\": \"7.8.1\",\n \"type-graphql\": \"2.0.0-rc.1\",\n \"zod\": \"^3.23.3\"\n },\n \"peerDependencies\": {\n \"@ag-ui/client\": \">=0.0.28\",\n \"@ag-ui/core\": \">=0.0.28\",\n \"@ag-ui/encoder\": \">=0.0.28\",\n \"@ag-ui/proto\": \">=0.0.28\"\n },\n \"keywords\": [\n \"copilotkit\",\n \"copilot\",\n \"react\",\n \"nextjs\",\n \"nodejs\",\n \"ai\",\n \"assistant\",\n \"javascript\",\n \"automation\",\n \"textarea\"\n ]\n}\n","import \"reflect-metadata\";\nexport * from \"./lib\";\nexport * from \"./utils\";\nexport * from \"./service-adapters\";\n","/**\n * Copilot Runtime adapter for OpenAI.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\", // optional\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n *\n * ## Example with Azure OpenAI\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * // The name of your Azure OpenAI Instance.\n * // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource\n * const instance = \"<your instance name>\";\n *\n * // Corresponds to your Model deployment within your OpenAI resource, e.g. my-gpt35-16k-deployment\n * // Navigate to the Azure OpenAI Studio to deploy a model.\n * const model = \"<your model>\";\n *\n * const apiKey = process.env[\"AZURE_OPENAI_API_KEY\"];\n * if (!apiKey) {\n * throw new Error(\"The AZURE_OPENAI_API_KEY environment variable is missing or empty.\");\n * }\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * apiKey,\n * baseURL: `https://${instance}.openai.azure.com/openai/deployments/${model}`,\n * defaultQuery: { \"api-version\": \"2024-04-01-preview\" },\n * defaultHeaders: { \"api-key\": apiKey },\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n */\nimport OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be\n * created.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private disableParallelToolCalls: boolean = false;\n private _openai: OpenAI;\n private keepSystemRole: boolean = false;\n\n public get openai(): OpenAI {\n return this._openai;\n }\n\n constructor(params?: OpenAIAdapterParams) {\n this._openai = params?.openai || new OpenAI({});\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId: threadIdFromRequest,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n const threadId = threadIdFromRequest ?? randomUUID();\n\n // ALLOWLIST APPROACH: Only include tool_result messages that correspond to valid tool_calls\n // Step 1: Extract valid tool_call IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Filter messages, keeping only those with valid tool_call IDs\n const filteredMessages = messages.filter((message) => {\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_call\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return false;\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n return true;\n }\n\n // Keep all non-tool-result messages\n return true;\n });\n\n let openaiMessages = filteredMessages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n\n try {\n const stream = this.openai.beta.chat.completions.stream({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && { max_tokens: forwardedParameters.maxTokens }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n if (chunk.choices.length === 0) {\n continue;\n }\n\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.id,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n } catch (error) {\n console.error(\"[OpenAI] Error processing stream:\", error);\n throw error;\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw error;\n }\n\n return {\n threadId,\n };\n }\n}\n","import { Message } from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport {\n ChatCompletionAssistantMessageParam,\n ChatCompletionMessageParam,\n ChatCompletionSystemMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionDeveloperMessageParam,\n} from \"openai/resources/chat\";\nimport { parseJson } from \"@copilotkit/shared\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= maxTokensForOpenAIModel(model);\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nexport function maxTokensForOpenAIModel(model: string): number {\n return maxTokensByModel[model] || DEFAULT_MAX_TOKENS;\n}\n\nconst DEFAULT_MAX_TOKENS = 128000;\n\nconst maxTokensByModel: { [key: string]: number } = {\n // o1\n o1: 200000,\n \"o1-2024-12-17\": 200000,\n \"o1-mini\": 128000,\n \"o1-mini-2024-09-12\": 128000,\n \"o1-preview\": 128000,\n \"o1-preview-2024-09-12\": 128000,\n // o3-mini\n \"o3-mini\": 200000,\n \"o3-mini-2025-01-31\": 200000,\n // GPT-4\n \"gpt-4o\": 128000,\n \"chatgpt-4o-latest\": 128000,\n \"gpt-4o-2024-08-06\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4o-mini\": 128000,\n \"gpt-4o-mini-2024-07-18\": 128000,\n \"gpt-4-turbo\": 128000,\n \"gpt-4-turbo-2024-04-09\": 128000,\n \"gpt-4-0125-preview\": 128000,\n \"gpt-4-turbo-preview\": 128000,\n \"gpt-4-1106-preview\": 128000,\n \"gpt-4-vision-preview\": 128000,\n \"gpt-4-1106-vision-preview\": 128000,\n \"gpt-4-32k\": 32768,\n \"gpt-4-32k-0613\": 32768,\n \"gpt-4-32k-0314\": 32768,\n \"gpt-4\": 8192,\n \"gpt-4-0613\": 8192,\n \"gpt-4-0314\": 8192,\n\n // GPT-3.5\n \"gpt-3.5-turbo-0125\": 16385,\n \"gpt-3.5-turbo\": 16385,\n \"gpt-3.5-turbo-1106\": 16385,\n \"gpt-3.5-turbo-instruct\": 4096,\n \"gpt-3.5-turbo-16k\": 16385,\n \"gpt-3.5-turbo-0613\": 4096,\n \"gpt-3.5-turbo-16k-0613\": 16385,\n \"gpt-3.5-turbo-0301\": 4097,\n};\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, message.content || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToOpenAITool(action: ActionInput): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: parseJson(action.jsonSchema, {}),\n },\n };\n}\n\ntype UsedMessageParams =\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionDeveloperMessageParam\n | ChatCompletionSystemMessageParam;\nexport function convertMessageToOpenAIMessage(\n message: Message,\n options?: { keepSystemRole: boolean },\n): ChatCompletionMessageParam {\n const { keepSystemRole } = options || { keepSystemRole: false };\n if (message.isTextMessage()) {\n let role = message.role as UsedMessageParams[\"role\"];\n if (message.role === \"system\" && !keepSystemRole) {\n role = \"developer\";\n }\n return {\n role,\n content: message.content,\n } satisfies UsedMessageParams;\n } else if (message.isImageMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"image_url\",\n image_url: {\n url: `data:image/${message.format};base64,${message.bytes}`,\n },\n },\n ],\n } satisfies UsedMessageParams;\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: message.id,\n type: \"function\",\n function: {\n name: message.name,\n arguments: JSON.stringify(message.arguments),\n },\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"tool\",\n content: message.result,\n tool_call_id: message.actionExecutionId,\n };\n }\n}\n\nexport function convertSystemMessageToAssistantAPI(message: ChatCompletionMessageParam) {\n return {\n ...message,\n ...([\"system\", \"developer\"].includes(message.role) && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(message: Message): BaseMessage {\n if (message.isTextMessage()) {\n if (message.role == \"user\") {\n return new HumanMessage(message.content);\n } else if (message.role == \"assistant\") {\n return new AIMessage(message.content);\n } else if (message.role === \"system\") {\n return new SystemMessage(message.content);\n }\n } else if (message.isActionExecutionMessage()) {\n return new AIMessage({\n content: \"\",\n tool_calls: [\n {\n id: message.id,\n args: message.arguments,\n name: message.name,\n },\n ],\n });\n } else if (message.isResultMessage()) {\n return new ToolMessage({\n content: message.result,\n tool_call_id: message.actionExecutionId,\n });\n }\n}\n\nexport function convertActionInputToLangChainTool(actionInput: ActionInput): any {\n return new DynamicStructuredTool({\n name: actionInput.name,\n description: actionInput.description,\n schema: convertJsonSchemaToZodSchema(\n JSON.parse(actionInput.jsonSchema),\n true,\n ) as z.ZodObject<any>,\n func: async () => {\n return \"\";\n },\n });\n}\n\ninterface StreamLangChainResponseParams {\n result: LangChainReturnType;\n eventStream$: RuntimeEventSubject;\n actionExecution?: {\n id: string;\n name: string;\n };\n}\n\nfunction getConstructorName(object: any): string {\n if (object && typeof object === \"object\" && object.constructor && object.constructor.name) {\n return object.constructor.name;\n }\n return \"\";\n}\n\nfunction isAIMessage(message: any): message is AIMessage {\n return Object.prototype.toString.call(message) === \"[object AIMessage]\";\n}\n\nfunction isAIMessageChunk(message: any): message is AIMessageChunk {\n return Object.prototype.toString.call(message) === \"[object AIMessageChunk]\";\n}\n\nfunction isBaseMessageChunk(message: any): message is BaseMessageChunk {\n return Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\";\n}\n\nfunction maybeSendActionExecutionResultIsMessage(\n eventStream$: RuntimeEventSubject,\n actionExecution?: { id: string; name: string },\n) {\n // language models need a result after the function call\n // we simply let them know that we are sending a message\n if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: \"Sending a message\",\n });\n }\n}\n\nexport async function streamLangChainResponse({\n result,\n eventStream$,\n actionExecution,\n}: StreamLangChainResponseParams) {\n // We support several types of return values from LangChain functions:\n\n // 1. string\n\n if (typeof result === \"string\") {\n if (!actionExecution) {\n // Just send one chunk with the string as the content.\n eventStream$.sendTextMessage(randomId(), result);\n } else {\n // Send as a result\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: result,\n });\n }\n }\n\n // 2. AIMessage\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isAIMessage(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n for (const toolCall of result.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n\n // 3. BaseMessageChunk\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isBaseMessageChunk(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.lc_kwargs?.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n if (result.lc_kwargs?.tool_calls) {\n for (const toolCall of result.lc_kwargs?.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n }\n\n // 4. IterableReadableStream\n // Stream the result of the LangChain function.\n else if (result && \"getReader\" in result) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n let reader = result.getReader();\n\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n\n const toolCallDetails = {\n name: null,\n id: null,\n index: null,\n prevIndex: null,\n };\n\n while (true) {\n try {\n const { done, value } = await reader.read();\n\n let toolCallName: string | undefined = undefined;\n let toolCallId: string | undefined = undefined;\n let toolCallArgs: string | undefined = undefined;\n let hasToolCall: boolean = false;\n let content = \"\";\n if (value && value.content) {\n content = Array.isArray(value.content)\n ? (((value.content[0] as any)?.text ?? \"\") as string)\n : value.content;\n }\n\n if (isAIMessageChunk(value)) {\n let chunk = value.tool_call_chunks?.[0];\n toolCallArgs = chunk?.args;\n hasToolCall = chunk != undefined;\n if (chunk?.name) toolCallDetails.name = chunk.name;\n // track different index on the same tool cool\n if (chunk?.index != null) {\n toolCallDetails.index = chunk.index; // 1\n if (toolCallDetails.prevIndex == null) toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id = chunk.index != null ? `${chunk.id}-idx-${chunk.index}` : chunk.id;\n\n // Assign to internal variables that the entire script here knows how to work with\n toolCallName = toolCallDetails.name;\n toolCallId = toolCallDetails.id;\n } else if (isBaseMessageChunk(value)) {\n let chunk = value.additional_kwargs?.tool_calls?.[0];\n toolCallName = chunk?.function?.name;\n toolCallId = chunk?.id;\n toolCallArgs = chunk?.function?.arguments;\n hasToolCall = chunk?.function != undefined;\n }\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCallName is defined, it means a new tool call starts.\n if (mode === \"message\" && (toolCallId || done)) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (!hasToolCall || done)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n }\n\n if (done) {\n break;\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (hasToolCall && toolCallId && toolCallName) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = value.lc_kwargs?.id || randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCallArgs) {\n // For calls of the same tool with different index, we seal last tool call and register a new one\n if (toolCallDetails.index !== toolCallDetails.prevIndex) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n toolCallDetails.prevIndex = toolCallDetails.index;\n }\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: toolCallId,\n args: toolCallArgs,\n });\n }\n } catch (error) {\n console.error(\"Error reading from stream\", error);\n break;\n }\n }\n } else if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: encodeResult(result),\n });\n }\n\n // unsupported type\n else {\n throw new Error(\"Invalid return type from LangChain function.\");\n }\n\n eventStream$.complete();\n}\n\nfunction encodeResult(result: any): string {\n if (result === undefined) {\n return \"\";\n } else if (typeof result === \"string\") {\n return result;\n } else {\n return JSON.stringify(result);\n }\n}\n","/**\n * Copilot Runtime adapter for LangChain.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, LangChainAdapter } from \"@copilotkit/runtime\";\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new LangChainAdapter({\n * chainFn: async ({ messages, tools }) => {\n * return model.bindTools(tools).stream(messages);\n * // or optionally enable strict mode\n * // return model.bindTools(tools, { strict: true }).stream(messages);\n * }\n * });\n * ```\n *\n * The asynchronous handler function (`chainFn`) can return any of the following:\n *\n * - A simple `string` response\n * - A LangChain stream (`IterableReadableStream`)\n * - A LangChain `BaseMessageChunk` object\n * - A LangChain `AIMessage` object\n */\n\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { CopilotServiceAdapter } from \"../service-adapter\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToLangChainTool,\n convertMessageToLangChainMessage,\n streamLangChainResponse,\n} from \"./utils\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { LangChainReturnType } from \"./types\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { awaitAllCallbacks } from \"@langchain/core/callbacks/promises\";\n\ninterface ChainFnParameters {\n model: string;\n messages: BaseMessage[];\n tools: DynamicStructuredTool[];\n threadId?: string;\n runId?: string;\n}\n\ninterface LangChainAdapterOptions {\n /**\n * A function that uses the LangChain API to generate a response.\n */\n chainFn: (parameters: ChainFnParameters) => Promise<LangChainReturnType>;\n}\n\nexport class LangChainAdapter implements CopilotServiceAdapter {\n /**\n * To use LangChain as a backend, provide a handler function to the adapter with your custom LangChain logic.\n */\n constructor(private options: LangChainAdapterOptions) {}\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n try {\n const {\n eventSource,\n model,\n actions,\n messages,\n runId,\n threadId: threadIdFromRequest,\n } = request;\n const threadId = threadIdFromRequest ?? randomUUID();\n const result = await this.options.chainFn({\n messages: messages.map(convertMessageToLangChainMessage),\n tools: actions.map(convertActionInputToLangChainTool),\n model,\n threadId,\n runId,\n });\n\n eventSource.stream(async (eventStream$) => {\n await streamLangChainResponse({\n result,\n eventStream$,\n });\n });\n\n return {\n threadId,\n };\n } finally {\n await awaitAllCallbacks();\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Google Generative AI (e.g. Gemini).\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GoogleGenerativeAIAdapter } from \"@copilotkit/runtime\";\n * const { GoogleGenerativeAI } = require(\"@google/generative-ai\");\n *\n * const genAI = new GoogleGenerativeAI(process.env[\"GOOGLE_API_KEY\"]);\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GoogleGenerativeAIAdapter({ model: \"gemini-1.5-pro\" });\n * ```\n */\nimport { ChatGoogle } from \"@langchain/google-gauth\";\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\nimport { AIMessage } from \"@langchain/core/messages\";\n\ninterface GoogleGenerativeAIAdapterOptions {\n /**\n * A custom Google Generative AI model to use.\n */\n model?: string;\n}\n\nexport class GoogleGenerativeAIAdapter extends LangChainAdapter {\n constructor(options?: GoogleGenerativeAIAdapterOptions) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n // Filter out empty assistant messages to prevent Gemini validation errors\n // Gemini specifically rejects conversations containing AIMessages with empty content\n const filteredMessages = messages.filter((message) => {\n // Keep all non-AI messages (HumanMessage, SystemMessage, ToolMessage, etc.)\n if (!(message instanceof AIMessage)) {\n return true;\n }\n\n // For AIMessages, only keep those with non-empty content\n // Also keep AIMessages with tool_calls even if content is empty\n return (\n (message.content && String(message.content).trim().length > 0) ||\n (message.tool_calls && message.tool_calls.length > 0)\n );\n });\n\n const model = new ChatGoogle({\n modelName: options?.model ?? \"gemini-1.5-pro\",\n apiVersion: \"v1beta\",\n }).bindTools(tools);\n\n return model.stream(filteredMessages, { metadata: { conversation_id: threadId } });\n },\n });\n }\n}\n","/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\n */\nimport OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { Message, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n} from \"./utils\";\nimport { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport { AssistantStream } from \"openai/lib/AssistantStream\";\nimport { RuntimeEventSource } from \"../events\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { AssistantStreamEvent, AssistantTool } from \"openai/resources/beta/assistants\";\nimport { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable code interpretation.\n * @default true\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable file search.\n * @default true\n */\n fileSearchEnabled?: boolean;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAssistantAdapter implements CopilotServiceAdapter {\n private openai: OpenAI;\n private codeInterpreterEnabled: boolean;\n private assistantId: string;\n private fileSearchEnabled: boolean;\n private disableParallelToolCalls: boolean;\n private keepSystemRole: boolean = false;\n\n constructor(params: OpenAIAssistantAdapterParams) {\n this.openai = params.openai || new OpenAI({});\n this.codeInterpreterEnabled = params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } = request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n\n if (!threadId) {\n threadId = (await this.openai.beta.threads.create()).id;\n }\n\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage.isResultMessage() && runId) {\n nextRunId = await this.submitToolOutputs(threadId, runId, messages, eventSource);\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n let run = await this.openai.beta.threads.runs.retrieve(threadId, runId);\n\n if (!run.required_action) {\n throw new Error(\"No tool outputs required\");\n }\n\n // get the required tool call ids\n const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map(\n (toolCall) => toolCall.id,\n );\n\n // search for these tool calls\n const resultMessages = messages.filter(\n (message) => message.isResultMessage() && toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\"Number of function results does not match the number of tool calls\");\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] = resultMessages.map(\n (message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n },\n );\n\n const stream = this.openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) => convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }))\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await this.openai.beta.threads.messages.create(threadId, {\n role: \"user\",\n content: userMessage.content,\n });\n\n const openaiTools = actions.map(convertActionInputToOpenAITool);\n\n const tools = [\n ...openaiTools,\n ...(this.codeInterpreterEnabled ? [{ type: \"code_interpreter\" } as AssistantTool] : []),\n ...(this.fileSearchEnabled ? [{ type: \"file_search\" } as AssistantTool] : []),\n ];\n\n let stream = this.openai.beta.threads.runs.stream(threadId, {\n assistant_id: this.assistantId,\n instructions,\n tools: tools,\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n\n return getRunIdFromStream(stream);\n }\n\n private async streamResponse(stream: AssistantStream, eventSource: RuntimeEventSource) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n break;\n case \"thread.run.step.delta\":\n let toolCallId: string | undefined;\n let toolCallName: string | undefined;\n let toolCallArgs: string | undefined;\n if (\n chunk.data.delta.step_details.type === \"tool_calls\" &&\n chunk.data.delta.step_details.tool_calls?.[0].type === \"function\"\n ) {\n toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;\n toolCallName = chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs = chunk.data.delta.step_details.tool_calls?.[0].function.arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n","/**\n * CopilotKit Adapter for Unify\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new UnifyAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new UnifyAdapter({ model: \"llama-3-8b-chat@fireworks-ai\" }),\n * );\n * ```\n */\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n CopilotServiceAdapter,\n} from \"../service-adapter\";\nimport OpenAI from \"openai\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\nimport { convertActionInputToOpenAITool, convertMessageToOpenAIMessage } from \"../openai/utils\";\n\nexport interface UnifyAdapterParams {\n apiKey?: string;\n model: string;\n}\n\nexport class UnifyAdapter implements CopilotServiceAdapter {\n private apiKey: string;\n private model: string;\n private start: boolean;\n\n constructor(options?: UnifyAdapterParams) {\n if (options?.apiKey) {\n this.apiKey = options.apiKey;\n } else {\n this.apiKey = \"UNIFY_API_KEY\";\n }\n this.model = options?.model;\n this.start = true;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const tools = request.actions.map(convertActionInputToOpenAITool);\n const openai = new OpenAI({\n apiKey: this.apiKey,\n baseURL: \"https://api.unify.ai/v0/\",\n });\n const forwardedParameters = request.forwardedParameters;\n\n const messages = request.messages.map((m) => convertMessageToOpenAIMessage(m));\n\n const stream = await openai.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: true,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n let model = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n request.eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n for await (const chunk of stream) {\n if (this.start) {\n model = chunk.model;\n currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: `Model used: ${model}\\n`,\n });\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n this.start = false;\n }\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Groq.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GroqAdapter } from \"@copilotkit/runtime\";\n * import { Groq } from \"groq-sdk\";\n *\n * const groq = new Groq({ apiKey: process.env[\"GROQ_API_KEY\"] });\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GroqAdapter({ groq, model: \"<model-name>\" });\n * ```\n */\nimport { Groq } from \"groq-sdk\";\nimport type { ChatCompletionMessageParam } from \"groq-sdk/resources/chat\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"../openai/utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama-3.3-70b-versatile\";\n\nexport interface GroqAdapterParams {\n /**\n * An optional Groq instance to use.\n */\n groq?: Groq;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n}\n\nexport class GroqAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private disableParallelToolCalls: boolean = false;\n private _groq: Groq;\n public get groq(): Groq {\n return this._groq;\n }\n\n constructor(params?: GroqAdapterParams) {\n this._groq = params?.groq || new Groq({});\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: true }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n const stream = await this.groq.chat.completions.create({\n model: model,\n stream: true,\n messages: openaiMessages as unknown as ChatCompletionMessageParam[],\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n parentMessageId: chunk.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","import { YogaInitialContext } from \"graphql-yoga\";\nimport { buildSchemaSync } from \"type-graphql\";\nimport { CopilotResolver } from \"../../graphql/resolvers/copilot.resolver\";\nimport { useDeferStream } from \"@graphql-yoga/plugin-defer-stream\";\nimport { CopilotRuntime } from \"../runtime/copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../service-adapters\";\nimport { CopilotCloudOptions } from \"../cloud\";\nimport { LogLevel, createLogger } from \"../../lib/logger\";\nimport { createYoga } from \"graphql-yoga\";\nimport telemetry from \"../telemetry-client\";\nimport { StateResolver } from \"../../graphql/resolvers/state.resolver\";\nimport * as packageJson from \"../../../package.json\";\n\nconst logger = createLogger();\n\nexport const addCustomHeaderPlugin = {\n onResponse({ response }) {\n // Set your custom header; adjust the header name and value as needed\n response.headers.set(\"X-CopilotKit-Runtime-Version\", packageJson.version);\n },\n};\n\ntype AnyPrimitive = string | boolean | number | null;\nexport type CopilotRequestContextProperties = Record<\n string,\n AnyPrimitive | Record<string, AnyPrimitive>\n>;\n\nexport type GraphQLContext = YogaInitialContext & {\n _copilotkit: CreateCopilotRuntimeServerOptions;\n properties: CopilotRequestContextProperties;\n logger: typeof logger;\n};\n\nexport interface CreateCopilotRuntimeServerOptions {\n runtime: CopilotRuntime<any>;\n serviceAdapter: CopilotServiceAdapter;\n endpoint: string;\n baseUrl?: string;\n cloud?: CopilotCloudOptions;\n properties?: CopilotRequestContextProperties;\n logLevel?: LogLevel;\n}\n\nexport async function createContext(\n initialContext: YogaInitialContext,\n copilotKitContext: CreateCopilotRuntimeServerOptions,\n contextLogger: typeof logger,\n properties: CopilotRequestContextProperties = {},\n): Promise<Partial<GraphQLContext>> {\n logger.debug({ copilotKitContext }, \"Creating GraphQL context\");\n const ctx: GraphQLContext = {\n ...initialContext,\n _copilotkit: {\n ...copilotKitContext,\n },\n properties: { ...properties },\n logger: contextLogger,\n };\n return ctx;\n}\n\nexport function buildSchema(\n options: {\n emitSchemaFile?: string;\n } = {},\n) {\n logger.debug(\"Building GraphQL schema...\");\n const schema = buildSchemaSync({\n resolvers: [CopilotResolver, StateResolver],\n emitSchemaFile: options.emitSchemaFile,\n });\n logger.debug(\"GraphQL schema built successfully\");\n return schema;\n}\n\nexport type CommonConfig = {\n logging: typeof logger;\n schema: ReturnType<typeof buildSchema>;\n plugins: Parameters<typeof createYoga>[0][\"plugins\"];\n context: (ctx: YogaInitialContext) => Promise<Partial<GraphQLContext>>;\n};\n\nexport function getCommonConfig(options: CreateCopilotRuntimeServerOptions): CommonConfig {\n const logLevel = (process.env.LOG_LEVEL as LogLevel) || (options.logLevel as LogLevel) || \"error\";\n const logger = createLogger({ level: logLevel, component: \"getCommonConfig\" });\n\n const contextLogger = createLogger({ level: logLevel });\n\n if (options.cloud) {\n telemetry.setCloudConfiguration({\n publicApiKey: options.cloud.publicApiKey,\n baseUrl: options.cloud.baseUrl,\n });\n }\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: {\n ...(options.properties._copilotkit as Record<string, any>),\n },\n });\n }\n\n telemetry.setGlobalProperties({\n runtime: {\n serviceAdapter: options.serviceAdapter.constructor.name,\n },\n });\n\n return {\n logging: createLogger({ component: \"Yoga GraphQL\", level: logLevel }),\n schema: buildSchema(),\n plugins: [useDeferStream(), addCustomHeaderPlugin],\n context: (ctx: YogaInitialContext): Promise<Partial<GraphQLContext>> =>\n createContext(ctx, options, contextLogger, options.properties),\n };\n}\n","import { Arg, Ctx, Mutation, Query, Resolver } from \"type-graphql\";\nimport {\n ReplaySubject,\n Subject,\n Subscription,\n filter,\n finalize,\n firstValueFrom,\n shareReplay,\n skipWhile,\n take,\n takeWhile,\n tap,\n} from \"rxjs\";\nimport { GenerateCopilotResponseInput } from \"../inputs/generate-copilot-response.input\";\nimport { CopilotResponse } from \"../types/copilot-response.type\";\nimport {\n CopilotKitLangGraphInterruptEvent,\n LangGraphInterruptEvent,\n} from \"../types/meta-events.type\";\nimport { ActionInputAvailability, MessageRole } from \"../types/enums\";\nimport { Repeater } from \"graphql-yoga\";\nimport type { CopilotRequestContextProperties, GraphQLContext } from \"../../lib/integrations\";\nimport {\n RuntimeEvent,\n RuntimeEventTypes,\n RuntimeMetaEventName,\n} from \"../../service-adapters/events\";\nimport {\n FailedMessageStatus,\n MessageStatusCode,\n MessageStatusUnion,\n SuccessMessageStatus,\n} from \"../types/message-status.type\";\nimport { ResponseStatusUnion, SuccessResponseStatus } from \"../types/response-status.type\";\nimport { GraphQLJSONObject } from \"graphql-scalars\";\nimport { plainToInstance } from \"class-transformer\";\nimport { GuardrailsResult } from \"../types/guardrails-result.type\";\nimport { GraphQLError } from \"graphql\";\nimport {\n GuardrailsValidationFailureResponse,\n MessageStreamInterruptedResponse,\n UnknownErrorResponse,\n} from \"../../utils\";\nimport {\n ActionExecutionMessage,\n AgentStateMessage,\n Message,\n MessageType,\n ResultMessage,\n TextMessage,\n} from \"../types/converted\";\nimport telemetry from \"../../lib/telemetry-client\";\nimport { randomId } from \"@copilotkit/shared\";\nimport { AgentsResponse } from \"../types/agents-response.type\";\nimport { LangGraphEventTypes } from \"../../agents/langgraph/events\";\nimport { CopilotKitError } from \"@copilotkit/shared\";\n\nconst invokeGuardrails = async ({\n baseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult,\n onError,\n}: {\n baseUrl: string;\n copilotCloudPublicApiKey: string;\n data: GenerateCopilotResponseInput;\n onResult: (result: GuardrailsResult) => void;\n onError: (err: Error) => void;\n}) => {\n if (\n data.messages.length &&\n data.messages[data.messages.length - 1].textMessage?.role === MessageRole.user\n ) {\n const messages = data.messages\n .filter(\n (m) =>\n m.textMessage !== undefined &&\n (m.textMessage.role === MessageRole.user || m.textMessage.role === MessageRole.assistant),\n )\n .map((m) => ({\n role: m.textMessage!.role,\n content: m.textMessage.content,\n }));\n\n const lastMessage = messages[messages.length - 1];\n const restOfMessages = messages.slice(0, -1);\n\n const body = {\n input: lastMessage.content,\n validTopics: data.cloud.guardrails.inputValidationRules.allowList,\n invalidTopics: data.cloud.guardrails.inputValidationRules.denyList,\n messages: restOfMessages,\n };\n\n const guardrailsResult = await fetch(`${baseUrl}/guardrails/validate`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CopilotCloud-Public-API-Key\": copilotCloudPublicApiKey,\n },\n body: JSON.stringify(body),\n });\n\n if (guardrailsResult.ok) {\n const resultJson: GuardrailsResult = await guardrailsResult.json();\n onResult(resultJson);\n } else {\n onError(await guardrailsResult.json());\n }\n }\n};\n\n@Resolver(() => CopilotResponse)\nexport class CopilotResolver {\n @Query(() => String)\n async hello() {\n return \"Hello World\";\n }\n\n @Query(() => AgentsResponse)\n async availableAgents(@Ctx() ctx: GraphQLContext) {\n let logger = ctx.logger.child({ component: \"CopilotResolver.availableAgents\" });\n\n logger.debug(\"Processing\");\n const agentsWithEndpoints = await ctx._copilotkit.runtime.discoverAgentsFromEndpoints(ctx);\n\n logger.debug(\"Event source created, creating response\");\n\n return {\n agents: agentsWithEndpoints.map(\n ({ endpoint, ...agentWithoutEndpoint }) => agentWithoutEndpoint,\n ),\n };\n }\n\n @Mutation(() => CopilotResponse)\n async generateCopilotResponse(\n @Ctx() ctx: GraphQLContext,\n @Arg(\"data\") data: GenerateCopilotResponseInput,\n @Arg(\"properties\", () => GraphQLJSONObject, { nullable: true })\n properties?: CopilotRequestContextProperties,\n ) {\n telemetry.capture(\"oss.runtime.copilot_request_created\", {\n \"cloud.guardrails.enabled\": data.cloud?.guardrails !== undefined,\n requestType: data.metadata.requestType,\n \"cloud.api_key_provided\": !!ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n ...(ctx.request.headers.get(\"x-copilotcloud-public-api-key\")\n ? {\n \"cloud.public_api_key\": ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n }\n : {}),\n ...(ctx._copilotkit.baseUrl\n ? {\n \"cloud.base_url\": ctx._copilotkit.baseUrl,\n }\n : {\n \"cloud.base_url\": \"https://api.cloud.copilotkit.ai\",\n }),\n });\n\n let logger = ctx.logger.child({ component: \"CopilotResolver.generateCopilotResponse\" });\n logger.debug({ data }, \"Generating Copilot response\");\n\n if (properties) {\n logger.debug(\"Properties provided, merging with context properties\");\n ctx.properties = { ...ctx.properties, ...properties };\n }\n\n const copilotRuntime = ctx._copilotkit.runtime;\n const serviceAdapter = ctx._copilotkit.serviceAdapter;\n\n let copilotCloudPublicApiKey: string | null = null;\n let copilotCloudBaseUrl: string;\n\n // Extract publicApiKey from headers for both cloud and non-cloud requests\n // This enables onTrace functionality regardless of cloud configuration\n const publicApiKeyFromHeaders = ctx.request.headers.get(\"x-copilotcloud-public-api-key\");\n if (publicApiKeyFromHeaders) {\n copilotCloudPublicApiKey = publicApiKeyFromHeaders;\n }\n\n if (data.cloud) {\n logger = logger.child({ cloud: true });\n logger.debug(\"Cloud configuration provided, checking for public API key in headers\");\n\n if (!copilotCloudPublicApiKey) {\n logger.error(\"Public API key not found in headers\");\n\n // Trace the validation error for debugging visibility\n await copilotRuntime.traceGraphQLError(\n {\n message: \"X-CopilotCloud-Public-API-Key header is required\",\n code: \"MISSING_PUBLIC_API_KEY\",\n type: \"GraphQLError\",\n },\n {\n operation: \"generateCopilotResponse\",\n cloudConfigPresent: Boolean(data.cloud),\n guardrailsEnabled: Boolean(data.cloud?.guardrails),\n },\n );\n\n throw new GraphQLError(\"X-CopilotCloud-Public-API-Key header is required\");\n }\n\n if (process.env.COPILOT_CLOUD_BASE_URL) {\n copilotCloudBaseUrl = process.env.COPILOT_CLOUD_BASE_URL;\n } else if (ctx._copilotkit.cloud?.baseUrl) {\n copilotCloudBaseUrl = ctx._copilotkit.cloud?.baseUrl;\n } else {\n copilotCloudBaseUrl = \"https://api.cloud.copilotkit.ai\";\n }\n\n logger = logger.child({ copilotCloudBaseUrl });\n }\n\n logger.debug(\"Setting up subjects\");\n const responseStatus$ = new ReplaySubject<typeof ResponseStatusUnion>();\n const interruptStreaming$ = new ReplaySubject<{ reason: string; messageId?: string }>();\n const guardrailsResult$ = new ReplaySubject<GuardrailsResult>();\n\n let outputMessages: Message[] = [];\n let resolveOutputMessagesPromise: (messages: Message[]) => void;\n let rejectOutputMessagesPromise: (err: Error) => void;\n\n const outputMessagesPromise = new Promise<Message[]>((resolve, reject) => {\n resolveOutputMessagesPromise = resolve;\n rejectOutputMessagesPromise = reject;\n });\n\n if (copilotCloudPublicApiKey) {\n ctx.properties[\"copilotCloudPublicApiKey\"] = copilotCloudPublicApiKey;\n }\n\n logger.debug(\"Processing\");\n const {\n eventSource,\n threadId = randomId(),\n runId,\n serverSideActions,\n actionInputsWithoutAgents,\n extensions,\n } = await copilotRuntime.processRuntimeRequest({\n serviceAdapter,\n messages: data.messages,\n actions: data.frontend.actions.filter(\n (action) => action.available !== ActionInputAvailability.disabled,\n ),\n threadId: data.threadId,\n runId: data.runId,\n publicApiKey: copilotCloudPublicApiKey,\n outputMessagesPromise,\n graphqlContext: ctx,\n forwardedParameters: data.forwardedParameters,\n agentSession: data.agentSession,\n agentStates: data.agentStates,\n url: data.frontend.url,\n extensions: data.extensions,\n metaEvents: data.metaEvents,\n });\n\n logger.debug(\"Event source created, creating response\");\n // run and process the event stream\n const eventStream = eventSource\n .processRuntimeEvents({\n serverSideActions,\n guardrailsResult$: data.cloud?.guardrails ? guardrailsResult$ : null,\n actionInputsWithoutAgents: actionInputsWithoutAgents.filter(\n // TODO-AGENTS: do not exclude ALL server side actions\n (action) =>\n !serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n ),\n threadId,\n })\n .pipe(\n // shareReplay() ensures that later subscribers will see the whole stream instead of\n // just the events that were emitted after the subscriber was added.\n shareReplay(),\n finalize(() => {\n logger.debug(\"Event stream finalized\");\n }),\n );\n\n const response = {\n threadId,\n runId,\n status: firstValueFrom(responseStatus$),\n extensions,\n metaEvents: new Repeater(async (push, stop) => {\n let eventStreamSubscription: Subscription;\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n if (event.type != RuntimeEventTypes.MetaEvent) {\n return;\n }\n switch (event.name) {\n // @ts-ignore\n case LangGraphEventTypes.OnInterrupt:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n // @ts-ignore\n type: event.type,\n // @ts-ignore\n name: RuntimeMetaEventName.LangGraphInterruptEvent,\n // @ts-ignore\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.LangGraphInterruptEvent:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent:\n push(\n plainToInstance(CopilotKitLangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n data: {\n value: event.data.value,\n messages: event.data.messages.map((message) => {\n if (\n message.type === \"TextMessage\" ||\n (\"content\" in message && \"role\" in message)\n ) {\n return plainToInstance(TextMessage, {\n id: message.id,\n createdAt: new Date(),\n content: [(message as TextMessage).content],\n role: (message as TextMessage).role,\n status: new SuccessMessageStatus(),\n });\n }\n if (\"arguments\" in message) {\n return plainToInstance(ActionExecutionMessage, {\n name: message.name,\n id: message.id,\n arguments: [JSON.stringify(message.arguments)],\n createdAt: new Date(),\n status: new SuccessMessageStatus(),\n });\n }\n throw new Error(\"Unknown message in metaEvents copilot resolver\");\n }),\n },\n }),\n );\n break;\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in meta events stream\");\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n complete: async () => {\n logger.debug(\"Meta events stream completed\");\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n });\n }),\n messages: new Repeater(async (pushMessage, stopStreamingMessages) => {\n logger.debug(\"Messages repeater created\");\n\n if (data.cloud?.guardrails) {\n logger = logger.child({ guardrails: true });\n logger.debug(\"Guardrails is enabled, validating input\");\n\n invokeGuardrails({\n baseUrl: copilotCloudBaseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult: (result) => {\n logger.debug({ status: result.status }, \"Guardrails validation done\");\n guardrailsResult$.next(result);\n\n // Guardrails validation failed\n if (result.status === \"denied\") {\n // send the reason to the client and interrupt streaming\n responseStatus$.next(\n new GuardrailsValidationFailureResponse({ guardrailsReason: result.reason }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to Guardrails validation failure. Reason: ${result.reason}`,\n });\n\n // resolve messages promise to the middleware\n outputMessages = [\n plainToInstance(TextMessage, {\n id: randomId(),\n createdAt: new Date(),\n content: result.reason,\n role: MessageRole.assistant,\n }),\n ];\n resolveOutputMessagesPromise(outputMessages);\n }\n },\n onError: (err) => {\n logger.error({ err }, \"Error in guardrails validation\");\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the guardrails validation`,\n }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to unknown error in guardrails validation`,\n });\n\n // reject the middleware promise\n rejectOutputMessagesPromise(err);\n },\n });\n }\n\n let eventStreamSubscription: Subscription;\n\n logger.debug(\"Event stream created, subscribing to event stream\");\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n switch (event.type) {\n case RuntimeEventTypes.MetaEvent:\n break;\n ////////////////////////////////\n // TextMessageStart\n ////////////////////////////////\n case RuntimeEventTypes.TextMessageStart:\n // create a sub stream that contains the message content\n const textMessageContentStream = eventStream.pipe(\n // skip until this message start event\n skipWhile((e) => e !== event),\n // take until the message end event\n takeWhile(\n (e) =>\n !(\n e.type === RuntimeEventTypes.TextMessageEnd &&\n e.messageId == event.messageId\n ),\n ),\n // filter out any other message events or message ids\n filter(\n (e) =>\n e.type == RuntimeEventTypes.TextMessageContent &&\n e.messageId == event.messageId,\n ),\n );\n\n // signal when we are done streaming\n const streamingTextStatus = new Subject<typeof MessageStatusUnion>();\n\n const messageId = event.messageId;\n // push the new message\n pushMessage({\n id: messageId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingTextStatus),\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: new Repeater(async (pushTextChunk, stopStreamingText) => {\n logger.debug(\"Text message content repeater created\");\n\n const textChunks: string[] = [];\n let textSubscription: Subscription;\n\n interruptStreaming$\n .pipe(\n shareReplay(),\n take(1),\n tap(({ reason, messageId }) => {\n logger.debug({ reason, messageId }, \"Text streaming interrupted\");\n\n streamingTextStatus.next(\n plainToInstance(FailedMessageStatus, { reason }),\n );\n\n responseStatus$.next(new MessageStreamInterruptedResponse({ messageId }));\n stopStreamingText();\n textSubscription?.unsubscribe();\n }),\n )\n .subscribe();\n\n logger.debug(\"Subscribing to text message content stream\");\n\n textSubscription = textMessageContentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.TextMessageContent) {\n await pushTextChunk(e.content);\n textChunks.push(e.content);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in text message content stream\");\n interruptStreaming$.next({\n reason: \"Error streaming message content\",\n messageId,\n });\n stopStreamingText();\n textSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Text message content stream completed\");\n streamingTextStatus.next(new SuccessMessageStatus());\n stopStreamingText();\n textSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(TextMessage, {\n id: messageId,\n createdAt: new Date(),\n content: textChunks.join(\"\"),\n role: MessageRole.assistant,\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionStart\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionStart:\n logger.debug(\"Action execution start event received\");\n const actionExecutionArgumentStream = eventStream.pipe(\n skipWhile((e) => e !== event),\n // take until the action execution end event\n takeWhile(\n (e) =>\n !(\n e.type === RuntimeEventTypes.ActionExecutionEnd &&\n e.actionExecutionId == event.actionExecutionId\n ),\n ),\n // filter out any other action execution events or action execution ids\n filter(\n (e) =>\n e.type == RuntimeEventTypes.ActionExecutionArgs &&\n e.actionExecutionId == event.actionExecutionId,\n ),\n );\n const streamingArgumentsStatus = new Subject<typeof MessageStatusUnion>();\n pushMessage({\n id: event.actionExecutionId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingArgumentsStatus),\n createdAt: new Date(),\n name: event.actionName,\n arguments: new Repeater(async (pushArgumentsChunk, stopStreamingArguments) => {\n logger.debug(\"Action execution argument stream created\");\n\n const argumentChunks: string[] = [];\n let actionExecutionArgumentSubscription: Subscription;\n\n actionExecutionArgumentSubscription = actionExecutionArgumentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.ActionExecutionArgs) {\n await pushArgumentsChunk(e.args);\n argumentChunks.push(e.args);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in action execution argument stream\");\n streamingArgumentsStatus.next(\n plainToInstance(FailedMessageStatus, {\n reason:\n \"An unknown error has occurred in the action execution argument stream\",\n }),\n );\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Action execution argument stream completed\");\n streamingArgumentsStatus.next(new SuccessMessageStatus());\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(ActionExecutionMessage, {\n id: event.actionExecutionId,\n createdAt: new Date(),\n name: event.actionName,\n arguments: argumentChunks.join(\"\"),\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionResult\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionResult:\n logger.debug({ result: event.result }, \"Action execution result event received\");\n pushMessage({\n id: \"result-\" + event.actionExecutionId,\n status: new SuccessMessageStatus(),\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n });\n\n outputMessages.push(\n plainToInstance(ResultMessage, {\n id: \"result-\" + event.actionExecutionId,\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n }),\n );\n break;\n ////////////////////////////////\n // AgentStateMessage\n ////////////////////////////////\n case RuntimeEventTypes.AgentStateMessage:\n logger.debug({ event }, \"Agent message event received\");\n pushMessage({\n id: randomId(),\n status: new SuccessMessageStatus(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n });\n outputMessages.push(\n plainToInstance(AgentStateMessage, {\n id: randomId(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n }),\n );\n break;\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in event stream\");\n\n // If it's a structured CopilotKitError, stop the repeater with the error so frontend can handle it\n if (\n err instanceof CopilotKitError ||\n (err instanceof Error && err.name && err.name.includes(\"CopilotKit\"))\n ) {\n eventStreamSubscription?.unsubscribe();\n rejectOutputMessagesPromise(err);\n stopStreamingMessages(err); // Pass the error to stop the GraphQL stream with this error\n return;\n }\n\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n rejectOutputMessagesPromise(err);\n },\n complete: async () => {\n logger.debug(\"Event stream completed\");\n if (data.cloud?.guardrails) {\n logger.debug(\"Guardrails is enabled, waiting for guardrails result\");\n await firstValueFrom(guardrailsResult$);\n }\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n resolveOutputMessagesPromise(outputMessages);\n },\n });\n }),\n };\n\n return response;\n }\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageInput } from \"./message.input\";\nimport { FrontendInput } from \"./frontend.input\";\nimport { CloudInput } from \"./cloud.input\";\nimport { CopilotRequestType } from \"../types/enums\";\nimport { ForwardedParametersInput } from \"./forwarded-parameters.input\";\nimport { AgentSessionInput } from \"./agent-session.input\";\nimport { AgentStateInput } from \"./agent-state.input\";\nimport { ExtensionsInput } from \"./extensions.input\";\nimport { MetaEventInput } from \"./meta-event.input\";\n\n@InputType()\nexport class GenerateCopilotResponseMetadataInput {\n @Field(() => CopilotRequestType, { nullable: true })\n requestType: CopilotRequestType;\n}\n\n@InputType()\nexport class GenerateCopilotResponseInput {\n @Field(() => GenerateCopilotResponseMetadataInput, { nullable: false })\n metadata: GenerateCopilotResponseMetadataInput;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => [MessageInput])\n messages: MessageInput[];\n\n @Field(() => FrontendInput)\n frontend: FrontendInput;\n\n @Field(() => CloudInput, { nullable: true })\n cloud?: CloudInput;\n\n @Field(() => ForwardedParametersInput, { nullable: true })\n forwardedParameters?: ForwardedParametersInput;\n\n @Field(() => AgentSessionInput, { nullable: true })\n agentSession?: AgentSessionInput;\n\n @Field(() => AgentStateInput, { nullable: true })\n agentState?: AgentStateInput;\n\n @Field(() => [AgentStateInput], { nullable: true })\n agentStates?: AgentStateInput[];\n\n @Field(() => ExtensionsInput, { nullable: true })\n extensions?: ExtensionsInput;\n\n @Field(() => [MetaEventInput], { nullable: true })\n metaEvents?: MetaEventInput[];\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageRole } from \"../types/enums\";\nimport { BaseMessageInput } from \"../types/base\";\n\n// GraphQL does not support union types in inputs, so we need to use\n// optional fields for the different subtypes.\n@InputType()\nexport class MessageInput extends BaseMessageInput {\n @Field(() => TextMessageInput, { nullable: true })\n textMessage?: TextMessageInput;\n\n @Field(() => ActionExecutionMessageInput, { nullable: true })\n actionExecutionMessage?: ActionExecutionMessageInput;\n\n @Field(() => ResultMessageInput, { nullable: true })\n resultMessage?: ResultMessageInput;\n\n @Field(() => AgentStateMessageInput, { nullable: true })\n agentStateMessage?: AgentStateMessageInput;\n\n @Field(() => ImageMessageInput, { nullable: true })\n imageMessage?: ImageMessageInput;\n}\n\n@InputType()\nexport class TextMessageInput {\n @Field(() => String)\n content: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n\n@InputType()\nexport class ActionExecutionMessageInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n arguments: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: String;\n}\n\n@InputType()\nexport class ResultMessageInput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String)\n result: string;\n}\n\n@InputType()\nexport class AgentStateMessageInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n}\n\n@InputType()\nexport class ImageMessageInput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n","import { registerEnumType } from \"type-graphql\";\n\nexport enum MessageRole {\n user = \"user\",\n assistant = \"assistant\",\n system = \"system\",\n tool = \"tool\",\n developer = \"developer\",\n}\n\nexport enum CopilotRequestType {\n Chat = \"Chat\",\n Task = \"Task\",\n TextareaCompletion = \"TextareaCompletion\",\n TextareaPopover = \"TextareaPopover\",\n Suggestion = \"Suggestion\",\n}\n\nexport enum ActionInputAvailability {\n disabled = \"disabled\",\n enabled = \"enabled\",\n remote = \"remote\",\n}\n\nregisterEnumType(MessageRole, {\n name: \"MessageRole\",\n description: \"The role of the message\",\n});\n\nregisterEnumType(CopilotRequestType, {\n name: \"CopilotRequestType\",\n description: \"The type of Copilot request\",\n});\n\nregisterEnumType(ActionInputAvailability, {\n name: \"ActionInputAvailability\",\n description: \"The availability of the frontend action\",\n});\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class BaseMessageInput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInput } from \"./action.input\";\n\n@InputType()\nexport class FrontendInput {\n @Field(() => String, { nullable: true })\n toDeprecate_fullContext?: string;\n\n @Field(() => [ActionInput])\n actions: ActionInput[];\n\n @Field(() => String, { nullable: true })\n url?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInputAvailability } from \"../types/enums\";\n@InputType()\nexport class ActionInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n jsonSchema: string;\n\n @Field(() => ActionInputAvailability, { nullable: true })\n available?: ActionInputAvailability;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { GuardrailsInput } from \"./cloud-guardrails.input\";\n\n@InputType()\nexport class CloudInput {\n @Field(() => GuardrailsInput, { nullable: true })\n guardrails?: GuardrailsInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class GuardrailsRuleInput {\n @Field(() => [String], { nullable: true })\n allowList?: string[] = [];\n\n @Field(() => [String], { nullable: true })\n denyList?: string[] = [];\n}\n\n@InputType()\nexport class GuardrailsInput {\n @Field(() => GuardrailsRuleInput, { nullable: false })\n inputValidationRules: GuardrailsRuleInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class ForwardedParametersInput {\n @Field(() => String, { nullable: true })\n model?: string;\n\n @Field(() => Number, { nullable: true })\n maxTokens?: number;\n\n @Field(() => [String], { nullable: true })\n stop?: string[];\n\n @Field(() => String, { nullable: true })\n toolChoice?: String;\n\n @Field(() => String, { nullable: true })\n toolChoiceFunctionName?: string;\n\n @Field(() => Number, { nullable: true })\n temperature?: number;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentSessionInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n nodeName?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentStateInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String, { nullable: true })\n config?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n/**\n * The extensions input is used to pass additional information to the copilot runtime, specific to a\n * service adapter or agent framework.\n */\n\n@InputType()\nexport class ExtensionsInput {\n @Field(() => OpenAIApiAssistantAPIInput, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIInput;\n}\n\n@InputType()\nexport class OpenAIApiAssistantAPIInput {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MetaEventName } from \"../types/meta-events.type\";\nimport { MessageInput } from \"./message.input\";\n\n@InputType()\nexport class MetaEventInput {\n @Field(() => MetaEventName)\n name: MetaEventName;\n\n @Field(() => String)\n value?: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n\n @Field(() => [MessageInput], { nullable: true })\n messages?: MessageInput[];\n}\n","import { createUnionType, Field, InterfaceType, ObjectType, registerEnumType } from \"type-graphql\";\nimport {\n ActionExecutionMessageOutput,\n AgentStateMessageOutput,\n BaseMessageOutput,\n ResultMessageOutput,\n TextMessageOutput,\n} from \"./copilot-response.type\";\n\nexport enum MetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nregisterEnumType(MetaEventName, {\n name: \"MetaEventName\",\n description: \"Meta event types\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.name === MetaEventName.LangGraphInterruptEvent) {\n return LangGraphInterruptEvent;\n } else if (value.name === MetaEventName.CopilotKitLangGraphInterruptEvent) {\n return CopilotKitLangGraphInterruptEvent;\n }\n return undefined;\n },\n})\n@InterfaceType()\nexport abstract class BaseMetaEvent {\n @Field(() => String)\n type: \"MetaEvent\" = \"MetaEvent\";\n\n @Field(() => MetaEventName)\n name: MetaEventName;\n}\n\n@ObjectType()\nexport class CopilotKitLangGraphInterruptEventData {\n @Field(() => String)\n value: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class LangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.LangGraphInterruptEvent = MetaEventName.LangGraphInterruptEvent;\n\n @Field(() => String)\n value: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class CopilotKitLangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.CopilotKitLangGraphInterruptEvent =\n MetaEventName.CopilotKitLangGraphInterruptEvent;\n\n @Field(() => CopilotKitLangGraphInterruptEventData)\n data: CopilotKitLangGraphInterruptEventData;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n","import { Field, InterfaceType, ObjectType } from \"type-graphql\";\nimport { MessageRole } from \"./enums\";\nimport { MessageStatusUnion } from \"./message-status.type\";\nimport { ResponseStatusUnion } from \"./response-status.type\";\nimport { ExtensionsResponse } from \"./extensions-response.type\";\nimport { BaseMetaEvent } from \"./meta-events.type\";\n\n@InterfaceType({\n resolveType(value) {\n if (value.hasOwnProperty(\"content\")) {\n return TextMessageOutput;\n } else if (value.hasOwnProperty(\"name\")) {\n return ActionExecutionMessageOutput;\n } else if (value.hasOwnProperty(\"result\")) {\n return ResultMessageOutput;\n } else if (value.hasOwnProperty(\"state\")) {\n return AgentStateMessageOutput;\n } else if (value.hasOwnProperty(\"format\") && value.hasOwnProperty(\"bytes\")) {\n return ImageMessageOutput;\n }\n return undefined;\n },\n})\nexport abstract class BaseMessageOutput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n\n @Field(() => MessageStatusUnion)\n status: typeof MessageStatusUnion;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class TextMessageOutput {\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => [String])\n content: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ActionExecutionMessageOutput {\n @Field(() => String)\n name: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: string;\n\n @Field(() => [String])\n arguments: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ResultMessageOutput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String)\n result: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class AgentStateMessageOutput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ImageMessageOutput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType()\nexport class CopilotResponse {\n @Field(() => String)\n threadId!: string;\n\n @Field(() => ResponseStatusUnion)\n status: typeof ResponseStatusUnion;\n\n @Field({ nullable: true })\n runId?: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n\n @Field(() => ExtensionsResponse, { nullable: true })\n extensions?: ExtensionsResponse;\n\n @Field(() => [BaseMetaEvent], { nullable: true })\n metaEvents?: (typeof BaseMetaEvent)[];\n}\n","import { Field, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum MessageStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(MessageStatusCode, {\n name: \"MessageStatusCode\",\n});\n\n@ObjectType()\nclass BaseMessageStatus {\n @Field(() => MessageStatusCode)\n code: MessageStatusCode;\n}\n\n@ObjectType()\nexport class PendingMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Pending;\n}\n\n@ObjectType()\nexport class SuccessMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Success;\n}\n\n@ObjectType()\nexport class FailedMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Failed;\n\n @Field(() => String)\n reason: string;\n}\n\nexport const MessageStatusUnion = createUnionType({\n name: \"MessageStatus\",\n types: () => [PendingMessageStatus, SuccessMessageStatus, FailedMessageStatus] as const,\n});\n","import { GraphQLJSON } from \"graphql-scalars\";\nimport { Field, InterfaceType, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum ResponseStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(ResponseStatusCode, {\n name: \"ResponseStatusCode\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.code === ResponseStatusCode.Success) {\n return SuccessResponseStatus;\n } else if (value.code === ResponseStatusCode.Failed) {\n return FailedResponseStatus;\n } else if (value.code === ResponseStatusCode.Pending) {\n return PendingResponseStatus;\n }\n return undefined;\n },\n})\n@ObjectType()\nabstract class BaseResponseStatus {\n @Field(() => ResponseStatusCode)\n code: ResponseStatusCode;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class PendingResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Pending;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class SuccessResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Success;\n}\n\nexport enum FailedResponseStatusReason {\n GUARDRAILS_VALIDATION_FAILED = \"GUARDRAILS_VALIDATION_FAILED\",\n MESSAGE_STREAM_INTERRUPTED = \"MESSAGE_STREAM_INTERRUPTED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nregisterEnumType(FailedResponseStatusReason, {\n name: \"FailedResponseStatusReason\",\n});\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class FailedResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Failed;\n\n @Field(() => FailedResponseStatusReason)\n reason: FailedResponseStatusReason;\n\n @Field(() => GraphQLJSON, { nullable: true })\n details?: Record<string, any> = null;\n}\n\nexport const ResponseStatusUnion = createUnionType({\n name: \"ResponseStatus\",\n types: () => [PendingResponseStatus, SuccessResponseStatus, FailedResponseStatus] as const,\n});\n","import { Field, ObjectType } from \"type-graphql\";\n\n/**\n * The extensions response is used to receive additional information from the copilot runtime, specific to a\n * service adapter or agent framework.\n *\n * Next time a request to the runtime is made, the extensions response will be included in the request as input.\n */\n\n@ObjectType()\nexport class ExtensionsResponse {\n @Field(() => OpenAIApiAssistantAPIResponse, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIResponse;\n}\n\n@ObjectType()\nexport class OpenAIApiAssistantAPIResponse {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import {\n Action,\n randomId,\n CopilotKitError,\n CopilotKitErrorCode,\n CopilotKitLowLevelError,\n} from \"@copilotkit/shared\";\nimport {\n of,\n concat,\n scan,\n concatMap,\n ReplaySubject,\n Subject,\n firstValueFrom,\n from,\n catchError,\n EMPTY,\n BehaviorSubject,\n} from \"rxjs\";\nimport { streamLangChainResponse } from \"./langchain/utils\";\nimport { GuardrailsResult } from \"../graphql/types/guardrails-result.type\";\nimport telemetry from \"../lib/telemetry-client\";\nimport { isRemoteAgentAction } from \"../lib/runtime/remote-actions\";\nimport { ActionInput } from \"../graphql/inputs/action.input\";\nimport {\n ActionExecutionMessage,\n ResultMessage,\n TextMessage,\n Message,\n} from \"../graphql/types/converted\";\nimport { plainToInstance } from \"class-transformer\";\nimport { MessageRole } from \"../graphql/types/enums\";\nimport { parseJson, tryMap } from \"@copilotkit/shared\";\n\nexport enum RuntimeEventTypes {\n TextMessageStart = \"TextMessageStart\",\n TextMessageContent = \"TextMessageContent\",\n TextMessageEnd = \"TextMessageEnd\",\n ActionExecutionStart = \"ActionExecutionStart\",\n ActionExecutionArgs = \"ActionExecutionArgs\",\n ActionExecutionEnd = \"ActionExecutionEnd\",\n ActionExecutionResult = \"ActionExecutionResult\",\n AgentStateMessage = \"AgentStateMessage\",\n MetaEvent = \"MetaEvent\",\n}\n\nexport enum RuntimeMetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n LangGraphInterruptResumeEvent = \"LangGraphInterruptResumeEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport type RunTimeMetaEvent =\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptEvent;\n value: string;\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptResumeEvent;\n data: string;\n };\n\nexport type RuntimeEvent =\n | { type: RuntimeEventTypes.TextMessageStart; messageId: string; parentMessageId?: string }\n | {\n type: RuntimeEventTypes.TextMessageContent;\n messageId: string;\n content: string;\n }\n | { type: RuntimeEventTypes.TextMessageEnd; messageId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionStart;\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }\n | { type: RuntimeEventTypes.ActionExecutionArgs; actionExecutionId: string; args: string }\n | { type: RuntimeEventTypes.ActionExecutionEnd; actionExecutionId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionResult;\n actionName: string;\n actionExecutionId: string;\n result: string;\n }\n | {\n type: RuntimeEventTypes.AgentStateMessage;\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }\n | RunTimeMetaEvent;\n\ninterface RuntimeEventWithState {\n event: RuntimeEvent | null;\n callActionServerSide: boolean;\n action: Action<any> | null;\n actionExecutionId: string | null;\n args: string;\n actionExecutionParentMessageId: string | null;\n}\n\ntype EventSourceCallback = (eventStream$: RuntimeEventSubject) => Promise<void>;\n\nexport class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {\n constructor() {\n super();\n }\n\n sendTextMessageStart({\n messageId,\n parentMessageId,\n }: {\n messageId: string;\n parentMessageId?: string;\n }) {\n this.next({ type: RuntimeEventTypes.TextMessageStart, messageId, parentMessageId });\n }\n\n sendTextMessageContent({ messageId, content }: { messageId: string; content: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageContent, content, messageId });\n }\n\n sendTextMessageEnd({ messageId }: { messageId: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageEnd, messageId });\n }\n\n sendTextMessage(messageId: string, content: string) {\n this.sendTextMessageStart({ messageId });\n this.sendTextMessageContent({ messageId, content });\n this.sendTextMessageEnd({ messageId });\n }\n\n sendActionExecutionStart({\n actionExecutionId,\n actionName,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId,\n actionName,\n parentMessageId,\n });\n }\n\n sendActionExecutionArgs({\n actionExecutionId,\n args,\n }: {\n actionExecutionId: string;\n args: string;\n }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionArgs, args, actionExecutionId });\n }\n\n sendActionExecutionEnd({ actionExecutionId }: { actionExecutionId: string }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionEnd, actionExecutionId });\n }\n\n sendActionExecution({\n actionExecutionId,\n actionName,\n args,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n args: string;\n parentMessageId?: string;\n }) {\n this.sendActionExecutionStart({ actionExecutionId, actionName, parentMessageId });\n this.sendActionExecutionArgs({ actionExecutionId, args });\n this.sendActionExecutionEnd({ actionExecutionId });\n }\n\n sendActionExecutionResult({\n actionExecutionId,\n actionName,\n result,\n error,\n }: {\n actionExecutionId: string;\n actionName: string;\n result?: string;\n error?: { code: string; message: string };\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionResult,\n actionName,\n actionExecutionId,\n result: ResultMessage.encodeResult(result, error),\n });\n }\n\n sendAgentStateMessage({\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n }: {\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }) {\n this.next({\n type: RuntimeEventTypes.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n });\n }\n}\n\nexport class RuntimeEventSource {\n private eventStream$ = new RuntimeEventSubject();\n private callback!: EventSourceCallback;\n\n async stream(callback: EventSourceCallback): Promise<void> {\n this.callback = callback;\n }\n\n sendErrorMessageToChat(message = \"An error occurred. Please try again.\") {\n const errorMessage = `❌ ${message}`;\n if (!this.callback) {\n this.stream(async (eventStream$) => {\n eventStream$.sendTextMessage(randomId(), errorMessage);\n });\n } else {\n this.eventStream$.sendTextMessage(randomId(), errorMessage);\n }\n }\n\n processRuntimeEvents({\n serverSideActions,\n guardrailsResult$,\n actionInputsWithoutAgents,\n threadId,\n }: {\n serverSideActions: Action<any>[];\n guardrailsResult$?: Subject<GuardrailsResult>;\n actionInputsWithoutAgents: ActionInput[];\n threadId: string;\n }) {\n this.callback(this.eventStream$).catch((error) => {\n console.error(\"Error in event source callback\", error);\n\n // Convert streaming errors to structured errors\n const structuredError = convertStreamingErrorToStructured(error);\n this.eventStream$.error(structuredError);\n this.eventStream$.complete();\n });\n return this.eventStream$.pipe(\n // track state\n scan(\n (acc, event) => {\n // It seems like this is needed so that rxjs recognizes the object has changed\n // This fixes an issue where action were executed multiple times\n // Not investigating further for now (Markus)\n acc = { ...acc };\n\n if (event.type === RuntimeEventTypes.ActionExecutionStart) {\n acc.callActionServerSide =\n serverSideActions.find((action) => action.name === event.actionName) !== undefined;\n acc.args = \"\";\n acc.actionExecutionId = event.actionExecutionId;\n if (acc.callActionServerSide) {\n acc.action = serverSideActions.find((action) => action.name === event.actionName);\n }\n acc.actionExecutionParentMessageId = event.parentMessageId;\n } else if (event.type === RuntimeEventTypes.ActionExecutionArgs) {\n acc.args += event.args;\n }\n\n acc.event = event;\n\n return acc;\n },\n {\n event: null,\n callActionServerSide: false,\n args: \"\",\n actionExecutionId: null,\n action: null,\n actionExecutionParentMessageId: null,\n } as RuntimeEventWithState,\n ),\n concatMap((eventWithState) => {\n if (\n eventWithState.event!.type === RuntimeEventTypes.ActionExecutionEnd &&\n eventWithState.callActionServerSide\n ) {\n const toolCallEventStream$ = new RuntimeEventSubject();\n executeAction(\n toolCallEventStream$,\n guardrailsResult$ ? guardrailsResult$ : null,\n eventWithState.action!,\n eventWithState.args,\n eventWithState.actionExecutionParentMessageId,\n eventWithState.actionExecutionId,\n actionInputsWithoutAgents,\n threadId,\n ).catch((error) => {\n console.error(error);\n });\n\n telemetry.capture(\"oss.runtime.server_action_executed\", {});\n return concat(of(eventWithState.event!), toolCallEventStream$).pipe(\n catchError((error) => {\n console.error(\"Error in tool call stream\", error);\n\n // Convert streaming errors to structured errors and send as action result\n const structuredError = convertStreamingErrorToStructured(error);\n toolCallEventStream$.sendActionExecutionResult({\n actionExecutionId: eventWithState.actionExecutionId!,\n actionName: eventWithState.action!.name,\n error: {\n code: structuredError.code,\n message: structuredError.message,\n },\n });\n\n return EMPTY;\n }),\n );\n } else {\n return of(eventWithState.event!);\n }\n }),\n );\n }\n}\n\nasync function executeAction(\n eventStream$: RuntimeEventSubject,\n guardrailsResult$: Subject<GuardrailsResult> | null,\n action: Action<any>,\n actionArguments: string,\n actionExecutionParentMessageId: string | null,\n actionExecutionId: string,\n actionInputsWithoutAgents: ActionInput[],\n threadId: string,\n) {\n if (guardrailsResult$) {\n const { status } = await firstValueFrom(guardrailsResult$);\n\n if (status === \"denied\") {\n eventStream$.complete();\n return;\n }\n }\n\n // Prepare arguments for function calling\n let args: Record<string, any>[] = [];\n if (actionArguments) {\n try {\n args = JSON.parse(actionArguments);\n } catch (e) {\n console.error(\"Action argument unparsable\", { actionArguments });\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n error: {\n code: \"INVALID_ARGUMENTS\",\n message: \"Failed to parse action arguments\",\n },\n });\n return;\n }\n }\n\n // handle LangGraph agents\n if (isRemoteAgentAction(action)) {\n const result = `${action.name} agent started`;\n\n const agentExecution = plainToInstance(ActionExecutionMessage, {\n id: actionExecutionId,\n createdAt: new Date(),\n name: action.name,\n arguments: JSON.parse(actionArguments),\n parentMessageId: actionExecutionParentMessageId ?? actionExecutionId,\n });\n\n const agentExecutionResult = plainToInstance(ResultMessage, {\n id: \"result-\" + actionExecutionId,\n createdAt: new Date(),\n actionExecutionId,\n actionName: action.name,\n result,\n });\n\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n result,\n });\n\n const stream = await action.remoteAgentHandler({\n name: action.name,\n threadId,\n actionInputsWithoutAgents,\n additionalMessages: [agentExecution, agentExecutionResult],\n });\n\n // forward to eventStream$\n from(stream).subscribe({\n next: (event) => eventStream$.next(event),\n error: (err) => {\n console.error(\"Error in stream\", err);\n\n // Convert streaming errors to structured errors\n const structuredError = convertStreamingErrorToStructured(err);\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n error: {\n code: structuredError.code,\n message: structuredError.message,\n },\n });\n eventStream$.complete();\n },\n complete: () => eventStream$.complete(),\n });\n } else {\n // call the function\n try {\n const result = await action.handler?.(args);\n await streamLangChainResponse({\n result,\n eventStream$,\n actionExecution: {\n name: action.name,\n id: actionExecutionId,\n },\n });\n } catch (e) {\n console.error(\"Error in action handler\", e);\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n error: {\n code: \"HANDLER_ERROR\",\n message: e.message,\n },\n });\n eventStream$.complete();\n }\n }\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Handle network termination errors\n if (\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitError({\n message:\n \"Connection to agent was unexpectedly terminated. This may be due to the agent service being restarted or network issues. Please try again.\",\n code: CopilotKitErrorCode.NETWORK_ERROR,\n });\n }\n\n // Handle other network-related errors\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\")\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"event streaming connection\",\n message:\n \"Network error occurred during event streaming. Please check your connection and try again.\",\n });\n }\n\n // Handle abort/cancellation errors (these are usually normal)\n if (\n error?.message?.includes(\"aborted\") ||\n error?.message?.includes(\"canceled\") ||\n error?.message?.includes(\"signal is aborted\")\n ) {\n return new CopilotKitError({\n message: \"Request was cancelled\",\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n // Handle API key errors (authentication/authorization issues)\n const errorMessage = error?.message || String(error);\n if (\n errorMessage.includes(\"401\") ||\n errorMessage.toLowerCase().includes(\"api key\") ||\n errorMessage.toLowerCase().includes(\"unauthorized\") ||\n errorMessage.toLowerCase().includes(\"authentication\") ||\n errorMessage.toLowerCase().includes(\"incorrect api key\")\n ) {\n return new CopilotKitError({\n message: `Event streaming error: ${errorMessage}`,\n code: CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,\n });\n }\n\n // Default: convert unknown streaming errors\n return new CopilotKitError({\n message: `Event streaming error: ${errorMessage}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n}\n","import { TelemetryClient } from \"@copilotkit/shared\";\nimport { EndpointType, LangGraphPlatformEndpoint } from \"./runtime/remote-actions\";\nimport { createHash } from \"node:crypto\";\nimport { CopilotRuntime, resolveEndpointType } from \"./runtime/copilot-runtime\";\nimport { RuntimeInstanceCreatedInfo } from \"@copilotkit/shared/src/telemetry/events\";\nimport { CreateCopilotRuntimeServerOptions } from \"./integrations/shared\";\nconst packageJson = require(\"../../package.json\");\n\nconst telemetryClient = new TelemetryClient({\n packageName: packageJson.name,\n packageVersion: packageJson.version,\n});\n\nexport function getRuntimeInstanceTelemetryInfo(\n options: CreateCopilotRuntimeServerOptions,\n): RuntimeInstanceCreatedInfo {\n const runtime = options.runtime;\n const endpointsInfo = runtime.remoteEndpointDefinitions.reduce(\n (acc, endpoint) => {\n let info = { ...acc };\n\n const endpointType = resolveEndpointType(endpoint);\n if (!info.endpointTypes.includes(endpointType)) {\n info = {\n ...info,\n endpointTypes: [...info.endpointTypes, endpointType],\n };\n }\n\n if (endpointType === EndpointType.LangGraphPlatform) {\n // When type is resolved, recreating a const with casting of type\n const ep = endpoint as LangGraphPlatformEndpoint;\n info = {\n ...info,\n agentsAmount: ep.agents.length,\n hashedKey: ep.langsmithApiKey\n ? createHash(\"sha256\").update(ep.langsmithApiKey).digest(\"hex\")\n : null,\n };\n }\n\n return info;\n },\n { endpointTypes: [], agentsAmount: null, hashedKey: null },\n );\n\n // Get public API key from options.cloud.publicApiKey\n const publicApiKey = options.cloud?.publicApiKey;\n const apiKeyProvided = !!publicApiKey && publicApiKey.trim().length > 0;\n\n return {\n actionsAmount: runtime.actions.length,\n endpointsAmount: runtime.remoteEndpointDefinitions.length,\n endpointTypes: endpointsInfo.endpointTypes,\n agentsAmount: endpointsInfo.agentsAmount,\n hashedLgcKey: endpointsInfo.hashedKey,\n \"cloud.api_key_provided\": apiKeyProvided,\n ...(apiKeyProvided ? { \"cloud.public_api_key\": publicApiKey } : {}),\n ...(options.cloud?.baseUrl ? { \"cloud.base_url\": options.cloud.baseUrl } : {}),\n } as RuntimeInstanceCreatedInfo;\n}\n\nexport default telemetryClient;\n","import { Action, CopilotKitErrorCode } from \"@copilotkit/shared\";\nimport { GraphQLContext } from \"../integrations/shared\";\nimport { Logger } from \"pino\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { RuntimeEvent } from \"../../service-adapters/events\";\nimport { Observable } from \"rxjs\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport {\n constructLGCRemoteAction,\n constructRemoteActions,\n createHeaders,\n} from \"./remote-action-constructors\";\nimport {\n CopilotKitLowLevelError,\n ResolvedCopilotKitError,\n CopilotKitError,\n} from \"@copilotkit/shared\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { constructAGUIRemoteAction } from \"./agui-action\";\n\nexport type EndpointDefinition = CopilotKitEndpoint | LangGraphPlatformEndpoint;\n\nexport enum EndpointType {\n CopilotKit = \"copilotKit\",\n LangGraphPlatform = \"langgraph-platform\",\n}\n\nexport interface BaseEndpointDefinition<TActionType extends EndpointType> {\n type?: TActionType;\n}\n\nexport interface CopilotKitEndpoint extends BaseEndpointDefinition<EndpointType.CopilotKit> {\n url: string;\n onBeforeRequest?: ({ ctx }: { ctx: GraphQLContext }) => {\n headers?: Record<string, string> | undefined;\n };\n}\n\nexport interface LangGraphPlatformAgent {\n name: string;\n description: string;\n assistantId?: string;\n}\n\nexport interface LangGraphPlatformEndpoint\n extends BaseEndpointDefinition<EndpointType.LangGraphPlatform> {\n deploymentUrl: string;\n langsmithApiKey?: string | null;\n agents: LangGraphPlatformAgent[];\n}\n\nexport type RemoteActionInfoResponse = {\n actions: any[];\n agents: any[];\n};\n\nexport type RemoteAgentHandlerParams = {\n name: string;\n actionInputsWithoutAgents: ActionInput[];\n threadId?: string;\n nodeName?: string;\n additionalMessages?: Message[];\n metaEvents?: MetaEventInput[];\n};\n\nexport type RemoteAgentAction = Action<any> & {\n remoteAgentHandler: (params: RemoteAgentHandlerParams) => Promise<Observable<RuntimeEvent>>;\n};\n\nexport function isRemoteAgentAction(action: Action<any>): action is RemoteAgentAction {\n if (!action) {\n return false;\n }\n return typeof (action as RemoteAgentAction).remoteAgentHandler === \"function\";\n}\n\nasync function fetchRemoteInfo({\n url,\n onBeforeRequest,\n graphqlContext,\n logger,\n frontendUrl,\n}: {\n url: string;\n onBeforeRequest?: CopilotKitEndpoint[\"onBeforeRequest\"];\n graphqlContext: GraphQLContext;\n logger: Logger;\n frontendUrl?: string;\n}): Promise<RemoteActionInfoResponse> {\n logger.debug({ url }, \"Fetching actions from url\");\n const headers = createHeaders(onBeforeRequest, graphqlContext);\n\n const fetchUrl = `${url}/info`;\n try {\n const response = await fetch(fetchUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ properties: graphqlContext.properties, frontendUrl }),\n });\n\n if (!response.ok) {\n logger.error(\n { url, status: response.status, body: await response.text() },\n \"Failed to fetch actions from url\",\n );\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const json = await response.json();\n logger.debug({ json }, \"Fetched actions from url\");\n return json;\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n}\n\nexport async function setupRemoteActions({\n remoteEndpointDefinitions,\n graphqlContext,\n messages,\n agentStates,\n frontendUrl,\n agents,\n metaEvents,\n}: {\n remoteEndpointDefinitions: EndpointDefinition[];\n graphqlContext: GraphQLContext;\n messages: Message[];\n agentStates?: AgentStateInput[];\n frontendUrl?: string;\n agents: Record<string, AbstractAgent>;\n metaEvents?: MetaEventInput[];\n}): Promise<Action[]> {\n const logger = graphqlContext.logger.child({ component: \"remote-actions.fetchRemoteActions\" });\n logger.debug({ remoteEndpointDefinitions }, \"Fetching from remote endpoints\");\n\n // Remove duplicates of remoteEndpointDefinitions.url\n const filtered = remoteEndpointDefinitions.filter((value, index, self) => {\n if (value.type === EndpointType.LangGraphPlatform) {\n return value;\n }\n return index === self.findIndex((t: CopilotKitEndpoint) => t.url === value.url);\n });\n\n const result = await Promise.all(\n filtered.map(async (endpoint) => {\n // Check for properties that can distinguish LG platform from other actions\n if (endpoint.type === EndpointType.LangGraphPlatform) {\n return constructLGCRemoteAction({\n endpoint,\n messages,\n graphqlContext,\n logger: logger.child({\n component: \"remote-actions.constructLGCRemoteAction\",\n endpoint,\n }),\n agentStates,\n });\n }\n\n const json = await fetchRemoteInfo({\n url: endpoint.url,\n onBeforeRequest: endpoint.onBeforeRequest,\n graphqlContext,\n logger: logger.child({ component: \"remote-actions.fetchActionsFromUrl\", endpoint }),\n frontendUrl,\n });\n\n return constructRemoteActions({\n json,\n messages,\n url: endpoint.url,\n onBeforeRequest: endpoint.onBeforeRequest,\n graphqlContext,\n logger: logger.child({ component: \"remote-actions.constructActions\", endpoint }),\n agentStates,\n });\n }),\n );\n\n for (const [key, agent] of Object.entries(agents)) {\n if (agent.agentId !== undefined && agent.agentId !== key) {\n throw new CopilotKitError({\n message: `Agent ${key} has agentId ${agent.agentId} which does not match the key ${key}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n } else if (agent.agentId === undefined) {\n agent.agentId = key;\n }\n\n result.push(\n constructAGUIRemoteAction({\n logger,\n messages,\n agentStates,\n agent: agent,\n metaEvents,\n }),\n );\n }\n\n return result.flat();\n}\n","import { createHash } from \"node:crypto\";\nimport {\n CopilotKitEndpoint,\n RemoteAgentHandlerParams,\n RemoteActionInfoResponse,\n LangGraphPlatformEndpoint,\n} from \"./remote-actions\";\nimport { GraphQLContext } from \"../integrations\";\nimport { Logger } from \"pino\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport { Observable } from \"rxjs\";\nimport { RuntimeEvent, RuntimeEventSubject } from \"../../service-adapters/events\";\nimport telemetry from \"../telemetry-client\";\nimport { RemoteLangGraphEventSource } from \"../../agents/langgraph/event-source\";\nimport { Action } from \"@copilotkit/shared\";\nimport { execute } from \"./remote-lg-action\";\nimport { CopilotKitError, CopilotKitLowLevelError } from \"@copilotkit/shared\";\nimport { writeJsonLineResponseToEventStream } from \"../streaming\";\nimport { CopilotKitApiDiscoveryError, ResolvedCopilotKitError } from \"@copilotkit/shared\";\nimport { parseJson, tryMap } from \"@copilotkit/shared\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { fetchWithRetry } from \"./retry-utils\";\n\nexport function constructLGCRemoteAction({\n endpoint,\n graphqlContext,\n logger,\n messages,\n agentStates,\n}: {\n endpoint: LangGraphPlatformEndpoint;\n graphqlContext: GraphQLContext;\n logger: Logger;\n messages: Message[];\n agentStates?: AgentStateInput[];\n}) {\n const agents = endpoint.agents.map((agent) => ({\n name: agent.name,\n description: agent.description,\n parameters: [],\n handler: async (_args: any) => {},\n remoteAgentHandler: async ({\n name,\n actionInputsWithoutAgents,\n threadId,\n nodeName,\n additionalMessages = [],\n metaEvents,\n }: RemoteAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {\n logger.debug({ actionName: agent.name }, \"Executing LangGraph Platform agent\");\n\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: true,\n type: \"langgraph-platform\",\n agentsAmount: endpoint.agents.length,\n hashedLgcKey: endpoint.langsmithApiKey\n ? createHash(\"sha256\").update(endpoint.langsmithApiKey).digest(\"hex\")\n : null,\n });\n\n let state = {};\n let config = {};\n if (agentStates) {\n const jsonState = agentStates.find((state) => state.agentName === name);\n if (jsonState) {\n state = parseJson(jsonState.state, {});\n config = parseJson(jsonState.config, {});\n }\n }\n\n try {\n const response = await execute({\n logger: logger.child({ component: \"remote-actions.remote-lg-action.streamEvents\" }),\n deploymentUrl: endpoint.deploymentUrl,\n langsmithApiKey: endpoint.langsmithApiKey,\n agent,\n threadId,\n nodeName,\n messages: [...messages, ...additionalMessages],\n state,\n config,\n properties: graphqlContext.properties,\n actions: tryMap(actionInputsWithoutAgents, (action: ActionInput) => ({\n name: action.name,\n description: action.description,\n parameters: JSON.parse(action.jsonSchema),\n })),\n metaEvents,\n });\n\n const eventSource = new RemoteLangGraphEventSource();\n writeJsonLineResponseToEventStream(response, eventSource.eventStream$);\n return eventSource.processLangGraphEvents();\n } catch (error) {\n logger.error(\n { url: endpoint.deploymentUrl, status: 500, body: error.message },\n \"Failed to execute LangGraph Platform agent\",\n );\n throw new Error(\"Failed to execute LangGraph Platform agent\");\n }\n },\n }));\n\n return [...agents];\n}\n\nexport enum RemoteAgentType {\n LangGraph = \"langgraph\",\n CrewAI = \"crewai\",\n}\n\nexport function constructRemoteActions({\n json,\n url,\n onBeforeRequest,\n graphqlContext,\n logger,\n messages,\n agentStates,\n}: {\n json: RemoteActionInfoResponse;\n url: string;\n onBeforeRequest?: CopilotKitEndpoint[\"onBeforeRequest\"];\n graphqlContext: GraphQLContext;\n logger: Logger;\n messages: Message[];\n agentStates?: AgentStateInput[];\n}): Action<any>[] {\n const totalAgents = Array.isArray(json[\"agents\"]) ? json[\"agents\"].length : 0;\n\n const actions = json[\"actions\"].map((action) => ({\n name: action.name,\n description: action.description,\n parameters: action.parameters,\n handler: async (args: any) => {\n logger.debug({ actionName: action.name, args }, \"Executing remote action\");\n\n const headers = createHeaders(onBeforeRequest, graphqlContext);\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: false,\n type: \"self-hosted\",\n agentsAmount: totalAgents,\n });\n\n const fetchUrl = `${url}/actions/execute`;\n try {\n const response = await fetchWithRetry(\n fetchUrl,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n name: action.name,\n arguments: args,\n properties: graphqlContext.properties,\n }),\n },\n logger,\n );\n\n if (!response.ok) {\n logger.error(\n { url, status: response.status, body: await response.text() },\n \"Failed to execute remote action\",\n );\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const requestResult = await response.json();\n\n const result = requestResult[\"result\"];\n logger.debug({ actionName: action.name, result }, \"Executed remote action\");\n return result;\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n },\n }));\n\n const agents = totalAgents\n ? json[\"agents\"].map((agent) => ({\n name: agent.name,\n description: agent.description,\n parameters: [],\n handler: async (_args: any) => {},\n\n remoteAgentHandler: async ({\n name,\n actionInputsWithoutAgents,\n threadId,\n nodeName,\n additionalMessages = [],\n metaEvents,\n }: RemoteAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {\n logger.debug({ actionName: agent.name }, \"Executing remote agent\");\n\n const headers = createHeaders(onBeforeRequest, graphqlContext);\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: true,\n type: \"self-hosted\",\n agentsAmount: json[\"agents\"].length,\n });\n\n let state = {};\n let config = {};\n if (agentStates) {\n const jsonState = agentStates.find((state) => state.agentName === name);\n if (jsonState) {\n state = parseJson(jsonState.state, {});\n config = parseJson(jsonState.config, {});\n }\n }\n\n const fetchUrl = `${url}/agents/execute`;\n try {\n const response = await fetchWithRetry(\n fetchUrl,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n name,\n threadId,\n nodeName,\n messages: [...messages, ...additionalMessages],\n state,\n config,\n properties: graphqlContext.properties,\n actions: tryMap(actionInputsWithoutAgents, (action: ActionInput) => ({\n name: action.name,\n description: action.description,\n parameters: JSON.parse(action.jsonSchema),\n })),\n metaEvents,\n }),\n },\n logger,\n );\n\n if (!response.ok) {\n logger.error(\n { url, status: response.status, body: await response.text() },\n \"Failed to execute remote agent\",\n );\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n if (agent.type === RemoteAgentType.LangGraph) {\n const eventSource = new RemoteLangGraphEventSource();\n writeJsonLineResponseToEventStream(response.body!, eventSource.eventStream$);\n return eventSource.processLangGraphEvents();\n } else if (agent.type === RemoteAgentType.CrewAI) {\n const eventStream$ = new RuntimeEventSubject();\n writeJsonLineResponseToEventStream(response.body!, eventStream$);\n return eventStream$;\n } else {\n throw new Error(\"Unsupported agent type\");\n }\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n },\n }))\n : [];\n\n return [...actions, ...agents];\n}\n\nexport function createHeaders(\n onBeforeRequest: CopilotKitEndpoint[\"onBeforeRequest\"],\n graphqlContext: GraphQLContext,\n) {\n const headers = {\n \"Content-Type\": \"application/json\",\n };\n\n if (onBeforeRequest) {\n const { headers: additionalHeaders } = onBeforeRequest({ ctx: graphqlContext });\n if (additionalHeaders) {\n Object.assign(headers, additionalHeaders);\n }\n }\n\n return headers;\n}\n","import { catchError, mergeMap, ReplaySubject, scan } from \"rxjs\";\nimport { CustomEventNames, LangGraphEvent, LangGraphEventTypes } from \"./events\";\nimport {\n RuntimeEvent,\n RuntimeEventTypes,\n RuntimeMetaEventName,\n} from \"../../service-adapters/events\";\nimport { randomId, CopilotKitError } from \"@copilotkit/shared\";\n\ninterface LangGraphEventWithState {\n event: LangGraphEvent | null;\n\n isMessageStart: boolean;\n isMessageEnd: boolean;\n isToolCallStart: boolean;\n isToolCallEnd: boolean;\n isToolCall: boolean;\n\n lastMessageId: string | null;\n lastToolCallId: string | null;\n lastToolCallName: string | null;\n currentContent: string | null;\n processedToolCallIds: Set<string>;\n}\n\nexport class RemoteLangGraphEventSource {\n public eventStream$ = new ReplaySubject<LangGraphEvent>();\n\n private shouldEmitToolCall(\n shouldEmitToolCalls: string | string[] | boolean,\n toolCallName: string,\n ) {\n if (typeof shouldEmitToolCalls === \"boolean\") {\n return shouldEmitToolCalls;\n }\n if (Array.isArray(shouldEmitToolCalls)) {\n return shouldEmitToolCalls.includes(toolCallName);\n }\n return shouldEmitToolCalls === toolCallName;\n }\n\n private getCurrentContent(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n const content = event.data?.chunk?.kwargs?.content ?? event.data?.chunk?.content;\n\n if (!content) {\n const toolCallChunks = this.getCurrentToolCallChunks(event) ?? [];\n for (const chunk of toolCallChunks) {\n if (chunk.args) {\n return chunk.args;\n }\n }\n }\n\n if (typeof content === \"string\") {\n return content;\n } else if (Array.isArray(content) && content.length > 0) {\n return content[0].text;\n }\n\n return null;\n }\n\n private getCurrentMessageId(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n return event.data?.chunk?.kwargs?.id ?? event.data?.chunk?.id;\n }\n\n private getCurrentToolCallChunks(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n return event.data?.chunk?.kwargs?.tool_call_chunks ?? event.data?.chunk?.tool_call_chunks;\n }\n\n private getResponseMetadata(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n return event.data?.chunk?.kwargs?.response_metadata ?? event.data?.chunk?.response_metadata;\n }\n\n processLangGraphEvents() {\n let lastEventWithState: LangGraphEventWithState | null = null;\n\n return this.eventStream$.pipe(\n scan(\n (acc, event) => {\n if (event.event === LangGraphEventTypes.OnChatModelStream) {\n const prevMessageId = acc.lastMessageId;\n acc.currentContent = this.getCurrentContent(event);\n acc.lastMessageId = this.getCurrentMessageId(event) ?? acc.lastMessageId;\n const toolCallChunks = this.getCurrentToolCallChunks(event) ?? [];\n const responseMetadata = this.getResponseMetadata(event);\n // Check if a given event is a tool call\n const toolCallCheck = toolCallChunks && toolCallChunks.length > 0;\n let isToolCallEnd = responseMetadata?.finish_reason === \"tool_calls\";\n\n acc.isToolCallStart = toolCallChunks.some((chunk: any) => chunk.name && chunk.id);\n acc.isMessageStart = prevMessageId !== acc.lastMessageId && !acc.isToolCallStart;\n\n let previousRoundHadToolCall = acc.isToolCall;\n acc.isToolCall = toolCallCheck;\n // Previous \"acc.isToolCall\" was set but now it won't pass the check, it means the tool call just ended.\n if (previousRoundHadToolCall && !toolCallCheck) {\n isToolCallEnd = true;\n }\n acc.isToolCallEnd = isToolCallEnd;\n acc.isMessageEnd = responseMetadata?.finish_reason === \"stop\";\n ({ name: acc.lastToolCallName, id: acc.lastToolCallId } = toolCallChunks.find(\n (chunk: any) => chunk.name && chunk.id,\n ) ?? { name: acc.lastToolCallName, id: acc.lastToolCallId });\n }\n acc.event = event;\n lastEventWithState = acc; // Capture the state\n return acc;\n },\n {\n event: null,\n isMessageStart: false,\n isMessageEnd: false,\n isToolCallStart: false,\n isToolCallEnd: false,\n isToolCall: false,\n lastMessageId: null,\n lastToolCallId: null,\n lastToolCallName: null,\n currentContent: null,\n processedToolCallIds: new Set<string>(),\n } as LangGraphEventWithState,\n ),\n mergeMap((acc): RuntimeEvent[] => {\n const events: RuntimeEvent[] = [];\n\n let shouldEmitMessages = true;\n let shouldEmitToolCalls: string | string[] | boolean = true;\n\n if (acc.event.event == LangGraphEventTypes.OnChatModelStream) {\n if (\"copilotkit:emit-tool-calls\" in (acc.event.metadata || {})) {\n shouldEmitToolCalls = acc.event.metadata[\"copilotkit:emit-tool-calls\"];\n }\n if (\"copilotkit:emit-messages\" in (acc.event.metadata || {})) {\n shouldEmitMessages = acc.event.metadata[\"copilotkit:emit-messages\"];\n }\n }\n\n if (acc.event.event === LangGraphEventTypes.OnInterrupt) {\n events.push({\n type: RuntimeEventTypes.MetaEvent,\n name: RuntimeMetaEventName.LangGraphInterruptEvent,\n value: acc.event.value,\n });\n }\n if (acc.event.event === LangGraphEventTypes.OnCopilotKitInterrupt) {\n events.push({\n type: RuntimeEventTypes.MetaEvent,\n name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent,\n data: acc.event.data,\n });\n }\n\n const responseMetadata = this.getResponseMetadata(acc.event);\n\n // Tool call ended: emit ActionExecutionEnd\n if (\n acc.isToolCallEnd &&\n this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName) &&\n acc.lastToolCallId &&\n !acc.processedToolCallIds.has(acc.lastToolCallId)\n ) {\n acc.processedToolCallIds.add(acc.lastToolCallId);\n\n events.push({\n type: RuntimeEventTypes.ActionExecutionEnd,\n actionExecutionId: acc.lastToolCallId,\n });\n }\n\n // Message ended: emit TextMessageEnd\n else if (responseMetadata?.finish_reason === \"stop\" && shouldEmitMessages) {\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: acc.lastMessageId,\n });\n }\n\n switch (acc.event!.event) {\n //\n // Custom events\n //\n case LangGraphEventTypes.OnCustomEvent:\n //\n // Manually emit a message\n //\n if (acc.event.name === CustomEventNames.CopilotKitManuallyEmitMessage) {\n events.push({\n type: RuntimeEventTypes.TextMessageStart,\n messageId: acc.event.data.message_id,\n });\n events.push({\n type: RuntimeEventTypes.TextMessageContent,\n messageId: acc.event.data.message_id,\n content: acc.event.data.message,\n });\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: acc.event.data.message_id,\n });\n }\n //\n // Manually emit a tool call\n //\n else if (acc.event.name === CustomEventNames.CopilotKitManuallyEmitToolCall) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId: acc.event.data.id,\n actionName: acc.event.data.name,\n parentMessageId: acc.event.data.id,\n });\n events.push({\n type: RuntimeEventTypes.ActionExecutionArgs,\n actionExecutionId: acc.event.data.id,\n args: JSON.stringify(acc.event.data.args),\n });\n events.push({\n type: RuntimeEventTypes.ActionExecutionEnd,\n actionExecutionId: acc.event.data.id,\n });\n }\n break;\n case LangGraphEventTypes.OnCopilotKitStateSync:\n events.push({\n type: RuntimeEventTypes.AgentStateMessage,\n threadId: acc.event.thread_id,\n role: acc.event.role,\n agentName: acc.event.agent_name,\n nodeName: acc.event.node_name,\n runId: acc.event.run_id,\n active: acc.event.active,\n state: JSON.stringify(acc.event.state),\n running: acc.event.running,\n });\n break;\n case LangGraphEventTypes.OnChatModelStream:\n if (\n acc.isToolCallStart &&\n this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName)\n ) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId: acc.lastToolCallId,\n actionName: acc.lastToolCallName,\n parentMessageId: acc.lastMessageId,\n });\n }\n // Message started: emit TextMessageStart\n else if (acc.isMessageStart && shouldEmitMessages) {\n acc.processedToolCallIds.clear();\n events.push({\n type: RuntimeEventTypes.TextMessageStart,\n messageId: acc.lastMessageId,\n });\n }\n\n // Tool call args: emit ActionExecutionArgs\n if (\n acc.isToolCall &&\n acc.currentContent &&\n this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName)\n ) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionArgs,\n actionExecutionId: acc.lastToolCallId,\n args: acc.currentContent,\n });\n }\n // Message content: emit TextMessageContent\n else if (!acc.isToolCall && acc.currentContent && shouldEmitMessages) {\n events.push({\n type: RuntimeEventTypes.TextMessageContent,\n messageId: acc.lastMessageId,\n content: acc.currentContent,\n });\n }\n break;\n }\n return events;\n }),\n catchError((error) => {\n console.error(error);\n\n // If it's a structured CopilotKitError, re-throw it to be handled by the frontend error system\n if (\n error instanceof CopilotKitError ||\n (error?.name && error.name.includes(\"CopilotKit\"))\n ) {\n throw error;\n }\n\n const events: RuntimeEvent[] = [];\n\n if (lastEventWithState?.lastMessageId && !lastEventWithState.isToolCall) {\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: lastEventWithState.lastMessageId,\n });\n }\n if (lastEventWithState?.lastToolCallId) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionEnd,\n actionExecutionId: lastEventWithState.lastToolCallId,\n });\n }\n\n const messageId = randomId();\n\n events.push({\n type: RuntimeEventTypes.TextMessageStart,\n messageId: messageId,\n });\n events.push({\n type: RuntimeEventTypes.TextMessageContent,\n messageId: messageId,\n content: \"❌ An error occurred. Please try again.\",\n });\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: messageId,\n });\n\n return events;\n }),\n );\n }\n}\n","import { ActionExecutionMessage, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\n\nexport enum LangGraphEventTypes {\n OnChainStart = \"on_chain_start\",\n OnChainStream = \"on_chain_stream\",\n OnChainEnd = \"on_chain_end\",\n OnChatModelStart = \"on_chat_model_start\",\n OnChatModelStream = \"on_chat_model_stream\",\n OnChatModelEnd = \"on_chat_model_end\",\n OnToolStart = \"on_tool_start\",\n OnToolEnd = \"on_tool_end\",\n OnCopilotKitStateSync = \"on_copilotkit_state_sync\",\n OnCopilotKitEmitMessage = \"on_copilotkit_emit_message\",\n OnCopilotKitEmitToolCall = \"on_copilotkit_emit_tool_call\",\n OnCustomEvent = \"on_custom_event\",\n OnInterrupt = \"on_interrupt\",\n OnCopilotKitInterrupt = \"on_copilotkit_interrupt\",\n}\n\nexport enum MetaEventNames {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport enum CustomEventNames {\n CopilotKitManuallyEmitMessage = \"copilotkit_manually_emit_message\",\n CopilotKitManuallyEmitToolCall = \"copilotkit_manually_emit_tool_call\",\n CopilotKitManuallyEmitIntermediateState = \"copilotkit_manually_emit_intermediate_state\",\n CopilotKitExit = \"copilotkit_exit\",\n}\n\ntype LangGraphOnCopilotKitStateSyncEvent = {\n event: LangGraphEventTypes.OnCopilotKitStateSync;\n thread_id: string;\n agent_name: string;\n node_name: string;\n run_id: string;\n active: boolean;\n role: string;\n state: any;\n running: boolean;\n};\n\ntype LangGraphOnChainStartEvent = {\n event: LangGraphEventTypes.OnChainStart;\n run_id: string;\n name: string;\n tags: string[];\n metadata: { thread_id: string };\n data: {\n input: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainEndEvent = {\n event: LangGraphEventTypes.OnChainEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: any;\n output: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStartEvent = {\n event: LangGraphEventTypes.OnChatModelStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n type: string;\n id: string;\n };\n }[][];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStreamEvent = {\n event: LangGraphEventTypes.OnChatModelStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n chunk: {\n lc: number;\n type: string;\n id: string;\n kwargs: {\n content: string | { text: string; type: string; index: number }[];\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: {}; id: string; type: string }[];\n tool_call_chunks: {\n name: string;\n args: string;\n id: string;\n index: number;\n type: string;\n }[];\n invalid_tool_calls: any[];\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelEndEvent = {\n event: LangGraphEventTypes.OnChatModelEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: any;\n output: {\n generations: {\n text: string;\n generation_info: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n message: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls: any[];\n };\n };\n }[][];\n llm_output: any;\n run: any;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainStreamEvent = {\n event: LangGraphEventTypes.OnChainStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step?: number;\n langgraph_node?: string;\n langgraph_triggers?: string[];\n langgraph_task_idx?: number;\n thread_ts?: string;\n };\n data: {\n chunk: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs?: {\n tool_calls?: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata?: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls?: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls?: any[];\n };\n }[];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolStartEvent = {\n event: LangGraphEventTypes.OnToolStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolEndEvent = {\n event: LangGraphEventTypes.OnToolEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n output: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string[];\n type: string;\n name: string;\n tool_call_id: string;\n status: string;\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnCustomEvent = {\n event: LangGraphEventTypes.OnCustomEvent;\n run_id: string;\n name: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_path: [string, string];\n langgraph_checkpoint_ns: string;\n checkpoint_ns: string;\n };\n data: any;\n parent_ids: string[];\n};\n\ninterface LangGraphInterruptEvent {\n event: LangGraphEventTypes.OnInterrupt;\n value: string;\n}\n\ninterface CopilotKitLangGraphInterruptEvent {\n event: LangGraphEventTypes.OnCopilotKitInterrupt;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n}\n\nexport type LangGraphEvent =\n | LangGraphOnChainStartEvent\n | LangGraphOnChainStreamEvent\n | LangGraphOnChainEndEvent\n | LangGraphOnChatModelStartEvent\n | LangGraphOnChatModelStreamEvent\n | LangGraphOnChatModelEndEvent\n | LangGraphOnToolStartEvent\n | LangGraphOnToolEndEvent\n | LangGraphOnCopilotKitStateSyncEvent\n | LangGraphOnCustomEvent\n | LangGraphInterruptEvent\n | CopilotKitLangGraphInterruptEvent;\n","import {\n Client as LangGraphClient,\n EventsStreamEvent,\n GraphSchema,\n StreamMode,\n} from \"@langchain/langgraph-sdk\";\nimport { createHash } from \"node:crypto\";\nimport { isValidUUID, randomUUID } from \"@copilotkit/shared\";\nimport { parse as parsePartialJson } from \"partial-json\";\nimport { Logger } from \"pino\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangGraphPlatformAgent, LangGraphPlatformEndpoint } from \"./remote-actions\";\nimport { CopilotRequestContextProperties } from \"../integrations\";\nimport { ActionExecutionMessage, Message, MessageType } from \"../../graphql/types/converted\";\nimport { MessageRole } from \"../../graphql/types/enums\";\nimport { CustomEventNames, LangGraphEventTypes } from \"../../agents/langgraph/events\";\nimport telemetry from \"../telemetry-client\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\nimport { MetaEventName } from \"../../graphql/types/meta-events.type\";\nimport { parseJson, CopilotKitMisuseError } from \"@copilotkit/shared\";\nimport { RemoveMessage } from \"@langchain/core/messages\";\nimport { RETRY_CONFIG, isRetryableError, sleep, calculateDelay } from \"./retry-utils\";\n\ntype State = Record<string, any>;\n\ntype ExecutionAction = Pick<ActionInput, \"name\" | \"description\"> & { parameters: string };\n\ninterface ExecutionArgs extends Omit<LangGraphPlatformEndpoint, \"agents\"> {\n agent: LangGraphPlatformAgent;\n threadId: string;\n nodeName: string;\n messages: Message[];\n state: State;\n config?: {\n configurable?: Record<string, any>;\n [key: string]: any;\n };\n properties: CopilotRequestContextProperties;\n actions: ExecutionAction[];\n logger: Logger;\n metaEvents?: MetaEventInput[];\n}\n\n// The following types are our own definition to the messages accepted by LangGraph Platform, enhanced with some of our extra data.\ninterface ToolCall {\n id: string;\n name: string;\n args: Record<string, unknown>;\n}\n\ntype BaseLangGraphPlatformMessage = Omit<\n Message,\n | \"isResultMessage\"\n | \"isTextMessage\"\n | \"isImageMessage\"\n | \"isActionExecutionMessage\"\n | \"isAgentStateMessage\"\n | \"type\"\n | \"createdAt\"\n> & {\n content: string;\n role: MessageRole;\n additional_kwargs?: Record<string, unknown>;\n type: MessageType;\n};\n\ninterface LangGraphPlatformResultMessage extends BaseLangGraphPlatformMessage {\n tool_call_id: string;\n name: string;\n}\n\ninterface LangGraphPlatformActionExecutionMessage extends BaseLangGraphPlatformMessage {\n tool_calls: ToolCall[];\n}\n\ntype LangGraphPlatformMessage =\n | LangGraphPlatformActionExecutionMessage\n | LangGraphPlatformResultMessage\n | BaseLangGraphPlatformMessage;\n\ntype SchemaKeys = {\n input: string[] | null;\n output: string[] | null;\n config: string[] | null;\n} | null;\n\nlet activeInterruptEvent = false;\n\nexport async function execute(args: ExecutionArgs): Promise<ReadableStream<Uint8Array>> {\n return new ReadableStream({\n async start(controller) {\n let lastError: any;\n\n // Retry logic for transient connection errors\n for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {\n try {\n await streamEvents(controller, args);\n controller.close();\n return; // Success - exit retry loop\n } catch (err) {\n lastError = err;\n\n // Check if this is a retryable error\n if (isRetryableError(err) && attempt < RETRY_CONFIG.maxRetries) {\n const delay = calculateDelay(attempt);\n console.warn(\n `LangGraph connection attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries + 1} failed. ` +\n `Retrying in ${delay}ms. Error: ${err?.message || String(err)}`,\n );\n await sleep(delay);\n continue; // Retry\n }\n\n // Not retryable or max retries exceeded - handle error\n break;\n }\n }\n\n // Handle the final error after retries exhausted\n const cause = lastError?.cause;\n const errorCode = cause?.code || lastError?.code;\n\n if (errorCode === \"ECONNREFUSED\") {\n throw new CopilotKitMisuseError({\n message: `\n The LangGraph client could not connect to the graph after ${RETRY_CONFIG.maxRetries + 1} attempts. Please further check previous logs, which includes further details.\n \n See more: https://docs.copilotkit.ai/troubleshooting/common-issues`,\n });\n } else {\n throw new CopilotKitMisuseError({\n message: `\n The LangGraph client threw unhandled error ${lastError}.\n \n See more: https://docs.copilotkit.ai/troubleshooting/common-issues`,\n });\n }\n },\n });\n}\n\nasync function streamEvents(controller: ReadableStreamDefaultController, args: ExecutionArgs) {\n const {\n deploymentUrl,\n langsmithApiKey,\n threadId: argsInitialThreadId,\n agent,\n nodeName: initialNodeName,\n state: initialState,\n config: explicitConfig,\n messages,\n actions,\n logger,\n properties,\n metaEvents,\n } = args;\n\n let nodeName = initialNodeName;\n let state = initialState;\n const { name, assistantId: initialAssistantId } = agent;\n\n const propertyHeaders = properties.authorization\n ? { authorization: `Bearer ${properties.authorization}` }\n : null;\n\n const client = new LangGraphClient({\n apiUrl: deploymentUrl,\n apiKey: langsmithApiKey,\n defaultHeaders: { ...propertyHeaders },\n });\n\n let threadId = argsInitialThreadId ?? randomUUID();\n if (argsInitialThreadId && argsInitialThreadId.startsWith(\"ck-\")) {\n threadId = argsInitialThreadId.substring(3);\n }\n\n if (!isValidUUID(threadId)) {\n console.warn(\n `Cannot use the threadId ${threadId} with LangGraph Platform. Must be a valid UUID.`,\n );\n }\n\n let wasInitiatedWithExistingThread = true;\n try {\n await client.threads.get(threadId);\n } catch (error) {\n wasInitiatedWithExistingThread = false;\n await client.threads.create({ threadId });\n }\n\n let agentState = { values: {} };\n if (wasInitiatedWithExistingThread) {\n agentState = await client.threads.getState(threadId);\n }\n\n const agentStateValues = agentState.values as State;\n state.messages = agentStateValues.messages;\n const mode =\n threadId && nodeName != \"__end__\" && nodeName != undefined && nodeName != null\n ? \"continue\"\n : \"start\";\n let formattedMessages = [];\n try {\n formattedMessages = copilotkitMessagesToLangChain(messages);\n } catch (e) {\n logger.error(e, `Error event thrown: ${e.message}`);\n }\n state = langGraphDefaultMergeState(state, formattedMessages, actions, name);\n\n const streamInput = mode === \"start\" ? state : null;\n\n const payload = {\n input: streamInput,\n streamMode: [\"events\", \"values\", \"updates\"] satisfies StreamMode[],\n command: undefined,\n };\n\n const lgInterruptMetaEvent = metaEvents?.find(\n (ev) => ev.name === MetaEventName.LangGraphInterruptEvent,\n );\n if (activeInterruptEvent && !lgInterruptMetaEvent) {\n // state.messages includes only messages that were not processed by the agent, which are the interrupt messages\n payload.command = { resume: state.messages };\n }\n if (lgInterruptMetaEvent?.response) {\n let response = lgInterruptMetaEvent.response;\n payload.command = { resume: parseJson(response, response) };\n }\n\n if (mode === \"continue\" && !activeInterruptEvent) {\n await client.threads.updateState(threadId, { values: state, asNode: nodeName });\n }\n\n let streamInfo: {\n provider?: string;\n langGraphHost?: string;\n langGraphVersion?: string;\n hashedLgcKey?: string | null;\n } = {\n hashedLgcKey: langsmithApiKey\n ? createHash(\"sha256\").update(langsmithApiKey).digest(\"hex\")\n : null,\n };\n\n const assistants = await client.assistants.search();\n const retrievedAssistant = assistants.find(\n (a) => a.name === name || a.assistant_id === initialAssistantId,\n );\n if (!retrievedAssistant) {\n telemetry.capture(\"oss.runtime.agent_execution_stream_errored\", {\n ...streamInfo,\n error: `Found no assistants for given information, while ${assistants.length} assistants exists`,\n });\n console.error(`\n No agent found for the agent name specified in CopilotKit provider\n Please check your available agents or provide an agent ID in the LangGraph Platform endpoint definition.\\n\n \n These are the available agents: [${assistants.map((a) => `${a.name} (ID: ${a.assistant_id})`).join(\", \")}]\n `);\n throw new Error(\"No agent id found\");\n }\n const assistantId = retrievedAssistant.assistant_id;\n\n const graphInfo = await client.assistants.getGraph(assistantId);\n const graphSchema = await client.assistants.getSchemas(assistantId);\n const schemaKeys = getSchemaKeys(graphSchema);\n\n if (explicitConfig) {\n let filteredConfigurable = retrievedAssistant.config.configurable;\n if (explicitConfig.configurable) {\n filteredConfigurable = schemaKeys?.config\n ? filterObjectBySchemaKeys(explicitConfig?.configurable, schemaKeys?.config)\n : explicitConfig?.configurable;\n }\n\n const newConfig = {\n ...retrievedAssistant.config,\n ...explicitConfig,\n configurable: filteredConfigurable,\n };\n\n // LG does not return recursion limit if it's the default, therefore we check: if no recursion limit is currently set, and the user asked for 25, there is no change.\n const isRecursionLimitSetToDefault =\n retrievedAssistant.config.recursion_limit == null && explicitConfig.recursion_limit === 25;\n // Deep compare configs to avoid unnecessary update calls\n const configsAreDifferent =\n JSON.stringify(newConfig) !== JSON.stringify(retrievedAssistant.config);\n\n // Check if the only difference is the recursion_limit being set to default\n const isOnlyRecursionLimitDifferent =\n isRecursionLimitSetToDefault &&\n JSON.stringify({ ...newConfig, recursion_limit: null }) ===\n JSON.stringify({ ...retrievedAssistant.config, recursion_limit: null });\n\n // If configs are different, we further check: Is the only diff a request to set the recursion limit to its already default?\n if (configsAreDifferent && !isOnlyRecursionLimitDifferent) {\n await client.assistants.update(assistantId, {\n config: newConfig,\n });\n }\n }\n\n // Do not input keys that are not part of the input schema\n if (payload.input && schemaKeys?.input) {\n payload.input = filterObjectBySchemaKeys(payload.input, schemaKeys.input);\n }\n\n let streamingStateExtractor = new StreamingStateExtractor([]);\n let prevNodeName = null;\n let emitIntermediateStateUntilEnd = null;\n let shouldExit = false;\n let externalRunId = null;\n\n const streamResponse = client.runs.stream(threadId, assistantId, payload);\n\n const emit = (message: string) => controller.enqueue(new TextEncoder().encode(message));\n\n let latestStateValues = {};\n let updatedState = state;\n // If a manual emittance happens, it is the ultimate source of truth of state, unless a node has exited.\n // Therefore, this value should either hold null, or the only edition of state that should be used.\n let manuallyEmittedState = null;\n\n activeInterruptEvent = false;\n try {\n telemetry.capture(\"oss.runtime.agent_execution_stream_started\", {\n hashedLgcKey: streamInfo.hashedLgcKey,\n });\n for await (let streamResponseChunk of streamResponse) {\n if (![\"events\", \"values\", \"error\", \"updates\"].includes(streamResponseChunk.event)) continue;\n\n if (streamResponseChunk.event === \"error\") {\n throw new Error(`Error event thrown: ${streamResponseChunk.data.message}`);\n }\n\n // Force event type, as data is not properly defined on the LG side.\n type EventsChunkData = {\n __interrupt__?: any;\n metadata: Record<string, any>;\n event: string;\n data: any;\n [key: string]: unknown;\n };\n const chunk = streamResponseChunk as EventsStreamEvent & { data: EventsChunkData };\n\n const interruptEvents = chunk.data.__interrupt__;\n if (interruptEvents?.length) {\n activeInterruptEvent = true;\n const interruptValue = interruptEvents?.[0].value;\n if (\n typeof interruptValue != \"string\" &&\n \"__copilotkit_interrupt_value__\" in interruptValue\n ) {\n const evValue = interruptValue.__copilotkit_interrupt_value__;\n emit(\n JSON.stringify({\n event: LangGraphEventTypes.OnCopilotKitInterrupt,\n data: {\n value: typeof evValue === \"string\" ? evValue : JSON.stringify(evValue),\n messages: langchainMessagesToCopilotKit(interruptValue.__copilotkit_messages__),\n },\n }) + \"\\n\",\n );\n } else {\n emit(\n JSON.stringify({\n event: LangGraphEventTypes.OnInterrupt,\n value:\n typeof interruptValue === \"string\"\n ? interruptValue\n : JSON.stringify(interruptValue),\n }) + \"\\n\",\n );\n }\n continue;\n }\n if (streamResponseChunk.event === \"updates\") continue;\n\n if (streamResponseChunk.event === \"values\") {\n latestStateValues = chunk.data;\n continue;\n }\n\n const chunkData = chunk.data;\n const currentNodeName = chunkData.metadata.langgraph_node;\n const eventType = chunkData.event;\n const runId = chunkData.metadata.run_id;\n externalRunId = runId;\n const metadata = chunkData.metadata;\n if (chunkData.data?.output?.model != null && chunkData.data?.output?.model != \"\") {\n streamInfo.provider = chunkData.data?.output?.model;\n }\n if (metadata.langgraph_host != null && metadata.langgraph_host != \"\") {\n streamInfo.langGraphHost = metadata.langgraph_host;\n }\n if (metadata.langgraph_version != null && metadata.langgraph_version != \"\") {\n streamInfo.langGraphVersion = metadata.langgraph_version;\n }\n\n shouldExit =\n shouldExit ||\n (eventType === LangGraphEventTypes.OnCustomEvent &&\n chunkData.name === CustomEventNames.CopilotKitExit);\n\n const emitIntermediateState = metadata[\"copilotkit:emit-intermediate-state\"];\n const manuallyEmitIntermediateState =\n eventType === LangGraphEventTypes.OnCustomEvent &&\n chunkData.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState;\n\n const exitingNode =\n nodeName === currentNodeName && eventType === LangGraphEventTypes.OnChainEnd;\n\n // See manuallyEmittedState for explanation\n if (exitingNode) {\n manuallyEmittedState = null;\n }\n\n // we only want to update the node name under certain conditions\n // since we don't need any internal node names to be sent to the frontend\n if (graphInfo[\"nodes\"].some((node) => node.id === currentNodeName)) {\n nodeName = currentNodeName;\n }\n\n updatedState = manuallyEmittedState ?? latestStateValues;\n\n if (!nodeName) {\n continue;\n }\n\n if (manuallyEmitIntermediateState) {\n // See manuallyEmittedState for explanation\n manuallyEmittedState = chunkData.data;\n emit(\n getStateSyncEvent({\n threadId,\n runId,\n agentName: agent.name,\n nodeName,\n state: manuallyEmittedState,\n running: true,\n active: true,\n schemaKeys,\n }),\n );\n continue;\n }\n\n if (emitIntermediateState && emitIntermediateStateUntilEnd == null) {\n emitIntermediateStateUntilEnd = nodeName;\n }\n\n if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStart) {\n // reset the streaming state extractor\n streamingStateExtractor = new StreamingStateExtractor(emitIntermediateState);\n }\n\n if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStream) {\n streamingStateExtractor.bufferToolCalls(chunkData);\n }\n\n if (emitIntermediateStateUntilEnd !== null) {\n updatedState = {\n ...updatedState,\n ...streamingStateExtractor.extractState(),\n };\n }\n\n if (\n !emitIntermediateState &&\n currentNodeName === emitIntermediateStateUntilEnd &&\n eventType === LangGraphEventTypes.OnChainEnd\n ) {\n // stop emitting function call state\n emitIntermediateStateUntilEnd = null;\n }\n\n if (\n JSON.stringify(updatedState) !== JSON.stringify(state) ||\n prevNodeName != nodeName ||\n exitingNode\n ) {\n state = updatedState;\n prevNodeName = nodeName;\n emit(\n getStateSyncEvent({\n threadId,\n runId,\n agentName: agent.name,\n nodeName,\n state,\n running: true,\n active: !exitingNode,\n schemaKeys,\n }),\n );\n }\n\n emit(JSON.stringify(chunkData) + \"\\n\");\n }\n\n state = await client.threads.getState(threadId);\n const interrupts = state.tasks?.[0]?.interrupts;\n nodeName = interrupts ? nodeName : Object.keys(state.metadata.writes)[0];\n const isEndNode = state.next.length === 0 && !interrupts;\n\n telemetry.capture(\"oss.runtime.agent_execution_stream_ended\", streamInfo);\n\n emit(\n getStateSyncEvent({\n threadId,\n runId: externalRunId,\n agentName: agent.name,\n nodeName: isEndNode ? \"__end__\" : nodeName,\n state: state.values,\n running: !shouldExit,\n active: false,\n includeMessages: true,\n schemaKeys,\n }),\n );\n\n return Promise.resolve();\n } catch (e) {\n logger.error(e);\n telemetry.capture(\"oss.runtime.agent_execution_stream_errored\", {\n ...streamInfo,\n error: e.message,\n });\n return Promise.resolve();\n }\n}\n\nfunction getStateSyncEvent({\n threadId,\n runId,\n agentName,\n nodeName,\n state,\n running,\n active,\n includeMessages = false,\n schemaKeys,\n}: {\n threadId: string;\n runId: string;\n agentName: string;\n nodeName: string;\n state: State;\n running: boolean;\n active: boolean;\n includeMessages?: boolean;\n schemaKeys: SchemaKeys;\n}): string {\n if (!includeMessages) {\n state = Object.keys(state).reduce((acc, key) => {\n if (key !== \"messages\") {\n acc[key] = state[key];\n }\n return acc;\n }, {} as State);\n } else {\n state = {\n ...state,\n messages: langchainMessagesToCopilotKit(state.messages || []),\n };\n }\n\n // Do not emit state keys that are not part of the output schema\n if (schemaKeys?.output) {\n state = filterObjectBySchemaKeys(state, schemaKeys.output);\n }\n\n return (\n JSON.stringify({\n event: LangGraphEventTypes.OnCopilotKitStateSync,\n thread_id: threadId,\n run_id: runId,\n agent_name: agentName,\n node_name: nodeName,\n active: active,\n state: state,\n running: running,\n role: \"assistant\",\n }) + \"\\n\"\n );\n}\n\nclass StreamingStateExtractor {\n private emitIntermediateState: { [key: string]: any }[];\n private toolCallBuffer: { [key: string]: string };\n private currentToolCall: string | null;\n private previouslyParsableState: { [key: string]: any };\n\n constructor(emitIntermediateState: { [key: string]: any }[]) {\n this.emitIntermediateState = emitIntermediateState;\n this.toolCallBuffer = {};\n this.currentToolCall = null;\n this.previouslyParsableState = {};\n }\n\n bufferToolCalls(event: {\n data: { chunk: { tool_call_chunks: { name: string | null; args: string }[] } };\n }) {\n if (event.data.chunk.tool_call_chunks.length > 0) {\n const chunk = event.data.chunk.tool_call_chunks[0];\n\n if (chunk.name !== null && chunk.name !== undefined) {\n this.currentToolCall = chunk.name;\n this.toolCallBuffer[this.currentToolCall] = chunk.args;\n } else if (this.currentToolCall !== null && this.currentToolCall !== undefined) {\n this.toolCallBuffer[this.currentToolCall] += chunk.args;\n }\n }\n }\n\n getEmitStateConfig(currentToolName: string): [string | null, string | null] {\n for (const config of this.emitIntermediateState) {\n const stateKey = config[\"state_key\"];\n const tool = config[\"tool\"];\n const toolArgument = config[\"tool_argument\"];\n\n if (currentToolName === tool) {\n return [toolArgument, stateKey];\n }\n }\n return [null, null];\n }\n\n extractState(): State {\n const state: State = {};\n\n for (const [key, value] of Object.entries(this.toolCallBuffer)) {\n const [argumentName, stateKey] = this.getEmitStateConfig(key);\n\n if (stateKey === null) {\n continue;\n }\n\n let parsedValue;\n try {\n parsedValue = parsePartialJson(value);\n } catch (error) {\n if (key in this.previouslyParsableState) {\n parsedValue = this.previouslyParsableState[key];\n } else {\n continue;\n }\n }\n\n this.previouslyParsableState[key] = parsedValue;\n\n if (!argumentName) {\n state[stateKey] = parsedValue;\n } else {\n state[stateKey] = parsedValue[argumentName];\n }\n }\n\n return state;\n }\n}\n\n// Start of Selection\nfunction langGraphDefaultMergeState(\n state: State,\n messages: LangGraphPlatformMessage[],\n actions: ExecutionAction[],\n agentName: string,\n): State {\n if (messages.length > 0 && \"role\" in messages[0] && messages[0].role === \"system\") {\n // remove system message\n messages = messages.slice(1);\n }\n\n // merge with existing messages\n const existingMessages: LangGraphPlatformMessage[] = state.messages || [];\n const existingMessageIds = new Set(existingMessages.map((message) => message.id));\n const messageIds = new Set(messages.map((message) => message.id));\n\n let removedMessages = [];\n if (messages.length < existingMessages.length) {\n // Messages were removed\n removedMessages = existingMessages\n .filter((m) => !messageIds.has(m.id))\n .map((m) => new RemoveMessage({ id: m.id }));\n }\n\n const newMessages = messages.filter((message) => !existingMessageIds.has(message.id));\n\n return {\n ...state,\n messages: [...removedMessages, ...newMessages],\n copilotkit: {\n actions,\n },\n };\n}\n\nexport function langchainMessagesToCopilotKit(messages: any[]): any[] {\n const result: any[] = [];\n const tool_call_names: Record<string, string> = {};\n\n // First pass: gather all tool call names from AI messages\n for (const message of messages) {\n if (message.type === \"ai\") {\n for (const tool_call of message.tool_calls) {\n tool_call_names[tool_call.id] = tool_call.name;\n }\n }\n }\n\n for (const message of messages) {\n let content: any = message.content;\n if (content instanceof Array) {\n content = content[0];\n }\n if (content instanceof Object) {\n content = content.text;\n }\n\n if (message.type === \"human\") {\n result.push({\n role: \"user\",\n content: content,\n id: message.id,\n });\n } else if (message.type === \"system\") {\n result.push({\n role: \"system\",\n content: content,\n id: message.id,\n });\n } else if (message.type === \"ai\") {\n if (message.tool_calls && message.tool_calls.length > 0) {\n for (const tool_call of message.tool_calls) {\n result.push({\n id: tool_call.id,\n name: tool_call.name,\n arguments: tool_call.args,\n parentMessageId: message.id,\n });\n }\n } else {\n result.push({\n role: \"assistant\",\n content: content,\n id: message.id,\n parentMessageId: message.id,\n });\n }\n } else if (message.type === \"tool\") {\n const actionName = tool_call_names[message.tool_call_id] || message.name || \"\";\n result.push({\n actionExecutionId: message.tool_call_id,\n actionName: actionName,\n result: content,\n id: message.id,\n });\n }\n }\n const resultsDict: Record<string, any> = {};\n for (const msg of result) {\n if (msg.actionExecutionId) {\n resultsDict[msg.actionExecutionId] = msg;\n }\n }\n\n const reorderedResult: Message[] = [];\n\n for (const msg of result) {\n // If it's not a tool result, just append it\n if (!(\"actionExecutionId\" in msg)) {\n reorderedResult.push(msg);\n }\n\n // If the message has arguments (i.e., is a tool call invocation),\n // append the corresponding result right after it\n if (\"arguments\" in msg) {\n const msgId = msg.id;\n if (msgId in resultsDict) {\n reorderedResult.push(resultsDict[msgId]);\n }\n }\n }\n\n return reorderedResult;\n}\n\nfunction copilotkitMessagesToLangChain(messages: Message[]): LangGraphPlatformMessage[] {\n const result: LangGraphPlatformMessage[] = [];\n const processedActionExecutions = new Set<string>();\n\n for (const message of messages) {\n // Handle TextMessage\n if (message.isTextMessage()) {\n if (message.role === \"user\") {\n // Human message\n result.push({\n ...message,\n role: MessageRole.user,\n });\n } else if (message.role === \"system\") {\n // System message\n result.push({\n ...message,\n role: MessageRole.system,\n });\n } else if (message.role === \"assistant\") {\n // Assistant message\n result.push({\n ...message,\n role: MessageRole.assistant,\n });\n }\n continue;\n }\n\n // Handle ImageMessage\n if (message.isImageMessage()) {\n if (message.role === \"user\") {\n result.push({\n ...message,\n role: MessageRole.user,\n content: \"\",\n });\n } else if (message.role === \"assistant\") {\n result.push({\n ...message,\n role: MessageRole.assistant,\n content: \"\",\n });\n }\n continue;\n }\n\n // Handle ActionExecutionMessage (multiple tool calls per parentMessageId)\n if (message.isActionExecutionMessage()) {\n const messageId = message.parentMessageId ?? message.id;\n\n // If we've already processed this action execution group, skip\n if (processedActionExecutions.has(messageId)) {\n continue;\n }\n\n processedActionExecutions.add(messageId);\n\n // Gather all tool calls related to this messageId\n const relatedActionExecutions = messages.filter(\n (m) =>\n m.isActionExecutionMessage() &&\n ((m.parentMessageId && m.parentMessageId === messageId) || m.id === messageId),\n ) as ActionExecutionMessage[];\n\n const tool_calls: ToolCall[] = relatedActionExecutions.map((m) => ({\n name: m.name,\n args: m.arguments,\n id: m.id,\n }));\n\n result.push({\n id: messageId,\n type: \"ActionExecutionMessage\",\n content: \"\",\n tool_calls: tool_calls,\n role: MessageRole.assistant,\n } satisfies LangGraphPlatformActionExecutionMessage);\n\n continue;\n }\n\n // Handle ResultMessage\n if (message.isResultMessage()) {\n result.push({\n type: message.type,\n content: message.result,\n id: message.id,\n tool_call_id: message.actionExecutionId,\n name: message.actionName,\n role: MessageRole.tool,\n } satisfies LangGraphPlatformResultMessage);\n continue;\n }\n\n throw new Error(`Unknown message type ${message.type}`);\n }\n\n return result;\n}\n\nfunction getSchemaKeys(graphSchema: GraphSchema): SchemaKeys {\n const CONSTANT_KEYS = [\"messages\", \"copilotkit\"];\n let configSchema = null;\n if (graphSchema.config_schema.properties) {\n configSchema = Object.keys(graphSchema.config_schema.properties);\n }\n if (!graphSchema.input_schema.properties || !graphSchema.output_schema.properties) {\n return configSchema;\n }\n const inputSchema = Object.keys(graphSchema.input_schema.properties);\n const outputSchema = Object.keys(graphSchema.output_schema.properties);\n\n return {\n input: inputSchema && inputSchema.length ? [...inputSchema, ...CONSTANT_KEYS] : null,\n output: outputSchema && outputSchema.length ? [...outputSchema, ...CONSTANT_KEYS] : null,\n config: configSchema,\n };\n}\n\nfunction filterObjectBySchemaKeys(obj: Record<string, any>, schemaKeys: string[]) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => schemaKeys.includes(key)));\n}\n","import { Logger } from \"pino\";\n\n// Retry configuration for network requests\nexport const RETRY_CONFIG = {\n maxRetries: 3,\n baseDelayMs: 1000,\n maxDelayMs: 5000,\n // HTTP status codes that should be retried\n retryableStatusCodes: [502, 503, 504, 408, 429],\n // Network error patterns that should be retried\n retryableErrorMessages: [\n \"fetch failed\",\n \"network error\",\n \"connection timeout\",\n \"ECONNREFUSED\",\n \"ETIMEDOUT\",\n \"ENOTFOUND\",\n \"ECONNRESET\",\n ],\n};\n\n// Helper function to check if an error/response is retryable\nexport function isRetryableError(error: any, response?: Response): boolean {\n // Check HTTP response status\n if (response && RETRY_CONFIG.retryableStatusCodes.includes(response.status)) {\n return true;\n }\n\n // Check error codes (for connection errors like ECONNREFUSED)\n const errorCode = error?.cause?.code || error?.code;\n if (errorCode && RETRY_CONFIG.retryableErrorMessages.includes(errorCode)) {\n return true;\n }\n\n // Check error messages\n const errorMessage = error?.message?.toLowerCase() || \"\";\n return RETRY_CONFIG.retryableErrorMessages.some((msg) => errorMessage.includes(msg));\n}\n\n// Helper function to sleep for a given duration\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// Calculate exponential backoff delay\nexport function calculateDelay(attempt: number): number {\n const delay = RETRY_CONFIG.baseDelayMs * Math.pow(2, attempt);\n return Math.min(delay, RETRY_CONFIG.maxDelayMs);\n}\n\n// Retry wrapper for fetch requests\nexport async function fetchWithRetry(\n url: string,\n options: RequestInit,\n logger?: Logger,\n): Promise<Response> {\n let lastError: any;\n\n for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {\n try {\n const response = await fetch(url, options);\n\n // If response is retryable, treat as error and retry\n if (isRetryableError(null, response) && attempt < RETRY_CONFIG.maxRetries) {\n const delay = calculateDelay(attempt);\n logger?.warn(\n `Request to ${url} failed with status ${response.status}. ` +\n `Retrying attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries + 1} in ${delay}ms.`,\n );\n await sleep(delay);\n continue;\n }\n\n return response; // Success or non-retryable error\n } catch (error) {\n lastError = error;\n\n // Check if this is a retryable network error\n if (isRetryableError(error) && attempt < RETRY_CONFIG.maxRetries) {\n const delay = calculateDelay(attempt);\n logger?.warn(\n `Request to ${url} failed with network error. ` +\n `Retrying attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries + 1} in ${delay}ms. Error: ${error?.message || String(error)}`,\n );\n await sleep(delay);\n continue;\n }\n\n // Not retryable or max retries exceeded\n break;\n }\n }\n\n // Re-throw the last error after retries exhausted\n throw lastError;\n}\n","import { ReplaySubject } from \"rxjs\";\nimport { CopilotKitLowLevelError, CopilotKitError, CopilotKitErrorCode } from \"@copilotkit/shared\";\n\nexport async function writeJsonLineResponseToEventStream<T>(\n response: ReadableStream<Uint8Array>,\n eventStream$: ReplaySubject<T>,\n) {\n const reader = response.getReader();\n const decoder = new TextDecoder();\n let buffer = [];\n\n function flushBuffer() {\n const currentBuffer = buffer.join(\"\");\n if (currentBuffer.trim().length === 0) {\n return;\n }\n const parts = currentBuffer.split(\"\\n\");\n if (parts.length === 0) {\n return;\n }\n\n const lastPartIsComplete = currentBuffer.endsWith(\"\\n\");\n\n // truncate buffer\n buffer = [];\n\n if (!lastPartIsComplete) {\n // put back the last part\n buffer.push(parts.pop());\n }\n\n parts\n .map((part) => part.trim())\n .filter((part) => part != \"\")\n .forEach((part) => {\n eventStream$.next(JSON.parse(part));\n });\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (!done) {\n buffer.push(decoder.decode(value, { stream: true }));\n }\n\n flushBuffer();\n\n if (done) {\n break;\n }\n }\n } catch (error) {\n console.error(\"Error in stream\", error);\n\n // Convert network termination errors to structured errors\n const structuredError = convertStreamingErrorToStructured(error);\n eventStream$.error(structuredError);\n return;\n }\n eventStream$.complete();\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Handle network termination errors\n if (\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitError({\n message:\n \"Connection to agent was unexpectedly terminated. This is likely due to the agent service being down or experiencing issues. Please check your agent logs and try again.\",\n code: CopilotKitErrorCode.NETWORK_ERROR,\n });\n }\n\n // Handle other network-related errors\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\")\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"streaming connection\",\n message:\n \"Network error occurred during streaming. Please check your connection and try again.\",\n });\n }\n\n // Handle abort/cancellation errors (these are usually normal)\n if (\n error?.message?.includes(\"aborted\") ||\n error?.message?.includes(\"canceled\") ||\n error?.message?.includes(\"signal is aborted\")\n ) {\n return new CopilotKitError({\n message: \"Request was cancelled\",\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n // Default: convert unknown streaming errors\n return new CopilotKitError({\n message: `Streaming error: ${error?.message || String(error)}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n}\n","import { Logger } from \"pino\";\nimport { Observable } from \"rxjs\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { RuntimeEvent } from \"../../service-adapters/events\";\nimport telemetry from \"../telemetry-client\";\nimport { RemoteAgentHandlerParams } from \"./remote-actions\";\n\nimport {\n AssistantMessage as AGUIAssistantMessage,\n Message as AGUIMessage,\n ToolCall,\n} from \"@ag-ui/client\";\n\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { parseJson } from \"@copilotkit/shared\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\n\nexport function constructAGUIRemoteAction({\n logger,\n messages,\n agentStates,\n agent,\n metaEvents,\n}: {\n logger: Logger;\n messages: Message[];\n agentStates?: AgentStateInput[];\n agent: AbstractAgent;\n metaEvents?: MetaEventInput[];\n}) {\n const action = {\n name: agent.agentId,\n description: agent.description,\n parameters: [],\n handler: async (_args: any) => {},\n remoteAgentHandler: async ({\n actionInputsWithoutAgents,\n threadId,\n }: RemoteAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {\n logger.debug({ actionName: agent.agentId }, \"Executing remote agent\");\n\n const agentWireMessages = convertMessagesToAGUIMessage(messages);\n agent.messages = agentWireMessages;\n agent.threadId = threadId;\n\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: true,\n type: \"self-hosted\",\n agentsAmount: 1,\n });\n\n let state = {};\n if (agentStates) {\n const jsonState = agentStates.find((state) => state.agentName === agent.agentId);\n if (jsonState) {\n state = parseJson(jsonState.state, {});\n }\n }\n agent.state = state;\n\n const tools = actionInputsWithoutAgents.map((input) => {\n return {\n name: input.name,\n description: input.description,\n parameters: JSON.parse(input.jsonSchema),\n };\n });\n\n const forwardedProps = metaEvents.length\n ? { command: { resume: metaEvents[0]?.response } }\n : undefined;\n\n return agent.legacy_to_be_removed_runAgentBridged({\n tools,\n forwardedProps,\n }) as Observable<RuntimeEvent>;\n },\n };\n return [action];\n}\n\nexport function convertMessagesToAGUIMessage(messages: Message[]): AGUIMessage[] {\n const result: AGUIMessage[] = [];\n\n for (const message of messages) {\n if (message.isTextMessage()) {\n result.push({\n id: message.id,\n role: message.role as any,\n content: message.content,\n });\n } else if (message.isActionExecutionMessage()) {\n const toolCall: ToolCall = {\n id: message.id,\n type: \"function\",\n function: {\n name: message.name,\n arguments: JSON.stringify(message.arguments),\n },\n };\n\n if (message.parentMessageId && result.some((m) => m.id === message.parentMessageId)) {\n const parentMessage: AGUIAssistantMessage | undefined = result.find(\n (m) => m.id === message.parentMessageId,\n ) as AGUIAssistantMessage;\n if (parentMessage.toolCalls === undefined) {\n parentMessage.toolCalls = [];\n }\n parentMessage.toolCalls.push(toolCall);\n } else {\n result.push({\n id: message.parentMessageId ?? message.id,\n role: \"assistant\",\n toolCalls: [toolCall],\n });\n }\n } else if (message.isResultMessage()) {\n result.push({\n id: message.id,\n role: \"tool\",\n content: message.result,\n toolCallId: message.actionExecutionId,\n });\n }\n }\n\n return result;\n}\n","/**\n * <Callout type=\"info\">\n * This is the reference for the `CopilotRuntime` class. For more information and example code snippets, please see [Concept: Copilot Runtime](/concepts/copilot-runtime).\n * </Callout>\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotRuntime } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n * ```\n */\n\nimport {\n Action,\n actionParametersToJsonSchema,\n Parameter,\n ResolvedCopilotKitError,\n CopilotKitApiDiscoveryError,\n randomId,\n CopilotKitError,\n CopilotKitRemoteEndpointDiscoveryError,\n CopilotKitAgentDiscoveryError,\n CopilotKitMisuseError,\n CopilotKitErrorCode,\n CopilotKitLowLevelError,\n CopilotTraceHandler,\n CopilotTraceEvent,\n CopilotRequestContext,\n} from \"@copilotkit/shared\";\nimport {\n CopilotServiceAdapter,\n EmptyAdapter,\n RemoteChain,\n RemoteChainParameters,\n} from \"../../service-adapters\";\n\nimport { MessageInput } from \"../../graphql/inputs/message.input\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { RuntimeEventSource, RuntimeEventTypes } from \"../../service-adapters/events\";\nimport { convertGqlInputToMessages } from \"../../service-adapters/conversion\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nimport {\n isRemoteAgentAction,\n RemoteAgentAction,\n EndpointType,\n setupRemoteActions,\n EndpointDefinition,\n CopilotKitEndpoint,\n LangGraphPlatformEndpoint,\n} from \"./remote-actions\";\n\nimport { GraphQLContext } from \"../integrations/shared\";\nimport { AgentSessionInput } from \"../../graphql/inputs/agent-session.input\";\nimport { from } from \"rxjs\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport { ActionInputAvailability } from \"../../graphql/types/enums\";\nimport { createHeaders } from \"./remote-action-constructors\";\nimport { fetchWithRetry } from \"./retry-utils\";\nimport { Agent } from \"../../graphql/types/agents-response.type\";\nimport { ExtensionsInput } from \"../../graphql/inputs/extensions.input\";\nimport { ExtensionsResponse } from \"../../graphql/types/extensions-response.type\";\nimport { LoadAgentStateResponse } from \"../../graphql/types/load-agent-state-response.type\";\nimport { Client as LangGraphClient } from \"@langchain/langgraph-sdk\";\nimport { langchainMessagesToCopilotKit } from \"./remote-lg-action\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\nimport {\n CopilotObservabilityConfig,\n LLMRequestData,\n LLMResponseData,\n LLMErrorData,\n} from \"../observability\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { MessageRole } from \"../../graphql/types/enums\";\n\n// +++ MCP Imports +++\nimport {\n MCPClient,\n MCPEndpointConfig,\n MCPTool,\n convertMCPToolsToActions,\n generateMcpToolInstructions,\n} from \"./mcp-tools-utils\";\n// Define the function type alias here or import if defined elsewhere\ntype CreateMCPClientFunction = (config: MCPEndpointConfig) => Promise<MCPClient>;\n// --- MCP Imports ---\n\nexport interface CopilotRuntimeRequest {\n serviceAdapter: CopilotServiceAdapter;\n messages: MessageInput[];\n actions: ActionInput[];\n agentSession?: AgentSessionInput;\n agentStates?: AgentStateInput[];\n outputMessagesPromise: Promise<Message[]>;\n threadId?: string;\n runId?: string;\n publicApiKey?: string;\n graphqlContext: GraphQLContext;\n forwardedParameters?: ForwardedParametersInput;\n url?: string;\n extensions?: ExtensionsInput;\n metaEvents?: MetaEventInput[];\n}\n\ninterface CopilotRuntimeResponse {\n threadId: string;\n runId?: string;\n eventSource: RuntimeEventSource;\n serverSideActions: Action<any>[];\n actionInputsWithoutAgents: ActionInput[];\n extensions?: ExtensionsResponse;\n}\n\ntype ActionsConfiguration<T extends Parameter[] | [] = []> =\n | Action<T>[]\n | ((ctx: { properties: any; url?: string }) => Action<T>[]);\n\ninterface OnBeforeRequestOptions {\n threadId?: string;\n runId?: string;\n inputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnBeforeRequestHandler = (options: OnBeforeRequestOptions) => void | Promise<void>;\n\ninterface OnAfterRequestOptions {\n threadId: string;\n runId?: string;\n inputMessages: Message[];\n outputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnAfterRequestHandler = (options: OnAfterRequestOptions) => void | Promise<void>;\n\ninterface Middleware {\n /**\n * A function that is called before the request is processed.\n */\n onBeforeRequest?: OnBeforeRequestHandler;\n\n /**\n * A function that is called after the request is processed.\n */\n onAfterRequest?: OnAfterRequestHandler;\n}\n\ntype AgentWithEndpoint = Agent & { endpoint: EndpointDefinition };\n\nexport interface CopilotRuntimeConstructorParams<T extends Parameter[] | [] = []> {\n /**\n * Middleware to be used by the runtime.\n *\n * ```ts\n * onBeforeRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n *\n * ```ts\n * onAfterRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * outputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n */\n middleware?: Middleware;\n\n /*\n * A list of server side actions that can be executed. Will be ignored when remoteActions are set\n */\n actions?: ActionsConfiguration<T>;\n\n /*\n * Deprecated: Use `remoteEndpoints`.\n */\n remoteActions?: CopilotKitEndpoint[];\n\n /*\n * A list of remote actions that can be executed.\n */\n remoteEndpoints?: EndpointDefinition[];\n\n /*\n * An array of LangServer URLs.\n */\n langserve?: RemoteChainParameters[];\n\n /*\n * A map of agent names to AGUI agents.\n * Example agent config:\n * ```ts\n * import { AbstractAgent } from \"@ag-ui/client\";\n * // ...\n * agents: {\n * \"support\": new CustomerSupportAgent(),\n * \"technical\": new TechnicalAgent()\n * }\n * ```\n */\n agents?: Record<string, AbstractAgent>;\n\n /*\n * Delegates agent state processing to the service adapter.\n *\n * When enabled, individual agent state requests will not be processed by the agent itself.\n * Instead, all processing will be handled by the service adapter.\n */\n delegateAgentProcessingToServiceAdapter?: boolean;\n\n /**\n * Configuration for LLM request/response logging.\n * Requires publicApiKey from CopilotKit component to be set:\n *\n * ```tsx\n * <CopilotKit publicApiKey=\"ck_pub_...\" />\n * ```\n *\n * Example logging config:\n * ```ts\n * logging: {\n * enabled: true, // Enable or disable logging\n * progressive: true, // Set to false for buffered logging\n * logger: {\n * logRequest: (data) => langfuse.trace({ name: \"LLM Request\", input: data }),\n * logResponse: (data) => langfuse.trace({ name: \"LLM Response\", output: data }),\n * logError: (errorData) => langfuse.trace({ name: \"LLM Error\", metadata: errorData }),\n * },\n * }\n * ```\n */\n observability_c?: CopilotObservabilityConfig;\n\n /**\n * Configuration for connecting to Model Context Protocol (MCP) servers.\n * Allows fetching and using tools defined on external MCP-compliant servers.\n * Requires providing the `createMCPClient` function during instantiation.\n * @experimental\n */\n mcpServers?: MCPEndpointConfig[];\n\n /**\n * A function that creates an MCP client instance for a given endpoint configuration.\n * This function is responsible for using the appropriate MCP client library\n * (e.g., `@copilotkit/runtime`, `ai`) to establish a connection.\n * Required if `mcpServers` is provided.\n *\n * ```typescript\n * import { experimental_createMCPClient } from \"ai\"; // Import from vercel ai library\n * // ...\n * const runtime = new CopilotRuntime({\n * mcpServers: [{ endpoint: \"...\" }],\n * async createMCPClient(config) {\n * return await experimental_createMCPClient({\n * transport: {\n * type: \"sse\",\n * url: config.endpoint,\n * headers: config.apiKey\n * ? { Authorization: `Bearer ${config.apiKey}` }\n * : undefined,\n * },\n * });\n * }\n * });\n * ```\n */\n createMCPClient?: CreateMCPClientFunction;\n\n /**\n * Optional trace handler for comprehensive debugging and observability.\n *\n * **Requires publicApiKey**: Tracing only works when requests include a valid publicApiKey.\n * This is a premium CopilotKit Cloud feature.\n *\n * @param traceEvent - Structured trace event with rich debugging context\n *\n * @example\n * ```typescript\n * const runtime = new CopilotRuntime({\n * onTrace: (traceEvent) => {\n * debugDashboard.capture(traceEvent);\n * }\n * });\n * ```\n */\n onTrace?: CopilotTraceHandler;\n}\n\nexport class CopilotRuntime<const T extends Parameter[] | [] = []> {\n public actions: ActionsConfiguration<T>;\n public agents: Record<string, AbstractAgent>;\n public remoteEndpointDefinitions: EndpointDefinition[];\n private langserve: Promise<Action<any>>[] = [];\n private onBeforeRequest?: OnBeforeRequestHandler;\n private onAfterRequest?: OnAfterRequestHandler;\n private delegateAgentProcessingToServiceAdapter: boolean;\n private observability?: CopilotObservabilityConfig;\n private availableAgents: Pick<AgentWithEndpoint, \"name\" | \"id\">[];\n private onTrace?: CopilotTraceHandler;\n private hasWarnedAboutTracing = false;\n\n // +++ MCP Properties +++\n private readonly mcpServersConfig?: MCPEndpointConfig[];\n private mcpActionCache = new Map<string, Action<any>[]>();\n // --- MCP Properties ---\n\n // +++ MCP Client Factory +++\n private readonly createMCPClientImpl?: CreateMCPClientFunction;\n // --- MCP Client Factory ---\n\n constructor(params?: CopilotRuntimeConstructorParams<T>) {\n if (\n params?.actions &&\n params?.remoteEndpoints &&\n params?.remoteEndpoints.some((e) => e.type === EndpointType.LangGraphPlatform)\n ) {\n console.warn(\"Actions set in runtime instance will not be available for the agent\");\n }\n this.actions = params?.actions || [];\n this.availableAgents = [];\n\n for (const chain of params?.langserve || []) {\n const remoteChain = new RemoteChain(chain);\n this.langserve.push(remoteChain.toAction());\n }\n\n this.remoteEndpointDefinitions = params?.remoteEndpoints ?? params?.remoteActions ?? [];\n\n this.onBeforeRequest = params?.middleware?.onBeforeRequest;\n this.onAfterRequest = params?.middleware?.onAfterRequest;\n this.delegateAgentProcessingToServiceAdapter =\n params?.delegateAgentProcessingToServiceAdapter || false;\n this.observability = params?.observability_c;\n this.agents = params?.agents ?? {};\n this.onTrace = params?.onTrace;\n // +++ MCP Initialization +++\n this.mcpServersConfig = params?.mcpServers;\n this.createMCPClientImpl = params?.createMCPClient;\n\n // Validate: If mcpServers are provided, createMCPClient must also be provided\n if (this.mcpServersConfig && this.mcpServersConfig.length > 0 && !this.createMCPClientImpl) {\n throw new CopilotKitMisuseError({\n message:\n \"MCP Integration Error: `mcpServers` were provided, but the `createMCPClient` function was not passed to the CopilotRuntime constructor. \" +\n \"Please provide an implementation for `createMCPClient`.\",\n });\n }\n\n // Warning if actions are defined alongside LangGraph platform (potentially MCP too?)\n if (\n params?.actions &&\n (params?.remoteEndpoints?.some((e) => e.type === EndpointType.LangGraphPlatform) ||\n this.mcpServersConfig?.length)\n ) {\n console.warn(\n \"Local 'actions' defined in CopilotRuntime might not be available to remote agents (LangGraph, MCP). Consider defining actions closer to the agent implementation if needed.\",\n );\n }\n }\n\n // +++ MCP Instruction Injection Method +++\n private injectMCPToolInstructions(\n messages: MessageInput[],\n currentActions: Action<any>[],\n ): MessageInput[] {\n // Filter the *passed-in* actions for MCP tools\n const mcpActionsForRequest = currentActions.filter((action) => (action as any)._isMCPTool);\n\n if (!mcpActionsForRequest || mcpActionsForRequest.length === 0) {\n return messages; // No MCP tools for this specific request\n }\n\n // Create a map to deduplicate tools by name (keeping the last one if duplicates exist)\n const uniqueMcpTools = new Map<string, Action<any>>();\n\n // Add all MCP tools to the map with their names as keys\n mcpActionsForRequest.forEach((action) => {\n uniqueMcpTools.set(action.name, action);\n });\n\n // Format instructions from the unique tools map\n // Convert Action objects to MCPTool format for the instruction generator\n const toolsMap: Record<string, MCPTool> = {};\n Array.from(uniqueMcpTools.values()).forEach((action) => {\n toolsMap[action.name] = {\n description: action.description || \"\",\n schema: action.parameters\n ? {\n parameters: {\n properties: action.parameters.reduce(\n (acc, p) => ({\n ...acc,\n [p.name]: { type: p.type, description: p.description },\n }),\n {},\n ),\n required: action.parameters.filter((p) => p.required).map((p) => p.name),\n },\n }\n : {},\n execute: async () => ({}), // Placeholder, not used for instructions\n };\n });\n\n // Generate instructions using the exported helper\n const mcpToolInstructions = generateMcpToolInstructions(toolsMap);\n\n if (!mcpToolInstructions) {\n return messages; // No MCP tools to describe\n }\n\n const instructions =\n \"You have access to the following tools provided by external Model Context Protocol (MCP) servers:\\n\" +\n mcpToolInstructions +\n \"\\nUse them when appropriate to fulfill the user's request.\";\n\n const systemMessageIndex = messages.findIndex((msg) => msg.textMessage?.role === \"system\");\n\n const newMessages = [...messages]; // Create a mutable copy\n\n if (systemMessageIndex !== -1) {\n const existingMsg = newMessages[systemMessageIndex];\n if (existingMsg.textMessage) {\n existingMsg.textMessage.content =\n (existingMsg.textMessage.content ? existingMsg.textMessage.content + \"\\n\\n\" : \"\") +\n instructions;\n }\n } else {\n newMessages.unshift({\n id: randomId(),\n createdAt: new Date(),\n textMessage: {\n role: MessageRole.system,\n content: instructions,\n },\n actionExecutionMessage: undefined,\n resultMessage: undefined,\n agentStateMessage: undefined,\n });\n }\n\n return newMessages;\n }\n\n async processRuntimeRequest(request: CopilotRuntimeRequest): Promise<CopilotRuntimeResponse> {\n const {\n serviceAdapter,\n messages: rawMessages,\n actions: clientSideActionsInput,\n threadId,\n runId,\n outputMessagesPromise,\n graphqlContext,\n forwardedParameters,\n url,\n extensions,\n agentSession,\n agentStates,\n publicApiKey,\n } = request;\n\n const eventSource = new RuntimeEventSource();\n // Track request start time for logging\n const requestStartTime = Date.now();\n // For storing streamed chunks if progressive logging is enabled\n const streamedChunks: any[] = [];\n\n // Trace request start\n await this.trace(\n \"request\",\n {\n threadId,\n runId,\n source: \"runtime\",\n request: {\n operation: \"processRuntimeRequest\",\n method: \"POST\",\n url: url,\n startTime: requestStartTime,\n },\n agent: agentSession ? { name: agentSession.agentName } : undefined,\n messages: {\n input: rawMessages,\n messageCount: rawMessages.length,\n },\n technical: {\n environment: process.env.NODE_ENV,\n },\n },\n undefined,\n publicApiKey,\n );\n\n try {\n if (\n Object.keys(this.agents).length &&\n agentSession?.agentName &&\n !this.delegateAgentProcessingToServiceAdapter\n ) {\n this.agents = { [agentSession.agentName]: this.agents[agentSession.agentName] };\n }\n\n if (agentSession && !this.delegateAgentProcessingToServiceAdapter) {\n return await this.processAgentRequest(request);\n }\n if (serviceAdapter instanceof EmptyAdapter) {\n throw new CopilotKitMisuseError({\n message: `Invalid adapter configuration: EmptyAdapter is only meant to be used with agent lock mode. \nFor non-agent components like useCopilotChatSuggestions, CopilotTextarea, or CopilotTask, \nplease use an LLM adapter instead.`,\n });\n }\n\n // +++ Get Server Side Actions (including dynamic MCP) EARLY +++\n const serverSideActions = await this.getServerSideActions(request);\n // --- Get Server Side Actions (including dynamic MCP) EARLY ---\n\n // Filter raw messages *before* injection\n const filteredRawMessages = rawMessages.filter((message) => !message.agentStateMessage);\n\n // +++ Inject MCP Instructions based on current actions +++\n const messagesWithInjectedInstructions = this.injectMCPToolInstructions(\n filteredRawMessages,\n serverSideActions,\n );\n const inputMessages = convertGqlInputToMessages(messagesWithInjectedInstructions);\n // --- Inject MCP Instructions based on current actions ---\n\n // Log LLM request if logging is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const requestData: LLMRequestData = {\n threadId,\n runId,\n model: forwardedParameters?.model,\n messages: inputMessages,\n actions: clientSideActionsInput,\n forwardedParameters,\n timestamp: requestStartTime,\n provider: this.detectProvider(serviceAdapter),\n };\n\n await this.observability.hooks.handleRequest(requestData);\n } catch (error) {\n console.error(\"Error logging LLM request:\", error);\n }\n }\n\n const serverSideActionsInput: ActionInput[] = serverSideActions.map((action) => ({\n name: action.name,\n description: action.description,\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),\n }));\n\n const actionInputs = flattenToolCallsNoDuplicates([\n ...serverSideActionsInput,\n ...clientSideActionsInput.filter(\n // Filter remote actions from CopilotKit core loop\n (action) => action.available !== ActionInputAvailability.remote,\n ),\n ]);\n\n await this.onBeforeRequest?.({\n threadId,\n runId,\n inputMessages,\n properties: graphqlContext.properties,\n url,\n });\n\n const result = await serviceAdapter.process({\n messages: inputMessages,\n actions: actionInputs,\n threadId,\n runId,\n eventSource,\n forwardedParameters,\n extensions,\n agentSession,\n agentStates,\n });\n\n // for backwards compatibility, we deal with the case that no threadId is provided\n // by the frontend, by using the threadId from the response\n const nonEmptyThreadId = threadId ?? result.threadId;\n\n outputMessagesPromise\n .then((outputMessages) => {\n this.onAfterRequest?.({\n threadId: nonEmptyThreadId,\n runId: result.runId,\n inputMessages,\n outputMessages,\n properties: graphqlContext.properties,\n url,\n });\n })\n .catch((_error) => {});\n\n // After getting the response, log it if logging is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n outputMessagesPromise\n .then((outputMessages) => {\n const responseData: LLMResponseData = {\n threadId: result.threadId,\n runId: result.runId,\n model: forwardedParameters?.model,\n // Use collected chunks for progressive mode or outputMessages for regular mode\n output: this.observability.progressive ? streamedChunks : outputMessages,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: this.detectProvider(serviceAdapter),\n // Indicate this is the final response\n isFinalResponse: true,\n };\n\n try {\n this.observability.hooks.handleResponse(responseData);\n } catch (logError) {\n console.error(\"Error logging LLM response:\", logError);\n }\n })\n .catch((error) => {\n console.error(\"Failed to get output messages for logging:\", error);\n });\n } catch (error) {\n console.error(\"Error setting up logging for LLM response:\", error);\n }\n }\n\n // Add progressive logging if enabled\n if (this.observability?.enabled && this.observability.progressive && publicApiKey) {\n // Keep reference to original stream function\n const originalStream = eventSource.stream.bind(eventSource);\n\n // Wrap the stream function to intercept events\n eventSource.stream = async (callback) => {\n await originalStream(async (eventStream$) => {\n // Create subscription to capture streaming events\n eventStream$.subscribe({\n next: (event) => {\n // Only log content chunks\n if (event.type === RuntimeEventTypes.TextMessageContent) {\n // Store the chunk\n streamedChunks.push(event.content);\n\n // Log each chunk separately for progressive mode\n try {\n const progressiveData: LLMResponseData = {\n threadId: threadId || \"\",\n runId,\n model: forwardedParameters?.model,\n output: event.content,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: this.detectProvider(serviceAdapter),\n isProgressiveChunk: true,\n };\n\n // Use Promise to handle async logger without awaiting\n Promise.resolve()\n .then(() => {\n this.observability.hooks.handleResponse(progressiveData);\n })\n .catch((error) => {\n console.error(\"Error in progressive logging:\", error);\n });\n } catch (error) {\n console.error(\"Error preparing progressive log data:\", error);\n }\n }\n },\n });\n\n // Call the original callback with the event stream\n await callback(eventStream$);\n });\n };\n }\n\n return {\n threadId: nonEmptyThreadId,\n runId: result.runId,\n eventSource,\n serverSideActions,\n actionInputsWithoutAgents: actionInputs.filter(\n (action) =>\n // TODO-AGENTS: do not exclude ALL server side actions\n !serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n // !isRemoteAgentAction(\n // serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n // ),\n ),\n extensions: result.extensions,\n };\n } catch (error) {\n // Log error if logging is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const errorData: LLMErrorData = {\n threadId,\n runId,\n model: forwardedParameters?.model,\n error: error instanceof Error ? error : String(error),\n timestamp: Date.now(),\n latency: Date.now() - requestStartTime,\n provider: this.detectProvider(serviceAdapter),\n };\n\n await this.observability.hooks.handleError(errorData);\n } catch (logError) {\n console.error(\"Error logging LLM error:\", logError);\n }\n }\n\n let structuredError: CopilotKitError;\n\n if (error instanceof CopilotKitError) {\n structuredError = error;\n } else {\n // Convert non-CopilotKitErrors to structured errors\n console.error(\"Error getting response:\", error);\n structuredError = this.convertStreamingErrorToStructured(error);\n }\n\n // Trace the error\n await this.trace(\n \"error\",\n {\n threadId,\n runId,\n source: \"runtime\",\n request: {\n operation: \"processRuntimeRequest\",\n method: \"POST\",\n url: url,\n startTime: requestStartTime,\n },\n response: {\n endTime: Date.now(),\n latency: Date.now() - requestStartTime,\n },\n agent: agentSession ? { name: agentSession.agentName } : undefined,\n technical: {\n environment: process.env.NODE_ENV,\n stackTrace: error instanceof Error ? error.stack : undefined,\n },\n },\n structuredError,\n publicApiKey,\n );\n\n throw structuredError;\n }\n }\n\n async discoverAgentsFromEndpoints(graphqlContext: GraphQLContext): Promise<AgentWithEndpoint[]> {\n const agents: Promise<AgentWithEndpoint[]> = this.remoteEndpointDefinitions.reduce(\n async (acc: Promise<Agent[]>, endpoint) => {\n const agents = await acc;\n if (endpoint.type === EndpointType.LangGraphPlatform) {\n const propertyHeaders = graphqlContext.properties.authorization\n ? { authorization: `Bearer ${graphqlContext.properties.authorization}` }\n : null;\n\n const client = new LangGraphClient({\n apiUrl: endpoint.deploymentUrl,\n apiKey: endpoint.langsmithApiKey,\n defaultHeaders: { ...propertyHeaders },\n });\n let data: Array<{ assistant_id: string; graph_id: string }> | { detail: string } = [];\n try {\n data = await client.assistants.search();\n\n if (data && \"detail\" in data && (data.detail as string).toLowerCase() === \"not found\") {\n throw new CopilotKitAgentDiscoveryError({ availableAgents: this.availableAgents });\n }\n } catch (e) {\n throw new CopilotKitMisuseError({\n message: `\n Failed to find or contact remote endpoint at url ${endpoint.deploymentUrl}.\n Make sure the API is running and that it's indeed a LangGraph platform url.\n \n See more: https://docs.copilotkit.ai/troubleshooting/common-issues`,\n });\n }\n const endpointAgents = data.map((entry) => ({\n name: entry.graph_id,\n id: entry.assistant_id,\n description: \"\",\n endpoint,\n }));\n return [...agents, ...endpointAgents];\n }\n\n interface InfoResponse {\n agents?: Array<{\n name: string;\n description: string;\n }>;\n }\n const cpkEndpoint = endpoint as CopilotKitEndpoint;\n const fetchUrl = `${endpoint.url}/info`;\n try {\n const response = await fetchWithRetry(fetchUrl, {\n method: \"POST\",\n headers: createHeaders(cpkEndpoint.onBeforeRequest, graphqlContext),\n body: JSON.stringify({ properties: graphqlContext.properties }),\n });\n if (!response.ok) {\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const data: InfoResponse = await response.json();\n const endpointAgents = (data?.agents ?? []).map((agent) => ({\n name: agent.name,\n description: agent.description ?? \"\" ?? \"\",\n id: randomId(), // Required by Agent type\n endpoint,\n }));\n return [...agents, ...endpointAgents];\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error: error as Error, url: fetchUrl });\n }\n },\n Promise.resolve([]),\n );\n this.availableAgents = ((await agents) ?? []).map((a) => ({ name: a.name, id: a.id }));\n\n return agents;\n }\n\n async loadAgentState(\n graphqlContext: GraphQLContext,\n threadId: string,\n agentName: string,\n ): Promise<LoadAgentStateResponse> {\n const agentsWithEndpoints = await this.discoverAgentsFromEndpoints(graphqlContext);\n\n const agentWithEndpoint = agentsWithEndpoints.find((agent) => agent.name === agentName);\n if (!agentWithEndpoint) {\n throw new Error(\"Agent not found\");\n }\n\n if (agentWithEndpoint.endpoint.type === EndpointType.LangGraphPlatform) {\n const propertyHeaders = graphqlContext.properties.authorization\n ? { authorization: `Bearer ${graphqlContext.properties.authorization}` }\n : null;\n\n const client = new LangGraphClient({\n apiUrl: agentWithEndpoint.endpoint.deploymentUrl,\n apiKey: agentWithEndpoint.endpoint.langsmithApiKey,\n defaultHeaders: { ...propertyHeaders },\n });\n let state: any = {};\n try {\n state = (await client.threads.getState(threadId)).values as any;\n } catch (error) {}\n\n if (Object.keys(state).length === 0) {\n return {\n threadId: threadId || \"\",\n threadExists: false,\n state: JSON.stringify({}),\n messages: JSON.stringify([]),\n };\n } else {\n const { messages, ...stateWithoutMessages } = state;\n const copilotkitMessages = langchainMessagesToCopilotKit(messages);\n return {\n threadId: threadId || \"\",\n threadExists: true,\n state: JSON.stringify(stateWithoutMessages),\n messages: JSON.stringify(copilotkitMessages),\n };\n }\n } else if (\n agentWithEndpoint.endpoint.type === EndpointType.CopilotKit ||\n !(\"type\" in agentWithEndpoint.endpoint)\n ) {\n const cpkEndpoint = agentWithEndpoint.endpoint as CopilotKitEndpoint;\n const fetchUrl = `${cpkEndpoint.url}/agents/state`;\n try {\n const response = await fetchWithRetry(fetchUrl, {\n method: \"POST\",\n headers: createHeaders(cpkEndpoint.onBeforeRequest, graphqlContext),\n body: JSON.stringify({\n properties: graphqlContext.properties,\n threadId,\n name: agentName,\n }),\n });\n if (!response.ok) {\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const data: LoadAgentStateResponse = await response.json();\n\n return {\n ...data,\n state: JSON.stringify(data.state),\n messages: JSON.stringify(data.messages),\n };\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n } else {\n throw new Error(`Unknown endpoint type: ${(agentWithEndpoint.endpoint as any).type}`);\n }\n }\n\n private async processAgentRequest(\n request: CopilotRuntimeRequest,\n ): Promise<CopilotRuntimeResponse> {\n const {\n messages: rawMessages,\n outputMessagesPromise,\n graphqlContext,\n agentSession,\n threadId: threadIdFromRequest,\n metaEvents,\n publicApiKey,\n forwardedParameters,\n } = request;\n const { agentName, nodeName } = agentSession;\n\n // Track request start time for observability\n const requestStartTime = Date.now();\n // For storing streamed chunks if progressive logging is enabled\n const streamedChunks: any[] = [];\n\n // for backwards compatibility, deal with the case when no threadId is provided\n const threadId = threadIdFromRequest ?? agentSession.threadId;\n\n // Trace agent request start\n await this.trace(\n \"agent_state\",\n {\n threadId,\n source: \"agent\",\n request: {\n operation: \"processAgentRequest\",\n method: \"POST\",\n startTime: requestStartTime,\n },\n agent: {\n name: agentName,\n nodeName: nodeName,\n },\n messages: {\n input: rawMessages,\n messageCount: rawMessages.length,\n },\n technical: {\n environment: process.env.NODE_ENV,\n },\n },\n undefined,\n publicApiKey,\n );\n\n const serverSideActions = await this.getServerSideActions(request);\n\n const messages = convertGqlInputToMessages(rawMessages);\n\n const currentAgent = serverSideActions.find(\n (action) => action.name === agentName && isRemoteAgentAction(action),\n ) as RemoteAgentAction;\n\n if (!currentAgent) {\n throw new CopilotKitAgentDiscoveryError({ agentName, availableAgents: this.availableAgents });\n }\n\n // Filter actions to include:\n // 1. Regular (non-agent) actions\n // 2. Other agents' actions (but prevent self-calls to avoid infinite loops)\n const availableActionsForCurrentAgent: ActionInput[] = serverSideActions\n .filter(\n (action) =>\n // Case 1: Keep all regular (non-agent) actions\n !isRemoteAgentAction(action) ||\n // Case 2: For agent actions, keep all except self (prevent infinite loops)\n (isRemoteAgentAction(action) && action.name !== agentName) /* prevent self-calls */,\n )\n .map((action) => ({\n name: action.name,\n description: action.description,\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),\n }));\n\n const allAvailableActions = flattenToolCallsNoDuplicates([\n ...availableActionsForCurrentAgent,\n ...request.actions,\n ]);\n\n // Log agent request if observability is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const requestData: LLMRequestData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n messages,\n actions: allAvailableActions,\n forwardedParameters,\n timestamp: requestStartTime,\n provider: \"agent\",\n agentName, // Add agent-specific context\n nodeName,\n };\n\n await this.observability.hooks.handleRequest(requestData);\n } catch (error) {\n console.error(\"Error logging agent request:\", error);\n }\n }\n\n await this.onBeforeRequest?.({\n threadId,\n runId: undefined,\n inputMessages: messages,\n properties: graphqlContext.properties,\n });\n\n try {\n const eventSource = new RuntimeEventSource();\n const stream = await currentAgent.remoteAgentHandler({\n name: agentName,\n threadId,\n nodeName,\n metaEvents,\n actionInputsWithoutAgents: allAvailableActions,\n });\n\n // Add progressive observability if enabled\n if (this.observability?.enabled && this.observability.progressive && publicApiKey) {\n // Wrap the stream function to intercept events for observability without changing core logic\n const originalStream = eventSource.stream.bind(eventSource);\n\n eventSource.stream = async (callback) => {\n await originalStream(async (eventStream$) => {\n // Create subscription to capture streaming events\n eventStream$.subscribe({\n next: (event) => {\n // Only log content chunks\n if (event.type === RuntimeEventTypes.TextMessageContent) {\n // Store the chunk\n streamedChunks.push(event.content);\n\n // Log each chunk separately for progressive mode\n try {\n const progressiveData: LLMResponseData = {\n threadId: threadId || \"\",\n runId: undefined,\n model: forwardedParameters?.model,\n output: event.content,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: \"agent\",\n isProgressiveChunk: true,\n agentName,\n nodeName,\n };\n\n // Use Promise to handle async logger without awaiting\n Promise.resolve()\n .then(() => {\n this.observability.hooks.handleResponse(progressiveData);\n })\n .catch((error) => {\n console.error(\"Error in progressive agent logging:\", error);\n });\n } catch (error) {\n console.error(\"Error preparing progressive agent log data:\", error);\n }\n }\n },\n });\n\n // Call the original callback with the event stream\n await callback(eventStream$);\n });\n };\n }\n\n eventSource.stream(async (eventStream$) => {\n from(stream).subscribe({\n next: (event) => eventStream$.next(event),\n error: async (err) => {\n console.error(\"Error in stream\", err);\n\n // Log error with observability if enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const errorData: LLMErrorData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n error: err instanceof Error ? err : String(err),\n timestamp: Date.now(),\n latency: Date.now() - requestStartTime,\n provider: \"agent\",\n agentName,\n nodeName,\n };\n\n this.observability.hooks.handleError(errorData);\n } catch (logError) {\n console.error(\"Error logging agent error:\", logError);\n }\n }\n\n // Convert network termination errors to structured errors\n const structuredError = this.convertStreamingErrorToStructured(err);\n\n // Trace streaming errors\n await this.trace(\n \"error\",\n {\n threadId,\n source: \"agent\",\n request: {\n operation: \"processAgentRequest\",\n method: \"POST\",\n startTime: requestStartTime,\n },\n response: {\n endTime: Date.now(),\n latency: Date.now() - requestStartTime,\n },\n agent: {\n name: agentName,\n nodeName: nodeName,\n },\n technical: {\n environment: process.env.NODE_ENV,\n stackTrace: err instanceof Error ? err.stack : undefined,\n },\n },\n structuredError,\n publicApiKey,\n );\n\n eventStream$.error(structuredError);\n eventStream$.complete();\n },\n complete: () => eventStream$.complete(),\n });\n });\n\n // Log final agent response when outputs are available\n if (this.observability?.enabled && publicApiKey) {\n outputMessagesPromise\n .then((outputMessages) => {\n const responseData: LLMResponseData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n // Use collected chunks for progressive mode or outputMessages for regular mode\n output: this.observability.progressive ? streamedChunks : outputMessages,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: \"agent\",\n isFinalResponse: true,\n agentName,\n nodeName,\n };\n\n try {\n this.observability.hooks.handleResponse(responseData);\n } catch (logError) {\n console.error(\"Error logging agent response:\", logError);\n }\n })\n .catch((error) => {\n console.error(\"Failed to get output messages for agent logging:\", error);\n });\n }\n\n outputMessagesPromise\n .then((outputMessages) => {\n this.onAfterRequest?.({\n threadId,\n runId: undefined,\n inputMessages: messages,\n outputMessages,\n properties: graphqlContext.properties,\n });\n })\n .catch((_error) => {});\n\n return {\n threadId,\n runId: undefined,\n eventSource,\n serverSideActions,\n actionInputsWithoutAgents: allAvailableActions,\n };\n } catch (error) {\n // Log error with observability if enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const errorData: LLMErrorData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n error: error instanceof Error ? error : String(error),\n timestamp: Date.now(),\n latency: Date.now() - requestStartTime,\n provider: \"agent\",\n agentName,\n nodeName,\n };\n\n await this.observability.hooks.handleError(errorData);\n } catch (logError) {\n console.error(\"Error logging agent error:\", logError);\n }\n }\n\n // Ensure error is structured\n let structuredError: CopilotKitError;\n if (error instanceof CopilotKitError) {\n structuredError = error;\n } else {\n structuredError = this.convertStreamingErrorToStructured(error);\n }\n\n // Trace the agent error\n await this.trace(\n \"error\",\n {\n threadId,\n source: \"agent\",\n request: {\n operation: \"processAgentRequest\",\n method: \"POST\",\n startTime: requestStartTime,\n },\n response: {\n endTime: Date.now(),\n latency: Date.now() - requestStartTime,\n },\n agent: {\n name: agentName,\n nodeName: nodeName,\n },\n technical: {\n environment: process.env.NODE_ENV,\n stackTrace: error instanceof Error ? error.stack : undefined,\n },\n },\n structuredError,\n publicApiKey,\n );\n\n console.error(\"Error getting response:\", error);\n throw structuredError;\n }\n }\n\n private async getServerSideActions(request: CopilotRuntimeRequest): Promise<Action<any>[]> {\n const { graphqlContext, messages: rawMessages, agentStates, url } = request;\n\n // --- Standard Action Fetching (unchanged) ---\n const inputMessages = convertGqlInputToMessages(rawMessages);\n const langserveFunctions: Action<any>[] = [];\n for (const chainPromise of this.langserve) {\n try {\n const chain = await chainPromise;\n langserveFunctions.push(chain);\n } catch (error) {\n console.error(\"Error loading langserve chain:\", error);\n }\n }\n\n const remoteEndpointDefinitions = this.remoteEndpointDefinitions.map(\n (endpoint) => ({ ...endpoint, type: resolveEndpointType(endpoint) }) as EndpointDefinition,\n );\n\n const remoteActions = await setupRemoteActions({\n remoteEndpointDefinitions,\n graphqlContext,\n messages: inputMessages,\n agentStates,\n frontendUrl: url,\n agents: this.agents,\n metaEvents: request.metaEvents,\n });\n\n const configuredActions =\n typeof this.actions === \"function\"\n ? this.actions({ properties: graphqlContext.properties, url })\n : this.actions;\n // --- Standard Action Fetching (unchanged) ---\n\n // +++ Dynamic MCP Action Fetching +++\n const requestSpecificMCPActions: Action<any>[] = [];\n if (this.createMCPClientImpl) {\n // 1. Determine effective MCP endpoints for this request\n const baseEndpoints = this.mcpServersConfig || [];\n // Assuming frontend passes config via properties.mcpServers\n const requestEndpoints = (graphqlContext.properties?.mcpServers ||\n graphqlContext.properties?.mcpEndpoints ||\n []) as MCPEndpointConfig[];\n\n // Merge and deduplicate endpoints based on URL\n const effectiveEndpointsMap = new Map<string, MCPEndpointConfig>();\n\n // First add base endpoints (from runtime configuration)\n [...baseEndpoints].forEach((ep) => {\n if (ep && ep.endpoint) {\n effectiveEndpointsMap.set(ep.endpoint, ep);\n }\n });\n\n // Then add request endpoints (from frontend), which will override duplicates\n [...requestEndpoints].forEach((ep) => {\n if (ep && ep.endpoint) {\n effectiveEndpointsMap.set(ep.endpoint, ep);\n }\n });\n\n const effectiveEndpoints = Array.from(effectiveEndpointsMap.values());\n\n // 2. Fetch/Cache actions for effective endpoints\n for (const config of effectiveEndpoints) {\n const endpointUrl = config.endpoint;\n let actionsForEndpoint: Action<any>[] | undefined = this.mcpActionCache.get(endpointUrl);\n\n if (!actionsForEndpoint) {\n // Not cached, fetch now\n let client: MCPClient | null = null;\n try {\n client = await this.createMCPClientImpl(config);\n const tools = await client.tools();\n actionsForEndpoint = convertMCPToolsToActions(tools, endpointUrl);\n this.mcpActionCache.set(endpointUrl, actionsForEndpoint); // Store in cache\n } catch (error) {\n console.error(\n `MCP: Failed to fetch tools from endpoint ${endpointUrl}. Skipping. Error:`,\n error,\n );\n actionsForEndpoint = []; // Assign empty array on error to prevent re-fetching constantly\n this.mcpActionCache.set(endpointUrl, actionsForEndpoint); // Cache the failure (empty array)\n }\n }\n requestSpecificMCPActions.push(...(actionsForEndpoint || []));\n }\n }\n // --- Dynamic MCP Action Fetching ---\n\n // Combine all action sources, including the dynamically fetched MCP actions\n return [\n ...configuredActions,\n ...langserveFunctions,\n ...remoteActions,\n ...requestSpecificMCPActions,\n ];\n }\n\n // Add helper method to detect provider\n private detectProvider(serviceAdapter: CopilotServiceAdapter): string | undefined {\n const adapterName = serviceAdapter.constructor.name;\n if (adapterName.includes(\"OpenAI\")) return \"openai\";\n if (adapterName.includes(\"Anthropic\")) return \"anthropic\";\n if (adapterName.includes(\"Google\")) return \"google\";\n if (adapterName.includes(\"Groq\")) return \"groq\";\n if (adapterName.includes(\"LangChain\")) return \"langchain\";\n return undefined;\n }\n\n private convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Handle network termination errors\n if (\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitError({\n message:\n \"Connection to agent was unexpectedly terminated. This may be due to the agent service being restarted or network issues. Please try again.\",\n code: CopilotKitErrorCode.NETWORK_ERROR,\n });\n }\n\n // Handle other network-related errors\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\")\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"agent streaming connection\",\n message:\n \"Network error occurred during agent streaming. Please check your connection and try again.\",\n });\n }\n\n // Handle abort/cancellation errors (these are usually normal)\n if (\n error?.message?.includes(\"aborted\") ||\n error?.message?.includes(\"canceled\") ||\n error?.message?.includes(\"signal is aborted\")\n ) {\n return new CopilotKitError({\n message: \"Agent request was cancelled\",\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n // Default: convert unknown streaming errors\n return new CopilotKitError({\n message: `Agent streaming error: ${error?.message || String(error)}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n private async trace(\n type: CopilotTraceEvent[\"type\"],\n context: CopilotRequestContext,\n error?: any,\n publicApiKey?: string,\n ): Promise<void> {\n if (!this.onTrace) return;\n\n if (!publicApiKey) {\n if (!this.hasWarnedAboutTracing) {\n console.warn(\n \"CopilotKit: onTrace handler provided but requires publicApiKey for tracing to work. \" +\n \"This is a CopilotKit Cloud feature. See: https://docs.copilotkit.ai/cloud\",\n );\n this.hasWarnedAboutTracing = true;\n }\n return;\n }\n\n try {\n const traceEvent: CopilotTraceEvent = {\n type,\n timestamp: Date.now(),\n context,\n ...(error && { error }),\n };\n\n await this.onTrace(traceEvent);\n } catch (traceError) {\n // Don't let trace errors break the main flow\n console.error(\"Error in onTrace handler:\", traceError);\n }\n }\n\n /**\n * Public method to trace GraphQL validation errors\n * This allows the GraphQL resolver to send validation errors through the trace system\n */\n public async traceGraphQLError(\n error: { message: string; code: string; type: string },\n context: {\n operation: string;\n cloudConfigPresent: boolean;\n guardrailsEnabled: boolean;\n },\n ): Promise<void> {\n if (!this.onTrace) return;\n\n try {\n await this.onTrace({\n type: \"error\",\n timestamp: Date.now(),\n context: {\n source: \"runtime\",\n request: {\n operation: context.operation,\n startTime: Date.now(),\n },\n technical: {\n environment: process.env.NODE_ENV,\n },\n metadata: {\n errorType: \"GraphQLValidationError\",\n cloudConfigPresent: context.cloudConfigPresent,\n guardrailsEnabled: context.guardrailsEnabled,\n },\n },\n error,\n });\n } catch (traceError) {\n // Don't let trace errors break the main flow\n console.error(\"Error in onTrace handler:\", traceError);\n }\n }\n}\n\nexport function flattenToolCallsNoDuplicates(toolsByPriority: ActionInput[]): ActionInput[] {\n let allTools: ActionInput[] = [];\n const allToolNames: string[] = [];\n for (const tool of toolsByPriority) {\n if (!allToolNames.includes(tool.name)) {\n allTools.push(tool);\n allToolNames.push(tool.name);\n }\n }\n return allTools;\n}\n\n// The two functions below are \"factory functions\", meant to create the action objects that adhere to the expected interfaces\nexport function copilotKitEndpoint(config: Omit<CopilotKitEndpoint, \"type\">): CopilotKitEndpoint {\n return {\n ...config,\n type: EndpointType.CopilotKit,\n };\n}\n\nexport function langGraphPlatformEndpoint(\n config: Omit<LangGraphPlatformEndpoint, \"type\">,\n): LangGraphPlatformEndpoint {\n return {\n ...config,\n type: EndpointType.LangGraphPlatform,\n };\n}\n\nexport function resolveEndpointType(endpoint: EndpointDefinition) {\n if (!endpoint.type) {\n if (\"deploymentUrl\" in endpoint && \"agents\" in endpoint) {\n return EndpointType.LangGraphPlatform;\n } else {\n return EndpointType.CopilotKit;\n }\n }\n\n return endpoint.type;\n}\n","import { Parameter, Action } from \"@copilotkit/shared\";\nimport { RemoteRunnable } from \"langchain/runnables/remote\";\n\nexport interface RemoteChainParameters {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType?: \"single\" | \"multi\";\n}\n\nexport class RemoteChain {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType: \"single\" | \"multi\";\n\n constructor(options: RemoteChainParameters) {\n this.name = options.name;\n this.description = options.description;\n this.chainUrl = options.chainUrl;\n this.parameters = options.parameters;\n this.parameterType = options.parameterType || \"multi\";\n }\n\n async toAction(): Promise<Action<any>> {\n if (!this.parameters) {\n await this.inferLangServeParameters();\n }\n\n return {\n name: this.name,\n description: this.description,\n parameters: this.parameters!,\n handler: async (args: any) => {\n const runnable = new RemoteRunnable({ url: this.chainUrl });\n let input: any;\n if (this.parameterType === \"single\") {\n input = args[Object.keys(args)[0]];\n } else {\n input = args;\n }\n return await runnable.invoke(input);\n },\n };\n }\n\n async inferLangServeParameters() {\n const supportedTypes = [\"string\", \"number\", \"boolean\"];\n\n let schemaUrl = this.chainUrl.replace(/\\/+$/, \"\") + \"/input_schema\";\n let schema = await fetch(schemaUrl)\n .then((res) => res.json())\n .catch(() => {\n throw new Error(\"Failed to fetch langserve schema at \" + schemaUrl);\n });\n // for now, don't use json schema, just do a simple conversion\n\n if (supportedTypes.includes(schema.type)) {\n this.parameterType = \"single\";\n this.parameters = [\n {\n name: \"input\",\n type: schema.type,\n description: \"The input to the chain\",\n },\n ];\n } else if (schema.type === \"object\") {\n this.parameterType = \"multi\";\n this.parameters = Object.keys(schema.properties).map((key) => {\n let property = schema.properties[key];\n if (!supportedTypes.includes(property.type)) {\n throw new Error(\"Unsupported schema type\");\n }\n return {\n name: key,\n type: property.type,\n description: property.description || \"\",\n required: schema.required?.includes(key) || false,\n };\n });\n } else {\n throw new Error(\"Unsupported schema type\");\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Anthropic.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, AnthropicAdapter } from \"@copilotkit/runtime\";\n * import Anthropic from \"@anthropic-ai/sdk\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const anthropic = new Anthropic({\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new AnthropicAdapter({ anthropic });\n * ```\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToAnthropicTool,\n convertMessageToAnthropicMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\n\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"claude-3-5-sonnet-latest\";\n\nexport interface AnthropicAdapterParams {\n /**\n * An optional Anthropic instance to use. If not provided, a new instance will be\n * created.\n */\n anthropic?: Anthropic;\n\n /**\n * The model to use.\n */\n model?: string;\n}\n\nexport class AnthropicAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private _anthropic: Anthropic;\n public get anthropic(): Anthropic {\n return this._anthropic;\n }\n\n constructor(params?: AnthropicAdapterParams) {\n this._anthropic = params?.anthropic || new Anthropic({});\n if (params?.model) {\n this.model = params.model;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages: rawMessages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToAnthropicTool);\n\n const messages = [...rawMessages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // ALLOWLIST APPROACH:\n // 1. First, identify all valid tool_use calls (from assistant)\n // 2. Then, only keep tool_result blocks that correspond to these valid tool_use IDs\n // 3. Discard any other tool_result blocks\n\n // Step 1: Extract valid tool_use IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Map each message to an Anthropic message, eliminating invalid tool_results\n const anthropicMessages = messages\n .map((message) => {\n // For tool results, only include if they match a valid tool_use ID\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_use\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return null; // Will be filtered out later\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result,\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n\n // For non-tool-result messages, convert normally\n return convertMessageToAnthropicMessage(message);\n })\n .filter(Boolean) // Remove nulls\n .filter((msg) => {\n // Filter out assistant messages with empty text content\n if (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n const hasEmptyTextOnly =\n msg.content.length === 1 &&\n msg.content[0].type === \"text\" &&\n (!(msg.content[0] as any).text || (msg.content[0] as any).text.trim() === \"\");\n\n // Keep messages that have tool_use or non-empty text\n return !hasEmptyTextOnly;\n }\n return true;\n }) as Anthropic.Messages.MessageParam[];\n\n // Apply token limits\n const limitedMessages = limitMessagesToTokenCount(anthropicMessages, tools, model);\n\n // We skip grouping by role since we've already ensured uniqueness of tool_results\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"tool\",\n name: forwardedParameters.toolChoiceFunctionName,\n };\n }\n\n try {\n const createParams = {\n system: instructions,\n model: this.model,\n messages: limitedMessages,\n max_tokens: forwardedParameters?.maxTokens || 1024,\n ...(forwardedParameters?.temperature\n ? { temperature: forwardedParameters.temperature }\n : {}),\n ...(tools.length > 0 && { tools }),\n ...(toolChoice && { tool_choice: toolChoice }),\n stream: true,\n };\n\n const stream = await this.anthropic.messages.create(createParams);\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let didOutputText = false;\n let currentMessageId = randomId();\n let currentToolCallId = randomId();\n let filterThinkingTextBuffer = new FilterThinkingTextBuffer();\n\n try {\n for await (const chunk of stream as AsyncIterable<any>) {\n if (chunk.type === \"message_start\") {\n currentMessageId = chunk.message.id;\n } else if (chunk.type === \"content_block_start\") {\n if (chunk.content_block.type === \"text\") {\n didOutputText = false;\n filterThinkingTextBuffer.reset();\n mode = \"message\";\n } else if (chunk.content_block.type === \"tool_use\") {\n currentToolCallId = chunk.content_block.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: chunk.content_block.name,\n parentMessageId: currentMessageId,\n });\n mode = \"function\";\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta.type === \"text_delta\") {\n const text = filterThinkingTextBuffer.onTextChunk(chunk.delta.text);\n if (text.length > 0) {\n if (!didOutputText) {\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n didOutputText = true;\n }\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: text,\n });\n }\n } else if (chunk.delta.type === \"input_json_delta\") {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: chunk.delta.partial_json,\n });\n }\n } else if (chunk.type === \"content_block_stop\") {\n if (mode === \"message\") {\n if (didOutputText) {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n }\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n }\n }\n } catch (error) {\n console.error(\"[Anthropic] Error processing stream:\", error);\n throw error;\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[Anthropic] Error during API call:\", error);\n throw error;\n }\n\n return {\n threadId: threadId || randomUUID(),\n };\n }\n}\n\nconst THINKING_TAG = \"<thinking>\";\nconst THINKING_TAG_END = \"</thinking>\";\n\nclass FilterThinkingTextBuffer {\n private buffer: string;\n private didFilterThinkingTag: boolean = false;\n\n constructor() {\n this.buffer = \"\";\n }\n\n onTextChunk(text: string): string {\n this.buffer += text;\n if (this.didFilterThinkingTag) {\n return text;\n }\n const potentialTag = this.buffer.slice(0, THINKING_TAG.length);\n if (THINKING_TAG.startsWith(potentialTag)) {\n if (this.buffer.includes(THINKING_TAG_END)) {\n const end = this.buffer.indexOf(THINKING_TAG_END);\n const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);\n this.buffer = filteredText;\n this.didFilterThinkingTag = true;\n return filteredText;\n } else {\n return \"\";\n }\n }\n return text;\n }\n\n reset() {\n this.buffer = \"\";\n this.didFilterThinkingTag = false;\n }\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Anthropic } from \"@anthropic-ai/sdk\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= MAX_TOKENS;\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if (message.role === \"system\") {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if (message.role === \"system\") {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nconst MAX_TOKENS = 128000;\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, JSON.stringify(message.content) || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToAnthropicTool(action: ActionInput): Anthropic.Messages.Tool {\n return {\n name: action.name,\n description: action.description,\n input_schema: JSON.parse(action.jsonSchema),\n };\n}\n\nexport function convertMessageToAnthropicMessage(\n message: Message,\n): Anthropic.Messages.MessageParam {\n if (message.isTextMessage()) {\n if (message.role === \"system\") {\n return {\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content },\n ],\n };\n } else {\n return {\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [{ type: \"text\", text: message.content }],\n };\n }\n } else if (message.isImageMessage()) {\n let mediaType: Anthropic.Messages.ImageBlockParam.Source[\"media_type\"];\n switch (message.format) {\n case \"jpeg\":\n mediaType = \"image/jpeg\";\n break;\n case \"png\":\n mediaType = \"image/png\";\n break;\n case \"webp\":\n mediaType = \"image/webp\";\n break;\n case \"gif\":\n mediaType = \"image/gif\";\n break;\n default:\n throw new Error(`Unsupported image format: ${message.format}`);\n }\n\n return {\n role: \"user\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: mediaType,\n data: message.bytes,\n },\n },\n ],\n };\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n content: [\n {\n id: message.id,\n type: \"tool_use\",\n input: message.arguments,\n name: message.name,\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result,\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n}\n","/**\n * CopilotKit Adapter for Ollama\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OllamaAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OllamaAdapter({ model: \"llama3-70b-8192\" }),\n * );\n * ```\n */\nimport { TextMessage } from \"../../../graphql/types/converted\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../../service-adapter\";\nimport { Ollama } from \"@langchain/community/llms/ollama\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama3:latest\";\n\ninterface OllamaAdapterOptions {\n model?: string;\n}\n\nexport class ExperimentalOllamaAdapter implements CopilotServiceAdapter {\n private model: string;\n\n constructor(options?: OllamaAdapterOptions) {\n if (options?.model) {\n this.model = options.model;\n } else {\n this.model = DEFAULT_MODEL;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource } = request;\n // const messages = this.transformMessages(forwardedProps.messages);\n\n const ollama = new Ollama({\n model: this.model,\n });\n const contents = (messages.filter((m) => m.isTextMessage()) as TextMessage[]).map(\n (m) => m.content,\n );\n const _stream = await ollama.stream(contents); // [TODO] role info is dropped...\n\n eventSource.stream(async (eventStream$) => {\n const currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n for await (const chunkText of _stream) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunkText,\n });\n }\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n // we may need to add this later.. [nc]\n // let calls = (await result.response).functionCalls();\n\n eventStream$.complete();\n });\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for AWS Bedrock.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, BedrockAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new BedrockAdapter({\n * model: \"amazon.nova-lite-v1:0\",\n * region: \"us-east-1\",\n * credentials: {\n * accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n * }\n * });\n * ```\n */\n\nimport { ChatBedrockConverse } from \"@langchain/aws\";\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\nexport interface BedrockAdapterParams {\n /**\n * AWS Bedrock model ID to use.\n * @default \"amazon.nova-lite-v1:0\"\n */\n model?: string;\n\n /**\n * AWS region where Bedrock is available.\n * @default \"us-east-1\"\n */\n region?: string;\n\n /**\n * AWS credentials for Bedrock access.\n */\n credentials?: {\n accessKeyId?: string;\n secretAccessKey?: string;\n };\n}\n\nexport class BedrockAdapter extends LangChainAdapter {\n constructor(options?: BedrockAdapterParams) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n const model = new ChatBedrockConverse({\n model: options?.model ?? \"amazon.nova-lite-v1:0\",\n region: options?.region ?? \"us-east-1\",\n credentials: options?.credentials\n ? {\n accessKeyId: options.credentials.accessKeyId,\n secretAccessKey: options.credentials.secretAccessKey,\n }\n : undefined,\n }).bindTools(tools);\n return model.stream(messages);\n },\n });\n }\n}\n","/**\n * CopilotKit Empty Adapter\n *\n * This adapter is meant to preserve adherence to runtime requirements, while doing nothing\n * Ideal if you don't want to connect an LLM the to the runtime, and only use your LangGraph agent.\n * Be aware that Copilot Suggestions will not work if you use this adapter\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, EmptyAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new EmptyAdapter();\n * ```\n */\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nexport class EmptyAdapter implements CopilotServiceAdapter {\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n\nexport const ExperimentalEmptyAdapter = EmptyAdapter;\n","import {\n ActionExecutionMessageInput,\n ResultMessageInput,\n TextMessageInput,\n AgentStateMessageInput,\n ImageMessageInput,\n} from \"../../inputs/message.input\";\nimport { BaseMessageInput } from \"../base\";\nimport { MessageRole } from \"../enums\";\n\nexport type MessageType =\n | \"TextMessage\"\n | \"ActionExecutionMessage\"\n | \"ResultMessage\"\n | \"AgentStateMessage\"\n | \"ImageMessage\";\n\nexport class Message extends BaseMessageInput {\n type: MessageType;\n\n isTextMessage(): this is TextMessage {\n return this.type === \"TextMessage\";\n }\n\n isActionExecutionMessage(): this is ActionExecutionMessage {\n return this.type === \"ActionExecutionMessage\";\n }\n\n isResultMessage(): this is ResultMessage {\n return this.type === \"ResultMessage\";\n }\n\n isAgentStateMessage(): this is AgentStateMessage {\n return this.type === \"AgentStateMessage\";\n }\n\n isImageMessage(): this is ImageMessage {\n return this.type === \"ImageMessage\";\n }\n}\n\nexport class TextMessage extends Message implements TextMessageInput {\n type: MessageType = \"TextMessage\";\n content: string;\n role: MessageRole;\n parentMessageId?: string;\n}\n\nexport class ActionExecutionMessage\n extends Message\n implements Omit<ActionExecutionMessageInput, \"arguments\" | \"scope\">\n{\n type: MessageType = \"ActionExecutionMessage\";\n name: string;\n arguments: Record<string, any>;\n parentMessageId?: string;\n}\n\nexport class ResultMessage extends Message implements ResultMessageInput {\n type: MessageType = \"ResultMessage\";\n actionExecutionId: string;\n actionName: string;\n result: string;\n\n static encodeResult(\n result: any,\n error?: { code: string; message: string } | string | Error,\n ): string {\n const errorObj = error\n ? typeof error === \"string\"\n ? { code: \"ERROR\", message: error }\n : error instanceof Error\n ? { code: \"ERROR\", message: error.message }\n : error\n : undefined;\n\n if (errorObj) {\n return JSON.stringify({\n error: errorObj,\n result: result || \"\",\n });\n }\n if (result === undefined) {\n return \"\";\n }\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n static decodeResult(result: string): {\n error?: { code: string; message: string };\n result: string;\n } {\n if (!result) {\n return { result: \"\" };\n }\n try {\n const parsed = JSON.parse(result);\n if (parsed && typeof parsed === \"object\") {\n if (\"error\" in parsed) {\n return {\n error: parsed.error,\n result: parsed.result || \"\",\n };\n }\n return { result: JSON.stringify(parsed) };\n }\n return { result };\n } catch (e) {\n return { result };\n }\n }\n\n hasError(): boolean {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return !!error;\n } catch {\n return false;\n }\n }\n\n getError(): { code: string; message: string } | undefined {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return error;\n } catch {\n return undefined;\n }\n }\n}\n\nexport class AgentStateMessage extends Message implements Omit<AgentStateMessageInput, \"state\"> {\n type: MessageType = \"AgentStateMessage\";\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: MessageRole;\n state: any;\n running: boolean;\n}\n\nexport class ImageMessage extends Message implements ImageMessageInput {\n type: MessageType = \"ImageMessage\";\n format: string;\n bytes: string;\n role: MessageRole;\n parentMessageId?: string;\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n AgentStateMessage,\n ImageMessage,\n} from \"../graphql/types/converted\";\nimport { MessageInput } from \"../graphql/inputs/message.input\";\nimport { plainToInstance } from \"class-transformer\";\nimport { tryMap } from \"@copilotkit/shared\";\n\nexport function convertGqlInputToMessages(inputMessages: MessageInput[]): Message[] {\n const messages = tryMap(inputMessages, (message) => {\n if (message.textMessage) {\n return plainToInstance(TextMessage, {\n id: message.id,\n createdAt: message.createdAt,\n role: message.textMessage.role,\n content: message.textMessage.content,\n parentMessageId: message.textMessage.parentMessageId,\n });\n } else if (message.imageMessage) {\n return plainToInstance(ImageMessage, {\n id: message.id,\n createdAt: message.createdAt,\n role: message.imageMessage.role,\n bytes: message.imageMessage.bytes,\n format: message.imageMessage.format,\n parentMessageId: message.imageMessage.parentMessageId,\n });\n } else if (message.actionExecutionMessage) {\n return plainToInstance(ActionExecutionMessage, {\n id: message.id,\n createdAt: message.createdAt,\n name: message.actionExecutionMessage.name,\n arguments: JSON.parse(message.actionExecutionMessage.arguments),\n parentMessageId: message.actionExecutionMessage.parentMessageId,\n });\n } else if (message.resultMessage) {\n return plainToInstance(ResultMessage, {\n id: message.id,\n createdAt: message.createdAt,\n actionExecutionId: message.resultMessage.actionExecutionId,\n actionName: message.resultMessage.actionName,\n result: message.resultMessage.result,\n });\n } else if (message.agentStateMessage) {\n return plainToInstance(AgentStateMessage, {\n id: message.id,\n threadId: message.agentStateMessage.threadId,\n createdAt: message.createdAt,\n agentName: message.agentStateMessage.agentName,\n nodeName: message.agentStateMessage.nodeName,\n runId: message.agentStateMessage.runId,\n active: message.agentStateMessage.active,\n role: message.agentStateMessage.role,\n state: JSON.parse(message.agentStateMessage.state),\n running: message.agentStateMessage.running,\n });\n } else {\n return null;\n }\n });\n\n return messages.filter((m) => m);\n}\n","import { Action, Parameter } from \"@copilotkit/shared\";\n\n/**\n * Represents a tool provided by an MCP server.\n */\nexport interface MCPTool {\n description?: string;\n /** Schema defining parameters, mirroring the MCP structure. */\n schema?: {\n parameters?: {\n properties?: Record<string, any>;\n required?: string[];\n jsonSchema?: Record<string, any>;\n };\n };\n /** The function to call to execute the tool on the MCP server. */\n execute(options: { params: any }): Promise<any>;\n}\n\n/**\n * Defines the contract for *any* MCP client implementation the user might provide.\n */\nexport interface MCPClient {\n /** A method that returns a map of tool names to MCPTool objects available from the connected MCP server. */\n tools(): Promise<Record<string, MCPTool>>;\n /** An optional method for cleanup if the underlying client requires explicit disconnection. */\n close?(): Promise<void>;\n}\n\n/**\n * Configuration for connecting to an MCP endpoint.\n */\nexport interface MCPEndpointConfig {\n endpoint: string;\n apiKey?: string;\n}\n\n/**\n * Extracts CopilotKit-compatible parameters from an MCP tool schema.\n * @param toolOrSchema The schema object from an MCPTool or the full MCPTool object.\n * @returns An array of Parameter objects.\n */\nexport function extractParametersFromSchema(\n toolOrSchema?: MCPTool | MCPTool[\"schema\"],\n): Parameter[] {\n const parameters: Parameter[] = [];\n\n // Handle either full tool object or just schema\n const schema =\n \"schema\" in (toolOrSchema || {})\n ? (toolOrSchema as MCPTool).schema\n : (toolOrSchema as MCPTool[\"schema\"]);\n\n const toolParameters = schema?.parameters || schema?.parameters?.jsonSchema;\n const properties = toolParameters?.properties;\n const requiredParams = new Set(toolParameters?.required || []);\n\n if (!properties) {\n return parameters;\n }\n\n for (const paramName in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, paramName)) {\n const paramDef = properties[paramName];\n parameters.push({\n name: paramName,\n // Infer type, default to string. MCP schemas might have more complex types.\n // This might need refinement based on common MCP schema practices.\n type: paramDef.type || \"string\",\n description: paramDef.description,\n required: requiredParams.has(paramName),\n // Attributes might not directly map, handle if necessary\n // attributes: paramDef.attributes || undefined,\n });\n }\n }\n\n return parameters;\n}\n\n/**\n * Converts a map of MCPTools into an array of CopilotKit Actions.\n * @param mcpTools A record mapping tool names to MCPTool objects.\n * @param mcpEndpoint The endpoint URL from which these tools were fetched.\n * @returns An array of Action<any> objects.\n */\nexport function convertMCPToolsToActions(\n mcpTools: Record<string, MCPTool>,\n mcpEndpoint: string,\n): Action<any>[] {\n const actions: Action<any>[] = [];\n\n for (const [toolName, tool] of Object.entries(mcpTools)) {\n const parameters = extractParametersFromSchema(tool);\n\n const handler = async (params: any): Promise<any> => {\n try {\n const result = await tool.execute({ params });\n // Ensure the result is a string or stringify it, as required by many LLMs.\n // This might need adjustment depending on how different LLMs handle tool results.\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } catch (error) {\n console.error(\n `Error executing MCP tool '${toolName}' from endpoint ${mcpEndpoint}:`,\n error,\n );\n // Re-throw or format the error for the LLM\n throw new Error(\n `Execution failed for MCP tool '${toolName}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n actions.push({\n name: toolName,\n description: tool.description || `MCP tool: ${toolName} (from ${mcpEndpoint})`,\n parameters: parameters,\n handler: handler,\n // Add metadata for easier identification/debugging\n _isMCPTool: true,\n _mcpEndpoint: mcpEndpoint,\n } as Action<any> & { _isMCPTool: boolean; _mcpEndpoint: string }); // Type assertion for metadata\n }\n\n return actions;\n}\n\n/**\n * Generate better instructions for using MCP tools\n * This is used to enhance the system prompt with tool documentation\n */\nexport function generateMcpToolInstructions(toolsMap: Record<string, MCPTool>): string {\n if (!toolsMap || Object.keys(toolsMap).length === 0) {\n return \"\";\n }\n\n const toolEntries = Object.entries(toolsMap);\n\n // Generate documentation for each tool\n const toolsDoc = toolEntries\n .map(([name, tool]) => {\n // Extract schema information if available\n let paramsDoc = \" No parameters required\";\n\n try {\n if (tool.schema && typeof tool.schema === \"object\") {\n const schema = tool.schema as any;\n\n // Extract parameters from JSON Schema\n if (schema.properties) {\n const requiredParams = schema.required || [];\n\n // Build parameter documentation from properties\n const paramsList = Object.entries(schema.properties).map(([paramName, propSchema]) => {\n const propDetails = propSchema as any;\n const requiredMark = requiredParams.includes(paramName) ? \"*\" : \"\";\n const typeInfo = propDetails.type || \"any\";\n const description = propDetails.description ? ` - ${propDetails.description}` : \"\";\n\n return ` - ${paramName}${requiredMark} (${typeInfo})${description}`;\n });\n\n if (paramsList.length > 0) {\n paramsDoc = paramsList.join(\"\\n\");\n }\n }\n }\n } catch (e) {\n console.error(`Error parsing schema for tool ${name}:`, e);\n }\n\n return `- ${name}: ${tool.description || \"\"}\n${paramsDoc}`;\n })\n .join(\"\\n\\n\");\n\n return `You have access to the following external tools provided by Model Context Protocol (MCP) servers:\n\n${toolsDoc}\n\nWhen using these tools:\n1. Only provide valid parameters according to their type requirements\n2. Required parameters are marked with *\n3. Format API calls correctly with the expected parameter structure\n4. Always check tool responses to determine your next action`;\n}\n","import {\n FailedResponseStatus,\n FailedResponseStatusReason,\n} from \"../graphql/types/response-status.type\";\n\nexport class GuardrailsValidationFailureResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.GUARDRAILS_VALIDATION_FAILED;\n declare details: {\n guardrailsReason: string;\n };\n\n constructor({ guardrailsReason }) {\n super();\n this.details = {\n guardrailsReason,\n };\n }\n}\n\nexport class MessageStreamInterruptedResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.MESSAGE_STREAM_INTERRUPTED;\n declare details: {\n messageId: string;\n description: string;\n };\n\n constructor({ messageId }: { messageId: string }) {\n super();\n this.details = {\n messageId,\n description: \"Check the message for mode details\",\n };\n }\n}\n\nexport class UnknownErrorResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.UNKNOWN_ERROR;\n declare details: {\n description?: string;\n };\n\n constructor({ description }: { description?: string }) {\n super();\n this.details = {\n description,\n };\n }\n}\n","import { Field, ObjectType } from \"type-graphql\";\n\n@ObjectType()\nexport class Agent {\n @Field(() => String)\n id: string;\n\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description?: string;\n}\n\n@ObjectType()\nexport class AgentsResponse {\n @Field(() => [Agent])\n agents: Agent[];\n}\n","import createPinoLogger from \"pino\";\nimport pretty from \"pino-pretty\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport type CopilotRuntimeLogger = ReturnType<typeof createLogger>;\n\nexport function createLogger(options?: { level?: LogLevel; component?: string }) {\n const { level, component } = options || {};\n const stream = pretty({ colorize: true });\n\n const logger = createPinoLogger(\n {\n level: process.env.LOG_LEVEL || level || \"error\",\n redact: {\n paths: [\"pid\", \"hostname\"],\n remove: true,\n },\n },\n stream,\n );\n\n if (component) {\n return logger.child({ component });\n } else {\n return logger;\n }\n}\n","import { Arg, Resolver } from \"type-graphql\";\nimport { Ctx } from \"type-graphql\";\nimport { Query } from \"type-graphql\";\nimport { LoadAgentStateResponse } from \"../types/load-agent-state-response.type\";\nimport type { GraphQLContext } from \"../../lib/integrations\";\nimport { LoadAgentStateInput } from \"../inputs/load-agent-state.input\";\nimport { CopilotKitAgentDiscoveryError } from \"@copilotkit/shared\";\n\n@Resolver(() => LoadAgentStateResponse)\nexport class StateResolver {\n @Query(() => LoadAgentStateResponse)\n async loadAgentState(@Ctx() ctx: GraphQLContext, @Arg(\"data\") data: LoadAgentStateInput) {\n const agents = await ctx._copilotkit.runtime.discoverAgentsFromEndpoints(ctx);\n const agent = agents.find((agent) => agent.name === data.agentName);\n if (!agent) {\n throw new CopilotKitAgentDiscoveryError({\n agentName: data.agentName,\n availableAgents: agents.map((a) => ({ name: a.name, id: a.name })),\n });\n }\n\n const state = await ctx._copilotkit.runtime.loadAgentState(ctx, data.threadId, data.agentName);\n\n return state;\n }\n}\n","import { Field, ObjectType } from \"type-graphql\";\nimport { BaseMessageOutput } from \"./copilot-response.type\";\n\n@ObjectType()\nexport class LoadAgentStateResponse {\n @Field(() => String)\n threadId: string;\n\n @Field(() => Boolean)\n threadExists: boolean;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String)\n messages: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class LoadAgentStateInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n}\n","import { createYoga } from \"graphql-yoga\";\nimport { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNextJSAppRouterEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-app-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS App Router endpoint\");\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: options.endpoint,\n fetchAPI: { Response: globalThis.Response },\n });\n\n return {\n handleRequest: yoga,\n GET: yoga as any,\n POST: yoga as any,\n OPTIONS: yoga as any,\n };\n}\n","import { YogaServerInstance, createYoga } from \"graphql-yoga\";\nimport { CreateCopilotRuntimeServerOptions, GraphQLContext, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport const config = {\n api: {\n bodyParser: false,\n },\n};\n\nexport type CopilotRuntimeServerInstance<T> = YogaServerInstance<T, Partial<GraphQLContext>>;\n\n// This import is needed to fix the type error\n// Fix is currently in TypeScript 5.5 beta, waiting for stable version\n// https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2066874644\nexport type {} from \"@whatwg-node/server\";\n\nexport function copilotRuntimeNextJSPagesRouterEndpoint(\n options: CreateCopilotRuntimeServerOptions,\n): CopilotRuntimeServerInstance<GraphQLContext> {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-pages-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS Pages Router endpoint\");\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: options.endpoint,\n });\n\n return yoga;\n}\n","import { createYoga } from \"graphql-yoga\";\nimport { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNodeHttpEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-http\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating Node HTTP endpoint\");\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: options.endpoint,\n });\n\n return yoga;\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNodeExpressEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-express\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNestEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nest\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import {\n RunAgentInput,\n EventType,\n CustomEvent,\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n} from \"@ag-ui/client\";\nimport { map } from \"rxjs\";\nimport { LangGraphEventTypes } from \"../../../agents/langgraph/events\";\nimport { RawEvent } from \"@ag-ui/core\";\nimport {\n LangGraphAgent as AGUILangGraphAgent,\n type LangGraphAgentConfig,\n ProcessedEvents,\n} from \"@ag-ui/langgraph\";\nimport { Message as LangGraphMessage } from \"@langchain/langgraph-sdk/dist/types.messages\";\n\nexport interface PredictStateTool {\n tool: string;\n state_key: string;\n tool_argument: string;\n}\nexport type State = Record<string, any>;\n\nexport type TextMessageEvents =\n | TextMessageStartEvent\n | TextMessageContentEvent\n | TextMessageEndEvent;\n\nexport type ToolCallEvents = ToolCallStartEvent | ToolCallArgsEvent | ToolCallEndEvent;\n\nexport enum CustomEventNames {\n CopilotKitManuallyEmitMessage = \"copilotkit_manually_emit_message\",\n CopilotKitManuallyEmitToolCall = \"copilotkit_manually_emit_tool_call\",\n CopilotKitManuallyEmitIntermediateState = \"copilotkit_manually_emit_intermediate_state\",\n CopilotKitExit = \"copilotkit_exit\",\n}\n\nexport class LangGraphAgent extends AGUILangGraphAgent {\n constructor(config: LangGraphAgentConfig) {\n super(config);\n }\n\n dispatchEvent(event: ProcessedEvents) {\n if (event.type === EventType.CUSTOM) {\n // const event = processedEvent as unknown as CustomEvent;\n const customEvent = event as unknown as CustomEvent;\n\n if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitMessage) {\n this.subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n role: \"assistant\",\n messageId: customEvent.value.message_id,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: customEvent.value.message_id,\n delta: customEvent.value.message,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: customEvent.value.message_id,\n rawEvent: event,\n });\n return true;\n }\n\n if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitToolCall) {\n this.subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: customEvent.value.id,\n toolCallName: customEvent.value.name,\n parentMessageId: customEvent.value.id,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: customEvent.value.id,\n delta: customEvent.value.args,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: customEvent.value.id,\n rawEvent: event,\n });\n return true;\n }\n\n if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState) {\n this.activeRun.manuallyEmittedState = customEvent.value;\n this.dispatchEvent({\n type: EventType.STATE_SNAPSHOT,\n snapshot: this.getStateSnapshot(this.activeRun.manuallyEmittedState),\n rawEvent: event,\n });\n return true;\n }\n\n if (customEvent.name === CustomEventNames.CopilotKitExit) {\n this.subscriber.next({\n type: EventType.CUSTOM,\n name: \"Exit\",\n value: true,\n });\n return true;\n }\n }\n\n // Intercept all text message and tool call events and check if should disable\n const rawEvent = (event as ToolCallEvents | TextMessageEvents).rawEvent;\n if (!rawEvent) {\n this.subscriber.next(event);\n return true;\n }\n\n const isMessageEvent =\n event.type === EventType.TEXT_MESSAGE_START ||\n event.type === EventType.TEXT_MESSAGE_CONTENT ||\n event.type === EventType.TEXT_MESSAGE_END;\n const isToolEvent =\n event.type === EventType.TOOL_CALL_START ||\n event.type === EventType.TOOL_CALL_ARGS ||\n event.type === EventType.TOOL_CALL_END;\n if (\"copilotkit:emit-tool-calls\" in (rawEvent.metadata || {})) {\n if (rawEvent.metadata[\"copilotkit:emit-tool-calls\"] === false && isToolEvent) {\n return false;\n }\n }\n if (\"copilotkit:emit-messages\" in (rawEvent.metadata || {})) {\n if (rawEvent.metadata[\"copilotkit:emit-messages\"] === false && isMessageEvent) {\n return false;\n }\n }\n\n this.subscriber.next(event);\n return true;\n }\n\n // @ts-ignore\n run(input: RunAgentInput) {\n return super.run(input).pipe(\n map((processedEvent) => {\n // Turn raw event into emit state snapshot from tool call event\n if (processedEvent.type === EventType.RAW) {\n // Get the LangGraph event from the AGUI event.\n const event = (processedEvent as RawEvent).event ?? (processedEvent as RawEvent).rawEvent;\n\n const eventType = event.event;\n const toolCallData = event.data?.chunk?.tool_call_chunks?.[0];\n const toolCallUsedToPredictState = event.metadata?.[\n \"copilotkit:emit-intermediate-state\"\n ]?.some(\n (predictStateTool: PredictStateTool) => predictStateTool.tool === toolCallData?.name,\n );\n\n if (eventType === LangGraphEventTypes.OnChatModelStream && toolCallUsedToPredictState) {\n return {\n type: EventType.CUSTOM,\n name: \"PredictState\",\n value: event.metadata[\"copilotkit:emit-intermediate-state\"],\n };\n }\n }\n\n return processedEvent;\n }),\n );\n }\n\n langGraphDefaultMergeState(state: State, messages: LangGraphMessage[], tools: any): State {\n const { tools: returnedTools, ...rest } = super.langGraphDefaultMergeState(\n state,\n messages,\n tools,\n );\n return {\n ...rest,\n copilotkit: {\n actions: returnedTools,\n },\n };\n }\n}\n"],"mappings":"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","names":["module","CustomEventNames","limitMessagesToTokenCount","messages","tools","model","maxTokens","maxTokensForOpenAIModel","result","toolsNumTokens","countToolsTokens","Error","message","includes","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","maxTokensByModel","DEFAULT_MAX_TOKENS","o1","length","json","JSON","stringify","countTokens","content","text","convertActionInputToOpenAITool","action","type","function","name","description","parameters","parseJson","jsonSchema","convertMessageToOpenAIMessage","options","keepSystemRole","isTextMessage","isImageMessage","image_url","url","format","bytes","isActionExecutionMessage","tool_calls","id","arguments","isResultMessage","tool_call_id","actionExecutionId","convertSystemMessageToAssistantAPI","import_shared","DEFAULT_MODEL","OpenAIAdapter","model","disableParallelToolCalls","_openai","keepSystemRole","openai","constructor","params","OpenAI","process","request","threadId","threadIdFromRequest","messages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToOpenAITool","randomUUID","validToolUseIds","Set","message","isActionExecutionMessage","add","id","filteredMessages","filter","isResultMessage","has","actionExecutionId","delete","openaiMessages","m","convertMessageToOpenAIMessage","limitMessagesToTokenCount","toolChoice","type","function","name","toolChoiceFunctionName","stream","beta","chat","completions","length","maxTokens","max_tokens","stop","tool_choice","parallel_tool_calls","temperature","eventStream$","mode","currentMessageId","currentToolCallId","chunk","choices","toolCall","delta","tool_calls","content","sendTextMessageEnd","messageId","undefined","sendActionExecutionEnd","sendActionExecutionStart","parentMessageId","actionName","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","args","error","console","complete","import_shared","convertMessageToLangChainMessage","message","isTextMessage","role","HumanMessage","content","AIMessage","SystemMessage","isActionExecutionMessage","tool_calls","id","args","arguments","name","isResultMessage","ToolMessage","result","tool_call_id","actionExecutionId","convertActionInputToLangChainTool","actionInput","DynamicStructuredTool","description","schema","convertJsonSchemaToZodSchema","JSON","parse","jsonSchema","func","isAIMessage","message","Object","prototype","toString","call","isAIMessageChunk","isBaseMessageChunk","maybeSendActionExecutionResultIsMessage","eventStream$","actionExecution","sendActionExecutionResult","actionExecutionId","id","actionName","name","result","streamLangChainResponse","sendTextMessage","randomId","content","toolCall","tool_calls","sendActionExecution","args","JSON","stringify","lc_kwargs","reader","getReader","mode","currentMessageId","toolCallDetails","index","prevIndex","done","value","read","toolCallName","undefined","toolCallId","toolCallArgs","hasToolCall","Array","isArray","text","chunk","tool_call_chunks","additional_kwargs","function","arguments","sendTextMessageEnd","messageId","sendActionExecutionEnd","sendActionExecutionStart","parentMessageId","sendTextMessageStart","sendTextMessageContent","sendActionExecutionArgs","error","console","encodeResult","Error","complete","import_shared","LangChainAdapter","constructor","options","process","request","eventSource","model","actions","messages","runId","threadId","threadIdFromRequest","randomUUID","result","chainFn","map","convertMessageToLangChainMessage","tools","convertActionInputToLangChainTool","stream","eventStream$","streamLangChainResponse","awaitAllCallbacks","import_messages","GoogleGenerativeAIAdapter","LangChainAdapter","constructor","options","chainFn","messages","tools","threadId","filteredMessages","filter","message","AIMessage","content","String","trim","length","tool_calls","model","ChatGoogle","modelName","apiVersion","bindTools","stream","metadata","conversation_id","import_openai","OpenAIAssistantAdapter","openai","codeInterpreterEnabled","assistantId","fileSearchEnabled","disableParallelToolCalls","keepSystemRole","constructor","params","OpenAI","process","request","messages","actions","eventSource","runId","forwardedParameters","threadId","extensions","openaiAssistantAPI","beta","threads","create","id","lastMessage","at","nextRunId","undefined","isResultMessage","submitToolOutputs","isTextMessage","submitUserMessage","Error","run","runs","retrieve","required_action","toolCallsIds","submit_tool_outputs","tool_calls","map","toolCall","resultMessages","filter","message","includes","actionExecutionId","length","toolOutputs","tool_call_id","output","result","stream","submitToolOutputsStream","tool_outputs","parallel_tool_calls","streamResponse","instructionsMessage","shift","instructions","content","userMessage","m","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","role","openaiTools","convertActionInputToOpenAITool","tools","type","assistant_id","maxTokens","max_completion_tokens","getRunIdFromStream","eventStream$","inFunctionCall","currentMessageId","currentToolCallId","chunk","event","sendActionExecutionEnd","data","sendTextMessageStart","messageId","delta","sendTextMessageContent","text","value","sendTextMessageEnd","toolCallId","toolCallName","toolCallArgs","step_details","function","name","arguments","sendActionExecutionStart","parentMessageId","actionName","sendActionExecutionArgs","args","complete","Promise","resolve","reject","runIdGetter","off","on","import_openai","import_shared","UnifyAdapter","apiKey","model","start","constructor","options","process","request","tools","actions","map","convertActionInputToOpenAITool","openai","OpenAI","baseURL","forwardedParameters","messages","m","convertMessageToOpenAIMessage","stream","chat","completions","create","length","temperature","currentMessageId","currentToolCallId","eventSource","eventStream$","mode","chunk","randomId","sendTextMessageStart","messageId","sendTextMessageContent","content","sendTextMessageEnd","toolCall","choices","delta","tool_calls","id","undefined","sendActionExecutionEnd","actionExecutionId","sendActionExecutionStart","actionName","function","name","arguments","sendActionExecutionArgs","args","complete","threadId","randomUUID","import_shared","DEFAULT_MODEL","GroqAdapter","model","disableParallelToolCalls","_groq","groq","constructor","params","Groq","process","request","threadId","messages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToOpenAITool","openaiMessages","m","convertMessageToOpenAIMessage","keepSystemRole","limitMessagesToTokenCount","toolChoice","type","function","name","toolChoiceFunctionName","stream","chat","completions","create","length","maxTokens","max_tokens","stop","tool_choice","parallel_tool_calls","temperature","eventStream$","mode","currentMessageId","currentToolCallId","chunk","toolCall","choices","delta","tool_calls","content","id","sendTextMessageEnd","messageId","undefined","sendActionExecutionEnd","actionExecutionId","sendActionExecutionStart","actionName","parentMessageId","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","args","complete","randomUUID","import_type_graphql","import_type_graphql","import_rxjs","import_type_graphql","import_type_graphql","MessageRole","CopilotRequestType","ActionInputAvailability","registerEnumType","name","description","import_type_graphql","BaseMessageInput","id","createdAt","Field","String","Date","InputType","MessageInput","BaseMessageInput","textMessage","actionExecutionMessage","resultMessage","agentStateMessage","imageMessage","Field","TextMessageInput","nullable","ActionExecutionMessageInput","ResultMessageInput","AgentStateMessageInput","ImageMessageInput","InputType","content","parentMessageId","role","String","MessageRole","name","arguments","scope","deprecationReason","actionExecutionId","actionName","result","threadId","agentName","state","running","nodeName","runId","active","Boolean","format","bytes","import_type_graphql","import_type_graphql","ActionInput","name","description","jsonSchema","available","Field","String","ActionInputAvailability","nullable","InputType","FrontendInput","toDeprecate_fullContext","actions","url","Field","String","nullable","ActionInput","InputType","import_type_graphql","import_type_graphql","GuardrailsRuleInput","allowList","denyList","Field","String","nullable","InputType","GuardrailsInput","inputValidationRules","CloudInput","guardrails","Field","GuardrailsInput","nullable","InputType","import_type_graphql","ForwardedParametersInput","model","maxTokens","stop","toolChoice","toolChoiceFunctionName","temperature","Field","String","nullable","Number","InputType","import_type_graphql","AgentSessionInput","agentName","threadId","nodeName","Field","String","nullable","InputType","import_type_graphql","AgentStateInput","agentName","state","config","Field","String","nullable","InputType","import_type_graphql","ExtensionsInput","openaiAssistantAPI","Field","OpenAIApiAssistantAPIInput","nullable","InputType","runId","threadId","String","import_type_graphql","import_type_graphql","import_type_graphql","import_type_graphql","MessageStatusCode","registerEnumType","name","BaseMessageStatus","code","Field","ObjectType","PendingMessageStatus","SuccessMessageStatus","FailedMessageStatus","reason","String","MessageStatusUnion","createUnionType","types","import_type_graphql","ResponseStatusCode","registerEnumType","name","BaseResponseStatus","code","Field","InterfaceType","resolveType","value","SuccessResponseStatus","FailedResponseStatus","PendingResponseStatus","undefined","ObjectType","implements","FailedResponseStatusReason","reason","details","GraphQLJSON","nullable","ResponseStatusUnion","createUnionType","types","import_type_graphql","ExtensionsResponse","openaiAssistantAPI","Field","OpenAIApiAssistantAPIResponse","nullable","ObjectType","runId","threadId","String","BaseMessageOutput","id","createdAt","status","Field","String","Date","MessageStatusUnion","InterfaceType","resolveType","value","hasOwnProperty","TextMessageOutput","ActionExecutionMessageOutput","ResultMessageOutput","AgentStateMessageOutput","ImageMessageOutput","undefined","role","content","parentMessageId","MessageRole","nullable","ObjectType","implements","name","scope","arguments","deprecationReason","actionExecutionId","actionName","result","threadId","agentName","nodeName","runId","active","state","running","Boolean","format","bytes","CopilotResponse","messages","extensions","metaEvents","ResponseStatusUnion","ExtensionsResponse","BaseMetaEvent","MetaEventName","registerEnumType","name","description","BaseMetaEvent","type","Field","String","InterfaceType","resolveType","value","LangGraphInterruptEvent","CopilotKitLangGraphInterruptEvent","undefined","CopilotKitLangGraphInterruptEventData","messages","BaseMessageOutput","ObjectType","response","nullable","implements","data","MetaEventInput","name","value","response","messages","Field","MetaEventName","String","nullable","MessageInput","InputType","GenerateCopilotResponseMetadataInput","requestType","Field","CopilotRequestType","nullable","InputType","GenerateCopilotResponseInput","metadata","threadId","runId","messages","frontend","cloud","forwardedParameters","agentSession","agentState","agentStates","extensions","metaEvents","String","MessageInput","FrontendInput","CloudInput","ForwardedParametersInput","AgentSessionInput","AgentStateInput","ExtensionsInput","MetaEventInput","import_shared","import_rxjs","import_shared","import_shared","import_node_crypto","LangGraphEventTypes","MetaEventNames","CustomEventNames","import_shared","RemoteLangGraphEventSource","eventStream$","ReplaySubject","shouldEmitToolCall","shouldEmitToolCalls","toolCallName","Array","isArray","includes","getCurrentContent","event","content","data","chunk","kwargs","toolCallChunks","getCurrentToolCallChunks","args","length","text","getCurrentMessageId","id","tool_call_chunks","getResponseMetadata","response_metadata","processLangGraphEvents","lastEventWithState","pipe","scan","acc","LangGraphEventTypes","OnChatModelStream","prevMessageId","lastMessageId","currentContent","responseMetadata","toolCallCheck","isToolCallEnd","finish_reason","isToolCallStart","some","name","isMessageStart","previousRoundHadToolCall","isToolCall","isMessageEnd","lastToolCallName","lastToolCallId","find","processedToolCallIds","Set","mergeMap","events","shouldEmitMessages","metadata","OnInterrupt","push","type","RuntimeEventTypes","MetaEvent","RuntimeMetaEventName","LangGraphInterruptEvent","value","OnCopilotKitInterrupt","CopilotKitLangGraphInterruptEvent","has","add","ActionExecutionEnd","actionExecutionId","TextMessageEnd","messageId","OnCustomEvent","CustomEventNames","CopilotKitManuallyEmitMessage","TextMessageStart","message_id","TextMessageContent","message","CopilotKitManuallyEmitToolCall","ActionExecutionStart","actionName","parentMessageId","ActionExecutionArgs","JSON","stringify","OnCopilotKitStateSync","AgentStateMessage","threadId","thread_id","role","agentName","agent_name","nodeName","node_name","runId","run_id","active","state","running","clear","catchError","error","console","CopilotKitError","randomId","import_shared","import_shared","import_messages","RETRY_CONFIG","maxRetries","baseDelayMs","maxDelayMs","retryableStatusCodes","retryableErrorMessages","isRetryableError","error","response","includes","status","errorCode","cause","code","errorMessage","message","toLowerCase","some","msg","sleep","ms","Promise","resolve","setTimeout","calculateDelay","attempt","delay","Math","pow","min","fetchWithRetry","url","options","logger","lastError","fetch","warn","String","activeInterruptEvent","execute","args","ReadableStream","start","controller","lastError","attempt","RETRY_CONFIG","maxRetries","streamEvents","close","err","isRetryableError","delay","calculateDelay","console","warn","message","String","sleep","cause","errorCode","code","CopilotKitMisuseError","deploymentUrl","langsmithApiKey","threadId","argsInitialThreadId","agent","nodeName","initialNodeName","state","initialState","config","explicitConfig","messages","actions","logger","properties","metaEvents","name","assistantId","initialAssistantId","propertyHeaders","authorization","client","LangGraphClient","apiUrl","apiKey","defaultHeaders","randomUUID","startsWith","substring","isValidUUID","wasInitiatedWithExistingThread","threads","get","error","create","agentState","values","getState","agentStateValues","mode","undefined","formattedMessages","copilotkitMessagesToLangChain","e","langGraphDefaultMergeState","streamInput","payload","input","streamMode","command","lgInterruptMetaEvent","find","ev","MetaEventName","LangGraphInterruptEvent","resume","response","parseJson","updateState","asNode","streamInfo","hashedLgcKey","createHash","update","digest","assistants","search","retrievedAssistant","a","assistant_id","telemetry","capture","length","map","join","Error","graphInfo","getGraph","graphSchema","getSchemas","schemaKeys","getSchemaKeys","filteredConfigurable","configurable","filterObjectBySchemaKeys","newConfig","isRecursionLimitSetToDefault","recursion_limit","configsAreDifferent","JSON","stringify","isOnlyRecursionLimitDifferent","streamingStateExtractor","StreamingStateExtractor","prevNodeName","emitIntermediateStateUntilEnd","shouldExit","externalRunId","streamResponse","runs","stream","emit","enqueue","TextEncoder","encode","latestStateValues","updatedState","manuallyEmittedState","streamResponseChunk","includes","event","data","chunk","interruptEvents","__interrupt__","interruptValue","value","evValue","__copilotkit_interrupt_value__","LangGraphEventTypes","OnCopilotKitInterrupt","langchainMessagesToCopilotKit","__copilotkit_messages__","OnInterrupt","chunkData","currentNodeName","metadata","langgraph_node","eventType","runId","run_id","output","model","provider","langgraph_host","langGraphHost","langgraph_version","langGraphVersion","OnCustomEvent","CustomEventNames","CopilotKitExit","emitIntermediateState","manuallyEmitIntermediateState","CopilotKitManuallyEmitIntermediateState","exitingNode","OnChainEnd","some","node","id","getStateSyncEvent","agentName","running","active","OnChatModelStart","OnChatModelStream","bufferToolCalls","extractState","interrupts","tasks","Object","keys","writes","isEndNode","next","includeMessages","Promise","resolve","reduce","acc","key","OnCopilotKitStateSync","thread_id","agent_name","node_name","role","toolCallBuffer","currentToolCall","previouslyParsableState","constructor","tool_call_chunks","getEmitStateConfig","currentToolName","stateKey","tool","toolArgument","entries","argumentName","parsedValue","parsePartialJson","slice","existingMessages","existingMessageIds","Set","messageIds","removedMessages","filter","m","has","RemoveMessage","newMessages","copilotkit","result","tool_call_names","type","tool_call","tool_calls","content","Array","text","push","arguments","parentMessageId","actionName","tool_call_id","actionExecutionId","resultsDict","msg","reorderedResult","msgId","processedActionExecutions","isTextMessage","MessageRole","user","system","assistant","isImageMessage","isActionExecutionMessage","messageId","add","relatedActionExecutions","isResultMessage","CONSTANT_KEYS","configSchema","config_schema","input_schema","output_schema","inputSchema","outputSchema","obj","fromEntries","import_shared","import_shared","writeJsonLineResponseToEventStream","response","eventStream$","reader","getReader","decoder","TextDecoder","buffer","flushBuffer","currentBuffer","join","trim","length","parts","split","lastPartIsComplete","endsWith","push","pop","map","part","filter","forEach","next","JSON","parse","done","value","read","decode","stream","error","console","structuredError","convertStreamingErrorToStructured","complete","message","includes","cause","code","CopilotKitError","CopilotKitErrorCode","NETWORK_ERROR","CopilotKitLowLevelError","Error","String","url","UNKNOWN","import_shared","constructLGCRemoteAction","endpoint","graphqlContext","logger","messages","agentStates","agents","map","agent","name","description","parameters","handler","_args","remoteAgentHandler","actionInputsWithoutAgents","threadId","nodeName","additionalMessages","metaEvents","debug","actionName","telemetry","capture","agentExecution","type","agentsAmount","length","hashedLgcKey","langsmithApiKey","createHash","update","digest","state","config","jsonState","find","agentName","parseJson","response","execute","child","component","deploymentUrl","properties","actions","tryMap","action","JSON","parse","jsonSchema","eventSource","RemoteLangGraphEventSource","writeJsonLineResponseToEventStream","eventStream$","processLangGraphEvents","error","url","status","body","message","Error","RemoteAgentType","constructRemoteActions","json","onBeforeRequest","totalAgents","Array","isArray","args","headers","createHeaders","fetchUrl","fetchWithRetry","method","stringify","arguments","ok","text","CopilotKitApiDiscoveryError","ResolvedCopilotKitError","isRemoteEndpoint","requestResult","result","CopilotKitError","CopilotKitLowLevelError","RuntimeEventSubject","additionalHeaders","ctx","Object","assign","import_shared","import_shared","constructAGUIRemoteAction","logger","messages","agentStates","agent","metaEvents","action","name","agentId","description","parameters","handler","_args","remoteAgentHandler","actionInputsWithoutAgents","threadId","debug","actionName","agentWireMessages","convertMessagesToAGUIMessage","telemetry","capture","agentExecution","type","agentsAmount","state","jsonState","find","agentName","parseJson","tools","map","input","JSON","parse","jsonSchema","forwardedProps","length","command","resume","response","undefined","legacy_to_be_removed_runAgentBridged","result","message","isTextMessage","push","id","role","content","isActionExecutionMessage","toolCall","function","arguments","stringify","parentMessageId","some","m","parentMessage","toolCalls","isResultMessage","toolCallId","actionExecutionId","EndpointType","isRemoteAgentAction","action","remoteAgentHandler","fetchRemoteInfo","url","onBeforeRequest","graphqlContext","logger","frontendUrl","debug","headers","createHeaders","fetchUrl","response","fetch","method","body","JSON","stringify","properties","ok","error","status","text","ResolvedCopilotKitError","isRemoteEndpoint","json","CopilotKitError","CopilotKitLowLevelError","setupRemoteActions","remoteEndpointDefinitions","messages","agentStates","agents","metaEvents","child","component","filtered","filter","value","index","self","type","findIndex","t","result","Promise","all","map","endpoint","constructLGCRemoteAction","constructRemoteActions","key","agent","Object","entries","agentId","undefined","message","code","CopilotKitErrorCode","UNKNOWN","push","constructAGUIRemoteAction","flat","import_node_crypto","import_shared","RemoteChain","name","description","chainUrl","parameters","parameterType","constructor","options","toAction","inferLangServeParameters","handler","args","runnable","RemoteRunnable","url","input","Object","keys","invoke","supportedTypes","schemaUrl","replace","schema","fetch","then","res","json","catch","Error","includes","type","properties","map","key","property","required","limitMessagesToTokenCount","messages","tools","model","maxTokens","MAX_TOKENS","result","toolsNumTokens","countToolsTokens","Error","message","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","length","json","JSON","stringify","countTokens","content","text","convertActionInputToAnthropicTool","action","name","description","input_schema","parse","jsonSchema","convertMessageToAnthropicMessage","isTextMessage","type","isImageMessage","mediaType","format","source","media_type","data","bytes","isActionExecutionMessage","id","input","arguments","isResultMessage","tool_use_id","actionExecutionId","import_shared","DEFAULT_MODEL","AnthropicAdapter","model","_anthropic","anthropic","constructor","params","Anthropic","process","request","threadId","messages","rawMessages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToAnthropicTool","instructionsMessage","shift","instructions","isTextMessage","content","validToolUseIds","Set","message","isActionExecutionMessage","add","id","anthropicMessages","isResultMessage","has","actionExecutionId","delete","role","type","result","tool_use_id","convertMessageToAnthropicMessage","filter","Boolean","msg","Array","isArray","hasEmptyTextOnly","length","text","trim","limitedMessages","limitMessagesToTokenCount","toolChoice","name","toolChoiceFunctionName","createParams","system","max_tokens","maxTokens","temperature","tool_choice","stream","create","eventStream$","mode","didOutputText","currentMessageId","randomId","currentToolCallId","filterThinkingTextBuffer","FilterThinkingTextBuffer","chunk","content_block","reset","sendActionExecutionStart","actionName","parentMessageId","delta","onTextChunk","sendTextMessageStart","messageId","sendTextMessageContent","sendActionExecutionArgs","args","partial_json","sendTextMessageEnd","sendActionExecutionEnd","error","console","complete","randomUUID","THINKING_TAG","THINKING_TAG_END","buffer","didFilterThinkingTag","potentialTag","slice","startsWith","includes","end","indexOf","filteredText","import_shared","DEFAULT_MODEL","ExperimentalOllamaAdapter","model","constructor","options","process","request","messages","actions","eventSource","ollama","Ollama","contents","filter","m","isTextMessage","map","content","_stream","stream","eventStream$","currentMessageId","randomId","sendTextMessageStart","messageId","chunkText","sendTextMessageContent","sendTextMessageEnd","complete","threadId","randomUUID","BedrockAdapter","LangChainAdapter","constructor","options","chainFn","messages","tools","threadId","model","ChatBedrockConverse","region","credentials","accessKeyId","secretAccessKey","undefined","bindTools","stream","import_shared","EmptyAdapter","process","request","threadId","randomUUID","ExperimentalEmptyAdapter","Message","BaseMessageInput","type","isTextMessage","isActionExecutionMessage","isResultMessage","isAgentStateMessage","isImageMessage","TextMessage","content","role","parentMessageId","ActionExecutionMessage","name","arguments","ResultMessage","actionExecutionId","actionName","result","encodeResult","error","errorObj","code","message","Error","undefined","JSON","stringify","decodeResult","parsed","parse","e","hasError","getError","AgentStateMessage","threadId","agentName","nodeName","runId","active","state","running","ImageMessage","format","bytes","import_shared","convertGqlInputToMessages","inputMessages","messages","tryMap","message","textMessage","plainToInstance","TextMessage","id","createdAt","role","content","parentMessageId","imageMessage","ImageMessage","bytes","format","actionExecutionMessage","ActionExecutionMessage","name","arguments","JSON","parse","resultMessage","ResultMessage","actionExecutionId","actionName","result","agentStateMessage","AgentStateMessage","threadId","agentName","nodeName","runId","active","state","running","filter","m","import_rxjs","import_langgraph_sdk","extractParametersFromSchema","toolOrSchema","parameters","schema","toolParameters","jsonSchema","properties","requiredParams","Set","required","paramName","Object","prototype","hasOwnProperty","call","paramDef","push","name","type","description","has","convertMCPToolsToActions","mcpTools","mcpEndpoint","actions","toolName","tool","entries","handler","params","result","execute","JSON","stringify","error","console","Error","message","String","_isMCPTool","_mcpEndpoint","generateMcpToolInstructions","toolsMap","keys","length","toolEntries","toolsDoc","map","paramsDoc","paramsList","propSchema","propDetails","requiredMark","includes","typeInfo","join","e","CopilotRuntime","actions","agents","remoteEndpointDefinitions","langserve","onBeforeRequest","onAfterRequest","delegateAgentProcessingToServiceAdapter","observability","availableAgents","onTrace","hasWarnedAboutTracing","mcpServersConfig","mcpActionCache","Map","createMCPClientImpl","constructor","params","remoteEndpoints","some","e","type","EndpointType","LangGraphPlatform","console","warn","chain","remoteChain","RemoteChain","push","toAction","remoteActions","middleware","observability_c","mcpServers","createMCPClient","length","CopilotKitMisuseError","message","injectMCPToolInstructions","messages","currentActions","mcpActionsForRequest","filter","action","_isMCPTool","uniqueMcpTools","forEach","set","name","toolsMap","Array","from","values","description","schema","parameters","properties","reduce","acc","p","required","map","execute","mcpToolInstructions","generateMcpToolInstructions","instructions","systemMessageIndex","findIndex","msg","textMessage","role","newMessages","existingMsg","content","unshift","id","randomId","createdAt","Date","MessageRole","system","actionExecutionMessage","undefined","resultMessage","agentStateMessage","processRuntimeRequest","request","serviceAdapter","rawMessages","clientSideActionsInput","threadId","runId","outputMessagesPromise","graphqlContext","forwardedParameters","url","extensions","agentSession","agentStates","publicApiKey","eventSource","RuntimeEventSource","requestStartTime","now","streamedChunks","trace","source","operation","method","startTime","agent","agentName","input","messageCount","technical","environment","process","env","NODE_ENV","Object","keys","processAgentRequest","EmptyAdapter","serverSideActions","getServerSideActions","filteredRawMessages","messagesWithInjectedInstructions","inputMessages","convertGqlInputToMessages","enabled","requestData","model","timestamp","provider","detectProvider","hooks","handleRequest","error","serverSideActionsInput","jsonSchema","JSON","stringify","actionParametersToJsonSchema","actionInputs","flattenToolCallsNoDuplicates","available","ActionInputAvailability","remote","result","nonEmptyThreadId","then","outputMessages","_a","catch","_error","responseData","output","progressive","latency","isFinalResponse","handleResponse","logError","originalStream","stream","bind","callback","eventStream$","subscribe","next","event","RuntimeEventTypes","TextMessageContent","progressiveData","isProgressiveChunk","Promise","resolve","actionInputsWithoutAgents","find","serverSideAction","errorData","Error","String","handleError","structuredError","CopilotKitError","convertStreamingErrorToStructured","response","endTime","stackTrace","stack","discoverAgentsFromEndpoints","endpoint","propertyHeaders","authorization","client","LangGraphClient","apiUrl","deploymentUrl","apiKey","langsmithApiKey","defaultHeaders","data","assistants","search","detail","toLowerCase","CopilotKitAgentDiscoveryError","endpointAgents","entry","graph_id","assistant_id","cpkEndpoint","fetchUrl","fetchWithRetry","headers","createHeaders","body","ok","status","CopilotKitApiDiscoveryError","ResolvedCopilotKitError","isRemoteEndpoint","json","CopilotKitLowLevelError","a","loadAgentState","agentsWithEndpoints","agentWithEndpoint","state","threads","getState","threadExists","stateWithoutMessages","copilotkitMessages","langchainMessagesToCopilotKit","CopilotKit","threadIdFromRequest","metaEvents","nodeName","currentAgent","isRemoteAgentAction","availableActionsForCurrentAgent","allAvailableActions","remoteAgentHandler","err","complete","langserveFunctions","chainPromise","resolveEndpointType","setupRemoteActions","frontendUrl","configuredActions","requestSpecificMCPActions","baseEndpoints","requestEndpoints","mcpEndpoints","effectiveEndpointsMap","ep","effectiveEndpoints","config","endpointUrl","actionsForEndpoint","get","tools","convertMCPToolsToActions","adapterName","includes","cause","code","CopilotKitErrorCode","NETWORK_ERROR","UNKNOWN","context","traceEvent","traceError","traceGraphQLError","metadata","errorType","cloudConfigPresent","guardrailsEnabled","toolsByPriority","allTools","allToolNames","tool","copilotKitEndpoint","langGraphPlatformEndpoint","packageJson","require","telemetryClient","TelemetryClient","packageName","name","packageVersion","version","getRuntimeInstanceTelemetryInfo","options","runtime","endpointsInfo","remoteEndpointDefinitions","reduce","acc","endpoint","info","endpointType","resolveEndpointType","endpointTypes","includes","EndpointType","LangGraphPlatform","ep","agentsAmount","agents","length","hashedKey","langsmithApiKey","createHash","update","digest","publicApiKey","cloud","apiKeyProvided","trim","actionsAmount","actions","endpointsAmount","hashedLgcKey","baseUrl","import_class_transformer","RuntimeEventTypes","RuntimeMetaEventName","RuntimeEventSubject","ReplaySubject","constructor","sendTextMessageStart","messageId","parentMessageId","next","type","sendTextMessageContent","content","sendTextMessageEnd","sendTextMessage","sendActionExecutionStart","actionExecutionId","actionName","sendActionExecutionArgs","args","sendActionExecutionEnd","sendActionExecution","sendActionExecutionResult","result","error","ResultMessage","encodeResult","sendAgentStateMessage","threadId","agentName","nodeName","runId","active","role","state","running","RuntimeEventSource","eventStream$","callback","stream","sendErrorMessageToChat","message","errorMessage","randomId","processRuntimeEvents","serverSideActions","guardrailsResult$","actionInputsWithoutAgents","catch","console","structuredError","convertStreamingErrorToStructured","complete","pipe","scan","acc","event","callActionServerSide","find","action","name","undefined","actionExecutionParentMessageId","concatMap","eventWithState","toolCallEventStream$","executeAction","telemetry","capture","concat","of","catchError","code","EMPTY","actionArguments","status","firstValueFrom","JSON","parse","e","isRemoteAgentAction","agentExecution","plainToInstance","ActionExecutionMessage","id","createdAt","Date","arguments","agentExecutionResult","remoteAgentHandler","additionalMessages","from","subscribe","err","handler","streamLangChainResponse","actionExecution","includes","cause","CopilotKitError","CopilotKitErrorCode","NETWORK_ERROR","CopilotKitLowLevelError","Error","String","url","UNKNOWN","toLowerCase","MISSING_PUBLIC_API_KEY_ERROR","import_graphql_scalars","import_class_transformer","GuardrailsValidationFailureResponse","FailedResponseStatus","reason","FailedResponseStatusReason","GUARDRAILS_VALIDATION_FAILED","constructor","guardrailsReason","details","MessageStreamInterruptedResponse","MESSAGE_STREAM_INTERRUPTED","messageId","description","UnknownErrorResponse","UNKNOWN_ERROR","import_shared","import_type_graphql","Agent","id","name","description","Field","String","ObjectType","AgentsResponse","agents","import_shared","invokeGuardrails","baseUrl","copilotCloudPublicApiKey","data","onResult","onError","messages","length","textMessage","role","MessageRole","user","filter","m","undefined","assistant","map","content","lastMessage","restOfMessages","slice","body","input","validTopics","cloud","guardrails","inputValidationRules","allowList","invalidTopics","denyList","guardrailsResult","fetch","method","headers","JSON","stringify","ok","resultJson","json","CopilotResolver","hello","availableAgents","ctx","logger","child","component","debug","agentsWithEndpoints","_copilotkit","runtime","discoverAgentsFromEndpoints","agents","endpoint","agentWithoutEndpoint","generateCopilotResponse","properties","telemetry","capture","requestType","metadata","request","get","copilotRuntime","serviceAdapter","copilotCloudBaseUrl","publicApiKeyFromHeaders","error","traceGraphQLError","message","code","type","operation","cloudConfigPresent","Boolean","guardrailsEnabled","GraphQLError","process","env","COPILOT_CLOUD_BASE_URL","responseStatus$","ReplaySubject","interruptStreaming$","guardrailsResult$","outputMessages","resolveOutputMessagesPromise","rejectOutputMessagesPromise","outputMessagesPromise","Promise","resolve","reject","eventSource","threadId","randomId","runId","serverSideActions","actionInputsWithoutAgents","extensions","processRuntimeRequest","actions","frontend","action","available","ActionInputAvailability","disabled","publicApiKey","graphqlContext","forwardedParameters","agentSession","agentStates","url","metaEvents","eventStream","processRuntimeEvents","find","serverSideAction","name","pipe","shareReplay","finalize","response","status","firstValueFrom","Repeater","push","stop","eventStreamSubscription","subscribe","next","event","RuntimeEventTypes","MetaEvent","LangGraphEventTypes","OnInterrupt","plainToInstance","LangGraphInterruptEvent","RuntimeMetaEventName","value","CopilotKitLangGraphInterruptEvent","TextMessage","id","createdAt","Date","SuccessMessageStatus","ActionExecutionMessage","arguments","Error","err","UnknownErrorResponse","description","unsubscribe","complete","SuccessResponseStatus","pushMessage","stopStreamingMessages","result","GuardrailsValidationFailureResponse","guardrailsReason","reason","TextMessageStart","textMessageContentStream","skipWhile","e","takeWhile","TextMessageEnd","messageId","TextMessageContent","streamingTextStatus","Subject","parentMessageId","pushTextChunk","stopStreamingText","textChunks","textSubscription","take","tap","FailedMessageStatus","MessageStreamInterruptedResponse","join","ActionExecutionStart","actionExecutionArgumentStream","ActionExecutionEnd","actionExecutionId","ActionExecutionArgs","streamingArgumentsStatus","actionName","pushArgumentsChunk","stopStreamingArguments","argumentChunks","actionExecutionArgumentSubscription","args","ActionExecutionResult","ResultMessage","AgentStateMessage","agentName","nodeName","active","state","running","CopilotKitError","includes","Query","String","AgentsResponse","Ctx","Mutation","CopilotResponse","Arg","GraphQLJSONObject","nullable","Resolver","createLogger","options","level","component","stream","pretty","colorize","logger","createPinoLogger","process","env","LOG_LEVEL","redact","paths","remove","child","import_type_graphql","import_type_graphql","LoadAgentStateResponse","threadId","threadExists","state","messages","Field","String","Boolean","ObjectType","import_type_graphql","LoadAgentStateInput","threadId","agentName","Field","String","InputType","import_shared","StateResolver","loadAgentState","ctx","data","agents","_copilotkit","runtime","discoverAgentsFromEndpoints","agent","find","name","agentName","CopilotKitAgentDiscoveryError","availableAgents","map","a","id","state","threadId","Query","LoadAgentStateResponse","Ctx","Arg","Resolver","packageJson","logger","createLogger","addCustomHeaderPlugin","onResponse","response","headers","set","version","createContext","initialContext","copilotKitContext","contextLogger","properties","debug","ctx","_copilotkit","buildSchema","options","schema","buildSchemaSync","resolvers","CopilotResolver","StateResolver","emitSchemaFile","getCommonConfig","logLevel","process","env","LOG_LEVEL","level","component","cloud","telemetry","setCloudConfiguration","publicApiKey","baseUrl","setGlobalProperties","runtime","serviceAdapter","constructor","name","logging","plugins","useDeferStream","context","import_graphql_yoga","copilotRuntimeNextJSAppRouterEndpoint","options","commonConfig","getCommonConfig","telemetry","setGlobalProperties","runtime","framework","properties","_copilotkit","capture","getRuntimeInstanceTelemetryInfo","logger","logging","debug","yoga","createYoga","graphqlEndpoint","endpoint","fetchAPI","Response","globalThis","handleRequest","GET","POST","OPTIONS","import_graphql_yoga","config","api","bodyParser","copilotRuntimeNextJSPagesRouterEndpoint","options","commonConfig","getCommonConfig","telemetry","setGlobalProperties","runtime","framework","properties","_copilotkit","capture","getRuntimeInstanceTelemetryInfo","logger","logging","debug","yoga","createYoga","graphqlEndpoint","endpoint","import_graphql_yoga","copilotRuntimeNodeHttpEndpoint","options","commonConfig","getCommonConfig","telemetry","setGlobalProperties","runtime","framework","properties","_copilotkit","capture","getRuntimeInstanceTelemetryInfo","logger","logging","debug","yoga","createYoga","graphqlEndpoint","endpoint","copilotRuntimeNodeExpressEndpoint","options","telemetry","setGlobalProperties","runtime","framework","capture","getRuntimeInstanceTelemetryInfo","copilotRuntimeNodeHttpEndpoint","copilotRuntimeNestEndpoint","options","telemetry","setGlobalProperties","runtime","framework","capture","getRuntimeInstanceTelemetryInfo","copilotRuntimeNodeHttpEndpoint","import_rxjs","CustomEventNames","LangGraphAgent","AGUILangGraphAgent","constructor","config","dispatchEvent","event","type","EventType","CUSTOM","customEvent","name","subscriber","next","TEXT_MESSAGE_START","role","messageId","value","message_id","rawEvent","TEXT_MESSAGE_CONTENT","delta","message","TEXT_MESSAGE_END","TOOL_CALL_START","toolCallId","id","toolCallName","parentMessageId","TOOL_CALL_ARGS","args","TOOL_CALL_END","activeRun","manuallyEmittedState","STATE_SNAPSHOT","snapshot","getStateSnapshot","isMessageEvent","isToolEvent","metadata","run","input","pipe","map","processedEvent","RAW","eventType","toolCallData","data","chunk","tool_call_chunks","toolCallUsedToPredictState","some","predictStateTool","tool","LangGraphEventTypes","OnChatModelStream","langGraphDefaultMergeState","state","messages","tools","returnedTools","rest","copilotkit","actions"]}
1
+ {"version":3,"sources":["../package.json","../src/index.ts","../src/service-adapters/openai/openai-adapter.ts","../src/service-adapters/openai/utils.ts","../src/service-adapters/langchain/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/google/google-genai-adapter.ts","../src/service-adapters/openai/openai-assistant-adapter.ts","../src/service-adapters/unify/unify-adapter.ts","../src/service-adapters/groq/groq-adapter.ts","../src/lib/integrations/shared.ts","../src/graphql/resolvers/copilot.resolver.ts","../src/graphql/inputs/generate-copilot-response.input.ts","../src/graphql/inputs/message.input.ts","../src/graphql/types/enums.ts","../src/graphql/types/base/index.ts","../src/graphql/inputs/frontend.input.ts","../src/graphql/inputs/action.input.ts","../src/graphql/inputs/cloud.input.ts","../src/graphql/inputs/cloud-guardrails.input.ts","../src/graphql/inputs/forwarded-parameters.input.ts","../src/graphql/inputs/agent-session.input.ts","../src/graphql/inputs/agent-state.input.ts","../src/graphql/inputs/extensions.input.ts","../src/graphql/inputs/meta-event.input.ts","../src/graphql/types/meta-events.type.ts","../src/graphql/types/copilot-response.type.ts","../src/graphql/types/message-status.type.ts","../src/graphql/types/response-status.type.ts","../src/graphql/types/extensions-response.type.ts","../src/service-adapters/events.ts","../src/lib/telemetry-client.ts","../src/lib/runtime/remote-actions.ts","../src/lib/runtime/remote-action-constructors.ts","../src/agents/langgraph/event-source.ts","../src/agents/langgraph/events.ts","../src/lib/runtime/remote-lg-action.ts","../src/lib/runtime/retry-utils.ts","../src/lib/streaming.ts","../src/lib/runtime/agui-action.ts","../src/lib/runtime/copilot-runtime.ts","../src/service-adapters/langchain/langserve.ts","../src/service-adapters/anthropic/anthropic-adapter.ts","../src/service-adapters/anthropic/utils.ts","../src/service-adapters/experimental/ollama/ollama-adapter.ts","../src/service-adapters/bedrock/bedrock-adapter.ts","../src/service-adapters/empty/empty-adapter.ts","../src/graphql/types/converted/index.ts","../src/service-adapters/conversion.ts","../src/lib/runtime/mcp-tools-utils.ts","../src/utils/failed-response-status-reasons.ts","../src/graphql/types/agents-response.type.ts","../src/lib/logger.ts","../src/graphql/resolvers/state.resolver.ts","../src/graphql/types/load-agent-state-response.type.ts","../src/graphql/inputs/load-agent-state.input.ts","../src/lib/integrations/nextjs/app-router.ts","../src/lib/integrations/nextjs/pages-router.ts","../src/lib/integrations/node-http/index.ts","../src/lib/integrations/node-express/index.ts","../src/lib/integrations/nest/index.ts","../src/lib/runtime/langgraph/langgraph-agent.ts"],"sourcesContent":["{\n \"name\": \"@copilotkit/runtime\",\n \"private\": false,\n \"homepage\": \"https://github.com/CopilotKit/CopilotKit\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/CopilotKit/CopilotKit.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"version\": \"1.9.2-next.5\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"dev\": \"tsup --watch --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"test\": \"jest --passWithNoTests\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist && rm -rf .next && rm -rf __snapshots__\",\n \"generate-graphql-schema\": \"rm -rf __snapshots__ && ts-node ./scripts/generate-gql-schema.ts\",\n \"link:global\": \"pnpm link --global\",\n \"unlink:global\": \"pnpm unlink --global\"\n },\n \"devDependencies\": {\n \"@jest/globals\": \"^29.7.0\",\n \"@swc/core\": \"1.5.28\",\n \"@types/express\": \"^4.17.21\",\n \"@types/jest\": \"^29.5.12\",\n \"@types/node\": \"^18.11.17\",\n \"@whatwg-node/server\": \"^0.9.34\",\n \"eslint\": \"^8.56.0\",\n \"eslint-config-custom\": \"workspace:*\",\n \"jest\": \"^29.6.4\",\n \"nodemon\": \"^3.1.3\",\n \"ts-jest\": \"^29.1.1\",\n \"ts-node\": \"^10.9.2\",\n \"tsconfig\": \"workspace:*\",\n \"tsup\": \"^6.7.0\",\n \"typescript\": \"^5.2.3\",\n \"zod-to-json-schema\": \"^3.23.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.28\",\n \"@ag-ui/core\": \"0.0.28\",\n \"@ag-ui/encoder\": \"0.0.28\",\n \"@ag-ui/langgraph\": \"0.0.4\",\n \"@ag-ui/proto\": \"0.0.28\",\n \"@anthropic-ai/sdk\": \"^0.27.3\",\n \"@copilotkit/shared\": \"workspace:*\",\n \"@graphql-yoga/plugin-defer-stream\": \"^3.3.1\",\n \"@langchain/aws\": \"^0.1.9\",\n \"@langchain/community\": \"^0.3.29\",\n \"@langchain/core\": \"^0.3.38\",\n \"@langchain/google-gauth\": \"^0.1.0\",\n \"@langchain/langgraph-sdk\": \"^0.0.70\",\n \"@langchain/openai\": \"^0.4.2\",\n \"class-transformer\": \"^0.5.1\",\n \"class-validator\": \"^0.14.1\",\n \"express\": \"^4.19.2\",\n \"graphql\": \"^16.8.1\",\n \"graphql-scalars\": \"^1.23.0\",\n \"graphql-yoga\": \"^5.3.1\",\n \"groq-sdk\": \"^0.5.0\",\n \"langchain\": \"^0.3.3\",\n \"openai\": \"^4.85.1\",\n \"partial-json\": \"^0.1.7\",\n \"pino\": \"^9.2.0\",\n \"pino-pretty\": \"^11.2.1\",\n \"reflect-metadata\": \"^0.2.2\",\n \"rxjs\": \"7.8.1\",\n \"type-graphql\": \"2.0.0-rc.1\",\n \"zod\": \"^3.23.3\"\n },\n \"peerDependencies\": {\n \"@ag-ui/client\": \">=0.0.28\",\n \"@ag-ui/core\": \">=0.0.28\",\n \"@ag-ui/encoder\": \">=0.0.28\",\n \"@ag-ui/proto\": \">=0.0.28\"\n },\n \"keywords\": [\n \"copilotkit\",\n \"copilot\",\n \"react\",\n \"nextjs\",\n \"nodejs\",\n \"ai\",\n \"assistant\",\n \"javascript\",\n \"automation\",\n \"textarea\"\n ]\n}\n","import \"reflect-metadata\";\nexport * from \"./lib\";\nexport * from \"./utils\";\nexport * from \"./service-adapters\";\n","/**\n * Copilot Runtime adapter for OpenAI.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\", // optional\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n *\n * ## Example with Azure OpenAI\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * // The name of your Azure OpenAI Instance.\n * // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource\n * const instance = \"<your instance name>\";\n *\n * // Corresponds to your Model deployment within your OpenAI resource, e.g. my-gpt35-16k-deployment\n * // Navigate to the Azure OpenAI Studio to deploy a model.\n * const model = \"<your model>\";\n *\n * const apiKey = process.env[\"AZURE_OPENAI_API_KEY\"];\n * if (!apiKey) {\n * throw new Error(\"The AZURE_OPENAI_API_KEY environment variable is missing or empty.\");\n * }\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * apiKey,\n * baseURL: `https://${instance}.openai.azure.com/openai/deployments/${model}`,\n * defaultQuery: { \"api-version\": \"2024-04-01-preview\" },\n * defaultHeaders: { \"api-key\": apiKey },\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n */\nimport OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be\n * created.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private disableParallelToolCalls: boolean = false;\n private _openai: OpenAI;\n private keepSystemRole: boolean = false;\n\n public get openai(): OpenAI {\n return this._openai;\n }\n\n constructor(params?: OpenAIAdapterParams) {\n this._openai = params?.openai || new OpenAI({});\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId: threadIdFromRequest,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n const threadId = threadIdFromRequest ?? randomUUID();\n\n // ALLOWLIST APPROACH: Only include tool_result messages that correspond to valid tool_calls\n // Step 1: Extract valid tool_call IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Filter messages, keeping only those with valid tool_call IDs\n const filteredMessages = messages.filter((message) => {\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_call\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return false;\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n return true;\n }\n\n // Keep all non-tool-result messages\n return true;\n });\n\n let openaiMessages = filteredMessages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n\n try {\n const stream = this.openai.beta.chat.completions.stream({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && { max_tokens: forwardedParameters.maxTokens }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n if (chunk.choices.length === 0) {\n continue;\n }\n\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.id,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n } catch (error) {\n console.error(\"[OpenAI] Error processing stream:\", error);\n throw error;\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw error;\n }\n\n return {\n threadId,\n };\n }\n}\n","import { Message } from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport {\n ChatCompletionAssistantMessageParam,\n ChatCompletionMessageParam,\n ChatCompletionSystemMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionDeveloperMessageParam,\n} from \"openai/resources/chat\";\nimport { parseJson } from \"@copilotkit/shared\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= maxTokensForOpenAIModel(model);\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nexport function maxTokensForOpenAIModel(model: string): number {\n return maxTokensByModel[model] || DEFAULT_MAX_TOKENS;\n}\n\nconst DEFAULT_MAX_TOKENS = 128000;\n\nconst maxTokensByModel: { [key: string]: number } = {\n // o1\n o1: 200000,\n \"o1-2024-12-17\": 200000,\n \"o1-mini\": 128000,\n \"o1-mini-2024-09-12\": 128000,\n \"o1-preview\": 128000,\n \"o1-preview-2024-09-12\": 128000,\n // o3-mini\n \"o3-mini\": 200000,\n \"o3-mini-2025-01-31\": 200000,\n // GPT-4\n \"gpt-4o\": 128000,\n \"chatgpt-4o-latest\": 128000,\n \"gpt-4o-2024-08-06\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4o-mini\": 128000,\n \"gpt-4o-mini-2024-07-18\": 128000,\n \"gpt-4-turbo\": 128000,\n \"gpt-4-turbo-2024-04-09\": 128000,\n \"gpt-4-0125-preview\": 128000,\n \"gpt-4-turbo-preview\": 128000,\n \"gpt-4-1106-preview\": 128000,\n \"gpt-4-vision-preview\": 128000,\n \"gpt-4-1106-vision-preview\": 128000,\n \"gpt-4-32k\": 32768,\n \"gpt-4-32k-0613\": 32768,\n \"gpt-4-32k-0314\": 32768,\n \"gpt-4\": 8192,\n \"gpt-4-0613\": 8192,\n \"gpt-4-0314\": 8192,\n\n // GPT-3.5\n \"gpt-3.5-turbo-0125\": 16385,\n \"gpt-3.5-turbo\": 16385,\n \"gpt-3.5-turbo-1106\": 16385,\n \"gpt-3.5-turbo-instruct\": 4096,\n \"gpt-3.5-turbo-16k\": 16385,\n \"gpt-3.5-turbo-0613\": 4096,\n \"gpt-3.5-turbo-16k-0613\": 16385,\n \"gpt-3.5-turbo-0301\": 4097,\n};\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, message.content || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToOpenAITool(action: ActionInput): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: parseJson(action.jsonSchema, {}),\n },\n };\n}\n\ntype UsedMessageParams =\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionDeveloperMessageParam\n | ChatCompletionSystemMessageParam;\nexport function convertMessageToOpenAIMessage(\n message: Message,\n options?: { keepSystemRole: boolean },\n): ChatCompletionMessageParam {\n const { keepSystemRole } = options || { keepSystemRole: false };\n if (message.isTextMessage()) {\n let role = message.role as UsedMessageParams[\"role\"];\n if (message.role === \"system\" && !keepSystemRole) {\n role = \"developer\";\n }\n return {\n role,\n content: message.content,\n } satisfies UsedMessageParams;\n } else if (message.isImageMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"image_url\",\n image_url: {\n url: `data:image/${message.format};base64,${message.bytes}`,\n },\n },\n ],\n } satisfies UsedMessageParams;\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: message.id,\n type: \"function\",\n function: {\n name: message.name,\n arguments: JSON.stringify(message.arguments),\n },\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"tool\",\n content: message.result,\n tool_call_id: message.actionExecutionId,\n };\n }\n}\n\nexport function convertSystemMessageToAssistantAPI(message: ChatCompletionMessageParam) {\n return {\n ...message,\n ...([\"system\", \"developer\"].includes(message.role) && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(message: Message): BaseMessage {\n if (message.isTextMessage()) {\n if (message.role == \"user\") {\n return new HumanMessage(message.content);\n } else if (message.role == \"assistant\") {\n return new AIMessage(message.content);\n } else if (message.role === \"system\") {\n return new SystemMessage(message.content);\n }\n } else if (message.isActionExecutionMessage()) {\n return new AIMessage({\n content: \"\",\n tool_calls: [\n {\n id: message.id,\n args: message.arguments,\n name: message.name,\n },\n ],\n });\n } else if (message.isResultMessage()) {\n return new ToolMessage({\n content: message.result,\n tool_call_id: message.actionExecutionId,\n });\n }\n}\n\nexport function convertActionInputToLangChainTool(actionInput: ActionInput): any {\n return new DynamicStructuredTool({\n name: actionInput.name,\n description: actionInput.description,\n schema: convertJsonSchemaToZodSchema(\n JSON.parse(actionInput.jsonSchema),\n true,\n ) as z.ZodObject<any>,\n func: async () => {\n return \"\";\n },\n });\n}\n\ninterface StreamLangChainResponseParams {\n result: LangChainReturnType;\n eventStream$: RuntimeEventSubject;\n actionExecution?: {\n id: string;\n name: string;\n };\n}\n\nfunction getConstructorName(object: any): string {\n if (object && typeof object === \"object\" && object.constructor && object.constructor.name) {\n return object.constructor.name;\n }\n return \"\";\n}\n\nfunction isAIMessage(message: any): message is AIMessage {\n return Object.prototype.toString.call(message) === \"[object AIMessage]\";\n}\n\nfunction isAIMessageChunk(message: any): message is AIMessageChunk {\n return Object.prototype.toString.call(message) === \"[object AIMessageChunk]\";\n}\n\nfunction isBaseMessageChunk(message: any): message is BaseMessageChunk {\n return Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\";\n}\n\nfunction maybeSendActionExecutionResultIsMessage(\n eventStream$: RuntimeEventSubject,\n actionExecution?: { id: string; name: string },\n) {\n // language models need a result after the function call\n // we simply let them know that we are sending a message\n if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: \"Sending a message\",\n });\n }\n}\n\nexport async function streamLangChainResponse({\n result,\n eventStream$,\n actionExecution,\n}: StreamLangChainResponseParams) {\n // We support several types of return values from LangChain functions:\n\n // 1. string\n\n if (typeof result === \"string\") {\n if (!actionExecution) {\n // Just send one chunk with the string as the content.\n eventStream$.sendTextMessage(randomId(), result);\n } else {\n // Send as a result\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: result,\n });\n }\n }\n\n // 2. AIMessage\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isAIMessage(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n for (const toolCall of result.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n\n // 3. BaseMessageChunk\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isBaseMessageChunk(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.lc_kwargs?.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n if (result.lc_kwargs?.tool_calls) {\n for (const toolCall of result.lc_kwargs?.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n }\n\n // 4. IterableReadableStream\n // Stream the result of the LangChain function.\n else if (result && \"getReader\" in result) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n let reader = result.getReader();\n\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n\n const toolCallDetails = {\n name: null,\n id: null,\n index: null,\n prevIndex: null,\n };\n\n while (true) {\n try {\n const { done, value } = await reader.read();\n\n let toolCallName: string | undefined = undefined;\n let toolCallId: string | undefined = undefined;\n let toolCallArgs: string | undefined = undefined;\n let hasToolCall: boolean = false;\n let content = \"\";\n if (value && value.content) {\n content = Array.isArray(value.content)\n ? (((value.content[0] as any)?.text ?? \"\") as string)\n : value.content;\n }\n\n if (isAIMessageChunk(value)) {\n let chunk = value.tool_call_chunks?.[0];\n toolCallArgs = chunk?.args;\n hasToolCall = chunk != undefined;\n if (chunk?.name) toolCallDetails.name = chunk.name;\n // track different index on the same tool cool\n if (chunk?.index != null) {\n toolCallDetails.index = chunk.index; // 1\n if (toolCallDetails.prevIndex == null) toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id = chunk.index != null ? `${chunk.id}-idx-${chunk.index}` : chunk.id;\n\n // Assign to internal variables that the entire script here knows how to work with\n toolCallName = toolCallDetails.name;\n toolCallId = toolCallDetails.id;\n } else if (isBaseMessageChunk(value)) {\n let chunk = value.additional_kwargs?.tool_calls?.[0];\n toolCallName = chunk?.function?.name;\n toolCallId = chunk?.id;\n toolCallArgs = chunk?.function?.arguments;\n hasToolCall = chunk?.function != undefined;\n }\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCallName is defined, it means a new tool call starts.\n if (mode === \"message\" && (toolCallId || done)) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (!hasToolCall || done)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n }\n\n if (done) {\n break;\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (hasToolCall && toolCallId && toolCallName) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = value.lc_kwargs?.id || randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCallArgs) {\n // For calls of the same tool with different index, we seal last tool call and register a new one\n if (toolCallDetails.index !== toolCallDetails.prevIndex) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n toolCallDetails.prevIndex = toolCallDetails.index;\n }\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: toolCallId,\n args: toolCallArgs,\n });\n }\n } catch (error) {\n console.error(\"Error reading from stream\", error);\n break;\n }\n }\n } else if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: encodeResult(result),\n });\n }\n\n // unsupported type\n else {\n throw new Error(\"Invalid return type from LangChain function.\");\n }\n\n eventStream$.complete();\n}\n\nfunction encodeResult(result: any): string {\n if (result === undefined) {\n return \"\";\n } else if (typeof result === \"string\") {\n return result;\n } else {\n return JSON.stringify(result);\n }\n}\n","/**\n * Copilot Runtime adapter for LangChain.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, LangChainAdapter } from \"@copilotkit/runtime\";\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new LangChainAdapter({\n * chainFn: async ({ messages, tools }) => {\n * return model.bindTools(tools).stream(messages);\n * // or optionally enable strict mode\n * // return model.bindTools(tools, { strict: true }).stream(messages);\n * }\n * });\n * ```\n *\n * The asynchronous handler function (`chainFn`) can return any of the following:\n *\n * - A simple `string` response\n * - A LangChain stream (`IterableReadableStream`)\n * - A LangChain `BaseMessageChunk` object\n * - A LangChain `AIMessage` object\n */\n\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { CopilotServiceAdapter } from \"../service-adapter\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToLangChainTool,\n convertMessageToLangChainMessage,\n streamLangChainResponse,\n} from \"./utils\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { LangChainReturnType } from \"./types\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { awaitAllCallbacks } from \"@langchain/core/callbacks/promises\";\n\ninterface ChainFnParameters {\n model: string;\n messages: BaseMessage[];\n tools: DynamicStructuredTool[];\n threadId?: string;\n runId?: string;\n}\n\ninterface LangChainAdapterOptions {\n /**\n * A function that uses the LangChain API to generate a response.\n */\n chainFn: (parameters: ChainFnParameters) => Promise<LangChainReturnType>;\n}\n\nexport class LangChainAdapter implements CopilotServiceAdapter {\n /**\n * To use LangChain as a backend, provide a handler function to the adapter with your custom LangChain logic.\n */\n constructor(private options: LangChainAdapterOptions) {}\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n try {\n const {\n eventSource,\n model,\n actions,\n messages,\n runId,\n threadId: threadIdFromRequest,\n } = request;\n const threadId = threadIdFromRequest ?? randomUUID();\n const result = await this.options.chainFn({\n messages: messages.map(convertMessageToLangChainMessage),\n tools: actions.map(convertActionInputToLangChainTool),\n model,\n threadId,\n runId,\n });\n\n eventSource.stream(async (eventStream$) => {\n await streamLangChainResponse({\n result,\n eventStream$,\n });\n });\n\n return {\n threadId,\n };\n } finally {\n await awaitAllCallbacks();\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Google Generative AI (e.g. Gemini).\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GoogleGenerativeAIAdapter } from \"@copilotkit/runtime\";\n * const { GoogleGenerativeAI } = require(\"@google/generative-ai\");\n *\n * const genAI = new GoogleGenerativeAI(process.env[\"GOOGLE_API_KEY\"]);\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GoogleGenerativeAIAdapter({ model: \"gemini-1.5-pro\" });\n * ```\n */\nimport { ChatGoogle } from \"@langchain/google-gauth\";\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\nimport { AIMessage } from \"@langchain/core/messages\";\n\ninterface GoogleGenerativeAIAdapterOptions {\n /**\n * A custom Google Generative AI model to use.\n */\n model?: string;\n}\n\nexport class GoogleGenerativeAIAdapter extends LangChainAdapter {\n constructor(options?: GoogleGenerativeAIAdapterOptions) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n // Filter out empty assistant messages to prevent Gemini validation errors\n // Gemini specifically rejects conversations containing AIMessages with empty content\n const filteredMessages = messages.filter((message) => {\n // Keep all non-AI messages (HumanMessage, SystemMessage, ToolMessage, etc.)\n if (!(message instanceof AIMessage)) {\n return true;\n }\n\n // For AIMessages, only keep those with non-empty content\n // Also keep AIMessages with tool_calls even if content is empty\n return (\n (message.content && String(message.content).trim().length > 0) ||\n (message.tool_calls && message.tool_calls.length > 0)\n );\n });\n\n const model = new ChatGoogle({\n modelName: options?.model ?? \"gemini-1.5-pro\",\n apiVersion: \"v1beta\",\n }).bindTools(tools);\n\n return model.stream(filteredMessages, { metadata: { conversation_id: threadId } });\n },\n });\n }\n}\n","/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\n */\nimport OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { Message, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n} from \"./utils\";\nimport { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport { AssistantStream } from \"openai/lib/AssistantStream\";\nimport { RuntimeEventSource } from \"../events\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { AssistantStreamEvent, AssistantTool } from \"openai/resources/beta/assistants\";\nimport { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable code interpretation.\n * @default true\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable file search.\n * @default true\n */\n fileSearchEnabled?: boolean;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAssistantAdapter implements CopilotServiceAdapter {\n private openai: OpenAI;\n private codeInterpreterEnabled: boolean;\n private assistantId: string;\n private fileSearchEnabled: boolean;\n private disableParallelToolCalls: boolean;\n private keepSystemRole: boolean = false;\n\n constructor(params: OpenAIAssistantAdapterParams) {\n this.openai = params.openai || new OpenAI({});\n this.codeInterpreterEnabled = params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } = request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n\n if (!threadId) {\n threadId = (await this.openai.beta.threads.create()).id;\n }\n\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage.isResultMessage() && runId) {\n nextRunId = await this.submitToolOutputs(threadId, runId, messages, eventSource);\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n let run = await this.openai.beta.threads.runs.retrieve(threadId, runId);\n\n if (!run.required_action) {\n throw new Error(\"No tool outputs required\");\n }\n\n // get the required tool call ids\n const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map(\n (toolCall) => toolCall.id,\n );\n\n // search for these tool calls\n const resultMessages = messages.filter(\n (message) => message.isResultMessage() && toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\"Number of function results does not match the number of tool calls\");\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] = resultMessages.map(\n (message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n },\n );\n\n const stream = this.openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) => convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }))\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await this.openai.beta.threads.messages.create(threadId, {\n role: \"user\",\n content: userMessage.content,\n });\n\n const openaiTools = actions.map(convertActionInputToOpenAITool);\n\n const tools = [\n ...openaiTools,\n ...(this.codeInterpreterEnabled ? [{ type: \"code_interpreter\" } as AssistantTool] : []),\n ...(this.fileSearchEnabled ? [{ type: \"file_search\" } as AssistantTool] : []),\n ];\n\n let stream = this.openai.beta.threads.runs.stream(threadId, {\n assistant_id: this.assistantId,\n instructions,\n tools: tools,\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n\n return getRunIdFromStream(stream);\n }\n\n private async streamResponse(stream: AssistantStream, eventSource: RuntimeEventSource) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n break;\n case \"thread.run.step.delta\":\n let toolCallId: string | undefined;\n let toolCallName: string | undefined;\n let toolCallArgs: string | undefined;\n if (\n chunk.data.delta.step_details.type === \"tool_calls\" &&\n chunk.data.delta.step_details.tool_calls?.[0].type === \"function\"\n ) {\n toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;\n toolCallName = chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs = chunk.data.delta.step_details.tool_calls?.[0].function.arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n","/**\n * CopilotKit Adapter for Unify\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new UnifyAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new UnifyAdapter({ model: \"llama-3-8b-chat@fireworks-ai\" }),\n * );\n * ```\n */\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n CopilotServiceAdapter,\n} from \"../service-adapter\";\nimport OpenAI from \"openai\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\nimport { convertActionInputToOpenAITool, convertMessageToOpenAIMessage } from \"../openai/utils\";\n\nexport interface UnifyAdapterParams {\n apiKey?: string;\n model: string;\n}\n\nexport class UnifyAdapter implements CopilotServiceAdapter {\n private apiKey: string;\n private model: string;\n private start: boolean;\n\n constructor(options?: UnifyAdapterParams) {\n if (options?.apiKey) {\n this.apiKey = options.apiKey;\n } else {\n this.apiKey = \"UNIFY_API_KEY\";\n }\n this.model = options?.model;\n this.start = true;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const tools = request.actions.map(convertActionInputToOpenAITool);\n const openai = new OpenAI({\n apiKey: this.apiKey,\n baseURL: \"https://api.unify.ai/v0/\",\n });\n const forwardedParameters = request.forwardedParameters;\n\n const messages = request.messages.map((m) => convertMessageToOpenAIMessage(m));\n\n const stream = await openai.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: true,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n let model = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n request.eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n for await (const chunk of stream) {\n if (this.start) {\n model = chunk.model;\n currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: `Model used: ${model}\\n`,\n });\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n this.start = false;\n }\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Groq.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GroqAdapter } from \"@copilotkit/runtime\";\n * import { Groq } from \"groq-sdk\";\n *\n * const groq = new Groq({ apiKey: process.env[\"GROQ_API_KEY\"] });\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GroqAdapter({ groq, model: \"<model-name>\" });\n * ```\n */\nimport { Groq } from \"groq-sdk\";\nimport type { ChatCompletionMessageParam } from \"groq-sdk/resources/chat\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"../openai/utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama-3.3-70b-versatile\";\n\nexport interface GroqAdapterParams {\n /**\n * An optional Groq instance to use.\n */\n groq?: Groq;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n}\n\nexport class GroqAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private disableParallelToolCalls: boolean = false;\n private _groq: Groq;\n public get groq(): Groq {\n return this._groq;\n }\n\n constructor(params?: GroqAdapterParams) {\n this._groq = params?.groq || new Groq({});\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: true }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n const stream = await this.groq.chat.completions.create({\n model: model,\n stream: true,\n messages: openaiMessages as unknown as ChatCompletionMessageParam[],\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n parentMessageId: chunk.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","import { YogaInitialContext } from \"graphql-yoga\";\nimport { buildSchemaSync } from \"type-graphql\";\nimport { CopilotResolver } from \"../../graphql/resolvers/copilot.resolver\";\nimport { useDeferStream } from \"@graphql-yoga/plugin-defer-stream\";\nimport { CopilotRuntime } from \"../runtime/copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../service-adapters\";\nimport { CopilotCloudOptions } from \"../cloud\";\nimport { LogLevel, createLogger } from \"../../lib/logger\";\nimport { createYoga } from \"graphql-yoga\";\nimport telemetry from \"../telemetry-client\";\nimport { StateResolver } from \"../../graphql/resolvers/state.resolver\";\nimport * as packageJson from \"../../../package.json\";\n\nconst logger = createLogger();\n\nexport const addCustomHeaderPlugin = {\n onResponse({ response }) {\n // Set your custom header; adjust the header name and value as needed\n response.headers.set(\"X-CopilotKit-Runtime-Version\", packageJson.version);\n },\n};\n\ntype AnyPrimitive = string | boolean | number | null;\nexport type CopilotRequestContextProperties = Record<\n string,\n AnyPrimitive | Record<string, AnyPrimitive>\n>;\n\nexport type GraphQLContext = YogaInitialContext & {\n _copilotkit: CreateCopilotRuntimeServerOptions;\n properties: CopilotRequestContextProperties;\n logger: typeof logger;\n};\n\nexport interface CreateCopilotRuntimeServerOptions {\n runtime: CopilotRuntime<any>;\n serviceAdapter: CopilotServiceAdapter;\n endpoint: string;\n baseUrl?: string;\n cloud?: CopilotCloudOptions;\n properties?: CopilotRequestContextProperties;\n logLevel?: LogLevel;\n}\n\nexport async function createContext(\n initialContext: YogaInitialContext,\n copilotKitContext: CreateCopilotRuntimeServerOptions,\n contextLogger: typeof logger,\n properties: CopilotRequestContextProperties = {},\n): Promise<Partial<GraphQLContext>> {\n logger.debug({ copilotKitContext }, \"Creating GraphQL context\");\n const ctx: GraphQLContext = {\n ...initialContext,\n _copilotkit: {\n ...copilotKitContext,\n },\n properties: { ...properties },\n logger: contextLogger,\n };\n return ctx;\n}\n\nexport function buildSchema(\n options: {\n emitSchemaFile?: string;\n } = {},\n) {\n logger.debug(\"Building GraphQL schema...\");\n const schema = buildSchemaSync({\n resolvers: [CopilotResolver, StateResolver],\n emitSchemaFile: options.emitSchemaFile,\n });\n logger.debug(\"GraphQL schema built successfully\");\n return schema;\n}\n\nexport type CommonConfig = {\n logging: typeof logger;\n schema: ReturnType<typeof buildSchema>;\n plugins: Parameters<typeof createYoga>[0][\"plugins\"];\n context: (ctx: YogaInitialContext) => Promise<Partial<GraphQLContext>>;\n};\n\nexport function getCommonConfig(options: CreateCopilotRuntimeServerOptions): CommonConfig {\n const logLevel = (process.env.LOG_LEVEL as LogLevel) || (options.logLevel as LogLevel) || \"error\";\n const logger = createLogger({ level: logLevel, component: \"getCommonConfig\" });\n\n const contextLogger = createLogger({ level: logLevel });\n\n if (options.cloud) {\n telemetry.setCloudConfiguration({\n publicApiKey: options.cloud.publicApiKey,\n baseUrl: options.cloud.baseUrl,\n });\n }\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: {\n ...(options.properties._copilotkit as Record<string, any>),\n },\n });\n }\n\n telemetry.setGlobalProperties({\n runtime: {\n serviceAdapter: options.serviceAdapter.constructor.name,\n },\n });\n\n return {\n logging: createLogger({ component: \"Yoga GraphQL\", level: logLevel }),\n schema: buildSchema(),\n plugins: [useDeferStream(), addCustomHeaderPlugin],\n context: (ctx: YogaInitialContext): Promise<Partial<GraphQLContext>> =>\n createContext(ctx, options, contextLogger, options.properties),\n };\n}\n","import { Arg, Ctx, Mutation, Query, Resolver } from \"type-graphql\";\nimport {\n ReplaySubject,\n Subject,\n Subscription,\n filter,\n finalize,\n firstValueFrom,\n shareReplay,\n skipWhile,\n take,\n takeWhile,\n tap,\n} from \"rxjs\";\nimport { GenerateCopilotResponseInput } from \"../inputs/generate-copilot-response.input\";\nimport { CopilotResponse } from \"../types/copilot-response.type\";\nimport {\n CopilotKitLangGraphInterruptEvent,\n LangGraphInterruptEvent,\n} from \"../types/meta-events.type\";\nimport { ActionInputAvailability, MessageRole } from \"../types/enums\";\nimport { Repeater } from \"graphql-yoga\";\nimport type { CopilotRequestContextProperties, GraphQLContext } from \"../../lib/integrations\";\nimport {\n RuntimeEvent,\n RuntimeEventTypes,\n RuntimeMetaEventName,\n} from \"../../service-adapters/events\";\nimport {\n FailedMessageStatus,\n MessageStatusCode,\n MessageStatusUnion,\n SuccessMessageStatus,\n} from \"../types/message-status.type\";\nimport { ResponseStatusUnion, SuccessResponseStatus } from \"../types/response-status.type\";\nimport { GraphQLJSONObject } from \"graphql-scalars\";\nimport { plainToInstance } from \"class-transformer\";\nimport { GuardrailsResult } from \"../types/guardrails-result.type\";\nimport { GraphQLError } from \"graphql\";\nimport {\n GuardrailsValidationFailureResponse,\n MessageStreamInterruptedResponse,\n UnknownErrorResponse,\n} from \"../../utils\";\nimport {\n ActionExecutionMessage,\n AgentStateMessage,\n Message,\n MessageType,\n ResultMessage,\n TextMessage,\n} from \"../types/converted\";\nimport telemetry from \"../../lib/telemetry-client\";\nimport { randomId } from \"@copilotkit/shared\";\nimport { AgentsResponse } from \"../types/agents-response.type\";\nimport { LangGraphEventTypes } from \"../../agents/langgraph/events\";\nimport { CopilotKitError } from \"@copilotkit/shared\";\n\nconst invokeGuardrails = async ({\n baseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult,\n onError,\n}: {\n baseUrl: string;\n copilotCloudPublicApiKey: string;\n data: GenerateCopilotResponseInput;\n onResult: (result: GuardrailsResult) => void;\n onError: (err: Error) => void;\n}) => {\n if (\n data.messages.length &&\n data.messages[data.messages.length - 1].textMessage?.role === MessageRole.user\n ) {\n const messages = data.messages\n .filter(\n (m) =>\n m.textMessage !== undefined &&\n (m.textMessage.role === MessageRole.user || m.textMessage.role === MessageRole.assistant),\n )\n .map((m) => ({\n role: m.textMessage!.role,\n content: m.textMessage.content,\n }));\n\n const lastMessage = messages[messages.length - 1];\n const restOfMessages = messages.slice(0, -1);\n\n const body = {\n input: lastMessage.content,\n validTopics: data.cloud.guardrails.inputValidationRules.allowList,\n invalidTopics: data.cloud.guardrails.inputValidationRules.denyList,\n messages: restOfMessages,\n };\n\n const guardrailsResult = await fetch(`${baseUrl}/guardrails/validate`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CopilotCloud-Public-API-Key\": copilotCloudPublicApiKey,\n },\n body: JSON.stringify(body),\n });\n\n if (guardrailsResult.ok) {\n const resultJson: GuardrailsResult = await guardrailsResult.json();\n onResult(resultJson);\n } else {\n onError(await guardrailsResult.json());\n }\n }\n};\n\n@Resolver(() => CopilotResponse)\nexport class CopilotResolver {\n @Query(() => String)\n async hello() {\n return \"Hello World\";\n }\n\n @Query(() => AgentsResponse)\n async availableAgents(@Ctx() ctx: GraphQLContext) {\n let logger = ctx.logger.child({ component: \"CopilotResolver.availableAgents\" });\n\n logger.debug(\"Processing\");\n const agentsWithEndpoints = await ctx._copilotkit.runtime.discoverAgentsFromEndpoints(ctx);\n\n logger.debug(\"Event source created, creating response\");\n\n return {\n agents: agentsWithEndpoints.map(\n ({ endpoint, ...agentWithoutEndpoint }) => agentWithoutEndpoint,\n ),\n };\n }\n\n @Mutation(() => CopilotResponse)\n async generateCopilotResponse(\n @Ctx() ctx: GraphQLContext,\n @Arg(\"data\") data: GenerateCopilotResponseInput,\n @Arg(\"properties\", () => GraphQLJSONObject, { nullable: true })\n properties?: CopilotRequestContextProperties,\n ) {\n telemetry.capture(\"oss.runtime.copilot_request_created\", {\n \"cloud.guardrails.enabled\": data.cloud?.guardrails !== undefined,\n requestType: data.metadata.requestType,\n \"cloud.api_key_provided\": !!ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n ...(ctx.request.headers.get(\"x-copilotcloud-public-api-key\")\n ? {\n \"cloud.public_api_key\": ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n }\n : {}),\n ...(ctx._copilotkit.baseUrl\n ? {\n \"cloud.base_url\": ctx._copilotkit.baseUrl,\n }\n : {\n \"cloud.base_url\": \"https://api.cloud.copilotkit.ai\",\n }),\n });\n\n let logger = ctx.logger.child({ component: \"CopilotResolver.generateCopilotResponse\" });\n logger.debug({ data }, \"Generating Copilot response\");\n\n if (properties) {\n logger.debug(\"Properties provided, merging with context properties\");\n ctx.properties = { ...ctx.properties, ...properties };\n }\n\n const copilotRuntime = ctx._copilotkit.runtime;\n const serviceAdapter = ctx._copilotkit.serviceAdapter;\n\n let copilotCloudPublicApiKey: string | null = null;\n let copilotCloudBaseUrl: string;\n\n // Extract publicApiKey from headers for both cloud and non-cloud requests\n // This enables onTrace functionality regardless of cloud configuration\n const publicApiKeyFromHeaders = ctx.request.headers.get(\"x-copilotcloud-public-api-key\");\n if (publicApiKeyFromHeaders) {\n copilotCloudPublicApiKey = publicApiKeyFromHeaders;\n }\n\n if (data.cloud) {\n logger = logger.child({ cloud: true });\n logger.debug(\"Cloud configuration provided, checking for public API key in headers\");\n\n if (!copilotCloudPublicApiKey) {\n logger.error(\"Public API key not found in headers\");\n\n // Trace the validation error for debugging visibility\n await copilotRuntime.traceGraphQLError(\n {\n message: \"X-CopilotCloud-Public-API-Key header is required\",\n code: \"MISSING_PUBLIC_API_KEY\",\n type: \"GraphQLError\",\n },\n {\n operation: \"generateCopilotResponse\",\n cloudConfigPresent: Boolean(data.cloud),\n guardrailsEnabled: Boolean(data.cloud?.guardrails),\n },\n );\n\n throw new GraphQLError(\"X-CopilotCloud-Public-API-Key header is required\");\n }\n\n if (process.env.COPILOT_CLOUD_BASE_URL) {\n copilotCloudBaseUrl = process.env.COPILOT_CLOUD_BASE_URL;\n } else if (ctx._copilotkit.cloud?.baseUrl) {\n copilotCloudBaseUrl = ctx._copilotkit.cloud?.baseUrl;\n } else {\n copilotCloudBaseUrl = \"https://api.cloud.copilotkit.ai\";\n }\n\n logger = logger.child({ copilotCloudBaseUrl });\n }\n\n logger.debug(\"Setting up subjects\");\n const responseStatus$ = new ReplaySubject<typeof ResponseStatusUnion>();\n const interruptStreaming$ = new ReplaySubject<{ reason: string; messageId?: string }>();\n const guardrailsResult$ = new ReplaySubject<GuardrailsResult>();\n\n let outputMessages: Message[] = [];\n let resolveOutputMessagesPromise: (messages: Message[]) => void;\n let rejectOutputMessagesPromise: (err: Error) => void;\n\n const outputMessagesPromise = new Promise<Message[]>((resolve, reject) => {\n resolveOutputMessagesPromise = resolve;\n rejectOutputMessagesPromise = reject;\n });\n\n if (copilotCloudPublicApiKey) {\n ctx.properties[\"copilotCloudPublicApiKey\"] = copilotCloudPublicApiKey;\n }\n\n logger.debug(\"Processing\");\n const {\n eventSource,\n threadId = randomId(),\n runId,\n serverSideActions,\n actionInputsWithoutAgents,\n extensions,\n } = await copilotRuntime.processRuntimeRequest({\n serviceAdapter,\n messages: data.messages,\n actions: data.frontend.actions.filter(\n (action) => action.available !== ActionInputAvailability.disabled,\n ),\n threadId: data.threadId,\n runId: data.runId,\n publicApiKey: copilotCloudPublicApiKey,\n outputMessagesPromise,\n graphqlContext: ctx,\n forwardedParameters: data.forwardedParameters,\n agentSession: data.agentSession,\n agentStates: data.agentStates,\n url: data.frontend.url,\n extensions: data.extensions,\n metaEvents: data.metaEvents,\n });\n\n logger.debug(\"Event source created, creating response\");\n // run and process the event stream\n const eventStream = eventSource\n .processRuntimeEvents({\n serverSideActions,\n guardrailsResult$: data.cloud?.guardrails ? guardrailsResult$ : null,\n actionInputsWithoutAgents: actionInputsWithoutAgents.filter(\n // TODO-AGENTS: do not exclude ALL server side actions\n (action) =>\n !serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n ),\n threadId,\n })\n .pipe(\n // shareReplay() ensures that later subscribers will see the whole stream instead of\n // just the events that were emitted after the subscriber was added.\n shareReplay(),\n finalize(() => {\n logger.debug(\"Event stream finalized\");\n }),\n );\n\n const response = {\n threadId,\n runId,\n status: firstValueFrom(responseStatus$),\n extensions,\n metaEvents: new Repeater(async (push, stop) => {\n let eventStreamSubscription: Subscription;\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n if (event.type != RuntimeEventTypes.MetaEvent) {\n return;\n }\n switch (event.name) {\n // @ts-ignore\n case LangGraphEventTypes.OnInterrupt:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n // @ts-ignore\n type: event.type,\n // @ts-ignore\n name: RuntimeMetaEventName.LangGraphInterruptEvent,\n // @ts-ignore\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.LangGraphInterruptEvent:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent:\n push(\n plainToInstance(CopilotKitLangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n data: {\n value: event.data.value,\n messages: event.data.messages.map((message) => {\n if (\n message.type === \"TextMessage\" ||\n (\"content\" in message && \"role\" in message)\n ) {\n return plainToInstance(TextMessage, {\n id: message.id,\n createdAt: new Date(),\n content: [(message as TextMessage).content],\n role: (message as TextMessage).role,\n status: new SuccessMessageStatus(),\n });\n }\n if (\"arguments\" in message) {\n return plainToInstance(ActionExecutionMessage, {\n name: message.name,\n id: message.id,\n arguments: [JSON.stringify(message.arguments)],\n createdAt: new Date(),\n status: new SuccessMessageStatus(),\n });\n }\n throw new Error(\"Unknown message in metaEvents copilot resolver\");\n }),\n },\n }),\n );\n break;\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in meta events stream\");\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n complete: async () => {\n logger.debug(\"Meta events stream completed\");\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n });\n }),\n messages: new Repeater(async (pushMessage, stopStreamingMessages) => {\n logger.debug(\"Messages repeater created\");\n\n if (data.cloud?.guardrails) {\n logger = logger.child({ guardrails: true });\n logger.debug(\"Guardrails is enabled, validating input\");\n\n invokeGuardrails({\n baseUrl: copilotCloudBaseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult: (result) => {\n logger.debug({ status: result.status }, \"Guardrails validation done\");\n guardrailsResult$.next(result);\n\n // Guardrails validation failed\n if (result.status === \"denied\") {\n // send the reason to the client and interrupt streaming\n responseStatus$.next(\n new GuardrailsValidationFailureResponse({ guardrailsReason: result.reason }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to Guardrails validation failure. Reason: ${result.reason}`,\n });\n\n // resolve messages promise to the middleware\n outputMessages = [\n plainToInstance(TextMessage, {\n id: randomId(),\n createdAt: new Date(),\n content: result.reason,\n role: MessageRole.assistant,\n }),\n ];\n resolveOutputMessagesPromise(outputMessages);\n }\n },\n onError: (err) => {\n logger.error({ err }, \"Error in guardrails validation\");\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the guardrails validation`,\n }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to unknown error in guardrails validation`,\n });\n\n // reject the middleware promise\n rejectOutputMessagesPromise(err);\n },\n });\n }\n\n let eventStreamSubscription: Subscription;\n\n logger.debug(\"Event stream created, subscribing to event stream\");\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n switch (event.type) {\n case RuntimeEventTypes.MetaEvent:\n break;\n ////////////////////////////////\n // TextMessageStart\n ////////////////////////////////\n case RuntimeEventTypes.TextMessageStart:\n // create a sub stream that contains the message content\n const textMessageContentStream = eventStream.pipe(\n // skip until this message start event\n skipWhile((e) => e !== event),\n // take until the message end event\n takeWhile(\n (e) =>\n !(\n e.type === RuntimeEventTypes.TextMessageEnd &&\n e.messageId == event.messageId\n ),\n ),\n // filter out any other message events or message ids\n filter(\n (e) =>\n e.type == RuntimeEventTypes.TextMessageContent &&\n e.messageId == event.messageId,\n ),\n );\n\n // signal when we are done streaming\n const streamingTextStatus = new Subject<typeof MessageStatusUnion>();\n\n const messageId = event.messageId;\n // push the new message\n pushMessage({\n id: messageId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingTextStatus),\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: new Repeater(async (pushTextChunk, stopStreamingText) => {\n logger.debug(\"Text message content repeater created\");\n\n const textChunks: string[] = [];\n let textSubscription: Subscription;\n\n interruptStreaming$\n .pipe(\n shareReplay(),\n take(1),\n tap(({ reason, messageId }) => {\n logger.debug({ reason, messageId }, \"Text streaming interrupted\");\n\n streamingTextStatus.next(\n plainToInstance(FailedMessageStatus, { reason }),\n );\n\n responseStatus$.next(new MessageStreamInterruptedResponse({ messageId }));\n stopStreamingText();\n textSubscription?.unsubscribe();\n }),\n )\n .subscribe();\n\n logger.debug(\"Subscribing to text message content stream\");\n\n textSubscription = textMessageContentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.TextMessageContent) {\n await pushTextChunk(e.content);\n textChunks.push(e.content);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in text message content stream\");\n interruptStreaming$.next({\n reason: \"Error streaming message content\",\n messageId,\n });\n stopStreamingText();\n textSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Text message content stream completed\");\n streamingTextStatus.next(new SuccessMessageStatus());\n stopStreamingText();\n textSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(TextMessage, {\n id: messageId,\n createdAt: new Date(),\n content: textChunks.join(\"\"),\n role: MessageRole.assistant,\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionStart\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionStart:\n logger.debug(\"Action execution start event received\");\n const actionExecutionArgumentStream = eventStream.pipe(\n skipWhile((e) => e !== event),\n // take until the action execution end event\n takeWhile(\n (e) =>\n !(\n e.type === RuntimeEventTypes.ActionExecutionEnd &&\n e.actionExecutionId == event.actionExecutionId\n ),\n ),\n // filter out any other action execution events or action execution ids\n filter(\n (e) =>\n e.type == RuntimeEventTypes.ActionExecutionArgs &&\n e.actionExecutionId == event.actionExecutionId,\n ),\n );\n const streamingArgumentsStatus = new Subject<typeof MessageStatusUnion>();\n pushMessage({\n id: event.actionExecutionId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingArgumentsStatus),\n createdAt: new Date(),\n name: event.actionName,\n arguments: new Repeater(async (pushArgumentsChunk, stopStreamingArguments) => {\n logger.debug(\"Action execution argument stream created\");\n\n const argumentChunks: string[] = [];\n let actionExecutionArgumentSubscription: Subscription;\n\n actionExecutionArgumentSubscription = actionExecutionArgumentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.ActionExecutionArgs) {\n await pushArgumentsChunk(e.args);\n argumentChunks.push(e.args);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in action execution argument stream\");\n streamingArgumentsStatus.next(\n plainToInstance(FailedMessageStatus, {\n reason:\n \"An unknown error has occurred in the action execution argument stream\",\n }),\n );\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Action execution argument stream completed\");\n streamingArgumentsStatus.next(new SuccessMessageStatus());\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(ActionExecutionMessage, {\n id: event.actionExecutionId,\n createdAt: new Date(),\n name: event.actionName,\n arguments: argumentChunks.join(\"\"),\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionResult\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionResult:\n logger.debug({ result: event.result }, \"Action execution result event received\");\n pushMessage({\n id: \"result-\" + event.actionExecutionId,\n status: new SuccessMessageStatus(),\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n });\n\n outputMessages.push(\n plainToInstance(ResultMessage, {\n id: \"result-\" + event.actionExecutionId,\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n }),\n );\n break;\n ////////////////////////////////\n // AgentStateMessage\n ////////////////////////////////\n case RuntimeEventTypes.AgentStateMessage:\n logger.debug({ event }, \"Agent message event received\");\n pushMessage({\n id: randomId(),\n status: new SuccessMessageStatus(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n });\n outputMessages.push(\n plainToInstance(AgentStateMessage, {\n id: randomId(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n }),\n );\n break;\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in event stream\");\n\n // If it's a structured CopilotKitError, stop the repeater with the error so frontend can handle it\n if (\n err instanceof CopilotKitError ||\n (err instanceof Error && err.name && err.name.includes(\"CopilotKit\"))\n ) {\n eventStreamSubscription?.unsubscribe();\n rejectOutputMessagesPromise(err);\n stopStreamingMessages(err); // Pass the error to stop the GraphQL stream with this error\n return;\n }\n\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n rejectOutputMessagesPromise(err);\n },\n complete: async () => {\n logger.debug(\"Event stream completed\");\n if (data.cloud?.guardrails) {\n logger.debug(\"Guardrails is enabled, waiting for guardrails result\");\n await firstValueFrom(guardrailsResult$);\n }\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n resolveOutputMessagesPromise(outputMessages);\n },\n });\n }),\n };\n\n return response;\n }\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageInput } from \"./message.input\";\nimport { FrontendInput } from \"./frontend.input\";\nimport { CloudInput } from \"./cloud.input\";\nimport { CopilotRequestType } from \"../types/enums\";\nimport { ForwardedParametersInput } from \"./forwarded-parameters.input\";\nimport { AgentSessionInput } from \"./agent-session.input\";\nimport { AgentStateInput } from \"./agent-state.input\";\nimport { ExtensionsInput } from \"./extensions.input\";\nimport { MetaEventInput } from \"./meta-event.input\";\n\n@InputType()\nexport class GenerateCopilotResponseMetadataInput {\n @Field(() => CopilotRequestType, { nullable: true })\n requestType: CopilotRequestType;\n}\n\n@InputType()\nexport class GenerateCopilotResponseInput {\n @Field(() => GenerateCopilotResponseMetadataInput, { nullable: false })\n metadata: GenerateCopilotResponseMetadataInput;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => [MessageInput])\n messages: MessageInput[];\n\n @Field(() => FrontendInput)\n frontend: FrontendInput;\n\n @Field(() => CloudInput, { nullable: true })\n cloud?: CloudInput;\n\n @Field(() => ForwardedParametersInput, { nullable: true })\n forwardedParameters?: ForwardedParametersInput;\n\n @Field(() => AgentSessionInput, { nullable: true })\n agentSession?: AgentSessionInput;\n\n @Field(() => AgentStateInput, { nullable: true })\n agentState?: AgentStateInput;\n\n @Field(() => [AgentStateInput], { nullable: true })\n agentStates?: AgentStateInput[];\n\n @Field(() => ExtensionsInput, { nullable: true })\n extensions?: ExtensionsInput;\n\n @Field(() => [MetaEventInput], { nullable: true })\n metaEvents?: MetaEventInput[];\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageRole } from \"../types/enums\";\nimport { BaseMessageInput } from \"../types/base\";\n\n// GraphQL does not support union types in inputs, so we need to use\n// optional fields for the different subtypes.\n@InputType()\nexport class MessageInput extends BaseMessageInput {\n @Field(() => TextMessageInput, { nullable: true })\n textMessage?: TextMessageInput;\n\n @Field(() => ActionExecutionMessageInput, { nullable: true })\n actionExecutionMessage?: ActionExecutionMessageInput;\n\n @Field(() => ResultMessageInput, { nullable: true })\n resultMessage?: ResultMessageInput;\n\n @Field(() => AgentStateMessageInput, { nullable: true })\n agentStateMessage?: AgentStateMessageInput;\n\n @Field(() => ImageMessageInput, { nullable: true })\n imageMessage?: ImageMessageInput;\n}\n\n@InputType()\nexport class TextMessageInput {\n @Field(() => String)\n content: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n\n@InputType()\nexport class ActionExecutionMessageInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n arguments: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: String;\n}\n\n@InputType()\nexport class ResultMessageInput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String)\n result: string;\n}\n\n@InputType()\nexport class AgentStateMessageInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n}\n\n@InputType()\nexport class ImageMessageInput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n","import { registerEnumType } from \"type-graphql\";\n\nexport enum MessageRole {\n user = \"user\",\n assistant = \"assistant\",\n system = \"system\",\n tool = \"tool\",\n developer = \"developer\",\n}\n\nexport enum CopilotRequestType {\n Chat = \"Chat\",\n Task = \"Task\",\n TextareaCompletion = \"TextareaCompletion\",\n TextareaPopover = \"TextareaPopover\",\n Suggestion = \"Suggestion\",\n}\n\nexport enum ActionInputAvailability {\n disabled = \"disabled\",\n enabled = \"enabled\",\n remote = \"remote\",\n}\n\nregisterEnumType(MessageRole, {\n name: \"MessageRole\",\n description: \"The role of the message\",\n});\n\nregisterEnumType(CopilotRequestType, {\n name: \"CopilotRequestType\",\n description: \"The type of Copilot request\",\n});\n\nregisterEnumType(ActionInputAvailability, {\n name: \"ActionInputAvailability\",\n description: \"The availability of the frontend action\",\n});\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class BaseMessageInput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInput } from \"./action.input\";\n\n@InputType()\nexport class FrontendInput {\n @Field(() => String, { nullable: true })\n toDeprecate_fullContext?: string;\n\n @Field(() => [ActionInput])\n actions: ActionInput[];\n\n @Field(() => String, { nullable: true })\n url?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInputAvailability } from \"../types/enums\";\n@InputType()\nexport class ActionInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n jsonSchema: string;\n\n @Field(() => ActionInputAvailability, { nullable: true })\n available?: ActionInputAvailability;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { GuardrailsInput } from \"./cloud-guardrails.input\";\n\n@InputType()\nexport class CloudInput {\n @Field(() => GuardrailsInput, { nullable: true })\n guardrails?: GuardrailsInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class GuardrailsRuleInput {\n @Field(() => [String], { nullable: true })\n allowList?: string[] = [];\n\n @Field(() => [String], { nullable: true })\n denyList?: string[] = [];\n}\n\n@InputType()\nexport class GuardrailsInput {\n @Field(() => GuardrailsRuleInput, { nullable: false })\n inputValidationRules: GuardrailsRuleInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class ForwardedParametersInput {\n @Field(() => String, { nullable: true })\n model?: string;\n\n @Field(() => Number, { nullable: true })\n maxTokens?: number;\n\n @Field(() => [String], { nullable: true })\n stop?: string[];\n\n @Field(() => String, { nullable: true })\n toolChoice?: String;\n\n @Field(() => String, { nullable: true })\n toolChoiceFunctionName?: string;\n\n @Field(() => Number, { nullable: true })\n temperature?: number;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentSessionInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n nodeName?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentStateInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String, { nullable: true })\n config?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n/**\n * The extensions input is used to pass additional information to the copilot runtime, specific to a\n * service adapter or agent framework.\n */\n\n@InputType()\nexport class ExtensionsInput {\n @Field(() => OpenAIApiAssistantAPIInput, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIInput;\n}\n\n@InputType()\nexport class OpenAIApiAssistantAPIInput {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MetaEventName } from \"../types/meta-events.type\";\nimport { MessageInput } from \"./message.input\";\n\n@InputType()\nexport class MetaEventInput {\n @Field(() => MetaEventName)\n name: MetaEventName;\n\n @Field(() => String)\n value?: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n\n @Field(() => [MessageInput], { nullable: true })\n messages?: MessageInput[];\n}\n","import { createUnionType, Field, InterfaceType, ObjectType, registerEnumType } from \"type-graphql\";\nimport {\n ActionExecutionMessageOutput,\n AgentStateMessageOutput,\n BaseMessageOutput,\n ResultMessageOutput,\n TextMessageOutput,\n} from \"./copilot-response.type\";\n\nexport enum MetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nregisterEnumType(MetaEventName, {\n name: \"MetaEventName\",\n description: \"Meta event types\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.name === MetaEventName.LangGraphInterruptEvent) {\n return LangGraphInterruptEvent;\n } else if (value.name === MetaEventName.CopilotKitLangGraphInterruptEvent) {\n return CopilotKitLangGraphInterruptEvent;\n }\n return undefined;\n },\n})\n@InterfaceType()\nexport abstract class BaseMetaEvent {\n @Field(() => String)\n type: \"MetaEvent\" = \"MetaEvent\";\n\n @Field(() => MetaEventName)\n name: MetaEventName;\n}\n\n@ObjectType()\nexport class CopilotKitLangGraphInterruptEventData {\n @Field(() => String)\n value: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class LangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.LangGraphInterruptEvent = MetaEventName.LangGraphInterruptEvent;\n\n @Field(() => String)\n value: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class CopilotKitLangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.CopilotKitLangGraphInterruptEvent =\n MetaEventName.CopilotKitLangGraphInterruptEvent;\n\n @Field(() => CopilotKitLangGraphInterruptEventData)\n data: CopilotKitLangGraphInterruptEventData;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n","import { Field, InterfaceType, ObjectType } from \"type-graphql\";\nimport { MessageRole } from \"./enums\";\nimport { MessageStatusUnion } from \"./message-status.type\";\nimport { ResponseStatusUnion } from \"./response-status.type\";\nimport { ExtensionsResponse } from \"./extensions-response.type\";\nimport { BaseMetaEvent } from \"./meta-events.type\";\n\n@InterfaceType({\n resolveType(value) {\n if (value.hasOwnProperty(\"content\")) {\n return TextMessageOutput;\n } else if (value.hasOwnProperty(\"name\")) {\n return ActionExecutionMessageOutput;\n } else if (value.hasOwnProperty(\"result\")) {\n return ResultMessageOutput;\n } else if (value.hasOwnProperty(\"state\")) {\n return AgentStateMessageOutput;\n } else if (value.hasOwnProperty(\"format\") && value.hasOwnProperty(\"bytes\")) {\n return ImageMessageOutput;\n }\n return undefined;\n },\n})\nexport abstract class BaseMessageOutput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n\n @Field(() => MessageStatusUnion)\n status: typeof MessageStatusUnion;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class TextMessageOutput {\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => [String])\n content: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ActionExecutionMessageOutput {\n @Field(() => String)\n name: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: string;\n\n @Field(() => [String])\n arguments: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ResultMessageOutput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String)\n result: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class AgentStateMessageOutput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ImageMessageOutput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType()\nexport class CopilotResponse {\n @Field(() => String)\n threadId!: string;\n\n @Field(() => ResponseStatusUnion)\n status: typeof ResponseStatusUnion;\n\n @Field({ nullable: true })\n runId?: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n\n @Field(() => ExtensionsResponse, { nullable: true })\n extensions?: ExtensionsResponse;\n\n @Field(() => [BaseMetaEvent], { nullable: true })\n metaEvents?: (typeof BaseMetaEvent)[];\n}\n","import { Field, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum MessageStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(MessageStatusCode, {\n name: \"MessageStatusCode\",\n});\n\n@ObjectType()\nclass BaseMessageStatus {\n @Field(() => MessageStatusCode)\n code: MessageStatusCode;\n}\n\n@ObjectType()\nexport class PendingMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Pending;\n}\n\n@ObjectType()\nexport class SuccessMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Success;\n}\n\n@ObjectType()\nexport class FailedMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Failed;\n\n @Field(() => String)\n reason: string;\n}\n\nexport const MessageStatusUnion = createUnionType({\n name: \"MessageStatus\",\n types: () => [PendingMessageStatus, SuccessMessageStatus, FailedMessageStatus] as const,\n});\n","import { GraphQLJSON } from \"graphql-scalars\";\nimport { Field, InterfaceType, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum ResponseStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(ResponseStatusCode, {\n name: \"ResponseStatusCode\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.code === ResponseStatusCode.Success) {\n return SuccessResponseStatus;\n } else if (value.code === ResponseStatusCode.Failed) {\n return FailedResponseStatus;\n } else if (value.code === ResponseStatusCode.Pending) {\n return PendingResponseStatus;\n }\n return undefined;\n },\n})\n@ObjectType()\nabstract class BaseResponseStatus {\n @Field(() => ResponseStatusCode)\n code: ResponseStatusCode;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class PendingResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Pending;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class SuccessResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Success;\n}\n\nexport enum FailedResponseStatusReason {\n GUARDRAILS_VALIDATION_FAILED = \"GUARDRAILS_VALIDATION_FAILED\",\n MESSAGE_STREAM_INTERRUPTED = \"MESSAGE_STREAM_INTERRUPTED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nregisterEnumType(FailedResponseStatusReason, {\n name: \"FailedResponseStatusReason\",\n});\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class FailedResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Failed;\n\n @Field(() => FailedResponseStatusReason)\n reason: FailedResponseStatusReason;\n\n @Field(() => GraphQLJSON, { nullable: true })\n details?: Record<string, any> = null;\n}\n\nexport const ResponseStatusUnion = createUnionType({\n name: \"ResponseStatus\",\n types: () => [PendingResponseStatus, SuccessResponseStatus, FailedResponseStatus] as const,\n});\n","import { Field, ObjectType } from \"type-graphql\";\n\n/**\n * The extensions response is used to receive additional information from the copilot runtime, specific to a\n * service adapter or agent framework.\n *\n * Next time a request to the runtime is made, the extensions response will be included in the request as input.\n */\n\n@ObjectType()\nexport class ExtensionsResponse {\n @Field(() => OpenAIApiAssistantAPIResponse, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIResponse;\n}\n\n@ObjectType()\nexport class OpenAIApiAssistantAPIResponse {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import {\n Action,\n randomId,\n CopilotKitError,\n CopilotKitErrorCode,\n CopilotKitLowLevelError,\n} from \"@copilotkit/shared\";\nimport {\n of,\n concat,\n scan,\n concatMap,\n ReplaySubject,\n Subject,\n firstValueFrom,\n from,\n catchError,\n EMPTY,\n BehaviorSubject,\n} from \"rxjs\";\nimport { streamLangChainResponse } from \"./langchain/utils\";\nimport { GuardrailsResult } from \"../graphql/types/guardrails-result.type\";\nimport telemetry from \"../lib/telemetry-client\";\nimport { isRemoteAgentAction } from \"../lib/runtime/remote-actions\";\nimport { ActionInput } from \"../graphql/inputs/action.input\";\nimport {\n ActionExecutionMessage,\n ResultMessage,\n TextMessage,\n Message,\n} from \"../graphql/types/converted\";\nimport { plainToInstance } from \"class-transformer\";\nimport { MessageRole } from \"../graphql/types/enums\";\nimport { parseJson, tryMap } from \"@copilotkit/shared\";\n\nexport enum RuntimeEventTypes {\n TextMessageStart = \"TextMessageStart\",\n TextMessageContent = \"TextMessageContent\",\n TextMessageEnd = \"TextMessageEnd\",\n ActionExecutionStart = \"ActionExecutionStart\",\n ActionExecutionArgs = \"ActionExecutionArgs\",\n ActionExecutionEnd = \"ActionExecutionEnd\",\n ActionExecutionResult = \"ActionExecutionResult\",\n AgentStateMessage = \"AgentStateMessage\",\n MetaEvent = \"MetaEvent\",\n}\n\nexport enum RuntimeMetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n LangGraphInterruptResumeEvent = \"LangGraphInterruptResumeEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport type RunTimeMetaEvent =\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptEvent;\n value: string;\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptResumeEvent;\n data: string;\n };\n\nexport type RuntimeEvent =\n | { type: RuntimeEventTypes.TextMessageStart; messageId: string; parentMessageId?: string }\n | {\n type: RuntimeEventTypes.TextMessageContent;\n messageId: string;\n content: string;\n }\n | { type: RuntimeEventTypes.TextMessageEnd; messageId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionStart;\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }\n | { type: RuntimeEventTypes.ActionExecutionArgs; actionExecutionId: string; args: string }\n | { type: RuntimeEventTypes.ActionExecutionEnd; actionExecutionId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionResult;\n actionName: string;\n actionExecutionId: string;\n result: string;\n }\n | {\n type: RuntimeEventTypes.AgentStateMessage;\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }\n | RunTimeMetaEvent;\n\ninterface RuntimeEventWithState {\n event: RuntimeEvent | null;\n callActionServerSide: boolean;\n action: Action<any> | null;\n actionExecutionId: string | null;\n args: string;\n actionExecutionParentMessageId: string | null;\n}\n\ntype EventSourceCallback = (eventStream$: RuntimeEventSubject) => Promise<void>;\n\nexport class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {\n constructor() {\n super();\n }\n\n sendTextMessageStart({\n messageId,\n parentMessageId,\n }: {\n messageId: string;\n parentMessageId?: string;\n }) {\n this.next({ type: RuntimeEventTypes.TextMessageStart, messageId, parentMessageId });\n }\n\n sendTextMessageContent({ messageId, content }: { messageId: string; content: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageContent, content, messageId });\n }\n\n sendTextMessageEnd({ messageId }: { messageId: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageEnd, messageId });\n }\n\n sendTextMessage(messageId: string, content: string) {\n this.sendTextMessageStart({ messageId });\n this.sendTextMessageContent({ messageId, content });\n this.sendTextMessageEnd({ messageId });\n }\n\n sendActionExecutionStart({\n actionExecutionId,\n actionName,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId,\n actionName,\n parentMessageId,\n });\n }\n\n sendActionExecutionArgs({\n actionExecutionId,\n args,\n }: {\n actionExecutionId: string;\n args: string;\n }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionArgs, args, actionExecutionId });\n }\n\n sendActionExecutionEnd({ actionExecutionId }: { actionExecutionId: string }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionEnd, actionExecutionId });\n }\n\n sendActionExecution({\n actionExecutionId,\n actionName,\n args,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n args: string;\n parentMessageId?: string;\n }) {\n this.sendActionExecutionStart({ actionExecutionId, actionName, parentMessageId });\n this.sendActionExecutionArgs({ actionExecutionId, args });\n this.sendActionExecutionEnd({ actionExecutionId });\n }\n\n sendActionExecutionResult({\n actionExecutionId,\n actionName,\n result,\n error,\n }: {\n actionExecutionId: string;\n actionName: string;\n result?: string;\n error?: { code: string; message: string };\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionResult,\n actionName,\n actionExecutionId,\n result: ResultMessage.encodeResult(result, error),\n });\n }\n\n sendAgentStateMessage({\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n }: {\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }) {\n this.next({\n type: RuntimeEventTypes.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n });\n }\n}\n\nexport class RuntimeEventSource {\n private eventStream$ = new RuntimeEventSubject();\n private callback!: EventSourceCallback;\n\n async stream(callback: EventSourceCallback): Promise<void> {\n this.callback = callback;\n }\n\n sendErrorMessageToChat(message = \"An error occurred. Please try again.\") {\n const errorMessage = `❌ ${message}`;\n if (!this.callback) {\n this.stream(async (eventStream$) => {\n eventStream$.sendTextMessage(randomId(), errorMessage);\n });\n } else {\n this.eventStream$.sendTextMessage(randomId(), errorMessage);\n }\n }\n\n processRuntimeEvents({\n serverSideActions,\n guardrailsResult$,\n actionInputsWithoutAgents,\n threadId,\n }: {\n serverSideActions: Action<any>[];\n guardrailsResult$?: Subject<GuardrailsResult>;\n actionInputsWithoutAgents: ActionInput[];\n threadId: string;\n }) {\n this.callback(this.eventStream$).catch((error) => {\n console.error(\"Error in event source callback\", error);\n\n // Convert streaming errors to structured errors\n const structuredError = convertStreamingErrorToStructured(error);\n this.eventStream$.error(structuredError);\n this.eventStream$.complete();\n });\n return this.eventStream$.pipe(\n // track state\n scan(\n (acc, event) => {\n // It seems like this is needed so that rxjs recognizes the object has changed\n // This fixes an issue where action were executed multiple times\n // Not investigating further for now (Markus)\n acc = { ...acc };\n\n if (event.type === RuntimeEventTypes.ActionExecutionStart) {\n acc.callActionServerSide =\n serverSideActions.find((action) => action.name === event.actionName) !== undefined;\n acc.args = \"\";\n acc.actionExecutionId = event.actionExecutionId;\n if (acc.callActionServerSide) {\n acc.action = serverSideActions.find((action) => action.name === event.actionName);\n }\n acc.actionExecutionParentMessageId = event.parentMessageId;\n } else if (event.type === RuntimeEventTypes.ActionExecutionArgs) {\n acc.args += event.args;\n }\n\n acc.event = event;\n\n return acc;\n },\n {\n event: null,\n callActionServerSide: false,\n args: \"\",\n actionExecutionId: null,\n action: null,\n actionExecutionParentMessageId: null,\n } as RuntimeEventWithState,\n ),\n concatMap((eventWithState) => {\n if (\n eventWithState.event!.type === RuntimeEventTypes.ActionExecutionEnd &&\n eventWithState.callActionServerSide\n ) {\n const toolCallEventStream$ = new RuntimeEventSubject();\n executeAction(\n toolCallEventStream$,\n guardrailsResult$ ? guardrailsResult$ : null,\n eventWithState.action!,\n eventWithState.args,\n eventWithState.actionExecutionParentMessageId,\n eventWithState.actionExecutionId,\n actionInputsWithoutAgents,\n threadId,\n ).catch((error) => {\n console.error(error);\n });\n\n telemetry.capture(\"oss.runtime.server_action_executed\", {});\n return concat(of(eventWithState.event!), toolCallEventStream$).pipe(\n catchError((error) => {\n console.error(\"Error in tool call stream\", error);\n\n // Convert streaming errors to structured errors and send as action result\n const structuredError = convertStreamingErrorToStructured(error);\n toolCallEventStream$.sendActionExecutionResult({\n actionExecutionId: eventWithState.actionExecutionId!,\n actionName: eventWithState.action!.name,\n error: {\n code: structuredError.code,\n message: structuredError.message,\n },\n });\n\n return EMPTY;\n }),\n );\n } else {\n return of(eventWithState.event!);\n }\n }),\n );\n }\n}\n\nasync function executeAction(\n eventStream$: RuntimeEventSubject,\n guardrailsResult$: Subject<GuardrailsResult> | null,\n action: Action<any>,\n actionArguments: string,\n actionExecutionParentMessageId: string | null,\n actionExecutionId: string,\n actionInputsWithoutAgents: ActionInput[],\n threadId: string,\n) {\n if (guardrailsResult$) {\n const { status } = await firstValueFrom(guardrailsResult$);\n\n if (status === \"denied\") {\n eventStream$.complete();\n return;\n }\n }\n\n // Prepare arguments for function calling\n let args: Record<string, any>[] = [];\n if (actionArguments) {\n try {\n args = JSON.parse(actionArguments);\n } catch (e) {\n console.error(\"Action argument unparsable\", { actionArguments });\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n error: {\n code: \"INVALID_ARGUMENTS\",\n message: \"Failed to parse action arguments\",\n },\n });\n return;\n }\n }\n\n // handle LangGraph agents\n if (isRemoteAgentAction(action)) {\n const result = `${action.name} agent started`;\n\n const agentExecution = plainToInstance(ActionExecutionMessage, {\n id: actionExecutionId,\n createdAt: new Date(),\n name: action.name,\n arguments: JSON.parse(actionArguments),\n parentMessageId: actionExecutionParentMessageId ?? actionExecutionId,\n });\n\n const agentExecutionResult = plainToInstance(ResultMessage, {\n id: \"result-\" + actionExecutionId,\n createdAt: new Date(),\n actionExecutionId,\n actionName: action.name,\n result,\n });\n\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n result,\n });\n\n const stream = await action.remoteAgentHandler({\n name: action.name,\n threadId,\n actionInputsWithoutAgents,\n additionalMessages: [agentExecution, agentExecutionResult],\n });\n\n // forward to eventStream$\n from(stream).subscribe({\n next: (event) => eventStream$.next(event),\n error: (err) => {\n console.error(\"Error in stream\", err);\n\n // Convert streaming errors to structured errors\n const structuredError = convertStreamingErrorToStructured(err);\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n error: {\n code: structuredError.code,\n message: structuredError.message,\n },\n });\n eventStream$.complete();\n },\n complete: () => eventStream$.complete(),\n });\n } else {\n // call the function\n try {\n const result = await action.handler?.(args);\n await streamLangChainResponse({\n result,\n eventStream$,\n actionExecution: {\n name: action.name,\n id: actionExecutionId,\n },\n });\n } catch (e) {\n console.error(\"Error in action handler\", e);\n eventStream$.sendActionExecutionResult({\n actionExecutionId,\n actionName: action.name,\n error: {\n code: \"HANDLER_ERROR\",\n message: e.message,\n },\n });\n eventStream$.complete();\n }\n }\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Handle network termination errors\n if (\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitError({\n message:\n \"Connection to agent was unexpectedly terminated. This may be due to the agent service being restarted or network issues. Please try again.\",\n code: CopilotKitErrorCode.NETWORK_ERROR,\n });\n }\n\n // Handle other network-related errors\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\")\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"event streaming connection\",\n message:\n \"Network error occurred during event streaming. Please check your connection and try again.\",\n });\n }\n\n // Handle abort/cancellation errors (these are usually normal)\n if (\n error?.message?.includes(\"aborted\") ||\n error?.message?.includes(\"canceled\") ||\n error?.message?.includes(\"signal is aborted\")\n ) {\n return new CopilotKitError({\n message: \"Request was cancelled\",\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n // Handle API key errors (authentication/authorization issues)\n const errorMessage = error?.message || String(error);\n if (\n errorMessage.includes(\"401\") ||\n errorMessage.toLowerCase().includes(\"api key\") ||\n errorMessage.toLowerCase().includes(\"unauthorized\") ||\n errorMessage.toLowerCase().includes(\"authentication\") ||\n errorMessage.toLowerCase().includes(\"incorrect api key\")\n ) {\n return new CopilotKitError({\n message: `Event streaming error: ${errorMessage}`,\n code: CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,\n });\n }\n\n // Default: convert unknown streaming errors\n return new CopilotKitError({\n message: `Event streaming error: ${errorMessage}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n}\n","import { TelemetryClient } from \"@copilotkit/shared\";\nimport { EndpointType, LangGraphPlatformEndpoint } from \"./runtime/remote-actions\";\nimport { createHash } from \"node:crypto\";\nimport { CopilotRuntime, resolveEndpointType } from \"./runtime/copilot-runtime\";\nimport { RuntimeInstanceCreatedInfo } from \"@copilotkit/shared/src/telemetry/events\";\nimport { CreateCopilotRuntimeServerOptions } from \"./integrations/shared\";\nconst packageJson = require(\"../../package.json\");\n\nconst telemetryClient = new TelemetryClient({\n packageName: packageJson.name,\n packageVersion: packageJson.version,\n});\n\nexport function getRuntimeInstanceTelemetryInfo(\n options: CreateCopilotRuntimeServerOptions,\n): RuntimeInstanceCreatedInfo {\n const runtime = options.runtime;\n const endpointsInfo = runtime.remoteEndpointDefinitions.reduce(\n (acc, endpoint) => {\n let info = { ...acc };\n\n const endpointType = resolveEndpointType(endpoint);\n if (!info.endpointTypes.includes(endpointType)) {\n info = {\n ...info,\n endpointTypes: [...info.endpointTypes, endpointType],\n };\n }\n\n if (endpointType === EndpointType.LangGraphPlatform) {\n // When type is resolved, recreating a const with casting of type\n const ep = endpoint as LangGraphPlatformEndpoint;\n info = {\n ...info,\n agentsAmount: ep.agents.length,\n hashedKey: ep.langsmithApiKey\n ? createHash(\"sha256\").update(ep.langsmithApiKey).digest(\"hex\")\n : null,\n };\n }\n\n return info;\n },\n { endpointTypes: [], agentsAmount: null, hashedKey: null },\n );\n\n // Get public API key from options.cloud.publicApiKey\n const publicApiKey = options.cloud?.publicApiKey;\n const apiKeyProvided = !!publicApiKey && publicApiKey.trim().length > 0;\n\n return {\n actionsAmount: runtime.actions.length,\n endpointsAmount: runtime.remoteEndpointDefinitions.length,\n endpointTypes: endpointsInfo.endpointTypes,\n agentsAmount: endpointsInfo.agentsAmount,\n hashedLgcKey: endpointsInfo.hashedKey,\n \"cloud.api_key_provided\": apiKeyProvided,\n ...(apiKeyProvided ? { \"cloud.public_api_key\": publicApiKey } : {}),\n ...(options.cloud?.baseUrl ? { \"cloud.base_url\": options.cloud.baseUrl } : {}),\n } as RuntimeInstanceCreatedInfo;\n}\n\nexport default telemetryClient;\n","import { Action, CopilotKitErrorCode } from \"@copilotkit/shared\";\nimport { GraphQLContext } from \"../integrations/shared\";\nimport { Logger } from \"pino\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { RuntimeEvent } from \"../../service-adapters/events\";\nimport { Observable } from \"rxjs\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport {\n constructLGCRemoteAction,\n constructRemoteActions,\n createHeaders,\n} from \"./remote-action-constructors\";\nimport {\n CopilotKitLowLevelError,\n ResolvedCopilotKitError,\n CopilotKitError,\n} from \"@copilotkit/shared\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { constructAGUIRemoteAction } from \"./agui-action\";\n\nexport type EndpointDefinition = CopilotKitEndpoint | LangGraphPlatformEndpoint;\n\nexport enum EndpointType {\n CopilotKit = \"copilotKit\",\n LangGraphPlatform = \"langgraph-platform\",\n}\n\nexport interface BaseEndpointDefinition<TActionType extends EndpointType> {\n type?: TActionType;\n}\n\nexport interface CopilotKitEndpoint extends BaseEndpointDefinition<EndpointType.CopilotKit> {\n url: string;\n onBeforeRequest?: ({ ctx }: { ctx: GraphQLContext }) => {\n headers?: Record<string, string> | undefined;\n };\n}\n\nexport interface LangGraphPlatformAgent {\n name: string;\n description: string;\n assistantId?: string;\n}\n\nexport interface LangGraphPlatformEndpoint\n extends BaseEndpointDefinition<EndpointType.LangGraphPlatform> {\n deploymentUrl: string;\n langsmithApiKey?: string | null;\n agents: LangGraphPlatformAgent[];\n}\n\nexport type RemoteActionInfoResponse = {\n actions: any[];\n agents: any[];\n};\n\nexport type RemoteAgentHandlerParams = {\n name: string;\n actionInputsWithoutAgents: ActionInput[];\n threadId?: string;\n nodeName?: string;\n additionalMessages?: Message[];\n metaEvents?: MetaEventInput[];\n};\n\nexport type RemoteAgentAction = Action<any> & {\n remoteAgentHandler: (params: RemoteAgentHandlerParams) => Promise<Observable<RuntimeEvent>>;\n};\n\nexport function isRemoteAgentAction(action: Action<any>): action is RemoteAgentAction {\n if (!action) {\n return false;\n }\n return typeof (action as RemoteAgentAction).remoteAgentHandler === \"function\";\n}\n\nasync function fetchRemoteInfo({\n url,\n onBeforeRequest,\n graphqlContext,\n logger,\n frontendUrl,\n}: {\n url: string;\n onBeforeRequest?: CopilotKitEndpoint[\"onBeforeRequest\"];\n graphqlContext: GraphQLContext;\n logger: Logger;\n frontendUrl?: string;\n}): Promise<RemoteActionInfoResponse> {\n logger.debug({ url }, \"Fetching actions from url\");\n const headers = createHeaders(onBeforeRequest, graphqlContext);\n\n const fetchUrl = `${url}/info`;\n try {\n const response = await fetch(fetchUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ properties: graphqlContext.properties, frontendUrl }),\n });\n\n if (!response.ok) {\n logger.error(\n { url, status: response.status, body: await response.text() },\n \"Failed to fetch actions from url\",\n );\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const json = await response.json();\n logger.debug({ json }, \"Fetched actions from url\");\n return json;\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n}\n\nexport async function setupRemoteActions({\n remoteEndpointDefinitions,\n graphqlContext,\n messages,\n agentStates,\n frontendUrl,\n agents,\n metaEvents,\n}: {\n remoteEndpointDefinitions: EndpointDefinition[];\n graphqlContext: GraphQLContext;\n messages: Message[];\n agentStates?: AgentStateInput[];\n frontendUrl?: string;\n agents: Record<string, AbstractAgent>;\n metaEvents?: MetaEventInput[];\n}): Promise<Action[]> {\n const logger = graphqlContext.logger.child({ component: \"remote-actions.fetchRemoteActions\" });\n logger.debug({ remoteEndpointDefinitions }, \"Fetching from remote endpoints\");\n\n // Remove duplicates of remoteEndpointDefinitions.url\n const filtered = remoteEndpointDefinitions.filter((value, index, self) => {\n if (value.type === EndpointType.LangGraphPlatform) {\n return value;\n }\n return index === self.findIndex((t: CopilotKitEndpoint) => t.url === value.url);\n });\n\n const result = await Promise.all(\n filtered.map(async (endpoint) => {\n // Check for properties that can distinguish LG platform from other actions\n if (endpoint.type === EndpointType.LangGraphPlatform) {\n return constructLGCRemoteAction({\n endpoint,\n messages,\n graphqlContext,\n logger: logger.child({\n component: \"remote-actions.constructLGCRemoteAction\",\n endpoint,\n }),\n agentStates,\n });\n }\n\n const json = await fetchRemoteInfo({\n url: endpoint.url,\n onBeforeRequest: endpoint.onBeforeRequest,\n graphqlContext,\n logger: logger.child({ component: \"remote-actions.fetchActionsFromUrl\", endpoint }),\n frontendUrl,\n });\n\n return constructRemoteActions({\n json,\n messages,\n url: endpoint.url,\n onBeforeRequest: endpoint.onBeforeRequest,\n graphqlContext,\n logger: logger.child({ component: \"remote-actions.constructActions\", endpoint }),\n agentStates,\n });\n }),\n );\n\n for (const [key, agent] of Object.entries(agents)) {\n if (agent.agentId !== undefined && agent.agentId !== key) {\n throw new CopilotKitError({\n message: `Agent ${key} has agentId ${agent.agentId} which does not match the key ${key}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n } else if (agent.agentId === undefined) {\n agent.agentId = key;\n }\n\n result.push(\n constructAGUIRemoteAction({\n logger,\n messages,\n agentStates,\n agent: agent,\n metaEvents,\n }),\n );\n }\n\n return result.flat();\n}\n","import { createHash } from \"node:crypto\";\nimport {\n CopilotKitEndpoint,\n RemoteAgentHandlerParams,\n RemoteActionInfoResponse,\n LangGraphPlatformEndpoint,\n} from \"./remote-actions\";\nimport { GraphQLContext } from \"../integrations\";\nimport { Logger } from \"pino\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport { Observable } from \"rxjs\";\nimport { RuntimeEvent, RuntimeEventSubject } from \"../../service-adapters/events\";\nimport telemetry from \"../telemetry-client\";\nimport { RemoteLangGraphEventSource } from \"../../agents/langgraph/event-source\";\nimport { Action } from \"@copilotkit/shared\";\nimport { execute } from \"./remote-lg-action\";\nimport { CopilotKitError, CopilotKitLowLevelError } from \"@copilotkit/shared\";\nimport { writeJsonLineResponseToEventStream } from \"../streaming\";\nimport { CopilotKitApiDiscoveryError, ResolvedCopilotKitError } from \"@copilotkit/shared\";\nimport { parseJson, tryMap } from \"@copilotkit/shared\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { fetchWithRetry } from \"./retry-utils\";\n\nexport function constructLGCRemoteAction({\n endpoint,\n graphqlContext,\n logger,\n messages,\n agentStates,\n}: {\n endpoint: LangGraphPlatformEndpoint;\n graphqlContext: GraphQLContext;\n logger: Logger;\n messages: Message[];\n agentStates?: AgentStateInput[];\n}) {\n const agents = endpoint.agents.map((agent) => ({\n name: agent.name,\n description: agent.description,\n parameters: [],\n handler: async (_args: any) => {},\n remoteAgentHandler: async ({\n name,\n actionInputsWithoutAgents,\n threadId,\n nodeName,\n additionalMessages = [],\n metaEvents,\n }: RemoteAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {\n logger.debug({ actionName: agent.name }, \"Executing LangGraph Platform agent\");\n\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: true,\n type: \"langgraph-platform\",\n agentsAmount: endpoint.agents.length,\n hashedLgcKey: endpoint.langsmithApiKey\n ? createHash(\"sha256\").update(endpoint.langsmithApiKey).digest(\"hex\")\n : null,\n });\n\n let state = {};\n let config = {};\n if (agentStates) {\n const jsonState = agentStates.find((state) => state.agentName === name);\n if (jsonState) {\n state = parseJson(jsonState.state, {});\n config = parseJson(jsonState.config, {});\n }\n }\n\n try {\n const response = await execute({\n logger: logger.child({ component: \"remote-actions.remote-lg-action.streamEvents\" }),\n deploymentUrl: endpoint.deploymentUrl,\n langsmithApiKey: endpoint.langsmithApiKey,\n agent,\n threadId,\n nodeName,\n messages: [...messages, ...additionalMessages],\n state,\n config,\n properties: graphqlContext.properties,\n actions: tryMap(actionInputsWithoutAgents, (action: ActionInput) => ({\n name: action.name,\n description: action.description,\n parameters: JSON.parse(action.jsonSchema),\n })),\n metaEvents,\n });\n\n const eventSource = new RemoteLangGraphEventSource();\n writeJsonLineResponseToEventStream(response, eventSource.eventStream$);\n return eventSource.processLangGraphEvents();\n } catch (error) {\n logger.error(\n { url: endpoint.deploymentUrl, status: 500, body: error.message },\n \"Failed to execute LangGraph Platform agent\",\n );\n throw new Error(\"Failed to execute LangGraph Platform agent\");\n }\n },\n }));\n\n return [...agents];\n}\n\nexport enum RemoteAgentType {\n LangGraph = \"langgraph\",\n CrewAI = \"crewai\",\n}\n\nexport function constructRemoteActions({\n json,\n url,\n onBeforeRequest,\n graphqlContext,\n logger,\n messages,\n agentStates,\n}: {\n json: RemoteActionInfoResponse;\n url: string;\n onBeforeRequest?: CopilotKitEndpoint[\"onBeforeRequest\"];\n graphqlContext: GraphQLContext;\n logger: Logger;\n messages: Message[];\n agentStates?: AgentStateInput[];\n}): Action<any>[] {\n const totalAgents = Array.isArray(json[\"agents\"]) ? json[\"agents\"].length : 0;\n\n const actions = json[\"actions\"].map((action) => ({\n name: action.name,\n description: action.description,\n parameters: action.parameters,\n handler: async (args: any) => {\n logger.debug({ actionName: action.name, args }, \"Executing remote action\");\n\n const headers = createHeaders(onBeforeRequest, graphqlContext);\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: false,\n type: \"self-hosted\",\n agentsAmount: totalAgents,\n });\n\n const fetchUrl = `${url}/actions/execute`;\n try {\n const response = await fetchWithRetry(\n fetchUrl,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n name: action.name,\n arguments: args,\n properties: graphqlContext.properties,\n }),\n },\n logger,\n );\n\n if (!response.ok) {\n logger.error(\n { url, status: response.status, body: await response.text() },\n \"Failed to execute remote action\",\n );\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const requestResult = await response.json();\n\n const result = requestResult[\"result\"];\n logger.debug({ actionName: action.name, result }, \"Executed remote action\");\n return result;\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n },\n }));\n\n const agents = totalAgents\n ? json[\"agents\"].map((agent) => ({\n name: agent.name,\n description: agent.description,\n parameters: [],\n handler: async (_args: any) => {},\n\n remoteAgentHandler: async ({\n name,\n actionInputsWithoutAgents,\n threadId,\n nodeName,\n additionalMessages = [],\n metaEvents,\n }: RemoteAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {\n logger.debug({ actionName: agent.name }, \"Executing remote agent\");\n\n const headers = createHeaders(onBeforeRequest, graphqlContext);\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: true,\n type: \"self-hosted\",\n agentsAmount: json[\"agents\"].length,\n });\n\n let state = {};\n let config = {};\n if (agentStates) {\n const jsonState = agentStates.find((state) => state.agentName === name);\n if (jsonState) {\n state = parseJson(jsonState.state, {});\n config = parseJson(jsonState.config, {});\n }\n }\n\n const fetchUrl = `${url}/agents/execute`;\n try {\n const response = await fetchWithRetry(\n fetchUrl,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n name,\n threadId,\n nodeName,\n messages: [...messages, ...additionalMessages],\n state,\n config,\n properties: graphqlContext.properties,\n actions: tryMap(actionInputsWithoutAgents, (action: ActionInput) => ({\n name: action.name,\n description: action.description,\n parameters: JSON.parse(action.jsonSchema),\n })),\n metaEvents,\n }),\n },\n logger,\n );\n\n if (!response.ok) {\n logger.error(\n { url, status: response.status, body: await response.text() },\n \"Failed to execute remote agent\",\n );\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n if (agent.type === RemoteAgentType.LangGraph) {\n const eventSource = new RemoteLangGraphEventSource();\n writeJsonLineResponseToEventStream(response.body!, eventSource.eventStream$);\n return eventSource.processLangGraphEvents();\n } else if (agent.type === RemoteAgentType.CrewAI) {\n const eventStream$ = new RuntimeEventSubject();\n writeJsonLineResponseToEventStream(response.body!, eventStream$);\n return eventStream$;\n } else {\n throw new Error(\"Unsupported agent type\");\n }\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n },\n }))\n : [];\n\n return [...actions, ...agents];\n}\n\nexport function createHeaders(\n onBeforeRequest: CopilotKitEndpoint[\"onBeforeRequest\"],\n graphqlContext: GraphQLContext,\n) {\n const headers = {\n \"Content-Type\": \"application/json\",\n };\n\n if (onBeforeRequest) {\n const { headers: additionalHeaders } = onBeforeRequest({ ctx: graphqlContext });\n if (additionalHeaders) {\n Object.assign(headers, additionalHeaders);\n }\n }\n\n return headers;\n}\n","import { catchError, mergeMap, ReplaySubject, scan } from \"rxjs\";\nimport { CustomEventNames, LangGraphEvent, LangGraphEventTypes } from \"./events\";\nimport {\n RuntimeEvent,\n RuntimeEventTypes,\n RuntimeMetaEventName,\n} from \"../../service-adapters/events\";\nimport { randomId, CopilotKitError } from \"@copilotkit/shared\";\n\ninterface LangGraphEventWithState {\n event: LangGraphEvent | null;\n\n isMessageStart: boolean;\n isMessageEnd: boolean;\n isToolCallStart: boolean;\n isToolCallEnd: boolean;\n isToolCall: boolean;\n\n lastMessageId: string | null;\n lastToolCallId: string | null;\n lastToolCallName: string | null;\n currentContent: string | null;\n processedToolCallIds: Set<string>;\n}\n\nexport class RemoteLangGraphEventSource {\n public eventStream$ = new ReplaySubject<LangGraphEvent>();\n\n private shouldEmitToolCall(\n shouldEmitToolCalls: string | string[] | boolean,\n toolCallName: string,\n ) {\n if (typeof shouldEmitToolCalls === \"boolean\") {\n return shouldEmitToolCalls;\n }\n if (Array.isArray(shouldEmitToolCalls)) {\n return shouldEmitToolCalls.includes(toolCallName);\n }\n return shouldEmitToolCalls === toolCallName;\n }\n\n private getCurrentContent(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n const content = event.data?.chunk?.kwargs?.content ?? event.data?.chunk?.content;\n\n if (!content) {\n const toolCallChunks = this.getCurrentToolCallChunks(event) ?? [];\n for (const chunk of toolCallChunks) {\n if (chunk.args) {\n return chunk.args;\n }\n }\n }\n\n if (typeof content === \"string\") {\n return content;\n } else if (Array.isArray(content) && content.length > 0) {\n return content[0].text;\n }\n\n return null;\n }\n\n private getCurrentMessageId(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n return event.data?.chunk?.kwargs?.id ?? event.data?.chunk?.id;\n }\n\n private getCurrentToolCallChunks(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n return event.data?.chunk?.kwargs?.tool_call_chunks ?? event.data?.chunk?.tool_call_chunks;\n }\n\n private getResponseMetadata(event: LangGraphEvent) {\n // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs\n return event.data?.chunk?.kwargs?.response_metadata ?? event.data?.chunk?.response_metadata;\n }\n\n processLangGraphEvents() {\n let lastEventWithState: LangGraphEventWithState | null = null;\n\n return this.eventStream$.pipe(\n scan(\n (acc, event) => {\n if (event.event === LangGraphEventTypes.OnChatModelStream) {\n const prevMessageId = acc.lastMessageId;\n acc.currentContent = this.getCurrentContent(event);\n acc.lastMessageId = this.getCurrentMessageId(event) ?? acc.lastMessageId;\n const toolCallChunks = this.getCurrentToolCallChunks(event) ?? [];\n const responseMetadata = this.getResponseMetadata(event);\n // Check if a given event is a tool call\n const toolCallCheck = toolCallChunks && toolCallChunks.length > 0;\n let isToolCallEnd = responseMetadata?.finish_reason === \"tool_calls\";\n\n acc.isToolCallStart = toolCallChunks.some((chunk: any) => chunk.name && chunk.id);\n acc.isMessageStart = prevMessageId !== acc.lastMessageId && !acc.isToolCallStart;\n\n let previousRoundHadToolCall = acc.isToolCall;\n acc.isToolCall = toolCallCheck;\n // Previous \"acc.isToolCall\" was set but now it won't pass the check, it means the tool call just ended.\n if (previousRoundHadToolCall && !toolCallCheck) {\n isToolCallEnd = true;\n }\n acc.isToolCallEnd = isToolCallEnd;\n acc.isMessageEnd = responseMetadata?.finish_reason === \"stop\";\n ({ name: acc.lastToolCallName, id: acc.lastToolCallId } = toolCallChunks.find(\n (chunk: any) => chunk.name && chunk.id,\n ) ?? { name: acc.lastToolCallName, id: acc.lastToolCallId });\n }\n acc.event = event;\n lastEventWithState = acc; // Capture the state\n return acc;\n },\n {\n event: null,\n isMessageStart: false,\n isMessageEnd: false,\n isToolCallStart: false,\n isToolCallEnd: false,\n isToolCall: false,\n lastMessageId: null,\n lastToolCallId: null,\n lastToolCallName: null,\n currentContent: null,\n processedToolCallIds: new Set<string>(),\n } as LangGraphEventWithState,\n ),\n mergeMap((acc): RuntimeEvent[] => {\n const events: RuntimeEvent[] = [];\n\n let shouldEmitMessages = true;\n let shouldEmitToolCalls: string | string[] | boolean = true;\n\n if (acc.event.event == LangGraphEventTypes.OnChatModelStream) {\n if (\"copilotkit:emit-tool-calls\" in (acc.event.metadata || {})) {\n shouldEmitToolCalls = acc.event.metadata[\"copilotkit:emit-tool-calls\"];\n }\n if (\"copilotkit:emit-messages\" in (acc.event.metadata || {})) {\n shouldEmitMessages = acc.event.metadata[\"copilotkit:emit-messages\"];\n }\n }\n\n if (acc.event.event === LangGraphEventTypes.OnInterrupt) {\n events.push({\n type: RuntimeEventTypes.MetaEvent,\n name: RuntimeMetaEventName.LangGraphInterruptEvent,\n value: acc.event.value,\n });\n }\n if (acc.event.event === LangGraphEventTypes.OnCopilotKitInterrupt) {\n events.push({\n type: RuntimeEventTypes.MetaEvent,\n name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent,\n data: acc.event.data,\n });\n }\n\n const responseMetadata = this.getResponseMetadata(acc.event);\n\n // Tool call ended: emit ActionExecutionEnd\n if (\n acc.isToolCallEnd &&\n this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName) &&\n acc.lastToolCallId &&\n !acc.processedToolCallIds.has(acc.lastToolCallId)\n ) {\n acc.processedToolCallIds.add(acc.lastToolCallId);\n\n events.push({\n type: RuntimeEventTypes.ActionExecutionEnd,\n actionExecutionId: acc.lastToolCallId,\n });\n }\n\n // Message ended: emit TextMessageEnd\n else if (responseMetadata?.finish_reason === \"stop\" && shouldEmitMessages) {\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: acc.lastMessageId,\n });\n }\n\n switch (acc.event!.event) {\n //\n // Custom events\n //\n case LangGraphEventTypes.OnCustomEvent:\n //\n // Manually emit a message\n //\n if (acc.event.name === CustomEventNames.CopilotKitManuallyEmitMessage) {\n events.push({\n type: RuntimeEventTypes.TextMessageStart,\n messageId: acc.event.data.message_id,\n });\n events.push({\n type: RuntimeEventTypes.TextMessageContent,\n messageId: acc.event.data.message_id,\n content: acc.event.data.message,\n });\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: acc.event.data.message_id,\n });\n }\n //\n // Manually emit a tool call\n //\n else if (acc.event.name === CustomEventNames.CopilotKitManuallyEmitToolCall) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId: acc.event.data.id,\n actionName: acc.event.data.name,\n parentMessageId: acc.event.data.id,\n });\n events.push({\n type: RuntimeEventTypes.ActionExecutionArgs,\n actionExecutionId: acc.event.data.id,\n args: JSON.stringify(acc.event.data.args),\n });\n events.push({\n type: RuntimeEventTypes.ActionExecutionEnd,\n actionExecutionId: acc.event.data.id,\n });\n }\n break;\n case LangGraphEventTypes.OnCopilotKitStateSync:\n events.push({\n type: RuntimeEventTypes.AgentStateMessage,\n threadId: acc.event.thread_id,\n role: acc.event.role,\n agentName: acc.event.agent_name,\n nodeName: acc.event.node_name,\n runId: acc.event.run_id,\n active: acc.event.active,\n state: JSON.stringify(acc.event.state),\n running: acc.event.running,\n });\n break;\n case LangGraphEventTypes.OnChatModelStream:\n if (\n acc.isToolCallStart &&\n this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName)\n ) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId: acc.lastToolCallId,\n actionName: acc.lastToolCallName,\n parentMessageId: acc.lastMessageId,\n });\n }\n // Message started: emit TextMessageStart\n else if (acc.isMessageStart && shouldEmitMessages) {\n acc.processedToolCallIds.clear();\n events.push({\n type: RuntimeEventTypes.TextMessageStart,\n messageId: acc.lastMessageId,\n });\n }\n\n // Tool call args: emit ActionExecutionArgs\n if (\n acc.isToolCall &&\n acc.currentContent &&\n this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName)\n ) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionArgs,\n actionExecutionId: acc.lastToolCallId,\n args: acc.currentContent,\n });\n }\n // Message content: emit TextMessageContent\n else if (!acc.isToolCall && acc.currentContent && shouldEmitMessages) {\n events.push({\n type: RuntimeEventTypes.TextMessageContent,\n messageId: acc.lastMessageId,\n content: acc.currentContent,\n });\n }\n break;\n }\n return events;\n }),\n catchError((error) => {\n console.error(error);\n\n // If it's a structured CopilotKitError, re-throw it to be handled by the frontend error system\n if (\n error instanceof CopilotKitError ||\n (error?.name && error.name.includes(\"CopilotKit\"))\n ) {\n throw error;\n }\n\n const events: RuntimeEvent[] = [];\n\n if (lastEventWithState?.lastMessageId && !lastEventWithState.isToolCall) {\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: lastEventWithState.lastMessageId,\n });\n }\n if (lastEventWithState?.lastToolCallId) {\n events.push({\n type: RuntimeEventTypes.ActionExecutionEnd,\n actionExecutionId: lastEventWithState.lastToolCallId,\n });\n }\n\n const messageId = randomId();\n\n events.push({\n type: RuntimeEventTypes.TextMessageStart,\n messageId: messageId,\n });\n events.push({\n type: RuntimeEventTypes.TextMessageContent,\n messageId: messageId,\n content: \"❌ An error occurred. Please try again.\",\n });\n events.push({\n type: RuntimeEventTypes.TextMessageEnd,\n messageId: messageId,\n });\n\n return events;\n }),\n );\n }\n}\n","import { ActionExecutionMessage, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\n\nexport enum LangGraphEventTypes {\n OnChainStart = \"on_chain_start\",\n OnChainStream = \"on_chain_stream\",\n OnChainEnd = \"on_chain_end\",\n OnChatModelStart = \"on_chat_model_start\",\n OnChatModelStream = \"on_chat_model_stream\",\n OnChatModelEnd = \"on_chat_model_end\",\n OnToolStart = \"on_tool_start\",\n OnToolEnd = \"on_tool_end\",\n OnCopilotKitStateSync = \"on_copilotkit_state_sync\",\n OnCopilotKitEmitMessage = \"on_copilotkit_emit_message\",\n OnCopilotKitEmitToolCall = \"on_copilotkit_emit_tool_call\",\n OnCustomEvent = \"on_custom_event\",\n OnInterrupt = \"on_interrupt\",\n OnCopilotKitInterrupt = \"on_copilotkit_interrupt\",\n}\n\nexport enum MetaEventNames {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport enum CustomEventNames {\n CopilotKitManuallyEmitMessage = \"copilotkit_manually_emit_message\",\n CopilotKitManuallyEmitToolCall = \"copilotkit_manually_emit_tool_call\",\n CopilotKitManuallyEmitIntermediateState = \"copilotkit_manually_emit_intermediate_state\",\n CopilotKitExit = \"copilotkit_exit\",\n}\n\ntype LangGraphOnCopilotKitStateSyncEvent = {\n event: LangGraphEventTypes.OnCopilotKitStateSync;\n thread_id: string;\n agent_name: string;\n node_name: string;\n run_id: string;\n active: boolean;\n role: string;\n state: any;\n running: boolean;\n};\n\ntype LangGraphOnChainStartEvent = {\n event: LangGraphEventTypes.OnChainStart;\n run_id: string;\n name: string;\n tags: string[];\n metadata: { thread_id: string };\n data: {\n input: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainEndEvent = {\n event: LangGraphEventTypes.OnChainEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: any;\n output: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStartEvent = {\n event: LangGraphEventTypes.OnChatModelStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n type: string;\n id: string;\n };\n }[][];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStreamEvent = {\n event: LangGraphEventTypes.OnChatModelStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n chunk: {\n lc: number;\n type: string;\n id: string;\n kwargs: {\n content: string | { text: string; type: string; index: number }[];\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: {}; id: string; type: string }[];\n tool_call_chunks: {\n name: string;\n args: string;\n id: string;\n index: number;\n type: string;\n }[];\n invalid_tool_calls: any[];\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelEndEvent = {\n event: LangGraphEventTypes.OnChatModelEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: any;\n output: {\n generations: {\n text: string;\n generation_info: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n message: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls: any[];\n };\n };\n }[][];\n llm_output: any;\n run: any;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainStreamEvent = {\n event: LangGraphEventTypes.OnChainStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step?: number;\n langgraph_node?: string;\n langgraph_triggers?: string[];\n langgraph_task_idx?: number;\n thread_ts?: string;\n };\n data: {\n chunk: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs?: {\n tool_calls?: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata?: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls?: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls?: any[];\n };\n }[];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolStartEvent = {\n event: LangGraphEventTypes.OnToolStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolEndEvent = {\n event: LangGraphEventTypes.OnToolEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n output: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string[];\n type: string;\n name: string;\n tool_call_id: string;\n status: string;\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnCustomEvent = {\n event: LangGraphEventTypes.OnCustomEvent;\n run_id: string;\n name: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_path: [string, string];\n langgraph_checkpoint_ns: string;\n checkpoint_ns: string;\n };\n data: any;\n parent_ids: string[];\n};\n\ninterface LangGraphInterruptEvent {\n event: LangGraphEventTypes.OnInterrupt;\n value: string;\n}\n\ninterface CopilotKitLangGraphInterruptEvent {\n event: LangGraphEventTypes.OnCopilotKitInterrupt;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n}\n\nexport type LangGraphEvent =\n | LangGraphOnChainStartEvent\n | LangGraphOnChainStreamEvent\n | LangGraphOnChainEndEvent\n | LangGraphOnChatModelStartEvent\n | LangGraphOnChatModelStreamEvent\n | LangGraphOnChatModelEndEvent\n | LangGraphOnToolStartEvent\n | LangGraphOnToolEndEvent\n | LangGraphOnCopilotKitStateSyncEvent\n | LangGraphOnCustomEvent\n | LangGraphInterruptEvent\n | CopilotKitLangGraphInterruptEvent;\n","import {\n Client as LangGraphClient,\n EventsStreamEvent,\n GraphSchema,\n StreamMode,\n} from \"@langchain/langgraph-sdk\";\nimport { createHash } from \"node:crypto\";\nimport { isValidUUID, randomUUID } from \"@copilotkit/shared\";\nimport { parse as parsePartialJson } from \"partial-json\";\nimport { Logger } from \"pino\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangGraphPlatformAgent, LangGraphPlatformEndpoint } from \"./remote-actions\";\nimport { CopilotRequestContextProperties } from \"../integrations\";\nimport { ActionExecutionMessage, Message, MessageType } from \"../../graphql/types/converted\";\nimport { MessageRole } from \"../../graphql/types/enums\";\nimport { CustomEventNames, LangGraphEventTypes } from \"../../agents/langgraph/events\";\nimport telemetry from \"../telemetry-client\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\nimport { MetaEventName } from \"../../graphql/types/meta-events.type\";\nimport { parseJson, CopilotKitMisuseError } from \"@copilotkit/shared\";\nimport { RemoveMessage } from \"@langchain/core/messages\";\nimport { RETRY_CONFIG, isRetryableError, sleep, calculateDelay } from \"./retry-utils\";\n\ntype State = Record<string, any>;\n\ntype ExecutionAction = Pick<ActionInput, \"name\" | \"description\"> & { parameters: string };\n\ninterface ExecutionArgs extends Omit<LangGraphPlatformEndpoint, \"agents\"> {\n agent: LangGraphPlatformAgent;\n threadId: string;\n nodeName: string;\n messages: Message[];\n state: State;\n config?: {\n configurable?: Record<string, any>;\n [key: string]: any;\n };\n properties: CopilotRequestContextProperties;\n actions: ExecutionAction[];\n logger: Logger;\n metaEvents?: MetaEventInput[];\n}\n\n// The following types are our own definition to the messages accepted by LangGraph Platform, enhanced with some of our extra data.\ninterface ToolCall {\n id: string;\n name: string;\n args: Record<string, unknown>;\n}\n\ntype BaseLangGraphPlatformMessage = Omit<\n Message,\n | \"isResultMessage\"\n | \"isTextMessage\"\n | \"isImageMessage\"\n | \"isActionExecutionMessage\"\n | \"isAgentStateMessage\"\n | \"type\"\n | \"createdAt\"\n> & {\n content: string;\n role: MessageRole;\n additional_kwargs?: Record<string, unknown>;\n type: MessageType;\n};\n\ninterface LangGraphPlatformResultMessage extends BaseLangGraphPlatformMessage {\n tool_call_id: string;\n name: string;\n}\n\ninterface LangGraphPlatformActionExecutionMessage extends BaseLangGraphPlatformMessage {\n tool_calls: ToolCall[];\n}\n\ntype LangGraphPlatformMessage =\n | LangGraphPlatformActionExecutionMessage\n | LangGraphPlatformResultMessage\n | BaseLangGraphPlatformMessage;\n\ntype SchemaKeys = {\n input: string[] | null;\n output: string[] | null;\n config: string[] | null;\n} | null;\n\nlet activeInterruptEvent = false;\n\nexport async function execute(args: ExecutionArgs): Promise<ReadableStream<Uint8Array>> {\n return new ReadableStream({\n async start(controller) {\n let lastError: any;\n\n // Retry logic for transient connection errors\n for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {\n try {\n await streamEvents(controller, args);\n controller.close();\n return; // Success - exit retry loop\n } catch (err) {\n lastError = err;\n\n // Check if this is a retryable error\n if (isRetryableError(err) && attempt < RETRY_CONFIG.maxRetries) {\n const delay = calculateDelay(attempt);\n console.warn(\n `LangGraph connection attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries + 1} failed. ` +\n `Retrying in ${delay}ms. Error: ${err?.message || String(err)}`,\n );\n await sleep(delay);\n continue; // Retry\n }\n\n // Not retryable or max retries exceeded - handle error\n break;\n }\n }\n\n // Handle the final error after retries exhausted\n const cause = lastError?.cause;\n const errorCode = cause?.code || lastError?.code;\n\n if (errorCode === \"ECONNREFUSED\") {\n throw new CopilotKitMisuseError({\n message: `\n The LangGraph client could not connect to the graph after ${RETRY_CONFIG.maxRetries + 1} attempts. Please further check previous logs, which includes further details.\n \n See more: https://docs.copilotkit.ai/troubleshooting/common-issues`,\n });\n } else {\n throw new CopilotKitMisuseError({\n message: `\n The LangGraph client threw unhandled error ${lastError}.\n \n See more: https://docs.copilotkit.ai/troubleshooting/common-issues`,\n });\n }\n },\n });\n}\n\nasync function streamEvents(controller: ReadableStreamDefaultController, args: ExecutionArgs) {\n const {\n deploymentUrl,\n langsmithApiKey,\n threadId: argsInitialThreadId,\n agent,\n nodeName: initialNodeName,\n state: initialState,\n config: explicitConfig,\n messages,\n actions,\n logger,\n properties,\n metaEvents,\n } = args;\n\n let nodeName = initialNodeName;\n let state = initialState;\n const { name, assistantId: initialAssistantId } = agent;\n\n const propertyHeaders = properties.authorization\n ? { authorization: `Bearer ${properties.authorization}` }\n : null;\n\n const client = new LangGraphClient({\n apiUrl: deploymentUrl,\n apiKey: langsmithApiKey,\n defaultHeaders: { ...propertyHeaders },\n });\n\n let threadId = argsInitialThreadId ?? randomUUID();\n if (argsInitialThreadId && argsInitialThreadId.startsWith(\"ck-\")) {\n threadId = argsInitialThreadId.substring(3);\n }\n\n if (!isValidUUID(threadId)) {\n console.warn(\n `Cannot use the threadId ${threadId} with LangGraph Platform. Must be a valid UUID.`,\n );\n }\n\n let wasInitiatedWithExistingThread = true;\n try {\n await client.threads.get(threadId);\n } catch (error) {\n wasInitiatedWithExistingThread = false;\n await client.threads.create({ threadId });\n }\n\n let agentState = { values: {} };\n if (wasInitiatedWithExistingThread) {\n agentState = await client.threads.getState(threadId);\n }\n\n const agentStateValues = agentState.values as State;\n state.messages = agentStateValues.messages;\n const mode =\n threadId && nodeName != \"__end__\" && nodeName != undefined && nodeName != null\n ? \"continue\"\n : \"start\";\n let formattedMessages = [];\n try {\n formattedMessages = copilotkitMessagesToLangChain(messages);\n } catch (e) {\n logger.error(e, `Error event thrown: ${e.message}`);\n }\n state = langGraphDefaultMergeState(state, formattedMessages, actions, name);\n\n const streamInput = mode === \"start\" ? state : null;\n\n const payload = {\n input: streamInput,\n streamMode: [\"events\", \"values\", \"updates\"] satisfies StreamMode[],\n command: undefined,\n };\n\n const lgInterruptMetaEvent = metaEvents?.find(\n (ev) => ev.name === MetaEventName.LangGraphInterruptEvent,\n );\n if (activeInterruptEvent && !lgInterruptMetaEvent) {\n // state.messages includes only messages that were not processed by the agent, which are the interrupt messages\n payload.command = { resume: state.messages };\n }\n if (lgInterruptMetaEvent?.response) {\n let response = lgInterruptMetaEvent.response;\n payload.command = { resume: parseJson(response, response) };\n }\n\n if (mode === \"continue\" && !activeInterruptEvent) {\n await client.threads.updateState(threadId, { values: state, asNode: nodeName });\n }\n\n let streamInfo: {\n provider?: string;\n langGraphHost?: string;\n langGraphVersion?: string;\n hashedLgcKey?: string | null;\n } = {\n hashedLgcKey: langsmithApiKey\n ? createHash(\"sha256\").update(langsmithApiKey).digest(\"hex\")\n : null,\n };\n\n const assistants = await client.assistants.search();\n const retrievedAssistant = assistants.find(\n (a) => a.name === name || a.assistant_id === initialAssistantId,\n );\n if (!retrievedAssistant) {\n telemetry.capture(\"oss.runtime.agent_execution_stream_errored\", {\n ...streamInfo,\n error: `Found no assistants for given information, while ${assistants.length} assistants exists`,\n });\n console.error(`\n No agent found for the agent name specified in CopilotKit provider\n Please check your available agents or provide an agent ID in the LangGraph Platform endpoint definition.\\n\n \n These are the available agents: [${assistants.map((a) => `${a.name} (ID: ${a.assistant_id})`).join(\", \")}]\n `);\n throw new Error(\"No agent id found\");\n }\n const assistantId = retrievedAssistant.assistant_id;\n\n const graphInfo = await client.assistants.getGraph(assistantId);\n const graphSchema = await client.assistants.getSchemas(assistantId);\n const schemaKeys = getSchemaKeys(graphSchema);\n\n if (explicitConfig) {\n let filteredConfigurable = retrievedAssistant.config.configurable;\n if (explicitConfig.configurable) {\n filteredConfigurable = schemaKeys?.config\n ? filterObjectBySchemaKeys(explicitConfig?.configurable, schemaKeys?.config)\n : explicitConfig?.configurable;\n }\n\n const newConfig = {\n ...retrievedAssistant.config,\n ...explicitConfig,\n configurable: filteredConfigurable,\n };\n\n // LG does not return recursion limit if it's the default, therefore we check: if no recursion limit is currently set, and the user asked for 25, there is no change.\n const isRecursionLimitSetToDefault =\n retrievedAssistant.config.recursion_limit == null && explicitConfig.recursion_limit === 25;\n // Deep compare configs to avoid unnecessary update calls\n const configsAreDifferent =\n JSON.stringify(newConfig) !== JSON.stringify(retrievedAssistant.config);\n\n // Check if the only difference is the recursion_limit being set to default\n const isOnlyRecursionLimitDifferent =\n isRecursionLimitSetToDefault &&\n JSON.stringify({ ...newConfig, recursion_limit: null }) ===\n JSON.stringify({ ...retrievedAssistant.config, recursion_limit: null });\n\n // If configs are different, we further check: Is the only diff a request to set the recursion limit to its already default?\n if (configsAreDifferent && !isOnlyRecursionLimitDifferent) {\n await client.assistants.update(assistantId, {\n config: newConfig,\n });\n }\n }\n\n // Do not input keys that are not part of the input schema\n if (payload.input && schemaKeys?.input) {\n payload.input = filterObjectBySchemaKeys(payload.input, schemaKeys.input);\n }\n\n let streamingStateExtractor = new StreamingStateExtractor([]);\n let prevNodeName = null;\n let emitIntermediateStateUntilEnd = null;\n let shouldExit = false;\n let externalRunId = null;\n\n const streamResponse = client.runs.stream(threadId, assistantId, payload);\n\n const emit = (message: string) => controller.enqueue(new TextEncoder().encode(message));\n\n let latestStateValues = {};\n let updatedState = state;\n // If a manual emittance happens, it is the ultimate source of truth of state, unless a node has exited.\n // Therefore, this value should either hold null, or the only edition of state that should be used.\n let manuallyEmittedState = null;\n\n activeInterruptEvent = false;\n try {\n telemetry.capture(\"oss.runtime.agent_execution_stream_started\", {\n hashedLgcKey: streamInfo.hashedLgcKey,\n });\n for await (let streamResponseChunk of streamResponse) {\n if (![\"events\", \"values\", \"error\", \"updates\"].includes(streamResponseChunk.event)) continue;\n\n if (streamResponseChunk.event === \"error\") {\n throw new Error(`Error event thrown: ${streamResponseChunk.data.message}`);\n }\n\n // Force event type, as data is not properly defined on the LG side.\n type EventsChunkData = {\n __interrupt__?: any;\n metadata: Record<string, any>;\n event: string;\n data: any;\n [key: string]: unknown;\n };\n const chunk = streamResponseChunk as EventsStreamEvent & { data: EventsChunkData };\n\n const interruptEvents = chunk.data.__interrupt__;\n if (interruptEvents?.length) {\n activeInterruptEvent = true;\n const interruptValue = interruptEvents?.[0].value;\n if (\n typeof interruptValue != \"string\" &&\n \"__copilotkit_interrupt_value__\" in interruptValue\n ) {\n const evValue = interruptValue.__copilotkit_interrupt_value__;\n emit(\n JSON.stringify({\n event: LangGraphEventTypes.OnCopilotKitInterrupt,\n data: {\n value: typeof evValue === \"string\" ? evValue : JSON.stringify(evValue),\n messages: langchainMessagesToCopilotKit(interruptValue.__copilotkit_messages__),\n },\n }) + \"\\n\",\n );\n } else {\n emit(\n JSON.stringify({\n event: LangGraphEventTypes.OnInterrupt,\n value:\n typeof interruptValue === \"string\"\n ? interruptValue\n : JSON.stringify(interruptValue),\n }) + \"\\n\",\n );\n }\n continue;\n }\n if (streamResponseChunk.event === \"updates\") continue;\n\n if (streamResponseChunk.event === \"values\") {\n latestStateValues = chunk.data;\n continue;\n }\n\n const chunkData = chunk.data;\n const currentNodeName = chunkData.metadata.langgraph_node;\n const eventType = chunkData.event;\n const runId = chunkData.metadata.run_id;\n externalRunId = runId;\n const metadata = chunkData.metadata;\n if (chunkData.data?.output?.model != null && chunkData.data?.output?.model != \"\") {\n streamInfo.provider = chunkData.data?.output?.model;\n }\n if (metadata.langgraph_host != null && metadata.langgraph_host != \"\") {\n streamInfo.langGraphHost = metadata.langgraph_host;\n }\n if (metadata.langgraph_version != null && metadata.langgraph_version != \"\") {\n streamInfo.langGraphVersion = metadata.langgraph_version;\n }\n\n shouldExit =\n shouldExit ||\n (eventType === LangGraphEventTypes.OnCustomEvent &&\n chunkData.name === CustomEventNames.CopilotKitExit);\n\n const emitIntermediateState = metadata[\"copilotkit:emit-intermediate-state\"];\n const manuallyEmitIntermediateState =\n eventType === LangGraphEventTypes.OnCustomEvent &&\n chunkData.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState;\n\n const exitingNode =\n nodeName === currentNodeName && eventType === LangGraphEventTypes.OnChainEnd;\n\n // See manuallyEmittedState for explanation\n if (exitingNode) {\n manuallyEmittedState = null;\n }\n\n // we only want to update the node name under certain conditions\n // since we don't need any internal node names to be sent to the frontend\n if (graphInfo[\"nodes\"].some((node) => node.id === currentNodeName)) {\n nodeName = currentNodeName;\n }\n\n updatedState = manuallyEmittedState ?? latestStateValues;\n\n if (!nodeName) {\n continue;\n }\n\n if (manuallyEmitIntermediateState) {\n // See manuallyEmittedState for explanation\n manuallyEmittedState = chunkData.data;\n emit(\n getStateSyncEvent({\n threadId,\n runId,\n agentName: agent.name,\n nodeName,\n state: manuallyEmittedState,\n running: true,\n active: true,\n schemaKeys,\n }),\n );\n continue;\n }\n\n if (emitIntermediateState && emitIntermediateStateUntilEnd == null) {\n emitIntermediateStateUntilEnd = nodeName;\n }\n\n if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStart) {\n // reset the streaming state extractor\n streamingStateExtractor = new StreamingStateExtractor(emitIntermediateState);\n }\n\n if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStream) {\n streamingStateExtractor.bufferToolCalls(chunkData);\n }\n\n if (emitIntermediateStateUntilEnd !== null) {\n updatedState = {\n ...updatedState,\n ...streamingStateExtractor.extractState(),\n };\n }\n\n if (\n !emitIntermediateState &&\n currentNodeName === emitIntermediateStateUntilEnd &&\n eventType === LangGraphEventTypes.OnChainEnd\n ) {\n // stop emitting function call state\n emitIntermediateStateUntilEnd = null;\n }\n\n if (\n JSON.stringify(updatedState) !== JSON.stringify(state) ||\n prevNodeName != nodeName ||\n exitingNode\n ) {\n state = updatedState;\n prevNodeName = nodeName;\n emit(\n getStateSyncEvent({\n threadId,\n runId,\n agentName: agent.name,\n nodeName,\n state,\n running: true,\n active: !exitingNode,\n schemaKeys,\n }),\n );\n }\n\n emit(JSON.stringify(chunkData) + \"\\n\");\n }\n\n state = await client.threads.getState(threadId);\n const interrupts = state.tasks?.[0]?.interrupts;\n nodeName = interrupts ? nodeName : Object.keys(state.metadata.writes)[0];\n const isEndNode = state.next.length === 0 && !interrupts;\n\n telemetry.capture(\"oss.runtime.agent_execution_stream_ended\", streamInfo);\n\n emit(\n getStateSyncEvent({\n threadId,\n runId: externalRunId,\n agentName: agent.name,\n nodeName: isEndNode ? \"__end__\" : nodeName,\n state: state.values,\n running: !shouldExit,\n active: false,\n includeMessages: true,\n schemaKeys,\n }),\n );\n\n return Promise.resolve();\n } catch (e) {\n logger.error(e);\n telemetry.capture(\"oss.runtime.agent_execution_stream_errored\", {\n ...streamInfo,\n error: e.message,\n });\n return Promise.resolve();\n }\n}\n\nfunction getStateSyncEvent({\n threadId,\n runId,\n agentName,\n nodeName,\n state,\n running,\n active,\n includeMessages = false,\n schemaKeys,\n}: {\n threadId: string;\n runId: string;\n agentName: string;\n nodeName: string;\n state: State;\n running: boolean;\n active: boolean;\n includeMessages?: boolean;\n schemaKeys: SchemaKeys;\n}): string {\n if (!includeMessages) {\n state = Object.keys(state).reduce((acc, key) => {\n if (key !== \"messages\") {\n acc[key] = state[key];\n }\n return acc;\n }, {} as State);\n } else {\n state = {\n ...state,\n messages: langchainMessagesToCopilotKit(state.messages || []),\n };\n }\n\n // Do not emit state keys that are not part of the output schema\n if (schemaKeys?.output) {\n state = filterObjectBySchemaKeys(state, schemaKeys.output);\n }\n\n return (\n JSON.stringify({\n event: LangGraphEventTypes.OnCopilotKitStateSync,\n thread_id: threadId,\n run_id: runId,\n agent_name: agentName,\n node_name: nodeName,\n active: active,\n state: state,\n running: running,\n role: \"assistant\",\n }) + \"\\n\"\n );\n}\n\nclass StreamingStateExtractor {\n private emitIntermediateState: { [key: string]: any }[];\n private toolCallBuffer: { [key: string]: string };\n private currentToolCall: string | null;\n private previouslyParsableState: { [key: string]: any };\n\n constructor(emitIntermediateState: { [key: string]: any }[]) {\n this.emitIntermediateState = emitIntermediateState;\n this.toolCallBuffer = {};\n this.currentToolCall = null;\n this.previouslyParsableState = {};\n }\n\n bufferToolCalls(event: {\n data: { chunk: { tool_call_chunks: { name: string | null; args: string }[] } };\n }) {\n if (event.data.chunk.tool_call_chunks.length > 0) {\n const chunk = event.data.chunk.tool_call_chunks[0];\n\n if (chunk.name !== null && chunk.name !== undefined) {\n this.currentToolCall = chunk.name;\n this.toolCallBuffer[this.currentToolCall] = chunk.args;\n } else if (this.currentToolCall !== null && this.currentToolCall !== undefined) {\n this.toolCallBuffer[this.currentToolCall] += chunk.args;\n }\n }\n }\n\n getEmitStateConfig(currentToolName: string): [string | null, string | null] {\n for (const config of this.emitIntermediateState) {\n const stateKey = config[\"state_key\"];\n const tool = config[\"tool\"];\n const toolArgument = config[\"tool_argument\"];\n\n if (currentToolName === tool) {\n return [toolArgument, stateKey];\n }\n }\n return [null, null];\n }\n\n extractState(): State {\n const state: State = {};\n\n for (const [key, value] of Object.entries(this.toolCallBuffer)) {\n const [argumentName, stateKey] = this.getEmitStateConfig(key);\n\n if (stateKey === null) {\n continue;\n }\n\n let parsedValue;\n try {\n parsedValue = parsePartialJson(value);\n } catch (error) {\n if (key in this.previouslyParsableState) {\n parsedValue = this.previouslyParsableState[key];\n } else {\n continue;\n }\n }\n\n this.previouslyParsableState[key] = parsedValue;\n\n if (!argumentName) {\n state[stateKey] = parsedValue;\n } else {\n state[stateKey] = parsedValue[argumentName];\n }\n }\n\n return state;\n }\n}\n\n// Start of Selection\nfunction langGraphDefaultMergeState(\n state: State,\n messages: LangGraphPlatformMessage[],\n actions: ExecutionAction[],\n agentName: string,\n): State {\n if (messages.length > 0 && \"role\" in messages[0] && messages[0].role === \"system\") {\n // remove system message\n messages = messages.slice(1);\n }\n\n // merge with existing messages\n const existingMessages: LangGraphPlatformMessage[] = state.messages || [];\n const existingMessageIds = new Set(existingMessages.map((message) => message.id));\n const messageIds = new Set(messages.map((message) => message.id));\n\n let removedMessages = [];\n if (messages.length < existingMessages.length) {\n // Messages were removed\n removedMessages = existingMessages\n .filter((m) => !messageIds.has(m.id))\n .map((m) => new RemoveMessage({ id: m.id }));\n }\n\n const newMessages = messages.filter((message) => !existingMessageIds.has(message.id));\n\n return {\n ...state,\n messages: [...removedMessages, ...newMessages],\n copilotkit: {\n actions,\n },\n };\n}\n\nexport function langchainMessagesToCopilotKit(messages: any[]): any[] {\n const result: any[] = [];\n const tool_call_names: Record<string, string> = {};\n\n // First pass: gather all tool call names from AI messages\n for (const message of messages) {\n if (message.type === \"ai\") {\n for (const tool_call of message.tool_calls) {\n tool_call_names[tool_call.id] = tool_call.name;\n }\n }\n }\n\n for (const message of messages) {\n let content: any = message.content;\n if (content instanceof Array) {\n content = content[0];\n }\n if (content instanceof Object) {\n content = content.text;\n }\n\n if (message.type === \"human\") {\n result.push({\n role: \"user\",\n content: content,\n id: message.id,\n });\n } else if (message.type === \"system\") {\n result.push({\n role: \"system\",\n content: content,\n id: message.id,\n });\n } else if (message.type === \"ai\") {\n if (message.tool_calls && message.tool_calls.length > 0) {\n for (const tool_call of message.tool_calls) {\n result.push({\n id: tool_call.id,\n name: tool_call.name,\n arguments: tool_call.args,\n parentMessageId: message.id,\n });\n }\n } else {\n result.push({\n role: \"assistant\",\n content: content,\n id: message.id,\n parentMessageId: message.id,\n });\n }\n } else if (message.type === \"tool\") {\n const actionName = tool_call_names[message.tool_call_id] || message.name || \"\";\n result.push({\n actionExecutionId: message.tool_call_id,\n actionName: actionName,\n result: content,\n id: message.id,\n });\n }\n }\n const resultsDict: Record<string, any> = {};\n for (const msg of result) {\n if (msg.actionExecutionId) {\n resultsDict[msg.actionExecutionId] = msg;\n }\n }\n\n const reorderedResult: Message[] = [];\n\n for (const msg of result) {\n // If it's not a tool result, just append it\n if (!(\"actionExecutionId\" in msg)) {\n reorderedResult.push(msg);\n }\n\n // If the message has arguments (i.e., is a tool call invocation),\n // append the corresponding result right after it\n if (\"arguments\" in msg) {\n const msgId = msg.id;\n if (msgId in resultsDict) {\n reorderedResult.push(resultsDict[msgId]);\n }\n }\n }\n\n return reorderedResult;\n}\n\nfunction copilotkitMessagesToLangChain(messages: Message[]): LangGraphPlatformMessage[] {\n const result: LangGraphPlatformMessage[] = [];\n const processedActionExecutions = new Set<string>();\n\n for (const message of messages) {\n // Handle TextMessage\n if (message.isTextMessage()) {\n if (message.role === \"user\") {\n // Human message\n result.push({\n ...message,\n role: MessageRole.user,\n });\n } else if (message.role === \"system\") {\n // System message\n result.push({\n ...message,\n role: MessageRole.system,\n });\n } else if (message.role === \"assistant\") {\n // Assistant message\n result.push({\n ...message,\n role: MessageRole.assistant,\n });\n }\n continue;\n }\n\n // Handle ImageMessage\n if (message.isImageMessage()) {\n if (message.role === \"user\") {\n result.push({\n ...message,\n role: MessageRole.user,\n content: \"\",\n });\n } else if (message.role === \"assistant\") {\n result.push({\n ...message,\n role: MessageRole.assistant,\n content: \"\",\n });\n }\n continue;\n }\n\n // Handle ActionExecutionMessage (multiple tool calls per parentMessageId)\n if (message.isActionExecutionMessage()) {\n const messageId = message.parentMessageId ?? message.id;\n\n // If we've already processed this action execution group, skip\n if (processedActionExecutions.has(messageId)) {\n continue;\n }\n\n processedActionExecutions.add(messageId);\n\n // Gather all tool calls related to this messageId\n const relatedActionExecutions = messages.filter(\n (m) =>\n m.isActionExecutionMessage() &&\n ((m.parentMessageId && m.parentMessageId === messageId) || m.id === messageId),\n ) as ActionExecutionMessage[];\n\n const tool_calls: ToolCall[] = relatedActionExecutions.map((m) => ({\n name: m.name,\n args: m.arguments,\n id: m.id,\n }));\n\n result.push({\n id: messageId,\n type: \"ActionExecutionMessage\",\n content: \"\",\n tool_calls: tool_calls,\n role: MessageRole.assistant,\n } satisfies LangGraphPlatformActionExecutionMessage);\n\n continue;\n }\n\n // Handle ResultMessage\n if (message.isResultMessage()) {\n result.push({\n type: message.type,\n content: message.result,\n id: message.id,\n tool_call_id: message.actionExecutionId,\n name: message.actionName,\n role: MessageRole.tool,\n } satisfies LangGraphPlatformResultMessage);\n continue;\n }\n\n throw new Error(`Unknown message type ${message.type}`);\n }\n\n return result;\n}\n\nfunction getSchemaKeys(graphSchema: GraphSchema): SchemaKeys {\n const CONSTANT_KEYS = [\"messages\", \"copilotkit\"];\n let configSchema = null;\n if (graphSchema.config_schema.properties) {\n configSchema = Object.keys(graphSchema.config_schema.properties);\n }\n if (!graphSchema.input_schema.properties || !graphSchema.output_schema.properties) {\n return configSchema;\n }\n const inputSchema = Object.keys(graphSchema.input_schema.properties);\n const outputSchema = Object.keys(graphSchema.output_schema.properties);\n\n return {\n input: inputSchema && inputSchema.length ? [...inputSchema, ...CONSTANT_KEYS] : null,\n output: outputSchema && outputSchema.length ? [...outputSchema, ...CONSTANT_KEYS] : null,\n config: configSchema,\n };\n}\n\nfunction filterObjectBySchemaKeys(obj: Record<string, any>, schemaKeys: string[]) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => schemaKeys.includes(key)));\n}\n","import { Logger } from \"pino\";\n\n// Retry configuration for network requests\nexport const RETRY_CONFIG = {\n maxRetries: 3,\n baseDelayMs: 1000,\n maxDelayMs: 5000,\n // HTTP status codes that should be retried\n retryableStatusCodes: [502, 503, 504, 408, 429],\n // Network error patterns that should be retried\n retryableErrorMessages: [\n \"fetch failed\",\n \"network error\",\n \"connection timeout\",\n \"ECONNREFUSED\",\n \"ETIMEDOUT\",\n \"ENOTFOUND\",\n \"ECONNRESET\",\n ],\n};\n\n// Helper function to check if an error/response is retryable\nexport function isRetryableError(error: any, response?: Response): boolean {\n // Check HTTP response status\n if (response && RETRY_CONFIG.retryableStatusCodes.includes(response.status)) {\n return true;\n }\n\n // Check error codes (for connection errors like ECONNREFUSED)\n const errorCode = error?.cause?.code || error?.code;\n if (errorCode && RETRY_CONFIG.retryableErrorMessages.includes(errorCode)) {\n return true;\n }\n\n // Check error messages\n const errorMessage = error?.message?.toLowerCase() || \"\";\n return RETRY_CONFIG.retryableErrorMessages.some((msg) => errorMessage.includes(msg));\n}\n\n// Helper function to sleep for a given duration\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// Calculate exponential backoff delay\nexport function calculateDelay(attempt: number): number {\n const delay = RETRY_CONFIG.baseDelayMs * Math.pow(2, attempt);\n return Math.min(delay, RETRY_CONFIG.maxDelayMs);\n}\n\n// Retry wrapper for fetch requests\nexport async function fetchWithRetry(\n url: string,\n options: RequestInit,\n logger?: Logger,\n): Promise<Response> {\n let lastError: any;\n\n for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {\n try {\n const response = await fetch(url, options);\n\n // If response is retryable, treat as error and retry\n if (isRetryableError(null, response) && attempt < RETRY_CONFIG.maxRetries) {\n const delay = calculateDelay(attempt);\n logger?.warn(\n `Request to ${url} failed with status ${response.status}. ` +\n `Retrying attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries + 1} in ${delay}ms.`,\n );\n await sleep(delay);\n continue;\n }\n\n return response; // Success or non-retryable error\n } catch (error) {\n lastError = error;\n\n // Check if this is a retryable network error\n if (isRetryableError(error) && attempt < RETRY_CONFIG.maxRetries) {\n const delay = calculateDelay(attempt);\n logger?.warn(\n `Request to ${url} failed with network error. ` +\n `Retrying attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries + 1} in ${delay}ms. Error: ${error?.message || String(error)}`,\n );\n await sleep(delay);\n continue;\n }\n\n // Not retryable or max retries exceeded\n break;\n }\n }\n\n // Re-throw the last error after retries exhausted\n throw lastError;\n}\n","import { ReplaySubject } from \"rxjs\";\nimport { CopilotKitLowLevelError, CopilotKitError, CopilotKitErrorCode } from \"@copilotkit/shared\";\n\nexport async function writeJsonLineResponseToEventStream<T>(\n response: ReadableStream<Uint8Array>,\n eventStream$: ReplaySubject<T>,\n) {\n const reader = response.getReader();\n const decoder = new TextDecoder();\n let buffer = [];\n\n function flushBuffer() {\n const currentBuffer = buffer.join(\"\");\n if (currentBuffer.trim().length === 0) {\n return;\n }\n const parts = currentBuffer.split(\"\\n\");\n if (parts.length === 0) {\n return;\n }\n\n const lastPartIsComplete = currentBuffer.endsWith(\"\\n\");\n\n // truncate buffer\n buffer = [];\n\n if (!lastPartIsComplete) {\n // put back the last part\n buffer.push(parts.pop());\n }\n\n parts\n .map((part) => part.trim())\n .filter((part) => part != \"\")\n .forEach((part) => {\n eventStream$.next(JSON.parse(part));\n });\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (!done) {\n buffer.push(decoder.decode(value, { stream: true }));\n }\n\n flushBuffer();\n\n if (done) {\n break;\n }\n }\n } catch (error) {\n console.error(\"Error in stream\", error);\n\n // Convert network termination errors to structured errors\n const structuredError = convertStreamingErrorToStructured(error);\n eventStream$.error(structuredError);\n return;\n }\n eventStream$.complete();\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Handle network termination errors\n if (\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitError({\n message:\n \"Connection to agent was unexpectedly terminated. This is likely due to the agent service being down or experiencing issues. Please check your agent logs and try again.\",\n code: CopilotKitErrorCode.NETWORK_ERROR,\n });\n }\n\n // Handle other network-related errors\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\")\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"streaming connection\",\n message:\n \"Network error occurred during streaming. Please check your connection and try again.\",\n });\n }\n\n // Handle abort/cancellation errors (these are usually normal)\n if (\n error?.message?.includes(\"aborted\") ||\n error?.message?.includes(\"canceled\") ||\n error?.message?.includes(\"signal is aborted\")\n ) {\n return new CopilotKitError({\n message: \"Request was cancelled\",\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n // Default: convert unknown streaming errors\n return new CopilotKitError({\n message: `Streaming error: ${error?.message || String(error)}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n}\n","import { Logger } from \"pino\";\nimport { Observable } from \"rxjs\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { RuntimeEvent } from \"../../service-adapters/events\";\nimport telemetry from \"../telemetry-client\";\nimport { RemoteAgentHandlerParams } from \"./remote-actions\";\n\nimport {\n AssistantMessage as AGUIAssistantMessage,\n Message as AGUIMessage,\n ToolCall,\n} from \"@ag-ui/client\";\n\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { parseJson } from \"@copilotkit/shared\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\n\nexport function constructAGUIRemoteAction({\n logger,\n messages,\n agentStates,\n agent,\n metaEvents,\n}: {\n logger: Logger;\n messages: Message[];\n agentStates?: AgentStateInput[];\n agent: AbstractAgent;\n metaEvents?: MetaEventInput[];\n}) {\n const action = {\n name: agent.agentId,\n description: agent.description,\n parameters: [],\n handler: async (_args: any) => {},\n remoteAgentHandler: async ({\n actionInputsWithoutAgents,\n threadId,\n }: RemoteAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {\n logger.debug({ actionName: agent.agentId }, \"Executing remote agent\");\n\n const agentWireMessages = convertMessagesToAGUIMessage(messages);\n agent.messages = agentWireMessages;\n agent.threadId = threadId;\n\n telemetry.capture(\"oss.runtime.remote_action_executed\", {\n agentExecution: true,\n type: \"self-hosted\",\n agentsAmount: 1,\n });\n\n let state = {};\n if (agentStates) {\n const jsonState = agentStates.find((state) => state.agentName === agent.agentId);\n if (jsonState) {\n state = parseJson(jsonState.state, {});\n }\n }\n agent.state = state;\n\n const tools = actionInputsWithoutAgents.map((input) => {\n return {\n name: input.name,\n description: input.description,\n parameters: JSON.parse(input.jsonSchema),\n };\n });\n\n const forwardedProps = metaEvents.length\n ? { command: { resume: metaEvents[0]?.response } }\n : undefined;\n\n return agent.legacy_to_be_removed_runAgentBridged({\n tools,\n forwardedProps,\n }) as Observable<RuntimeEvent>;\n },\n };\n return [action];\n}\n\nexport function convertMessagesToAGUIMessage(messages: Message[]): AGUIMessage[] {\n const result: AGUIMessage[] = [];\n\n for (const message of messages) {\n if (message.isTextMessage()) {\n result.push({\n id: message.id,\n role: message.role as any,\n content: message.content,\n });\n } else if (message.isActionExecutionMessage()) {\n const toolCall: ToolCall = {\n id: message.id,\n type: \"function\",\n function: {\n name: message.name,\n arguments: JSON.stringify(message.arguments),\n },\n };\n\n if (message.parentMessageId && result.some((m) => m.id === message.parentMessageId)) {\n const parentMessage: AGUIAssistantMessage | undefined = result.find(\n (m) => m.id === message.parentMessageId,\n ) as AGUIAssistantMessage;\n if (parentMessage.toolCalls === undefined) {\n parentMessage.toolCalls = [];\n }\n parentMessage.toolCalls.push(toolCall);\n } else {\n result.push({\n id: message.parentMessageId ?? message.id,\n role: \"assistant\",\n toolCalls: [toolCall],\n });\n }\n } else if (message.isResultMessage()) {\n result.push({\n id: message.id,\n role: \"tool\",\n content: message.result,\n toolCallId: message.actionExecutionId,\n });\n }\n }\n\n return result;\n}\n","/**\n * <Callout type=\"info\">\n * This is the reference for the `CopilotRuntime` class. For more information and example code snippets, please see [Concept: Copilot Runtime](/concepts/copilot-runtime).\n * </Callout>\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotRuntime } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n * ```\n */\n\nimport {\n Action,\n actionParametersToJsonSchema,\n Parameter,\n ResolvedCopilotKitError,\n CopilotKitApiDiscoveryError,\n randomId,\n CopilotKitError,\n CopilotKitRemoteEndpointDiscoveryError,\n CopilotKitAgentDiscoveryError,\n CopilotKitMisuseError,\n CopilotKitErrorCode,\n CopilotKitLowLevelError,\n CopilotTraceHandler,\n CopilotTraceEvent,\n CopilotRequestContext,\n} from \"@copilotkit/shared\";\nimport {\n CopilotServiceAdapter,\n EmptyAdapter,\n RemoteChain,\n RemoteChainParameters,\n} from \"../../service-adapters\";\n\nimport { MessageInput } from \"../../graphql/inputs/message.input\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { RuntimeEventSource, RuntimeEventTypes } from \"../../service-adapters/events\";\nimport { convertGqlInputToMessages } from \"../../service-adapters/conversion\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nimport {\n isRemoteAgentAction,\n RemoteAgentAction,\n EndpointType,\n setupRemoteActions,\n EndpointDefinition,\n CopilotKitEndpoint,\n LangGraphPlatformEndpoint,\n} from \"./remote-actions\";\n\nimport { GraphQLContext } from \"../integrations/shared\";\nimport { AgentSessionInput } from \"../../graphql/inputs/agent-session.input\";\nimport { from } from \"rxjs\";\nimport { AgentStateInput } from \"../../graphql/inputs/agent-state.input\";\nimport { ActionInputAvailability } from \"../../graphql/types/enums\";\nimport { createHeaders } from \"./remote-action-constructors\";\nimport { fetchWithRetry } from \"./retry-utils\";\nimport { Agent } from \"../../graphql/types/agents-response.type\";\nimport { ExtensionsInput } from \"../../graphql/inputs/extensions.input\";\nimport { ExtensionsResponse } from \"../../graphql/types/extensions-response.type\";\nimport { LoadAgentStateResponse } from \"../../graphql/types/load-agent-state-response.type\";\nimport { Client as LangGraphClient } from \"@langchain/langgraph-sdk\";\nimport { langchainMessagesToCopilotKit } from \"./remote-lg-action\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\nimport {\n CopilotObservabilityConfig,\n LLMRequestData,\n LLMResponseData,\n LLMErrorData,\n} from \"../observability\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { MessageRole } from \"../../graphql/types/enums\";\n\n// +++ MCP Imports +++\nimport {\n MCPClient,\n MCPEndpointConfig,\n MCPTool,\n convertMCPToolsToActions,\n generateMcpToolInstructions,\n} from \"./mcp-tools-utils\";\n// Define the function type alias here or import if defined elsewhere\ntype CreateMCPClientFunction = (config: MCPEndpointConfig) => Promise<MCPClient>;\n// --- MCP Imports ---\n\nexport interface CopilotRuntimeRequest {\n serviceAdapter: CopilotServiceAdapter;\n messages: MessageInput[];\n actions: ActionInput[];\n agentSession?: AgentSessionInput;\n agentStates?: AgentStateInput[];\n outputMessagesPromise: Promise<Message[]>;\n threadId?: string;\n runId?: string;\n publicApiKey?: string;\n graphqlContext: GraphQLContext;\n forwardedParameters?: ForwardedParametersInput;\n url?: string;\n extensions?: ExtensionsInput;\n metaEvents?: MetaEventInput[];\n}\n\ninterface CopilotRuntimeResponse {\n threadId: string;\n runId?: string;\n eventSource: RuntimeEventSource;\n serverSideActions: Action<any>[];\n actionInputsWithoutAgents: ActionInput[];\n extensions?: ExtensionsResponse;\n}\n\ntype ActionsConfiguration<T extends Parameter[] | [] = []> =\n | Action<T>[]\n | ((ctx: { properties: any; url?: string }) => Action<T>[]);\n\ninterface OnBeforeRequestOptions {\n threadId?: string;\n runId?: string;\n inputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnBeforeRequestHandler = (options: OnBeforeRequestOptions) => void | Promise<void>;\n\ninterface OnAfterRequestOptions {\n threadId: string;\n runId?: string;\n inputMessages: Message[];\n outputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnAfterRequestHandler = (options: OnAfterRequestOptions) => void | Promise<void>;\n\ninterface Middleware {\n /**\n * A function that is called before the request is processed.\n */\n onBeforeRequest?: OnBeforeRequestHandler;\n\n /**\n * A function that is called after the request is processed.\n */\n onAfterRequest?: OnAfterRequestHandler;\n}\n\ntype AgentWithEndpoint = Agent & { endpoint: EndpointDefinition };\n\nexport interface CopilotRuntimeConstructorParams<T extends Parameter[] | [] = []> {\n /**\n * Middleware to be used by the runtime.\n *\n * ```ts\n * onBeforeRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n *\n * ```ts\n * onAfterRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * outputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n */\n middleware?: Middleware;\n\n /*\n * A list of server side actions that can be executed. Will be ignored when remoteActions are set\n */\n actions?: ActionsConfiguration<T>;\n\n /*\n * Deprecated: Use `remoteEndpoints`.\n */\n remoteActions?: CopilotKitEndpoint[];\n\n /*\n * A list of remote actions that can be executed.\n */\n remoteEndpoints?: EndpointDefinition[];\n\n /*\n * An array of LangServer URLs.\n */\n langserve?: RemoteChainParameters[];\n\n /*\n * A map of agent names to AGUI agents.\n * Example agent config:\n * ```ts\n * import { AbstractAgent } from \"@ag-ui/client\";\n * // ...\n * agents: {\n * \"support\": new CustomerSupportAgent(),\n * \"technical\": new TechnicalAgent()\n * }\n * ```\n */\n agents?: Record<string, AbstractAgent>;\n\n /*\n * Delegates agent state processing to the service adapter.\n *\n * When enabled, individual agent state requests will not be processed by the agent itself.\n * Instead, all processing will be handled by the service adapter.\n */\n delegateAgentProcessingToServiceAdapter?: boolean;\n\n /**\n * Configuration for LLM request/response logging.\n * Requires publicApiKey from CopilotKit component to be set:\n *\n * ```tsx\n * <CopilotKit publicApiKey=\"ck_pub_...\" />\n * ```\n *\n * Example logging config:\n * ```ts\n * logging: {\n * enabled: true, // Enable or disable logging\n * progressive: true, // Set to false for buffered logging\n * logger: {\n * logRequest: (data) => langfuse.trace({ name: \"LLM Request\", input: data }),\n * logResponse: (data) => langfuse.trace({ name: \"LLM Response\", output: data }),\n * logError: (errorData) => langfuse.trace({ name: \"LLM Error\", metadata: errorData }),\n * },\n * }\n * ```\n */\n observability_c?: CopilotObservabilityConfig;\n\n /**\n * Configuration for connecting to Model Context Protocol (MCP) servers.\n * Allows fetching and using tools defined on external MCP-compliant servers.\n * Requires providing the `createMCPClient` function during instantiation.\n * @experimental\n */\n mcpServers?: MCPEndpointConfig[];\n\n /**\n * A function that creates an MCP client instance for a given endpoint configuration.\n * This function is responsible for using the appropriate MCP client library\n * (e.g., `@copilotkit/runtime`, `ai`) to establish a connection.\n * Required if `mcpServers` is provided.\n *\n * ```typescript\n * import { experimental_createMCPClient } from \"ai\"; // Import from vercel ai library\n * // ...\n * const runtime = new CopilotRuntime({\n * mcpServers: [{ endpoint: \"...\" }],\n * async createMCPClient(config) {\n * return await experimental_createMCPClient({\n * transport: {\n * type: \"sse\",\n * url: config.endpoint,\n * headers: config.apiKey\n * ? { Authorization: `Bearer ${config.apiKey}` }\n * : undefined,\n * },\n * });\n * }\n * });\n * ```\n */\n createMCPClient?: CreateMCPClientFunction;\n\n /**\n * Optional trace handler for comprehensive debugging and observability.\n *\n * **Requires publicApiKey**: Tracing only works when requests include a valid publicApiKey.\n * This is a premium CopilotKit Cloud feature.\n *\n * @param traceEvent - Structured trace event with rich debugging context\n *\n * @example\n * ```typescript\n * const runtime = new CopilotRuntime({\n * onTrace: (traceEvent) => {\n * debugDashboard.capture(traceEvent);\n * }\n * });\n * ```\n */\n onTrace?: CopilotTraceHandler;\n}\n\nexport class CopilotRuntime<const T extends Parameter[] | [] = []> {\n public actions: ActionsConfiguration<T>;\n public agents: Record<string, AbstractAgent>;\n public remoteEndpointDefinitions: EndpointDefinition[];\n private langserve: Promise<Action<any>>[] = [];\n private onBeforeRequest?: OnBeforeRequestHandler;\n private onAfterRequest?: OnAfterRequestHandler;\n private delegateAgentProcessingToServiceAdapter: boolean;\n private observability?: CopilotObservabilityConfig;\n private availableAgents: Pick<AgentWithEndpoint, \"name\" | \"id\">[];\n private onTrace?: CopilotTraceHandler;\n private hasWarnedAboutTracing = false;\n\n // +++ MCP Properties +++\n private readonly mcpServersConfig?: MCPEndpointConfig[];\n private mcpActionCache = new Map<string, Action<any>[]>();\n // --- MCP Properties ---\n\n // +++ MCP Client Factory +++\n private readonly createMCPClientImpl?: CreateMCPClientFunction;\n // --- MCP Client Factory ---\n\n constructor(params?: CopilotRuntimeConstructorParams<T>) {\n if (\n params?.actions &&\n params?.remoteEndpoints &&\n params?.remoteEndpoints.some((e) => e.type === EndpointType.LangGraphPlatform)\n ) {\n console.warn(\"Actions set in runtime instance will not be available for the agent\");\n }\n this.actions = params?.actions || [];\n this.availableAgents = [];\n\n for (const chain of params?.langserve || []) {\n const remoteChain = new RemoteChain(chain);\n this.langserve.push(remoteChain.toAction());\n }\n\n this.remoteEndpointDefinitions = params?.remoteEndpoints ?? params?.remoteActions ?? [];\n\n this.onBeforeRequest = params?.middleware?.onBeforeRequest;\n this.onAfterRequest = params?.middleware?.onAfterRequest;\n this.delegateAgentProcessingToServiceAdapter =\n params?.delegateAgentProcessingToServiceAdapter || false;\n this.observability = params?.observability_c;\n this.agents = params?.agents ?? {};\n this.onTrace = params?.onTrace;\n // +++ MCP Initialization +++\n this.mcpServersConfig = params?.mcpServers;\n this.createMCPClientImpl = params?.createMCPClient;\n\n // Validate: If mcpServers are provided, createMCPClient must also be provided\n if (this.mcpServersConfig && this.mcpServersConfig.length > 0 && !this.createMCPClientImpl) {\n throw new CopilotKitMisuseError({\n message:\n \"MCP Integration Error: `mcpServers` were provided, but the `createMCPClient` function was not passed to the CopilotRuntime constructor. \" +\n \"Please provide an implementation for `createMCPClient`.\",\n });\n }\n\n // Warning if actions are defined alongside LangGraph platform (potentially MCP too?)\n if (\n params?.actions &&\n (params?.remoteEndpoints?.some((e) => e.type === EndpointType.LangGraphPlatform) ||\n this.mcpServersConfig?.length)\n ) {\n console.warn(\n \"Local 'actions' defined in CopilotRuntime might not be available to remote agents (LangGraph, MCP). Consider defining actions closer to the agent implementation if needed.\",\n );\n }\n }\n\n // +++ MCP Instruction Injection Method +++\n private injectMCPToolInstructions(\n messages: MessageInput[],\n currentActions: Action<any>[],\n ): MessageInput[] {\n // Filter the *passed-in* actions for MCP tools\n const mcpActionsForRequest = currentActions.filter((action) => (action as any)._isMCPTool);\n\n if (!mcpActionsForRequest || mcpActionsForRequest.length === 0) {\n return messages; // No MCP tools for this specific request\n }\n\n // Create a map to deduplicate tools by name (keeping the last one if duplicates exist)\n const uniqueMcpTools = new Map<string, Action<any>>();\n\n // Add all MCP tools to the map with their names as keys\n mcpActionsForRequest.forEach((action) => {\n uniqueMcpTools.set(action.name, action);\n });\n\n // Format instructions from the unique tools map\n // Convert Action objects to MCPTool format for the instruction generator\n const toolsMap: Record<string, MCPTool> = {};\n Array.from(uniqueMcpTools.values()).forEach((action) => {\n toolsMap[action.name] = {\n description: action.description || \"\",\n schema: action.parameters\n ? {\n parameters: {\n properties: action.parameters.reduce(\n (acc, p) => ({\n ...acc,\n [p.name]: { type: p.type, description: p.description },\n }),\n {},\n ),\n required: action.parameters.filter((p) => p.required).map((p) => p.name),\n },\n }\n : {},\n execute: async () => ({}), // Placeholder, not used for instructions\n };\n });\n\n // Generate instructions using the exported helper\n const mcpToolInstructions = generateMcpToolInstructions(toolsMap);\n\n if (!mcpToolInstructions) {\n return messages; // No MCP tools to describe\n }\n\n const instructions =\n \"You have access to the following tools provided by external Model Context Protocol (MCP) servers:\\n\" +\n mcpToolInstructions +\n \"\\nUse them when appropriate to fulfill the user's request.\";\n\n const systemMessageIndex = messages.findIndex((msg) => msg.textMessage?.role === \"system\");\n\n const newMessages = [...messages]; // Create a mutable copy\n\n if (systemMessageIndex !== -1) {\n const existingMsg = newMessages[systemMessageIndex];\n if (existingMsg.textMessage) {\n existingMsg.textMessage.content =\n (existingMsg.textMessage.content ? existingMsg.textMessage.content + \"\\n\\n\" : \"\") +\n instructions;\n }\n } else {\n newMessages.unshift({\n id: randomId(),\n createdAt: new Date(),\n textMessage: {\n role: MessageRole.system,\n content: instructions,\n },\n actionExecutionMessage: undefined,\n resultMessage: undefined,\n agentStateMessage: undefined,\n });\n }\n\n return newMessages;\n }\n\n async processRuntimeRequest(request: CopilotRuntimeRequest): Promise<CopilotRuntimeResponse> {\n const {\n serviceAdapter,\n messages: rawMessages,\n actions: clientSideActionsInput,\n threadId,\n runId,\n outputMessagesPromise,\n graphqlContext,\n forwardedParameters,\n url,\n extensions,\n agentSession,\n agentStates,\n publicApiKey,\n } = request;\n\n const eventSource = new RuntimeEventSource();\n // Track request start time for logging\n const requestStartTime = Date.now();\n // For storing streamed chunks if progressive logging is enabled\n const streamedChunks: any[] = [];\n\n // Trace request start\n await this.trace(\n \"request\",\n {\n threadId,\n runId,\n source: \"runtime\",\n request: {\n operation: \"processRuntimeRequest\",\n method: \"POST\",\n url: url,\n startTime: requestStartTime,\n },\n agent: agentSession ? { name: agentSession.agentName } : undefined,\n messages: {\n input: rawMessages,\n messageCount: rawMessages.length,\n },\n technical: {\n environment: process.env.NODE_ENV,\n },\n },\n undefined,\n publicApiKey,\n );\n\n try {\n if (\n Object.keys(this.agents).length &&\n agentSession?.agentName &&\n !this.delegateAgentProcessingToServiceAdapter\n ) {\n this.agents = { [agentSession.agentName]: this.agents[agentSession.agentName] };\n }\n\n if (agentSession && !this.delegateAgentProcessingToServiceAdapter) {\n return await this.processAgentRequest(request);\n }\n if (serviceAdapter instanceof EmptyAdapter) {\n throw new CopilotKitMisuseError({\n message: `Invalid adapter configuration: EmptyAdapter is only meant to be used with agent lock mode. \nFor non-agent components like useCopilotChatSuggestions, CopilotTextarea, or CopilotTask, \nplease use an LLM adapter instead.`,\n });\n }\n\n // +++ Get Server Side Actions (including dynamic MCP) EARLY +++\n const serverSideActions = await this.getServerSideActions(request);\n // --- Get Server Side Actions (including dynamic MCP) EARLY ---\n\n // Filter raw messages *before* injection\n const filteredRawMessages = rawMessages.filter((message) => !message.agentStateMessage);\n\n // +++ Inject MCP Instructions based on current actions +++\n const messagesWithInjectedInstructions = this.injectMCPToolInstructions(\n filteredRawMessages,\n serverSideActions,\n );\n const inputMessages = convertGqlInputToMessages(messagesWithInjectedInstructions);\n // --- Inject MCP Instructions based on current actions ---\n\n // Log LLM request if logging is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const requestData: LLMRequestData = {\n threadId,\n runId,\n model: forwardedParameters?.model,\n messages: inputMessages,\n actions: clientSideActionsInput,\n forwardedParameters,\n timestamp: requestStartTime,\n provider: this.detectProvider(serviceAdapter),\n };\n\n await this.observability.hooks.handleRequest(requestData);\n } catch (error) {\n console.error(\"Error logging LLM request:\", error);\n }\n }\n\n const serverSideActionsInput: ActionInput[] = serverSideActions.map((action) => ({\n name: action.name,\n description: action.description,\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),\n }));\n\n const actionInputs = flattenToolCallsNoDuplicates([\n ...serverSideActionsInput,\n ...clientSideActionsInput.filter(\n // Filter remote actions from CopilotKit core loop\n (action) => action.available !== ActionInputAvailability.remote,\n ),\n ]);\n\n await this.onBeforeRequest?.({\n threadId,\n runId,\n inputMessages,\n properties: graphqlContext.properties,\n url,\n });\n\n const result = await serviceAdapter.process({\n messages: inputMessages,\n actions: actionInputs,\n threadId,\n runId,\n eventSource,\n forwardedParameters,\n extensions,\n agentSession,\n agentStates,\n });\n\n // for backwards compatibility, we deal with the case that no threadId is provided\n // by the frontend, by using the threadId from the response\n const nonEmptyThreadId = threadId ?? result.threadId;\n\n outputMessagesPromise\n .then((outputMessages) => {\n this.onAfterRequest?.({\n threadId: nonEmptyThreadId,\n runId: result.runId,\n inputMessages,\n outputMessages,\n properties: graphqlContext.properties,\n url,\n });\n })\n .catch((_error) => {});\n\n // After getting the response, log it if logging is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n outputMessagesPromise\n .then((outputMessages) => {\n const responseData: LLMResponseData = {\n threadId: result.threadId,\n runId: result.runId,\n model: forwardedParameters?.model,\n // Use collected chunks for progressive mode or outputMessages for regular mode\n output: this.observability.progressive ? streamedChunks : outputMessages,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: this.detectProvider(serviceAdapter),\n // Indicate this is the final response\n isFinalResponse: true,\n };\n\n try {\n this.observability.hooks.handleResponse(responseData);\n } catch (logError) {\n console.error(\"Error logging LLM response:\", logError);\n }\n })\n .catch((error) => {\n console.error(\"Failed to get output messages for logging:\", error);\n });\n } catch (error) {\n console.error(\"Error setting up logging for LLM response:\", error);\n }\n }\n\n // Add progressive logging if enabled\n if (this.observability?.enabled && this.observability.progressive && publicApiKey) {\n // Keep reference to original stream function\n const originalStream = eventSource.stream.bind(eventSource);\n\n // Wrap the stream function to intercept events\n eventSource.stream = async (callback) => {\n await originalStream(async (eventStream$) => {\n // Create subscription to capture streaming events\n eventStream$.subscribe({\n next: (event) => {\n // Only log content chunks\n if (event.type === RuntimeEventTypes.TextMessageContent) {\n // Store the chunk\n streamedChunks.push(event.content);\n\n // Log each chunk separately for progressive mode\n try {\n const progressiveData: LLMResponseData = {\n threadId: threadId || \"\",\n runId,\n model: forwardedParameters?.model,\n output: event.content,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: this.detectProvider(serviceAdapter),\n isProgressiveChunk: true,\n };\n\n // Use Promise to handle async logger without awaiting\n Promise.resolve()\n .then(() => {\n this.observability.hooks.handleResponse(progressiveData);\n })\n .catch((error) => {\n console.error(\"Error in progressive logging:\", error);\n });\n } catch (error) {\n console.error(\"Error preparing progressive log data:\", error);\n }\n }\n },\n });\n\n // Call the original callback with the event stream\n await callback(eventStream$);\n });\n };\n }\n\n return {\n threadId: nonEmptyThreadId,\n runId: result.runId,\n eventSource,\n serverSideActions,\n actionInputsWithoutAgents: actionInputs.filter(\n (action) =>\n // TODO-AGENTS: do not exclude ALL server side actions\n !serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n // !isRemoteAgentAction(\n // serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n // ),\n ),\n extensions: result.extensions,\n };\n } catch (error) {\n // Log error if logging is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const errorData: LLMErrorData = {\n threadId,\n runId,\n model: forwardedParameters?.model,\n error: error instanceof Error ? error : String(error),\n timestamp: Date.now(),\n latency: Date.now() - requestStartTime,\n provider: this.detectProvider(serviceAdapter),\n };\n\n await this.observability.hooks.handleError(errorData);\n } catch (logError) {\n console.error(\"Error logging LLM error:\", logError);\n }\n }\n\n let structuredError: CopilotKitError;\n\n if (error instanceof CopilotKitError) {\n structuredError = error;\n } else {\n // Convert non-CopilotKitErrors to structured errors\n console.error(\"Error getting response:\", error);\n structuredError = this.convertStreamingErrorToStructured(error);\n }\n\n // Trace the error\n await this.trace(\n \"error\",\n {\n threadId,\n runId,\n source: \"runtime\",\n request: {\n operation: \"processRuntimeRequest\",\n method: \"POST\",\n url: url,\n startTime: requestStartTime,\n },\n response: {\n endTime: Date.now(),\n latency: Date.now() - requestStartTime,\n },\n agent: agentSession ? { name: agentSession.agentName } : undefined,\n technical: {\n environment: process.env.NODE_ENV,\n stackTrace: error instanceof Error ? error.stack : undefined,\n },\n },\n structuredError,\n publicApiKey,\n );\n\n throw structuredError;\n }\n }\n\n async discoverAgentsFromEndpoints(graphqlContext: GraphQLContext): Promise<AgentWithEndpoint[]> {\n const agents: Promise<AgentWithEndpoint[]> = this.remoteEndpointDefinitions.reduce(\n async (acc: Promise<Agent[]>, endpoint) => {\n const agents = await acc;\n if (endpoint.type === EndpointType.LangGraphPlatform) {\n const propertyHeaders = graphqlContext.properties.authorization\n ? { authorization: `Bearer ${graphqlContext.properties.authorization}` }\n : null;\n\n const client = new LangGraphClient({\n apiUrl: endpoint.deploymentUrl,\n apiKey: endpoint.langsmithApiKey,\n defaultHeaders: { ...propertyHeaders },\n });\n let data: Array<{ assistant_id: string; graph_id: string }> | { detail: string } = [];\n try {\n data = await client.assistants.search();\n\n if (data && \"detail\" in data && (data.detail as string).toLowerCase() === \"not found\") {\n throw new CopilotKitAgentDiscoveryError({ availableAgents: this.availableAgents });\n }\n } catch (e) {\n throw new CopilotKitMisuseError({\n message: `\n Failed to find or contact remote endpoint at url ${endpoint.deploymentUrl}.\n Make sure the API is running and that it's indeed a LangGraph platform url.\n \n See more: https://docs.copilotkit.ai/troubleshooting/common-issues`,\n });\n }\n const endpointAgents = data.map((entry) => ({\n name: entry.graph_id,\n id: entry.assistant_id,\n description: \"\",\n endpoint,\n }));\n return [...agents, ...endpointAgents];\n }\n\n interface InfoResponse {\n agents?: Array<{\n name: string;\n description: string;\n }>;\n }\n const cpkEndpoint = endpoint as CopilotKitEndpoint;\n const fetchUrl = `${endpoint.url}/info`;\n try {\n const response = await fetchWithRetry(fetchUrl, {\n method: \"POST\",\n headers: createHeaders(cpkEndpoint.onBeforeRequest, graphqlContext),\n body: JSON.stringify({ properties: graphqlContext.properties }),\n });\n if (!response.ok) {\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const data: InfoResponse = await response.json();\n const endpointAgents = (data?.agents ?? []).map((agent) => ({\n name: agent.name,\n description: agent.description ?? \"\" ?? \"\",\n id: randomId(), // Required by Agent type\n endpoint,\n }));\n return [...agents, ...endpointAgents];\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error: error as Error, url: fetchUrl });\n }\n },\n Promise.resolve([]),\n );\n this.availableAgents = ((await agents) ?? []).map((a) => ({ name: a.name, id: a.id }));\n\n return agents;\n }\n\n async loadAgentState(\n graphqlContext: GraphQLContext,\n threadId: string,\n agentName: string,\n ): Promise<LoadAgentStateResponse> {\n const agentsWithEndpoints = await this.discoverAgentsFromEndpoints(graphqlContext);\n\n const agentWithEndpoint = agentsWithEndpoints.find((agent) => agent.name === agentName);\n if (!agentWithEndpoint) {\n throw new Error(\"Agent not found\");\n }\n\n if (agentWithEndpoint.endpoint.type === EndpointType.LangGraphPlatform) {\n const propertyHeaders = graphqlContext.properties.authorization\n ? { authorization: `Bearer ${graphqlContext.properties.authorization}` }\n : null;\n\n const client = new LangGraphClient({\n apiUrl: agentWithEndpoint.endpoint.deploymentUrl,\n apiKey: agentWithEndpoint.endpoint.langsmithApiKey,\n defaultHeaders: { ...propertyHeaders },\n });\n let state: any = {};\n try {\n state = (await client.threads.getState(threadId)).values as any;\n } catch (error) {}\n\n if (Object.keys(state).length === 0) {\n return {\n threadId: threadId || \"\",\n threadExists: false,\n state: JSON.stringify({}),\n messages: JSON.stringify([]),\n };\n } else {\n const { messages, ...stateWithoutMessages } = state;\n const copilotkitMessages = langchainMessagesToCopilotKit(messages);\n return {\n threadId: threadId || \"\",\n threadExists: true,\n state: JSON.stringify(stateWithoutMessages),\n messages: JSON.stringify(copilotkitMessages),\n };\n }\n } else if (\n agentWithEndpoint.endpoint.type === EndpointType.CopilotKit ||\n !(\"type\" in agentWithEndpoint.endpoint)\n ) {\n const cpkEndpoint = agentWithEndpoint.endpoint as CopilotKitEndpoint;\n const fetchUrl = `${cpkEndpoint.url}/agents/state`;\n try {\n const response = await fetchWithRetry(fetchUrl, {\n method: \"POST\",\n headers: createHeaders(cpkEndpoint.onBeforeRequest, graphqlContext),\n body: JSON.stringify({\n properties: graphqlContext.properties,\n threadId,\n name: agentName,\n }),\n });\n if (!response.ok) {\n if (response.status === 404) {\n throw new CopilotKitApiDiscoveryError({ url: fetchUrl });\n }\n throw new ResolvedCopilotKitError({\n status: response.status,\n url: fetchUrl,\n isRemoteEndpoint: true,\n });\n }\n\n const data: LoadAgentStateResponse = await response.json();\n\n return {\n ...data,\n state: JSON.stringify(data.state),\n messages: JSON.stringify(data.messages),\n };\n } catch (error) {\n if (error instanceof CopilotKitError) {\n throw error;\n }\n throw new CopilotKitLowLevelError({ error, url: fetchUrl });\n }\n } else {\n throw new Error(`Unknown endpoint type: ${(agentWithEndpoint.endpoint as any).type}`);\n }\n }\n\n private async processAgentRequest(\n request: CopilotRuntimeRequest,\n ): Promise<CopilotRuntimeResponse> {\n const {\n messages: rawMessages,\n outputMessagesPromise,\n graphqlContext,\n agentSession,\n threadId: threadIdFromRequest,\n metaEvents,\n publicApiKey,\n forwardedParameters,\n } = request;\n const { agentName, nodeName } = agentSession;\n\n // Track request start time for observability\n const requestStartTime = Date.now();\n // For storing streamed chunks if progressive logging is enabled\n const streamedChunks: any[] = [];\n\n // for backwards compatibility, deal with the case when no threadId is provided\n const threadId = threadIdFromRequest ?? agentSession.threadId;\n\n // Trace agent request start\n await this.trace(\n \"agent_state\",\n {\n threadId,\n source: \"agent\",\n request: {\n operation: \"processAgentRequest\",\n method: \"POST\",\n startTime: requestStartTime,\n },\n agent: {\n name: agentName,\n nodeName: nodeName,\n },\n messages: {\n input: rawMessages,\n messageCount: rawMessages.length,\n },\n technical: {\n environment: process.env.NODE_ENV,\n },\n },\n undefined,\n publicApiKey,\n );\n\n const serverSideActions = await this.getServerSideActions(request);\n\n const messages = convertGqlInputToMessages(rawMessages);\n\n const currentAgent = serverSideActions.find(\n (action) => action.name === agentName && isRemoteAgentAction(action),\n ) as RemoteAgentAction;\n\n if (!currentAgent) {\n throw new CopilotKitAgentDiscoveryError({ agentName, availableAgents: this.availableAgents });\n }\n\n // Filter actions to include:\n // 1. Regular (non-agent) actions\n // 2. Other agents' actions (but prevent self-calls to avoid infinite loops)\n const availableActionsForCurrentAgent: ActionInput[] = serverSideActions\n .filter(\n (action) =>\n // Case 1: Keep all regular (non-agent) actions\n !isRemoteAgentAction(action) ||\n // Case 2: For agent actions, keep all except self (prevent infinite loops)\n (isRemoteAgentAction(action) && action.name !== agentName) /* prevent self-calls */,\n )\n .map((action) => ({\n name: action.name,\n description: action.description,\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),\n }));\n\n const allAvailableActions = flattenToolCallsNoDuplicates([\n ...availableActionsForCurrentAgent,\n ...request.actions,\n ]);\n\n // Log agent request if observability is enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const requestData: LLMRequestData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n messages,\n actions: allAvailableActions,\n forwardedParameters,\n timestamp: requestStartTime,\n provider: \"agent\",\n agentName, // Add agent-specific context\n nodeName,\n };\n\n await this.observability.hooks.handleRequest(requestData);\n } catch (error) {\n console.error(\"Error logging agent request:\", error);\n }\n }\n\n await this.onBeforeRequest?.({\n threadId,\n runId: undefined,\n inputMessages: messages,\n properties: graphqlContext.properties,\n });\n\n try {\n const eventSource = new RuntimeEventSource();\n const stream = await currentAgent.remoteAgentHandler({\n name: agentName,\n threadId,\n nodeName,\n metaEvents,\n actionInputsWithoutAgents: allAvailableActions,\n });\n\n // Add progressive observability if enabled\n if (this.observability?.enabled && this.observability.progressive && publicApiKey) {\n // Wrap the stream function to intercept events for observability without changing core logic\n const originalStream = eventSource.stream.bind(eventSource);\n\n eventSource.stream = async (callback) => {\n await originalStream(async (eventStream$) => {\n // Create subscription to capture streaming events\n eventStream$.subscribe({\n next: (event) => {\n // Only log content chunks\n if (event.type === RuntimeEventTypes.TextMessageContent) {\n // Store the chunk\n streamedChunks.push(event.content);\n\n // Log each chunk separately for progressive mode\n try {\n const progressiveData: LLMResponseData = {\n threadId: threadId || \"\",\n runId: undefined,\n model: forwardedParameters?.model,\n output: event.content,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: \"agent\",\n isProgressiveChunk: true,\n agentName,\n nodeName,\n };\n\n // Use Promise to handle async logger without awaiting\n Promise.resolve()\n .then(() => {\n this.observability.hooks.handleResponse(progressiveData);\n })\n .catch((error) => {\n console.error(\"Error in progressive agent logging:\", error);\n });\n } catch (error) {\n console.error(\"Error preparing progressive agent log data:\", error);\n }\n }\n },\n });\n\n // Call the original callback with the event stream\n await callback(eventStream$);\n });\n };\n }\n\n eventSource.stream(async (eventStream$) => {\n from(stream).subscribe({\n next: (event) => eventStream$.next(event),\n error: async (err) => {\n console.error(\"Error in stream\", err);\n\n // Log error with observability if enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const errorData: LLMErrorData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n error: err instanceof Error ? err : String(err),\n timestamp: Date.now(),\n latency: Date.now() - requestStartTime,\n provider: \"agent\",\n agentName,\n nodeName,\n };\n\n this.observability.hooks.handleError(errorData);\n } catch (logError) {\n console.error(\"Error logging agent error:\", logError);\n }\n }\n\n // Convert network termination errors to structured errors\n const structuredError = this.convertStreamingErrorToStructured(err);\n\n // Trace streaming errors\n await this.trace(\n \"error\",\n {\n threadId,\n source: \"agent\",\n request: {\n operation: \"processAgentRequest\",\n method: \"POST\",\n startTime: requestStartTime,\n },\n response: {\n endTime: Date.now(),\n latency: Date.now() - requestStartTime,\n },\n agent: {\n name: agentName,\n nodeName: nodeName,\n },\n technical: {\n environment: process.env.NODE_ENV,\n stackTrace: err instanceof Error ? err.stack : undefined,\n },\n },\n structuredError,\n publicApiKey,\n );\n\n eventStream$.error(structuredError);\n eventStream$.complete();\n },\n complete: () => eventStream$.complete(),\n });\n });\n\n // Log final agent response when outputs are available\n if (this.observability?.enabled && publicApiKey) {\n outputMessagesPromise\n .then((outputMessages) => {\n const responseData: LLMResponseData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n // Use collected chunks for progressive mode or outputMessages for regular mode\n output: this.observability.progressive ? streamedChunks : outputMessages,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: \"agent\",\n isFinalResponse: true,\n agentName,\n nodeName,\n };\n\n try {\n this.observability.hooks.handleResponse(responseData);\n } catch (logError) {\n console.error(\"Error logging agent response:\", logError);\n }\n })\n .catch((error) => {\n console.error(\"Failed to get output messages for agent logging:\", error);\n });\n }\n\n outputMessagesPromise\n .then((outputMessages) => {\n this.onAfterRequest?.({\n threadId,\n runId: undefined,\n inputMessages: messages,\n outputMessages,\n properties: graphqlContext.properties,\n });\n })\n .catch((_error) => {});\n\n return {\n threadId,\n runId: undefined,\n eventSource,\n serverSideActions,\n actionInputsWithoutAgents: allAvailableActions,\n };\n } catch (error) {\n // Log error with observability if enabled\n if (this.observability?.enabled && publicApiKey) {\n try {\n const errorData: LLMErrorData = {\n threadId,\n runId: undefined,\n model: forwardedParameters?.model,\n error: error instanceof Error ? error : String(error),\n timestamp: Date.now(),\n latency: Date.now() - requestStartTime,\n provider: \"agent\",\n agentName,\n nodeName,\n };\n\n await this.observability.hooks.handleError(errorData);\n } catch (logError) {\n console.error(\"Error logging agent error:\", logError);\n }\n }\n\n // Ensure error is structured\n let structuredError: CopilotKitError;\n if (error instanceof CopilotKitError) {\n structuredError = error;\n } else {\n structuredError = this.convertStreamingErrorToStructured(error);\n }\n\n // Trace the agent error\n await this.trace(\n \"error\",\n {\n threadId,\n source: \"agent\",\n request: {\n operation: \"processAgentRequest\",\n method: \"POST\",\n startTime: requestStartTime,\n },\n response: {\n endTime: Date.now(),\n latency: Date.now() - requestStartTime,\n },\n agent: {\n name: agentName,\n nodeName: nodeName,\n },\n technical: {\n environment: process.env.NODE_ENV,\n stackTrace: error instanceof Error ? error.stack : undefined,\n },\n },\n structuredError,\n publicApiKey,\n );\n\n console.error(\"Error getting response:\", error);\n throw structuredError;\n }\n }\n\n private async getServerSideActions(request: CopilotRuntimeRequest): Promise<Action<any>[]> {\n const { graphqlContext, messages: rawMessages, agentStates, url } = request;\n\n // --- Standard Action Fetching (unchanged) ---\n const inputMessages = convertGqlInputToMessages(rawMessages);\n const langserveFunctions: Action<any>[] = [];\n for (const chainPromise of this.langserve) {\n try {\n const chain = await chainPromise;\n langserveFunctions.push(chain);\n } catch (error) {\n console.error(\"Error loading langserve chain:\", error);\n }\n }\n\n const remoteEndpointDefinitions = this.remoteEndpointDefinitions.map(\n (endpoint) => ({ ...endpoint, type: resolveEndpointType(endpoint) }) as EndpointDefinition,\n );\n\n const remoteActions = await setupRemoteActions({\n remoteEndpointDefinitions,\n graphqlContext,\n messages: inputMessages,\n agentStates,\n frontendUrl: url,\n agents: this.agents,\n metaEvents: request.metaEvents,\n });\n\n const configuredActions =\n typeof this.actions === \"function\"\n ? this.actions({ properties: graphqlContext.properties, url })\n : this.actions;\n // --- Standard Action Fetching (unchanged) ---\n\n // +++ Dynamic MCP Action Fetching +++\n const requestSpecificMCPActions: Action<any>[] = [];\n if (this.createMCPClientImpl) {\n // 1. Determine effective MCP endpoints for this request\n const baseEndpoints = this.mcpServersConfig || [];\n // Assuming frontend passes config via properties.mcpServers\n const requestEndpoints = (graphqlContext.properties?.mcpServers ||\n graphqlContext.properties?.mcpEndpoints ||\n []) as MCPEndpointConfig[];\n\n // Merge and deduplicate endpoints based on URL\n const effectiveEndpointsMap = new Map<string, MCPEndpointConfig>();\n\n // First add base endpoints (from runtime configuration)\n [...baseEndpoints].forEach((ep) => {\n if (ep && ep.endpoint) {\n effectiveEndpointsMap.set(ep.endpoint, ep);\n }\n });\n\n // Then add request endpoints (from frontend), which will override duplicates\n [...requestEndpoints].forEach((ep) => {\n if (ep && ep.endpoint) {\n effectiveEndpointsMap.set(ep.endpoint, ep);\n }\n });\n\n const effectiveEndpoints = Array.from(effectiveEndpointsMap.values());\n\n // 2. Fetch/Cache actions for effective endpoints\n for (const config of effectiveEndpoints) {\n const endpointUrl = config.endpoint;\n let actionsForEndpoint: Action<any>[] | undefined = this.mcpActionCache.get(endpointUrl);\n\n if (!actionsForEndpoint) {\n // Not cached, fetch now\n let client: MCPClient | null = null;\n try {\n client = await this.createMCPClientImpl(config);\n const tools = await client.tools();\n actionsForEndpoint = convertMCPToolsToActions(tools, endpointUrl);\n this.mcpActionCache.set(endpointUrl, actionsForEndpoint); // Store in cache\n } catch (error) {\n console.error(\n `MCP: Failed to fetch tools from endpoint ${endpointUrl}. Skipping. Error:`,\n error,\n );\n actionsForEndpoint = []; // Assign empty array on error to prevent re-fetching constantly\n this.mcpActionCache.set(endpointUrl, actionsForEndpoint); // Cache the failure (empty array)\n }\n }\n requestSpecificMCPActions.push(...(actionsForEndpoint || []));\n }\n }\n // --- Dynamic MCP Action Fetching ---\n\n // Combine all action sources, including the dynamically fetched MCP actions\n return [\n ...configuredActions,\n ...langserveFunctions,\n ...remoteActions,\n ...requestSpecificMCPActions,\n ];\n }\n\n // Add helper method to detect provider\n private detectProvider(serviceAdapter: CopilotServiceAdapter): string | undefined {\n const adapterName = serviceAdapter.constructor.name;\n if (adapterName.includes(\"OpenAI\")) return \"openai\";\n if (adapterName.includes(\"Anthropic\")) return \"anthropic\";\n if (adapterName.includes(\"Google\")) return \"google\";\n if (adapterName.includes(\"Groq\")) return \"groq\";\n if (adapterName.includes(\"LangChain\")) return \"langchain\";\n return undefined;\n }\n\n private convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Handle network termination errors\n if (\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitError({\n message:\n \"Connection to agent was unexpectedly terminated. This may be due to the agent service being restarted or network issues. Please try again.\",\n code: CopilotKitErrorCode.NETWORK_ERROR,\n });\n }\n\n // Handle other network-related errors\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\")\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"agent streaming connection\",\n message:\n \"Network error occurred during agent streaming. Please check your connection and try again.\",\n });\n }\n\n // Handle abort/cancellation errors (these are usually normal)\n if (\n error?.message?.includes(\"aborted\") ||\n error?.message?.includes(\"canceled\") ||\n error?.message?.includes(\"signal is aborted\")\n ) {\n return new CopilotKitError({\n message: \"Agent request was cancelled\",\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n // Default: convert unknown streaming errors\n return new CopilotKitError({\n message: `Agent streaming error: ${error?.message || String(error)}`,\n code: CopilotKitErrorCode.UNKNOWN,\n });\n }\n\n private async trace(\n type: CopilotTraceEvent[\"type\"],\n context: CopilotRequestContext,\n error?: any,\n publicApiKey?: string,\n ): Promise<void> {\n if (!this.onTrace) return;\n\n if (!publicApiKey) {\n if (!this.hasWarnedAboutTracing) {\n console.warn(\n \"CopilotKit: onTrace handler provided but requires publicApiKey for tracing to work. \" +\n \"This is a CopilotKit Cloud feature. See: https://docs.copilotkit.ai/cloud\",\n );\n this.hasWarnedAboutTracing = true;\n }\n return;\n }\n\n try {\n const traceEvent: CopilotTraceEvent = {\n type,\n timestamp: Date.now(),\n context,\n ...(error && { error }),\n };\n\n await this.onTrace(traceEvent);\n } catch (traceError) {\n // Don't let trace errors break the main flow\n console.error(\"Error in onTrace handler:\", traceError);\n }\n }\n\n /**\n * Public method to trace GraphQL validation errors\n * This allows the GraphQL resolver to send validation errors through the trace system\n */\n public async traceGraphQLError(\n error: { message: string; code: string; type: string },\n context: {\n operation: string;\n cloudConfigPresent: boolean;\n guardrailsEnabled: boolean;\n },\n ): Promise<void> {\n if (!this.onTrace) return;\n\n try {\n await this.onTrace({\n type: \"error\",\n timestamp: Date.now(),\n context: {\n source: \"runtime\",\n request: {\n operation: context.operation,\n startTime: Date.now(),\n },\n technical: {\n environment: process.env.NODE_ENV,\n },\n metadata: {\n errorType: \"GraphQLValidationError\",\n cloudConfigPresent: context.cloudConfigPresent,\n guardrailsEnabled: context.guardrailsEnabled,\n },\n },\n error,\n });\n } catch (traceError) {\n // Don't let trace errors break the main flow\n console.error(\"Error in onTrace handler:\", traceError);\n }\n }\n}\n\nexport function flattenToolCallsNoDuplicates(toolsByPriority: ActionInput[]): ActionInput[] {\n let allTools: ActionInput[] = [];\n const allToolNames: string[] = [];\n for (const tool of toolsByPriority) {\n if (!allToolNames.includes(tool.name)) {\n allTools.push(tool);\n allToolNames.push(tool.name);\n }\n }\n return allTools;\n}\n\n// The two functions below are \"factory functions\", meant to create the action objects that adhere to the expected interfaces\nexport function copilotKitEndpoint(config: Omit<CopilotKitEndpoint, \"type\">): CopilotKitEndpoint {\n return {\n ...config,\n type: EndpointType.CopilotKit,\n };\n}\n\nexport function langGraphPlatformEndpoint(\n config: Omit<LangGraphPlatformEndpoint, \"type\">,\n): LangGraphPlatformEndpoint {\n return {\n ...config,\n type: EndpointType.LangGraphPlatform,\n };\n}\n\nexport function resolveEndpointType(endpoint: EndpointDefinition) {\n if (!endpoint.type) {\n if (\"deploymentUrl\" in endpoint && \"agents\" in endpoint) {\n return EndpointType.LangGraphPlatform;\n } else {\n return EndpointType.CopilotKit;\n }\n }\n\n return endpoint.type;\n}\n","import { Parameter, Action } from \"@copilotkit/shared\";\nimport { RemoteRunnable } from \"langchain/runnables/remote\";\n\nexport interface RemoteChainParameters {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType?: \"single\" | \"multi\";\n}\n\nexport class RemoteChain {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType: \"single\" | \"multi\";\n\n constructor(options: RemoteChainParameters) {\n this.name = options.name;\n this.description = options.description;\n this.chainUrl = options.chainUrl;\n this.parameters = options.parameters;\n this.parameterType = options.parameterType || \"multi\";\n }\n\n async toAction(): Promise<Action<any>> {\n if (!this.parameters) {\n await this.inferLangServeParameters();\n }\n\n return {\n name: this.name,\n description: this.description,\n parameters: this.parameters!,\n handler: async (args: any) => {\n const runnable = new RemoteRunnable({ url: this.chainUrl });\n let input: any;\n if (this.parameterType === \"single\") {\n input = args[Object.keys(args)[0]];\n } else {\n input = args;\n }\n return await runnable.invoke(input);\n },\n };\n }\n\n async inferLangServeParameters() {\n const supportedTypes = [\"string\", \"number\", \"boolean\"];\n\n let schemaUrl = this.chainUrl.replace(/\\/+$/, \"\") + \"/input_schema\";\n let schema = await fetch(schemaUrl)\n .then((res) => res.json())\n .catch(() => {\n throw new Error(\"Failed to fetch langserve schema at \" + schemaUrl);\n });\n // for now, don't use json schema, just do a simple conversion\n\n if (supportedTypes.includes(schema.type)) {\n this.parameterType = \"single\";\n this.parameters = [\n {\n name: \"input\",\n type: schema.type,\n description: \"The input to the chain\",\n },\n ];\n } else if (schema.type === \"object\") {\n this.parameterType = \"multi\";\n this.parameters = Object.keys(schema.properties).map((key) => {\n let property = schema.properties[key];\n if (!supportedTypes.includes(property.type)) {\n throw new Error(\"Unsupported schema type\");\n }\n return {\n name: key,\n type: property.type,\n description: property.description || \"\",\n required: schema.required?.includes(key) || false,\n };\n });\n } else {\n throw new Error(\"Unsupported schema type\");\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Anthropic.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, AnthropicAdapter } from \"@copilotkit/runtime\";\n * import Anthropic from \"@anthropic-ai/sdk\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const anthropic = new Anthropic({\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new AnthropicAdapter({ anthropic });\n * ```\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToAnthropicTool,\n convertMessageToAnthropicMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\n\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"claude-3-5-sonnet-latest\";\n\nexport interface AnthropicAdapterParams {\n /**\n * An optional Anthropic instance to use. If not provided, a new instance will be\n * created.\n */\n anthropic?: Anthropic;\n\n /**\n * The model to use.\n */\n model?: string;\n}\n\nexport class AnthropicAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private _anthropic: Anthropic;\n public get anthropic(): Anthropic {\n return this._anthropic;\n }\n\n constructor(params?: AnthropicAdapterParams) {\n this._anthropic = params?.anthropic || new Anthropic({});\n if (params?.model) {\n this.model = params.model;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages: rawMessages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToAnthropicTool);\n\n const messages = [...rawMessages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // ALLOWLIST APPROACH:\n // 1. First, identify all valid tool_use calls (from assistant)\n // 2. Then, only keep tool_result blocks that correspond to these valid tool_use IDs\n // 3. Discard any other tool_result blocks\n\n // Step 1: Extract valid tool_use IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Map each message to an Anthropic message, eliminating invalid tool_results\n const anthropicMessages = messages\n .map((message) => {\n // For tool results, only include if they match a valid tool_use ID\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_use\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return null; // Will be filtered out later\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result,\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n\n // For non-tool-result messages, convert normally\n return convertMessageToAnthropicMessage(message);\n })\n .filter(Boolean) // Remove nulls\n .filter((msg) => {\n // Filter out assistant messages with empty text content\n if (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n const hasEmptyTextOnly =\n msg.content.length === 1 &&\n msg.content[0].type === \"text\" &&\n (!(msg.content[0] as any).text || (msg.content[0] as any).text.trim() === \"\");\n\n // Keep messages that have tool_use or non-empty text\n return !hasEmptyTextOnly;\n }\n return true;\n }) as Anthropic.Messages.MessageParam[];\n\n // Apply token limits\n const limitedMessages = limitMessagesToTokenCount(anthropicMessages, tools, model);\n\n // We skip grouping by role since we've already ensured uniqueness of tool_results\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"tool\",\n name: forwardedParameters.toolChoiceFunctionName,\n };\n }\n\n try {\n const createParams = {\n system: instructions,\n model: this.model,\n messages: limitedMessages,\n max_tokens: forwardedParameters?.maxTokens || 1024,\n ...(forwardedParameters?.temperature\n ? { temperature: forwardedParameters.temperature }\n : {}),\n ...(tools.length > 0 && { tools }),\n ...(toolChoice && { tool_choice: toolChoice }),\n stream: true,\n };\n\n const stream = await this.anthropic.messages.create(createParams);\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let didOutputText = false;\n let currentMessageId = randomId();\n let currentToolCallId = randomId();\n let filterThinkingTextBuffer = new FilterThinkingTextBuffer();\n\n try {\n for await (const chunk of stream as AsyncIterable<any>) {\n if (chunk.type === \"message_start\") {\n currentMessageId = chunk.message.id;\n } else if (chunk.type === \"content_block_start\") {\n if (chunk.content_block.type === \"text\") {\n didOutputText = false;\n filterThinkingTextBuffer.reset();\n mode = \"message\";\n } else if (chunk.content_block.type === \"tool_use\") {\n currentToolCallId = chunk.content_block.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: chunk.content_block.name,\n parentMessageId: currentMessageId,\n });\n mode = \"function\";\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta.type === \"text_delta\") {\n const text = filterThinkingTextBuffer.onTextChunk(chunk.delta.text);\n if (text.length > 0) {\n if (!didOutputText) {\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n didOutputText = true;\n }\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: text,\n });\n }\n } else if (chunk.delta.type === \"input_json_delta\") {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: chunk.delta.partial_json,\n });\n }\n } else if (chunk.type === \"content_block_stop\") {\n if (mode === \"message\") {\n if (didOutputText) {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n }\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n }\n }\n } catch (error) {\n console.error(\"[Anthropic] Error processing stream:\", error);\n throw error;\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[Anthropic] Error during API call:\", error);\n throw error;\n }\n\n return {\n threadId: threadId || randomUUID(),\n };\n }\n}\n\nconst THINKING_TAG = \"<thinking>\";\nconst THINKING_TAG_END = \"</thinking>\";\n\nclass FilterThinkingTextBuffer {\n private buffer: string;\n private didFilterThinkingTag: boolean = false;\n\n constructor() {\n this.buffer = \"\";\n }\n\n onTextChunk(text: string): string {\n this.buffer += text;\n if (this.didFilterThinkingTag) {\n return text;\n }\n const potentialTag = this.buffer.slice(0, THINKING_TAG.length);\n if (THINKING_TAG.startsWith(potentialTag)) {\n if (this.buffer.includes(THINKING_TAG_END)) {\n const end = this.buffer.indexOf(THINKING_TAG_END);\n const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);\n this.buffer = filteredText;\n this.didFilterThinkingTag = true;\n return filteredText;\n } else {\n return \"\";\n }\n }\n return text;\n }\n\n reset() {\n this.buffer = \"\";\n this.didFilterThinkingTag = false;\n }\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Anthropic } from \"@anthropic-ai/sdk\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= MAX_TOKENS;\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if (message.role === \"system\") {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if (message.role === \"system\") {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nconst MAX_TOKENS = 128000;\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, JSON.stringify(message.content) || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToAnthropicTool(action: ActionInput): Anthropic.Messages.Tool {\n return {\n name: action.name,\n description: action.description,\n input_schema: JSON.parse(action.jsonSchema),\n };\n}\n\nexport function convertMessageToAnthropicMessage(\n message: Message,\n): Anthropic.Messages.MessageParam {\n if (message.isTextMessage()) {\n if (message.role === \"system\") {\n return {\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content },\n ],\n };\n } else {\n return {\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [{ type: \"text\", text: message.content }],\n };\n }\n } else if (message.isImageMessage()) {\n let mediaType: Anthropic.Messages.ImageBlockParam.Source[\"media_type\"];\n switch (message.format) {\n case \"jpeg\":\n mediaType = \"image/jpeg\";\n break;\n case \"png\":\n mediaType = \"image/png\";\n break;\n case \"webp\":\n mediaType = \"image/webp\";\n break;\n case \"gif\":\n mediaType = \"image/gif\";\n break;\n default:\n throw new Error(`Unsupported image format: ${message.format}`);\n }\n\n return {\n role: \"user\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: mediaType,\n data: message.bytes,\n },\n },\n ],\n };\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n content: [\n {\n id: message.id,\n type: \"tool_use\",\n input: message.arguments,\n name: message.name,\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result,\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n}\n","/**\n * CopilotKit Adapter for Ollama\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OllamaAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OllamaAdapter({ model: \"llama3-70b-8192\" }),\n * );\n * ```\n */\nimport { TextMessage } from \"../../../graphql/types/converted\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../../service-adapter\";\nimport { Ollama } from \"@langchain/community/llms/ollama\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama3:latest\";\n\ninterface OllamaAdapterOptions {\n model?: string;\n}\n\nexport class ExperimentalOllamaAdapter implements CopilotServiceAdapter {\n private model: string;\n\n constructor(options?: OllamaAdapterOptions) {\n if (options?.model) {\n this.model = options.model;\n } else {\n this.model = DEFAULT_MODEL;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource } = request;\n // const messages = this.transformMessages(forwardedProps.messages);\n\n const ollama = new Ollama({\n model: this.model,\n });\n const contents = (messages.filter((m) => m.isTextMessage()) as TextMessage[]).map(\n (m) => m.content,\n );\n const _stream = await ollama.stream(contents); // [TODO] role info is dropped...\n\n eventSource.stream(async (eventStream$) => {\n const currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n for await (const chunkText of _stream) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunkText,\n });\n }\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n // we may need to add this later.. [nc]\n // let calls = (await result.response).functionCalls();\n\n eventStream$.complete();\n });\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for AWS Bedrock.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, BedrockAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new BedrockAdapter({\n * model: \"amazon.nova-lite-v1:0\",\n * region: \"us-east-1\",\n * credentials: {\n * accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n * }\n * });\n * ```\n */\n\nimport { ChatBedrockConverse } from \"@langchain/aws\";\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\nexport interface BedrockAdapterParams {\n /**\n * AWS Bedrock model ID to use.\n * @default \"amazon.nova-lite-v1:0\"\n */\n model?: string;\n\n /**\n * AWS region where Bedrock is available.\n * @default \"us-east-1\"\n */\n region?: string;\n\n /**\n * AWS credentials for Bedrock access.\n */\n credentials?: {\n accessKeyId?: string;\n secretAccessKey?: string;\n };\n}\n\nexport class BedrockAdapter extends LangChainAdapter {\n constructor(options?: BedrockAdapterParams) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n const model = new ChatBedrockConverse({\n model: options?.model ?? \"amazon.nova-lite-v1:0\",\n region: options?.region ?? \"us-east-1\",\n credentials: options?.credentials\n ? {\n accessKeyId: options.credentials.accessKeyId,\n secretAccessKey: options.credentials.secretAccessKey,\n }\n : undefined,\n }).bindTools(tools);\n return model.stream(messages);\n },\n });\n }\n}\n","/**\n * CopilotKit Empty Adapter\n *\n * This adapter is meant to preserve adherence to runtime requirements, while doing nothing\n * Ideal if you don't want to connect an LLM the to the runtime, and only use your LangGraph agent.\n * Be aware that Copilot Suggestions will not work if you use this adapter\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, EmptyAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new EmptyAdapter();\n * ```\n */\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nexport class EmptyAdapter implements CopilotServiceAdapter {\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n\nexport const ExperimentalEmptyAdapter = EmptyAdapter;\n","import {\n ActionExecutionMessageInput,\n ResultMessageInput,\n TextMessageInput,\n AgentStateMessageInput,\n ImageMessageInput,\n} from \"../../inputs/message.input\";\nimport { BaseMessageInput } from \"../base\";\nimport { MessageRole } from \"../enums\";\n\nexport type MessageType =\n | \"TextMessage\"\n | \"ActionExecutionMessage\"\n | \"ResultMessage\"\n | \"AgentStateMessage\"\n | \"ImageMessage\";\n\nexport class Message extends BaseMessageInput {\n type: MessageType;\n\n isTextMessage(): this is TextMessage {\n return this.type === \"TextMessage\";\n }\n\n isActionExecutionMessage(): this is ActionExecutionMessage {\n return this.type === \"ActionExecutionMessage\";\n }\n\n isResultMessage(): this is ResultMessage {\n return this.type === \"ResultMessage\";\n }\n\n isAgentStateMessage(): this is AgentStateMessage {\n return this.type === \"AgentStateMessage\";\n }\n\n isImageMessage(): this is ImageMessage {\n return this.type === \"ImageMessage\";\n }\n}\n\nexport class TextMessage extends Message implements TextMessageInput {\n type: MessageType = \"TextMessage\";\n content: string;\n role: MessageRole;\n parentMessageId?: string;\n}\n\nexport class ActionExecutionMessage\n extends Message\n implements Omit<ActionExecutionMessageInput, \"arguments\" | \"scope\">\n{\n type: MessageType = \"ActionExecutionMessage\";\n name: string;\n arguments: Record<string, any>;\n parentMessageId?: string;\n}\n\nexport class ResultMessage extends Message implements ResultMessageInput {\n type: MessageType = \"ResultMessage\";\n actionExecutionId: string;\n actionName: string;\n result: string;\n\n static encodeResult(\n result: any,\n error?: { code: string; message: string } | string | Error,\n ): string {\n const errorObj = error\n ? typeof error === \"string\"\n ? { code: \"ERROR\", message: error }\n : error instanceof Error\n ? { code: \"ERROR\", message: error.message }\n : error\n : undefined;\n\n if (errorObj) {\n return JSON.stringify({\n error: errorObj,\n result: result || \"\",\n });\n }\n if (result === undefined) {\n return \"\";\n }\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n static decodeResult(result: string): {\n error?: { code: string; message: string };\n result: string;\n } {\n if (!result) {\n return { result: \"\" };\n }\n try {\n const parsed = JSON.parse(result);\n if (parsed && typeof parsed === \"object\") {\n if (\"error\" in parsed) {\n return {\n error: parsed.error,\n result: parsed.result || \"\",\n };\n }\n return { result: JSON.stringify(parsed) };\n }\n return { result };\n } catch (e) {\n return { result };\n }\n }\n\n hasError(): boolean {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return !!error;\n } catch {\n return false;\n }\n }\n\n getError(): { code: string; message: string } | undefined {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return error;\n } catch {\n return undefined;\n }\n }\n}\n\nexport class AgentStateMessage extends Message implements Omit<AgentStateMessageInput, \"state\"> {\n type: MessageType = \"AgentStateMessage\";\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: MessageRole;\n state: any;\n running: boolean;\n}\n\nexport class ImageMessage extends Message implements ImageMessageInput {\n type: MessageType = \"ImageMessage\";\n format: string;\n bytes: string;\n role: MessageRole;\n parentMessageId?: string;\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n AgentStateMessage,\n ImageMessage,\n} from \"../graphql/types/converted\";\nimport { MessageInput } from \"../graphql/inputs/message.input\";\nimport { plainToInstance } from \"class-transformer\";\nimport { tryMap } from \"@copilotkit/shared\";\n\nexport function convertGqlInputToMessages(inputMessages: MessageInput[]): Message[] {\n const messages = tryMap(inputMessages, (message) => {\n if (message.textMessage) {\n return plainToInstance(TextMessage, {\n id: message.id,\n createdAt: message.createdAt,\n role: message.textMessage.role,\n content: message.textMessage.content,\n parentMessageId: message.textMessage.parentMessageId,\n });\n } else if (message.imageMessage) {\n return plainToInstance(ImageMessage, {\n id: message.id,\n createdAt: message.createdAt,\n role: message.imageMessage.role,\n bytes: message.imageMessage.bytes,\n format: message.imageMessage.format,\n parentMessageId: message.imageMessage.parentMessageId,\n });\n } else if (message.actionExecutionMessage) {\n return plainToInstance(ActionExecutionMessage, {\n id: message.id,\n createdAt: message.createdAt,\n name: message.actionExecutionMessage.name,\n arguments: JSON.parse(message.actionExecutionMessage.arguments),\n parentMessageId: message.actionExecutionMessage.parentMessageId,\n });\n } else if (message.resultMessage) {\n return plainToInstance(ResultMessage, {\n id: message.id,\n createdAt: message.createdAt,\n actionExecutionId: message.resultMessage.actionExecutionId,\n actionName: message.resultMessage.actionName,\n result: message.resultMessage.result,\n });\n } else if (message.agentStateMessage) {\n return plainToInstance(AgentStateMessage, {\n id: message.id,\n threadId: message.agentStateMessage.threadId,\n createdAt: message.createdAt,\n agentName: message.agentStateMessage.agentName,\n nodeName: message.agentStateMessage.nodeName,\n runId: message.agentStateMessage.runId,\n active: message.agentStateMessage.active,\n role: message.agentStateMessage.role,\n state: JSON.parse(message.agentStateMessage.state),\n running: message.agentStateMessage.running,\n });\n } else {\n return null;\n }\n });\n\n return messages.filter((m) => m);\n}\n","import { Action, Parameter } from \"@copilotkit/shared\";\n\n/**\n * Represents a tool provided by an MCP server.\n */\nexport interface MCPTool {\n description?: string;\n /** Schema defining parameters, mirroring the MCP structure. */\n schema?: {\n parameters?: {\n properties?: Record<string, any>;\n required?: string[];\n jsonSchema?: Record<string, any>;\n };\n };\n /** The function to call to execute the tool on the MCP server. */\n execute(options: { params: any }): Promise<any>;\n}\n\n/**\n * Defines the contract for *any* MCP client implementation the user might provide.\n */\nexport interface MCPClient {\n /** A method that returns a map of tool names to MCPTool objects available from the connected MCP server. */\n tools(): Promise<Record<string, MCPTool>>;\n /** An optional method for cleanup if the underlying client requires explicit disconnection. */\n close?(): Promise<void>;\n}\n\n/**\n * Configuration for connecting to an MCP endpoint.\n */\nexport interface MCPEndpointConfig {\n endpoint: string;\n apiKey?: string;\n}\n\n/**\n * Extracts CopilotKit-compatible parameters from an MCP tool schema.\n * @param toolOrSchema The schema object from an MCPTool or the full MCPTool object.\n * @returns An array of Parameter objects.\n */\nexport function extractParametersFromSchema(\n toolOrSchema?: MCPTool | MCPTool[\"schema\"],\n): Parameter[] {\n const parameters: Parameter[] = [];\n\n // Handle either full tool object or just schema\n const schema =\n \"schema\" in (toolOrSchema || {})\n ? (toolOrSchema as MCPTool).schema\n : (toolOrSchema as MCPTool[\"schema\"]);\n\n const toolParameters = schema?.parameters || schema?.parameters?.jsonSchema;\n const properties = toolParameters?.properties;\n const requiredParams = new Set(toolParameters?.required || []);\n\n if (!properties) {\n return parameters;\n }\n\n for (const paramName in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, paramName)) {\n const paramDef = properties[paramName];\n parameters.push({\n name: paramName,\n // Infer type, default to string. MCP schemas might have more complex types.\n // This might need refinement based on common MCP schema practices.\n type: paramDef.type || \"string\",\n description: paramDef.description,\n required: requiredParams.has(paramName),\n // Attributes might not directly map, handle if necessary\n // attributes: paramDef.attributes || undefined,\n });\n }\n }\n\n return parameters;\n}\n\n/**\n * Converts a map of MCPTools into an array of CopilotKit Actions.\n * @param mcpTools A record mapping tool names to MCPTool objects.\n * @param mcpEndpoint The endpoint URL from which these tools were fetched.\n * @returns An array of Action<any> objects.\n */\nexport function convertMCPToolsToActions(\n mcpTools: Record<string, MCPTool>,\n mcpEndpoint: string,\n): Action<any>[] {\n const actions: Action<any>[] = [];\n\n for (const [toolName, tool] of Object.entries(mcpTools)) {\n const parameters = extractParametersFromSchema(tool);\n\n const handler = async (params: any): Promise<any> => {\n try {\n const result = await tool.execute({ params });\n // Ensure the result is a string or stringify it, as required by many LLMs.\n // This might need adjustment depending on how different LLMs handle tool results.\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } catch (error) {\n console.error(\n `Error executing MCP tool '${toolName}' from endpoint ${mcpEndpoint}:`,\n error,\n );\n // Re-throw or format the error for the LLM\n throw new Error(\n `Execution failed for MCP tool '${toolName}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n actions.push({\n name: toolName,\n description: tool.description || `MCP tool: ${toolName} (from ${mcpEndpoint})`,\n parameters: parameters,\n handler: handler,\n // Add metadata for easier identification/debugging\n _isMCPTool: true,\n _mcpEndpoint: mcpEndpoint,\n } as Action<any> & { _isMCPTool: boolean; _mcpEndpoint: string }); // Type assertion for metadata\n }\n\n return actions;\n}\n\n/**\n * Generate better instructions for using MCP tools\n * This is used to enhance the system prompt with tool documentation\n */\nexport function generateMcpToolInstructions(toolsMap: Record<string, MCPTool>): string {\n if (!toolsMap || Object.keys(toolsMap).length === 0) {\n return \"\";\n }\n\n const toolEntries = Object.entries(toolsMap);\n\n // Generate documentation for each tool\n const toolsDoc = toolEntries\n .map(([name, tool]) => {\n // Extract schema information if available\n let paramsDoc = \" No parameters required\";\n\n try {\n if (tool.schema && typeof tool.schema === \"object\") {\n const schema = tool.schema as any;\n\n // Extract parameters from JSON Schema\n if (schema.properties) {\n const requiredParams = schema.required || [];\n\n // Build parameter documentation from properties\n const paramsList = Object.entries(schema.properties).map(([paramName, propSchema]) => {\n const propDetails = propSchema as any;\n const requiredMark = requiredParams.includes(paramName) ? \"*\" : \"\";\n const typeInfo = propDetails.type || \"any\";\n const description = propDetails.description ? ` - ${propDetails.description}` : \"\";\n\n return ` - ${paramName}${requiredMark} (${typeInfo})${description}`;\n });\n\n if (paramsList.length > 0) {\n paramsDoc = paramsList.join(\"\\n\");\n }\n }\n }\n } catch (e) {\n console.error(`Error parsing schema for tool ${name}:`, e);\n }\n\n return `- ${name}: ${tool.description || \"\"}\n${paramsDoc}`;\n })\n .join(\"\\n\\n\");\n\n return `You have access to the following external tools provided by Model Context Protocol (MCP) servers:\n\n${toolsDoc}\n\nWhen using these tools:\n1. Only provide valid parameters according to their type requirements\n2. Required parameters are marked with *\n3. Format API calls correctly with the expected parameter structure\n4. Always check tool responses to determine your next action`;\n}\n","import {\n FailedResponseStatus,\n FailedResponseStatusReason,\n} from \"../graphql/types/response-status.type\";\n\nexport class GuardrailsValidationFailureResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.GUARDRAILS_VALIDATION_FAILED;\n declare details: {\n guardrailsReason: string;\n };\n\n constructor({ guardrailsReason }) {\n super();\n this.details = {\n guardrailsReason,\n };\n }\n}\n\nexport class MessageStreamInterruptedResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.MESSAGE_STREAM_INTERRUPTED;\n declare details: {\n messageId: string;\n description: string;\n };\n\n constructor({ messageId }: { messageId: string }) {\n super();\n this.details = {\n messageId,\n description: \"Check the message for mode details\",\n };\n }\n}\n\nexport class UnknownErrorResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.UNKNOWN_ERROR;\n declare details: {\n description?: string;\n };\n\n constructor({ description }: { description?: string }) {\n super();\n this.details = {\n description,\n };\n }\n}\n","import { Field, ObjectType } from \"type-graphql\";\n\n@ObjectType()\nexport class Agent {\n @Field(() => String)\n id: string;\n\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description?: string;\n}\n\n@ObjectType()\nexport class AgentsResponse {\n @Field(() => [Agent])\n agents: Agent[];\n}\n","import createPinoLogger from \"pino\";\nimport pretty from \"pino-pretty\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport type CopilotRuntimeLogger = ReturnType<typeof createLogger>;\n\nexport function createLogger(options?: { level?: LogLevel; component?: string }) {\n const { level, component } = options || {};\n const stream = pretty({ colorize: true });\n\n const logger = createPinoLogger(\n {\n level: process.env.LOG_LEVEL || level || \"error\",\n redact: {\n paths: [\"pid\", \"hostname\"],\n remove: true,\n },\n },\n stream,\n );\n\n if (component) {\n return logger.child({ component });\n } else {\n return logger;\n }\n}\n","import { Arg, Resolver } from \"type-graphql\";\nimport { Ctx } from \"type-graphql\";\nimport { Query } from \"type-graphql\";\nimport { LoadAgentStateResponse } from \"../types/load-agent-state-response.type\";\nimport type { GraphQLContext } from \"../../lib/integrations\";\nimport { LoadAgentStateInput } from \"../inputs/load-agent-state.input\";\nimport { CopilotKitAgentDiscoveryError } from \"@copilotkit/shared\";\n\n@Resolver(() => LoadAgentStateResponse)\nexport class StateResolver {\n @Query(() => LoadAgentStateResponse)\n async loadAgentState(@Ctx() ctx: GraphQLContext, @Arg(\"data\") data: LoadAgentStateInput) {\n const agents = await ctx._copilotkit.runtime.discoverAgentsFromEndpoints(ctx);\n const agent = agents.find((agent) => agent.name === data.agentName);\n if (!agent) {\n throw new CopilotKitAgentDiscoveryError({\n agentName: data.agentName,\n availableAgents: agents.map((a) => ({ name: a.name, id: a.name })),\n });\n }\n\n const state = await ctx._copilotkit.runtime.loadAgentState(ctx, data.threadId, data.agentName);\n\n return state;\n }\n}\n","import { Field, ObjectType } from \"type-graphql\";\nimport { BaseMessageOutput } from \"./copilot-response.type\";\n\n@ObjectType()\nexport class LoadAgentStateResponse {\n @Field(() => String)\n threadId: string;\n\n @Field(() => Boolean)\n threadExists: boolean;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String)\n messages: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class LoadAgentStateInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n}\n","import { createYoga } from \"graphql-yoga\";\nimport { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNextJSAppRouterEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-app-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS App Router endpoint\");\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: options.endpoint,\n fetchAPI: { Response: globalThis.Response },\n });\n\n return {\n handleRequest: yoga,\n GET: yoga as any,\n POST: yoga as any,\n OPTIONS: yoga as any,\n };\n}\n","import { YogaServerInstance, createYoga } from \"graphql-yoga\";\nimport { CreateCopilotRuntimeServerOptions, GraphQLContext, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport const config = {\n api: {\n bodyParser: false,\n },\n};\n\nexport type CopilotRuntimeServerInstance<T> = YogaServerInstance<T, Partial<GraphQLContext>>;\n\n// This import is needed to fix the type error\n// Fix is currently in TypeScript 5.5 beta, waiting for stable version\n// https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2066874644\nexport type {} from \"@whatwg-node/server\";\n\nexport function copilotRuntimeNextJSPagesRouterEndpoint(\n options: CreateCopilotRuntimeServerOptions,\n): CopilotRuntimeServerInstance<GraphQLContext> {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-pages-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS Pages Router endpoint\");\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: options.endpoint,\n });\n\n return yoga;\n}\n","import { createYoga } from \"graphql-yoga\";\nimport { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNodeHttpEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-http\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating Node HTTP endpoint\");\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: options.endpoint,\n });\n\n return yoga;\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNodeExpressEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-express\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNestEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nest\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import {\n RunAgentInput,\n EventType,\n CustomEvent,\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n} from \"@ag-ui/client\";\nimport { map } from \"rxjs\";\nimport { LangGraphEventTypes } from \"../../../agents/langgraph/events\";\nimport { RawEvent } from \"@ag-ui/core\";\nimport {\n LangGraphAgent as AGUILangGraphAgent,\n type LangGraphAgentConfig,\n ProcessedEvents,\n} from \"@ag-ui/langgraph\";\nimport { Message as LangGraphMessage } from \"@langchain/langgraph-sdk/dist/types.messages\";\n\nexport interface PredictStateTool {\n tool: string;\n state_key: string;\n tool_argument: string;\n}\nexport type State = Record<string, any>;\n\nexport type TextMessageEvents =\n | TextMessageStartEvent\n | TextMessageContentEvent\n | TextMessageEndEvent;\n\nexport type ToolCallEvents = ToolCallStartEvent | ToolCallArgsEvent | ToolCallEndEvent;\n\nexport enum CustomEventNames {\n CopilotKitManuallyEmitMessage = \"copilotkit_manually_emit_message\",\n CopilotKitManuallyEmitToolCall = \"copilotkit_manually_emit_tool_call\",\n CopilotKitManuallyEmitIntermediateState = \"copilotkit_manually_emit_intermediate_state\",\n CopilotKitExit = \"copilotkit_exit\",\n}\n\nexport class LangGraphAgent extends AGUILangGraphAgent {\n constructor(config: LangGraphAgentConfig) {\n super(config);\n }\n\n dispatchEvent(event: ProcessedEvents) {\n if (event.type === EventType.CUSTOM) {\n // const event = processedEvent as unknown as CustomEvent;\n const customEvent = event as unknown as CustomEvent;\n\n if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitMessage) {\n this.subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n role: \"assistant\",\n messageId: customEvent.value.message_id,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: customEvent.value.message_id,\n delta: customEvent.value.message,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: customEvent.value.message_id,\n rawEvent: event,\n });\n return true;\n }\n\n if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitToolCall) {\n this.subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: customEvent.value.id,\n toolCallName: customEvent.value.name,\n parentMessageId: customEvent.value.id,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: customEvent.value.id,\n delta: customEvent.value.args,\n rawEvent: event,\n });\n this.subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: customEvent.value.id,\n rawEvent: event,\n });\n return true;\n }\n\n if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState) {\n this.activeRun.manuallyEmittedState = customEvent.value;\n this.dispatchEvent({\n type: EventType.STATE_SNAPSHOT,\n snapshot: this.getStateSnapshot(this.activeRun.manuallyEmittedState),\n rawEvent: event,\n });\n return true;\n }\n\n if (customEvent.name === CustomEventNames.CopilotKitExit) {\n this.subscriber.next({\n type: EventType.CUSTOM,\n name: \"Exit\",\n value: true,\n });\n return true;\n }\n }\n\n // Intercept all text message and tool call events and check if should disable\n const rawEvent = (event as ToolCallEvents | TextMessageEvents).rawEvent;\n if (!rawEvent) {\n this.subscriber.next(event);\n return true;\n }\n\n const isMessageEvent =\n event.type === EventType.TEXT_MESSAGE_START ||\n event.type === EventType.TEXT_MESSAGE_CONTENT ||\n event.type === EventType.TEXT_MESSAGE_END;\n const isToolEvent =\n event.type === EventType.TOOL_CALL_START ||\n event.type === EventType.TOOL_CALL_ARGS ||\n event.type === EventType.TOOL_CALL_END;\n if (\"copilotkit:emit-tool-calls\" in (rawEvent.metadata || {})) {\n if (rawEvent.metadata[\"copilotkit:emit-tool-calls\"] === false && isToolEvent) {\n return false;\n }\n }\n if (\"copilotkit:emit-messages\" in (rawEvent.metadata || {})) {\n if (rawEvent.metadata[\"copilotkit:emit-messages\"] === false && isMessageEvent) {\n return false;\n }\n }\n\n this.subscriber.next(event);\n return true;\n }\n\n // @ts-ignore\n run(input: RunAgentInput) {\n return super.run(input).pipe(\n map((processedEvent) => {\n // Turn raw event into emit state snapshot from tool call event\n if (processedEvent.type === EventType.RAW) {\n // Get the LangGraph event from the AGUI event.\n const event = (processedEvent as RawEvent).event ?? (processedEvent as RawEvent).rawEvent;\n\n const eventType = event.event;\n const toolCallData = event.data?.chunk?.tool_call_chunks?.[0];\n const toolCallUsedToPredictState = event.metadata?.[\n \"copilotkit:emit-intermediate-state\"\n ]?.some(\n (predictStateTool: PredictStateTool) => predictStateTool.tool === toolCallData?.name,\n );\n\n if (eventType === LangGraphEventTypes.OnChatModelStream && toolCallUsedToPredictState) {\n return {\n type: EventType.CUSTOM,\n name: \"PredictState\",\n value: event.metadata[\"copilotkit:emit-intermediate-state\"],\n };\n }\n }\n\n return processedEvent;\n }),\n );\n }\n\n langGraphDefaultMergeState(state: State, messages: LangGraphMessage[], tools: any): State {\n const { tools: returnedTools, ...rest } = super.langGraphDefaultMergeState(\n state,\n messages,\n tools,\n );\n return {\n ...rest,\n copilotkit: {\n actions: returnedTools,\n },\n };\n }\n}\n"],"mappings":"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","names":["module","CustomEventNames","limitMessagesToTokenCount","messages","tools","model","maxTokens","maxTokensForOpenAIModel","result","toolsNumTokens","countToolsTokens","Error","message","includes","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","maxTokensByModel","DEFAULT_MAX_TOKENS","o1","length","json","JSON","stringify","countTokens","content","text","convertActionInputToOpenAITool","action","type","function","name","description","parameters","parseJson","jsonSchema","convertMessageToOpenAIMessage","options","keepSystemRole","isTextMessage","isImageMessage","image_url","url","format","bytes","isActionExecutionMessage","tool_calls","id","arguments","isResultMessage","tool_call_id","actionExecutionId","convertSystemMessageToAssistantAPI","import_shared","DEFAULT_MODEL","OpenAIAdapter","model","disableParallelToolCalls","_openai","keepSystemRole","openai","constructor","params","OpenAI","process","request","threadId","threadIdFromRequest","messages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToOpenAITool","randomUUID","validToolUseIds","Set","message","isActionExecutionMessage","add","id","filteredMessages","filter","isResultMessage","has","actionExecutionId","delete","openaiMessages","m","convertMessageToOpenAIMessage","limitMessagesToTokenCount","toolChoice","type","function","name","toolChoiceFunctionName","stream","beta","chat","completions","length","maxTokens","max_tokens","stop","tool_choice","parallel_tool_calls","temperature","eventStream$","mode","currentMessageId","currentToolCallId","chunk","choices","toolCall","delta","tool_calls","content","sendTextMessageEnd","messageId","undefined","sendActionExecutionEnd","sendActionExecutionStart","parentMessageId","actionName","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","args","error","console","complete","import_shared","convertMessageToLangChainMessage","message","isTextMessage","role","HumanMessage","content","AIMessage","SystemMessage","isActionExecutionMessage","tool_calls","id","args","arguments","name","isResultMessage","ToolMessage","result","tool_call_id","actionExecutionId","convertActionInputToLangChainTool","actionInput","DynamicStructuredTool","description","schema","convertJsonSchemaToZodSchema","JSON","parse","jsonSchema","func","isAIMessage","message","Object","prototype","toString","call","isAIMessageChunk","isBaseMessageChunk","maybeSendActionExecutionResultIsMessage","eventStream$","actionExecution","sendActionExecutionResult","actionExecutionId","id","actionName","name","result","streamLangChainResponse","sendTextMessage","randomId","content","toolCall","tool_calls","sendActionExecution","args","JSON","stringify","lc_kwargs","reader","getReader","mode","currentMessageId","toolCallDetails","index","prevIndex","done","value","read","toolCallName","undefined","toolCallId","toolCallArgs","hasToolCall","Array","isArray","text","chunk","tool_call_chunks","additional_kwargs","function","arguments","sendTextMessageEnd","messageId","sendActionExecutionEnd","sendActionExecutionStart","parentMessageId","sendTextMessageStart","sendTextMessageContent","sendActionExecutionArgs","error","console","encodeResult","Error","complete","import_shared","LangChainAdapter","constructor","options","process","request","eventSource","model","actions","messages","runId","threadId","threadIdFromRequest","randomUUID","result","chainFn","map","convertMessageToLangChainMessage","tools","convertActionInputToLangChainTool","stream","eventStream$","streamLangChainResponse","awaitAllCallbacks","import_messages","GoogleGenerativeAIAdapter","LangChainAdapter","constructor","options","chainFn","messages","tools","threadId","filteredMessages","filter","message","AIMessage","content","String","trim","length","tool_calls","model","ChatGoogle","modelName","apiVersion","bindTools","stream","metadata","conversation_id","import_openai","OpenAIAssistantAdapter","openai","codeInterpreterEnabled","assistantId","fileSearchEnabled","disableParallelToolCalls","keepSystemRole","constructor","params","OpenAI","process","request","messages","actions","eventSource","runId","forwardedParameters","threadId","extensions","openaiAssistantAPI","beta","threads","create","id","lastMessage","at","nextRunId","undefined","isResultMessage","submitToolOutputs","isTextMessage","submitUserMessage","Error","run","runs","retrieve","required_action","toolCallsIds","submit_tool_outputs","tool_calls","map","toolCall","resultMessages","filter","message","includes","actionExecutionId","length","toolOutputs","tool_call_id","output","result","stream","submitToolOutputsStream","tool_outputs","parallel_tool_calls","streamResponse","instructionsMessage","shift","instructions","content","userMessage","m","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","role","openaiTools","convertActionInputToOpenAITool","tools","type","assistant_id","maxTokens","max_completion_tokens","getRunIdFromStream","eventStream$","inFunctionCall","currentMessageId","currentToolCallId","chunk","event","sendActionExecutionEnd","data","sendTextMessageStart","messageId","delta","sendTextMessageContent","text","value","sendTextMessageEnd","toolCallId","toolCallName","toolCallArgs","step_details","function","name","arguments","sendActionExecutionStart","parentMessageId","actionName","sendActionExecutionArgs","args","complete","Promise","resolve","reject","runIdGetter","off","on","import_openai","import_shared","UnifyAdapter","apiKey","model","start","constructor","options","process","request","tools","actions","map","convertActionInputToOpenAITool","openai","OpenAI","baseURL","forwardedParameters","messages","m","convertMessageToOpenAIMessage","stream","chat","completions","create","length","temperature","currentMessageId","currentToolCallId","eventSource","eventStream$","mode","chunk","randomId","sendTextMessageStart","messageId","sendTextMessageContent","content","sendTextMessageEnd","toolCall","choices","delta","tool_calls","id","undefined","sendActionExecutionEnd","actionExecutionId","sendActionExecutionStart","actionName","function","name","arguments","sendActionExecutionArgs","args","complete","threadId","randomUUID","import_shared","DEFAULT_MODEL","GroqAdapter","model","disableParallelToolCalls","_groq","groq","constructor","params","Groq","process","request","threadId","messages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToOpenAITool","openaiMessages","m","convertMessageToOpenAIMessage","keepSystemRole","limitMessagesToTokenCount","toolChoice","type","function","name","toolChoiceFunctionName","stream","chat","completions","create","length","maxTokens","max_tokens","stop","tool_choice","parallel_tool_calls","temperature","eventStream$","mode","currentMessageId","currentToolCallId","chunk","toolCall","choices","delta","tool_calls","content","id","sendTextMessageEnd","messageId","undefined","sendActionExecutionEnd","actionExecutionId","sendActionExecutionStart","actionName","parentMessageId","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","args","complete","randomUUID","import_type_graphql","import_type_graphql","import_rxjs","import_type_graphql","import_type_graphql","MessageRole","CopilotRequestType","ActionInputAvailability","registerEnumType","name","description","import_type_graphql","BaseMessageInput","id","createdAt","Field","String","Date","InputType","MessageInput","BaseMessageInput","textMessage","actionExecutionMessage","resultMessage","agentStateMessage","imageMessage","Field","TextMessageInput","nullable","ActionExecutionMessageInput","ResultMessageInput","AgentStateMessageInput","ImageMessageInput","InputType","content","parentMessageId","role","String","MessageRole","name","arguments","scope","deprecationReason","actionExecutionId","actionName","result","threadId","agentName","state","running","nodeName","runId","active","Boolean","format","bytes","import_type_graphql","import_type_graphql","ActionInput","name","description","jsonSchema","available","Field","String","ActionInputAvailability","nullable","InputType","FrontendInput","toDeprecate_fullContext","actions","url","Field","String","nullable","ActionInput","InputType","import_type_graphql","import_type_graphql","GuardrailsRuleInput","allowList","denyList","Field","String","nullable","InputType","GuardrailsInput","inputValidationRules","CloudInput","guardrails","Field","GuardrailsInput","nullable","InputType","import_type_graphql","ForwardedParametersInput","model","maxTokens","stop","toolChoice","toolChoiceFunctionName","temperature","Field","String","nullable","Number","InputType","import_type_graphql","AgentSessionInput","agentName","threadId","nodeName","Field","String","nullable","InputType","import_type_graphql","AgentStateInput","agentName","state","config","Field","String","nullable","InputType","import_type_graphql","ExtensionsInput","openaiAssistantAPI","Field","OpenAIApiAssistantAPIInput","nullable","InputType","runId","threadId","String","import_type_graphql","import_type_graphql","import_type_graphql","import_type_graphql","MessageStatusCode","registerEnumType","name","BaseMessageStatus","code","Field","ObjectType","PendingMessageStatus","SuccessMessageStatus","FailedMessageStatus","reason","String","MessageStatusUnion","createUnionType","types","import_type_graphql","ResponseStatusCode","registerEnumType","name","BaseResponseStatus","code","Field","InterfaceType","resolveType","value","SuccessResponseStatus","FailedResponseStatus","PendingResponseStatus","undefined","ObjectType","implements","FailedResponseStatusReason","reason","details","GraphQLJSON","nullable","ResponseStatusUnion","createUnionType","types","import_type_graphql","ExtensionsResponse","openaiAssistantAPI","Field","OpenAIApiAssistantAPIResponse","nullable","ObjectType","runId","threadId","String","BaseMessageOutput","id","createdAt","status","Field","String","Date","MessageStatusUnion","InterfaceType","resolveType","value","hasOwnProperty","TextMessageOutput","ActionExecutionMessageOutput","ResultMessageOutput","AgentStateMessageOutput","ImageMessageOutput","undefined","role","content","parentMessageId","MessageRole","nullable","ObjectType","implements","name","scope","arguments","deprecationReason","actionExecutionId","actionName","result","threadId","agentName","nodeName","runId","active","state","running","Boolean","format","bytes","CopilotResponse","messages","extensions","metaEvents","ResponseStatusUnion","ExtensionsResponse","BaseMetaEvent","MetaEventName","registerEnumType","name","description","BaseMetaEvent","type","Field","String","InterfaceType","resolveType","value","LangGraphInterruptEvent","CopilotKitLangGraphInterruptEvent","undefined","CopilotKitLangGraphInterruptEventData","messages","BaseMessageOutput","ObjectType","response","nullable","implements","data","MetaEventInput","name","value","response","messages","Field","MetaEventName","String","nullable","MessageInput","InputType","GenerateCopilotResponseMetadataInput","requestType","Field","CopilotRequestType","nullable","InputType","GenerateCopilotResponseInput","metadata","threadId","runId","messages","frontend","cloud","forwardedParameters","agentSession","agentState","agentStates","extensions","metaEvents","String","MessageInput","FrontendInput","CloudInput","ForwardedParametersInput","AgentSessionInput","AgentStateInput","ExtensionsInput","MetaEventInput","import_shared","import_rxjs","import_shared","import_shared","import_node_crypto","LangGraphEventTypes","MetaEventNames","CustomEventNames","import_shared","RemoteLangGraphEventSource","eventStream$","ReplaySubject","shouldEmitToolCall","shouldEmitToolCalls","toolCallName","Array","isArray","includes","getCurrentContent","event","content","data","chunk","kwargs","toolCallChunks","getCurrentToolCallChunks","args","length","text","getCurrentMessageId","id","tool_call_chunks","getResponseMetadata","response_metadata","processLangGraphEvents","lastEventWithState","pipe","scan","acc","LangGraphEventTypes","OnChatModelStream","prevMessageId","lastMessageId","currentContent","responseMetadata","toolCallCheck","isToolCallEnd","finish_reason","isToolCallStart","some","name","isMessageStart","previousRoundHadToolCall","isToolCall","isMessageEnd","lastToolCallName","lastToolCallId","find","processedToolCallIds","Set","mergeMap","events","shouldEmitMessages","metadata","OnInterrupt","push","type","RuntimeEventTypes","MetaEvent","RuntimeMetaEventName","LangGraphInterruptEvent","value","OnCopilotKitInterrupt","CopilotKitLangGraphInterruptEvent","has","add","ActionExecutionEnd","actionExecutionId","TextMessageEnd","messageId","OnCustomEvent","CustomEventNames","CopilotKitManuallyEmitMessage","TextMessageStart","message_id","TextMessageContent","message","CopilotKitManuallyEmitToolCall","ActionExecutionStart","actionName","parentMessageId","ActionExecutionArgs","JSON","stringify","OnCopilotKitStateSync","AgentStateMessage","threadId","thread_id","role","agentName","agent_name","nodeName","node_name","runId","run_id","active","state","running","clear","catchError","error","console","CopilotKitError","randomId","import_shared","import_shared","import_messages","RETRY_CONFIG","maxRetries","baseDelayMs","maxDelayMs","retryableStatusCodes","retryableErrorMessages","isRetryableError","error","response","includes","status","errorCode","cause","code","errorMessage","message","toLowerCase","some","msg","sleep","ms","Promise","resolve","setTimeout","calculateDelay","attempt","delay","Math","pow","min","fetchWithRetry","url","options","logger","lastError","fetch","warn","String","activeInterruptEvent","execute","args","ReadableStream","start","controller","lastError","attempt","RETRY_CONFIG","maxRetries","streamEvents","close","err","isRetryableError","delay","calculateDelay","console","warn","message","String","sleep","cause","errorCode","code","CopilotKitMisuseError","deploymentUrl","langsmithApiKey","threadId","argsInitialThreadId","agent","nodeName","initialNodeName","state","initialState","config","explicitConfig","messages","actions","logger","properties","metaEvents","name","assistantId","initialAssistantId","propertyHeaders","authorization","client","LangGraphClient","apiUrl","apiKey","defaultHeaders","randomUUID","startsWith","substring","isValidUUID","wasInitiatedWithExistingThread","threads","get","error","create","agentState","values","getState","agentStateValues","mode","undefined","formattedMessages","copilotkitMessagesToLangChain","e","langGraphDefaultMergeState","streamInput","payload","input","streamMode","command","lgInterruptMetaEvent","find","ev","MetaEventName","LangGraphInterruptEvent","resume","response","parseJson","updateState","asNode","streamInfo","hashedLgcKey","createHash","update","digest","assistants","search","retrievedAssistant","a","assistant_id","telemetry","capture","length","map","join","Error","graphInfo","getGraph","graphSchema","getSchemas","schemaKeys","getSchemaKeys","filteredConfigurable","configurable","filterObjectBySchemaKeys","newConfig","isRecursionLimitSetToDefault","recursion_limit","configsAreDifferent","JSON","stringify","isOnlyRecursionLimitDifferent","streamingStateExtractor","StreamingStateExtractor","prevNodeName","emitIntermediateStateUntilEnd","shouldExit","externalRunId","streamResponse","runs","stream","emit","enqueue","TextEncoder","encode","latestStateValues","updatedState","manuallyEmittedState","streamResponseChunk","includes","event","data","chunk","interruptEvents","__interrupt__","interruptValue","value","evValue","__copilotkit_interrupt_value__","LangGraphEventTypes","OnCopilotKitInterrupt","langchainMessagesToCopilotKit","__copilotkit_messages__","OnInterrupt","chunkData","currentNodeName","metadata","langgraph_node","eventType","runId","run_id","output","model","provider","langgraph_host","langGraphHost","langgraph_version","langGraphVersion","OnCustomEvent","CustomEventNames","CopilotKitExit","emitIntermediateState","manuallyEmitIntermediateState","CopilotKitManuallyEmitIntermediateState","exitingNode","OnChainEnd","some","node","id","getStateSyncEvent","agentName","running","active","OnChatModelStart","OnChatModelStream","bufferToolCalls","extractState","interrupts","tasks","Object","keys","writes","isEndNode","next","includeMessages","Promise","resolve","reduce","acc","key","OnCopilotKitStateSync","thread_id","agent_name","node_name","role","toolCallBuffer","currentToolCall","previouslyParsableState","constructor","tool_call_chunks","getEmitStateConfig","currentToolName","stateKey","tool","toolArgument","entries","argumentName","parsedValue","parsePartialJson","slice","existingMessages","existingMessageIds","Set","messageIds","removedMessages","filter","m","has","RemoveMessage","newMessages","copilotkit","result","tool_call_names","type","tool_call","tool_calls","content","Array","text","push","arguments","parentMessageId","actionName","tool_call_id","actionExecutionId","resultsDict","msg","reorderedResult","msgId","processedActionExecutions","isTextMessage","MessageRole","user","system","assistant","isImageMessage","isActionExecutionMessage","messageId","add","relatedActionExecutions","isResultMessage","CONSTANT_KEYS","configSchema","config_schema","input_schema","output_schema","inputSchema","outputSchema","obj","fromEntries","import_shared","import_shared","writeJsonLineResponseToEventStream","response","eventStream$","reader","getReader","decoder","TextDecoder","buffer","flushBuffer","currentBuffer","join","trim","length","parts","split","lastPartIsComplete","endsWith","push","pop","map","part","filter","forEach","next","JSON","parse","done","value","read","decode","stream","error","console","structuredError","convertStreamingErrorToStructured","complete","message","includes","cause","code","CopilotKitError","CopilotKitErrorCode","NETWORK_ERROR","CopilotKitLowLevelError","Error","String","url","UNKNOWN","import_shared","constructLGCRemoteAction","endpoint","graphqlContext","logger","messages","agentStates","agents","map","agent","name","description","parameters","handler","_args","remoteAgentHandler","actionInputsWithoutAgents","threadId","nodeName","additionalMessages","metaEvents","debug","actionName","telemetry","capture","agentExecution","type","agentsAmount","length","hashedLgcKey","langsmithApiKey","createHash","update","digest","state","config","jsonState","find","agentName","parseJson","response","execute","child","component","deploymentUrl","properties","actions","tryMap","action","JSON","parse","jsonSchema","eventSource","RemoteLangGraphEventSource","writeJsonLineResponseToEventStream","eventStream$","processLangGraphEvents","error","url","status","body","message","Error","RemoteAgentType","constructRemoteActions","json","onBeforeRequest","totalAgents","Array","isArray","args","headers","createHeaders","fetchUrl","fetchWithRetry","method","stringify","arguments","ok","text","CopilotKitApiDiscoveryError","ResolvedCopilotKitError","isRemoteEndpoint","requestResult","result","CopilotKitError","CopilotKitLowLevelError","RuntimeEventSubject","additionalHeaders","ctx","Object","assign","import_shared","import_shared","constructAGUIRemoteAction","logger","messages","agentStates","agent","metaEvents","action","name","agentId","description","parameters","handler","_args","remoteAgentHandler","actionInputsWithoutAgents","threadId","debug","actionName","agentWireMessages","convertMessagesToAGUIMessage","telemetry","capture","agentExecution","type","agentsAmount","state","jsonState","find","agentName","parseJson","tools","map","input","JSON","parse","jsonSchema","forwardedProps","length","command","resume","response","undefined","legacy_to_be_removed_runAgentBridged","result","message","isTextMessage","push","id","role","content","isActionExecutionMessage","toolCall","function","arguments","stringify","parentMessageId","some","m","parentMessage","toolCalls","isResultMessage","toolCallId","actionExecutionId","EndpointType","isRemoteAgentAction","action","remoteAgentHandler","fetchRemoteInfo","url","onBeforeRequest","graphqlContext","logger","frontendUrl","debug","headers","createHeaders","fetchUrl","response","fetch","method","body","JSON","stringify","properties","ok","error","status","text","ResolvedCopilotKitError","isRemoteEndpoint","json","CopilotKitError","CopilotKitLowLevelError","setupRemoteActions","remoteEndpointDefinitions","messages","agentStates","agents","metaEvents","child","component","filtered","filter","value","index","self","type","findIndex","t","result","Promise","all","map","endpoint","constructLGCRemoteAction","constructRemoteActions","key","agent","Object","entries","agentId","undefined","message","code","CopilotKitErrorCode","UNKNOWN","push","constructAGUIRemoteAction","flat","import_node_crypto","import_shared","RemoteChain","name","description","chainUrl","parameters","parameterType","constructor","options","toAction","inferLangServeParameters","handler","args","runnable","RemoteRunnable","url","input","Object","keys","invoke","supportedTypes","schemaUrl","replace","schema","fetch","then","res","json","catch","Error","includes","type","properties","map","key","property","required","limitMessagesToTokenCount","messages","tools","model","maxTokens","MAX_TOKENS","result","toolsNumTokens","countToolsTokens","Error","message","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","length","json","JSON","stringify","countTokens","content","text","convertActionInputToAnthropicTool","action","name","description","input_schema","parse","jsonSchema","convertMessageToAnthropicMessage","isTextMessage","type","isImageMessage","mediaType","format","source","media_type","data","bytes","isActionExecutionMessage","id","input","arguments","isResultMessage","tool_use_id","actionExecutionId","import_shared","DEFAULT_MODEL","AnthropicAdapter","model","_anthropic","anthropic","constructor","params","Anthropic","process","request","threadId","messages","rawMessages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToAnthropicTool","instructionsMessage","shift","instructions","isTextMessage","content","validToolUseIds","Set","message","isActionExecutionMessage","add","id","anthropicMessages","isResultMessage","has","actionExecutionId","delete","role","type","result","tool_use_id","convertMessageToAnthropicMessage","filter","Boolean","msg","Array","isArray","hasEmptyTextOnly","length","text","trim","limitedMessages","limitMessagesToTokenCount","toolChoice","name","toolChoiceFunctionName","createParams","system","max_tokens","maxTokens","temperature","tool_choice","stream","create","eventStream$","mode","didOutputText","currentMessageId","randomId","currentToolCallId","filterThinkingTextBuffer","FilterThinkingTextBuffer","chunk","content_block","reset","sendActionExecutionStart","actionName","parentMessageId","delta","onTextChunk","sendTextMessageStart","messageId","sendTextMessageContent","sendActionExecutionArgs","args","partial_json","sendTextMessageEnd","sendActionExecutionEnd","error","console","complete","randomUUID","THINKING_TAG","THINKING_TAG_END","buffer","didFilterThinkingTag","potentialTag","slice","startsWith","includes","end","indexOf","filteredText","import_shared","DEFAULT_MODEL","ExperimentalOllamaAdapter","model","constructor","options","process","request","messages","actions","eventSource","ollama","Ollama","contents","filter","m","isTextMessage","map","content","_stream","stream","eventStream$","currentMessageId","randomId","sendTextMessageStart","messageId","chunkText","sendTextMessageContent","sendTextMessageEnd","complete","threadId","randomUUID","BedrockAdapter","LangChainAdapter","constructor","options","chainFn","messages","tools","threadId","model","ChatBedrockConverse","region","credentials","accessKeyId","secretAccessKey","undefined","bindTools","stream","import_shared","EmptyAdapter","process","request","threadId","randomUUID","ExperimentalEmptyAdapter","Message","BaseMessageInput","type","isTextMessage","isActionExecutionMessage","isResultMessage","isAgentStateMessage","isImageMessage","TextMessage","content","role","parentMessageId","ActionExecutionMessage","name","arguments","ResultMessage","actionExecutionId","actionName","result","encodeResult","error","errorObj","code","message","Error","undefined","JSON","stringify","decodeResult","parsed","parse","e","hasError","getError","AgentStateMessage","threadId","agentName","nodeName","runId","active","state","running","ImageMessage","format","bytes","import_shared","convertGqlInputToMessages","inputMessages","messages","tryMap","message","textMessage","plainToInstance","TextMessage","id","createdAt","role","content","parentMessageId","imageMessage","ImageMessage","bytes","format","actionExecutionMessage","ActionExecutionMessage","name","arguments","JSON","parse","resultMessage","ResultMessage","actionExecutionId","actionName","result","agentStateMessage","AgentStateMessage","threadId","agentName","nodeName","runId","active","state","running","filter","m","import_rxjs","import_langgraph_sdk","extractParametersFromSchema","toolOrSchema","parameters","schema","toolParameters","jsonSchema","properties","requiredParams","Set","required","paramName","Object","prototype","hasOwnProperty","call","paramDef","push","name","type","description","has","convertMCPToolsToActions","mcpTools","mcpEndpoint","actions","toolName","tool","entries","handler","params","result","execute","JSON","stringify","error","console","Error","message","String","_isMCPTool","_mcpEndpoint","generateMcpToolInstructions","toolsMap","keys","length","toolEntries","toolsDoc","map","paramsDoc","paramsList","propSchema","propDetails","requiredMark","includes","typeInfo","join","e","CopilotRuntime","actions","agents","remoteEndpointDefinitions","langserve","onBeforeRequest","onAfterRequest","delegateAgentProcessingToServiceAdapter","observability","availableAgents","onTrace","hasWarnedAboutTracing","mcpServersConfig","mcpActionCache","Map","createMCPClientImpl","constructor","params","remoteEndpoints","some","e","type","EndpointType","LangGraphPlatform","console","warn","chain","remoteChain","RemoteChain","push","toAction","remoteActions","middleware","observability_c","mcpServers","createMCPClient","length","CopilotKitMisuseError","message","injectMCPToolInstructions","messages","currentActions","mcpActionsForRequest","filter","action","_isMCPTool","uniqueMcpTools","forEach","set","name","toolsMap","Array","from","values","description","schema","parameters","properties","reduce","acc","p","required","map","execute","mcpToolInstructions","generateMcpToolInstructions","instructions","systemMessageIndex","findIndex","msg","textMessage","role","newMessages","existingMsg","content","unshift","id","randomId","createdAt","Date","MessageRole","system","actionExecutionMessage","undefined","resultMessage","agentStateMessage","processRuntimeRequest","request","serviceAdapter","rawMessages","clientSideActionsInput","threadId","runId","outputMessagesPromise","graphqlContext","forwardedParameters","url","extensions","agentSession","agentStates","publicApiKey","eventSource","RuntimeEventSource","requestStartTime","now","streamedChunks","trace","source","operation","method","startTime","agent","agentName","input","messageCount","technical","environment","process","env","NODE_ENV","Object","keys","processAgentRequest","EmptyAdapter","serverSideActions","getServerSideActions","filteredRawMessages","messagesWithInjectedInstructions","inputMessages","convertGqlInputToMessages","enabled","requestData","model","timestamp","provider","detectProvider","hooks","handleRequest","error","serverSideActionsInput","jsonSchema","JSON","stringify","actionParametersToJsonSchema","actionInputs","flattenToolCallsNoDuplicates","available","ActionInputAvailability","remote","result","nonEmptyThreadId","then","outputMessages","_a","catch","_error","responseData","output","progressive","latency","isFinalResponse","handleResponse","logError","originalStream","stream","bind","callback","eventStream$","subscribe","next","event","RuntimeEventTypes","TextMessageContent","progressiveData","isProgressiveChunk","Promise","resolve","actionInputsWithoutAgents","find","serverSideAction","errorData","Error","String","handleError","structuredError","CopilotKitError","convertStreamingErrorToStructured","response","endTime","stackTrace","stack","discoverAgentsFromEndpoints","endpoint","propertyHeaders","authorization","client","LangGraphClient","apiUrl","deploymentUrl","apiKey","langsmithApiKey","defaultHeaders","data","assistants","search","detail","toLowerCase","CopilotKitAgentDiscoveryError","endpointAgents","entry","graph_id","assistant_id","cpkEndpoint","fetchUrl","fetchWithRetry","headers","createHeaders","body","ok","status","CopilotKitApiDiscoveryError","ResolvedCopilotKitError","isRemoteEndpoint","json","CopilotKitLowLevelError","a","loadAgentState","agentsWithEndpoints","agentWithEndpoint","state","threads","getState","threadExists","stateWithoutMessages","copilotkitMessages","langchainMessagesToCopilotKit","CopilotKit","threadIdFromRequest","metaEvents","nodeName","currentAgent","isRemoteAgentAction","availableActionsForCurrentAgent","allAvailableActions","remoteAgentHandler","err","complete","langserveFunctions","chainPromise","resolveEndpointType","setupRemoteActions","frontendUrl","configuredActions","requestSpecificMCPActions","baseEndpoints","requestEndpoints","mcpEndpoints","effectiveEndpointsMap","ep","effectiveEndpoints","config","endpointUrl","actionsForEndpoint","get","tools","convertMCPToolsToActions","adapterName","includes","cause","code","CopilotKitErrorCode","NETWORK_ERROR","UNKNOWN","context","traceEvent","traceError","traceGraphQLError","metadata","errorType","cloudConfigPresent","guardrailsEnabled","toolsByPriority","allTools","allToolNames","tool","copilotKitEndpoint","langGraphPlatformEndpoint","packageJson","require","telemetryClient","TelemetryClient","packageName","name","packageVersion","version","getRuntimeInstanceTelemetryInfo","options","runtime","endpointsInfo","remoteEndpointDefinitions","reduce","acc","endpoint","info","endpointType","resolveEndpointType","endpointTypes","includes","EndpointType","LangGraphPlatform","ep","agentsAmount","agents","length","hashedKey","langsmithApiKey","createHash","update","digest","publicApiKey","cloud","apiKeyProvided","trim","actionsAmount","actions","endpointsAmount","hashedLgcKey","baseUrl","import_class_transformer","RuntimeEventTypes","RuntimeMetaEventName","RuntimeEventSubject","ReplaySubject","constructor","sendTextMessageStart","messageId","parentMessageId","next","type","sendTextMessageContent","content","sendTextMessageEnd","sendTextMessage","sendActionExecutionStart","actionExecutionId","actionName","sendActionExecutionArgs","args","sendActionExecutionEnd","sendActionExecution","sendActionExecutionResult","result","error","ResultMessage","encodeResult","sendAgentStateMessage","threadId","agentName","nodeName","runId","active","role","state","running","RuntimeEventSource","eventStream$","callback","stream","sendErrorMessageToChat","message","errorMessage","randomId","processRuntimeEvents","serverSideActions","guardrailsResult$","actionInputsWithoutAgents","catch","console","structuredError","convertStreamingErrorToStructured","complete","pipe","scan","acc","event","callActionServerSide","find","action","name","undefined","actionExecutionParentMessageId","concatMap","eventWithState","toolCallEventStream$","executeAction","telemetry","capture","concat","of","catchError","code","EMPTY","actionArguments","status","firstValueFrom","JSON","parse","e","isRemoteAgentAction","agentExecution","plainToInstance","ActionExecutionMessage","id","createdAt","Date","arguments","agentExecutionResult","remoteAgentHandler","additionalMessages","from","subscribe","err","handler","streamLangChainResponse","actionExecution","includes","cause","CopilotKitError","CopilotKitErrorCode","NETWORK_ERROR","CopilotKitLowLevelError","Error","String","url","UNKNOWN","toLowerCase","MISSING_PUBLIC_API_KEY_ERROR","import_graphql_scalars","import_class_transformer","GuardrailsValidationFailureResponse","FailedResponseStatus","reason","FailedResponseStatusReason","GUARDRAILS_VALIDATION_FAILED","constructor","guardrailsReason","details","MessageStreamInterruptedResponse","MESSAGE_STREAM_INTERRUPTED","messageId","description","UnknownErrorResponse","UNKNOWN_ERROR","import_shared","import_type_graphql","Agent","id","name","description","Field","String","ObjectType","AgentsResponse","agents","import_shared","invokeGuardrails","baseUrl","copilotCloudPublicApiKey","data","onResult","onError","messages","length","textMessage","role","MessageRole","user","filter","m","undefined","assistant","map","content","lastMessage","restOfMessages","slice","body","input","validTopics","cloud","guardrails","inputValidationRules","allowList","invalidTopics","denyList","guardrailsResult","fetch","method","headers","JSON","stringify","ok","resultJson","json","CopilotResolver","hello","availableAgents","ctx","logger","child","component","debug","agentsWithEndpoints","_copilotkit","runtime","discoverAgentsFromEndpoints","agents","endpoint","agentWithoutEndpoint","generateCopilotResponse","properties","telemetry","capture","requestType","metadata","request","get","copilotRuntime","serviceAdapter","copilotCloudBaseUrl","publicApiKeyFromHeaders","error","traceGraphQLError","message","code","type","operation","cloudConfigPresent","Boolean","guardrailsEnabled","GraphQLError","process","env","COPILOT_CLOUD_BASE_URL","responseStatus$","ReplaySubject","interruptStreaming$","guardrailsResult$","outputMessages","resolveOutputMessagesPromise","rejectOutputMessagesPromise","outputMessagesPromise","Promise","resolve","reject","eventSource","threadId","randomId","runId","serverSideActions","actionInputsWithoutAgents","extensions","processRuntimeRequest","actions","frontend","action","available","ActionInputAvailability","disabled","publicApiKey","graphqlContext","forwardedParameters","agentSession","agentStates","url","metaEvents","eventStream","processRuntimeEvents","find","serverSideAction","name","pipe","shareReplay","finalize","response","status","firstValueFrom","Repeater","push","stop","eventStreamSubscription","subscribe","next","event","RuntimeEventTypes","MetaEvent","LangGraphEventTypes","OnInterrupt","plainToInstance","LangGraphInterruptEvent","RuntimeMetaEventName","value","CopilotKitLangGraphInterruptEvent","TextMessage","id","createdAt","Date","SuccessMessageStatus","ActionExecutionMessage","arguments","Error","err","UnknownErrorResponse","description","unsubscribe","complete","SuccessResponseStatus","pushMessage","stopStreamingMessages","result","GuardrailsValidationFailureResponse","guardrailsReason","reason","TextMessageStart","textMessageContentStream","skipWhile","e","takeWhile","TextMessageEnd","messageId","TextMessageContent","streamingTextStatus","Subject","parentMessageId","pushTextChunk","stopStreamingText","textChunks","textSubscription","take","tap","FailedMessageStatus","MessageStreamInterruptedResponse","join","ActionExecutionStart","actionExecutionArgumentStream","ActionExecutionEnd","actionExecutionId","ActionExecutionArgs","streamingArgumentsStatus","actionName","pushArgumentsChunk","stopStreamingArguments","argumentChunks","actionExecutionArgumentSubscription","args","ActionExecutionResult","ResultMessage","AgentStateMessage","agentName","nodeName","active","state","running","CopilotKitError","includes","Query","String","AgentsResponse","Ctx","Mutation","CopilotResponse","Arg","GraphQLJSONObject","nullable","Resolver","createLogger","options","level","component","stream","pretty","colorize","logger","createPinoLogger","process","env","LOG_LEVEL","redact","paths","remove","child","import_type_graphql","import_type_graphql","LoadAgentStateResponse","threadId","threadExists","state","messages","Field","String","Boolean","ObjectType","import_type_graphql","LoadAgentStateInput","threadId","agentName","Field","String","InputType","import_shared","StateResolver","loadAgentState","ctx","data","agents","_copilotkit","runtime","discoverAgentsFromEndpoints","agent","find","name","agentName","CopilotKitAgentDiscoveryError","availableAgents","map","a","id","state","threadId","Query","LoadAgentStateResponse","Ctx","Arg","Resolver","packageJson","logger","createLogger","addCustomHeaderPlugin","onResponse","response","headers","set","version","createContext","initialContext","copilotKitContext","contextLogger","properties","debug","ctx","_copilotkit","buildSchema","options","schema","buildSchemaSync","resolvers","CopilotResolver","StateResolver","emitSchemaFile","getCommonConfig","logLevel","process","env","LOG_LEVEL","level","component","cloud","telemetry","setCloudConfiguration","publicApiKey","baseUrl","setGlobalProperties","runtime","serviceAdapter","constructor","name","logging","plugins","useDeferStream","context","import_graphql_yoga","copilotRuntimeNextJSAppRouterEndpoint","options","commonConfig","getCommonConfig","telemetry","setGlobalProperties","runtime","framework","properties","_copilotkit","capture","getRuntimeInstanceTelemetryInfo","logger","logging","debug","yoga","createYoga","graphqlEndpoint","endpoint","fetchAPI","Response","globalThis","handleRequest","GET","POST","OPTIONS","import_graphql_yoga","config","api","bodyParser","copilotRuntimeNextJSPagesRouterEndpoint","options","commonConfig","getCommonConfig","telemetry","setGlobalProperties","runtime","framework","properties","_copilotkit","capture","getRuntimeInstanceTelemetryInfo","logger","logging","debug","yoga","createYoga","graphqlEndpoint","endpoint","import_graphql_yoga","copilotRuntimeNodeHttpEndpoint","options","commonConfig","getCommonConfig","telemetry","setGlobalProperties","runtime","framework","properties","_copilotkit","capture","getRuntimeInstanceTelemetryInfo","logger","logging","debug","yoga","createYoga","graphqlEndpoint","endpoint","copilotRuntimeNodeExpressEndpoint","options","telemetry","setGlobalProperties","runtime","framework","capture","getRuntimeInstanceTelemetryInfo","copilotRuntimeNodeHttpEndpoint","copilotRuntimeNestEndpoint","options","telemetry","setGlobalProperties","runtime","framework","capture","getRuntimeInstanceTelemetryInfo","copilotRuntimeNodeHttpEndpoint","import_rxjs","CustomEventNames","LangGraphAgent","AGUILangGraphAgent","constructor","config","dispatchEvent","event","type","EventType","CUSTOM","customEvent","name","subscriber","next","TEXT_MESSAGE_START","role","messageId","value","message_id","rawEvent","TEXT_MESSAGE_CONTENT","delta","message","TEXT_MESSAGE_END","TOOL_CALL_START","toolCallId","id","toolCallName","parentMessageId","TOOL_CALL_ARGS","args","TOOL_CALL_END","activeRun","manuallyEmittedState","STATE_SNAPSHOT","snapshot","getStateSnapshot","isMessageEvent","isToolEvent","metadata","run","input","pipe","map","processedEvent","RAW","eventType","toolCallData","data","chunk","tool_call_chunks","toolCallUsedToPredictState","some","predictStateTool","tool","LangGraphEventTypes","OnChatModelStream","langGraphDefaultMergeState","state","messages","tools","returnedTools","rest","copilotkit","actions"]}