@copilotkit/runtime 0.0.0-0.0.0-max-changeset-10101010101010-20260109191632

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 (122) hide show
  1. package/.eslintrc.js +7 -0
  2. package/CHANGELOG.md +2905 -0
  3. package/LICENSE +21 -0
  4. package/README.md +76 -0
  5. package/__snapshots__/schema/schema.graphql +371 -0
  6. package/dist/index.d.ts +1495 -0
  7. package/dist/index.js +5644 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/index.mjs +5601 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/dist/langgraph.d.ts +284 -0
  12. package/dist/langgraph.js +211 -0
  13. package/dist/langgraph.js.map +1 -0
  14. package/dist/langgraph.mjs +206 -0
  15. package/dist/langgraph.mjs.map +1 -0
  16. package/dist/v2/index.d.ts +2 -0
  17. package/dist/v2/index.js +22 -0
  18. package/dist/v2/index.js.map +1 -0
  19. package/dist/v2/index.mjs +5 -0
  20. package/dist/v2/index.mjs.map +1 -0
  21. package/jest.config.js +10 -0
  22. package/package.json +143 -0
  23. package/scripts/generate-gql-schema.ts +13 -0
  24. package/src/agents/langgraph/event-source.ts +329 -0
  25. package/src/agents/langgraph/events.ts +377 -0
  26. package/src/graphql/inputs/action.input.ts +16 -0
  27. package/src/graphql/inputs/agent-session.input.ts +13 -0
  28. package/src/graphql/inputs/agent-state.input.ts +13 -0
  29. package/src/graphql/inputs/cloud-guardrails.input.ts +16 -0
  30. package/src/graphql/inputs/cloud.input.ts +8 -0
  31. package/src/graphql/inputs/context-property.input.ts +10 -0
  32. package/src/graphql/inputs/copilot-context.input.ts +10 -0
  33. package/src/graphql/inputs/custom-property.input.ts +15 -0
  34. package/src/graphql/inputs/extensions.input.ts +21 -0
  35. package/src/graphql/inputs/forwarded-parameters.input.ts +22 -0
  36. package/src/graphql/inputs/frontend.input.ts +14 -0
  37. package/src/graphql/inputs/generate-copilot-response.input.ts +59 -0
  38. package/src/graphql/inputs/load-agent-state.input.ts +10 -0
  39. package/src/graphql/inputs/message.input.ts +110 -0
  40. package/src/graphql/inputs/meta-event.input.ts +18 -0
  41. package/src/graphql/message-conversion/agui-to-gql.test.ts +1263 -0
  42. package/src/graphql/message-conversion/agui-to-gql.ts +333 -0
  43. package/src/graphql/message-conversion/gql-to-agui.test.ts +1580 -0
  44. package/src/graphql/message-conversion/gql-to-agui.ts +278 -0
  45. package/src/graphql/message-conversion/index.ts +2 -0
  46. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +526 -0
  47. package/src/graphql/resolvers/copilot.resolver.ts +708 -0
  48. package/src/graphql/resolvers/state.resolver.ts +27 -0
  49. package/src/graphql/types/agents-response.type.ts +19 -0
  50. package/src/graphql/types/base/index.ts +10 -0
  51. package/src/graphql/types/converted/index.ts +176 -0
  52. package/src/graphql/types/copilot-response.type.ts +138 -0
  53. package/src/graphql/types/enums.ts +38 -0
  54. package/src/graphql/types/extensions-response.type.ts +23 -0
  55. package/src/graphql/types/guardrails-result.type.ts +20 -0
  56. package/src/graphql/types/load-agent-state-response.type.ts +17 -0
  57. package/src/graphql/types/message-status.type.ts +42 -0
  58. package/src/graphql/types/meta-events.type.ts +71 -0
  59. package/src/graphql/types/response-status.type.ts +66 -0
  60. package/src/index.ts +4 -0
  61. package/src/langgraph.ts +1 -0
  62. package/src/lib/cloud/index.ts +4 -0
  63. package/src/lib/error-messages.ts +200 -0
  64. package/src/lib/index.ts +52 -0
  65. package/src/lib/integrations/index.ts +6 -0
  66. package/src/lib/integrations/nest/index.ts +14 -0
  67. package/src/lib/integrations/nextjs/app-router.ts +38 -0
  68. package/src/lib/integrations/nextjs/pages-router.ts +39 -0
  69. package/src/lib/integrations/node-express/index.ts +14 -0
  70. package/src/lib/integrations/node-http/index.ts +143 -0
  71. package/src/lib/integrations/node-http/request-handler.ts +111 -0
  72. package/src/lib/integrations/shared.ts +161 -0
  73. package/src/lib/logger.ts +28 -0
  74. package/src/lib/observability.ts +160 -0
  75. package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +169 -0
  76. package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +464 -0
  77. package/src/lib/runtime/agent-integrations/langgraph/agent.ts +209 -0
  78. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +34 -0
  79. package/src/lib/runtime/agent-integrations/langgraph/index.ts +2 -0
  80. package/src/lib/runtime/copilot-runtime.ts +710 -0
  81. package/src/lib/runtime/mcp-tools-utils.ts +254 -0
  82. package/src/lib/runtime/retry-utils.ts +96 -0
  83. package/src/lib/runtime/telemetry-agent-runner.ts +139 -0
  84. package/src/lib/runtime/types.ts +49 -0
  85. package/src/lib/runtime/utils.ts +87 -0
  86. package/src/lib/streaming.ts +202 -0
  87. package/src/lib/telemetry-client.ts +64 -0
  88. package/src/service-adapters/anthropic/anthropic-adapter.ts +452 -0
  89. package/src/service-adapters/anthropic/utils.ts +152 -0
  90. package/src/service-adapters/bedrock/bedrock-adapter.ts +73 -0
  91. package/src/service-adapters/conversion.ts +67 -0
  92. package/src/service-adapters/empty/empty-adapter.ts +38 -0
  93. package/src/service-adapters/events.ts +294 -0
  94. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +84 -0
  95. package/src/service-adapters/google/google-genai-adapter.test.ts +104 -0
  96. package/src/service-adapters/google/google-genai-adapter.ts +88 -0
  97. package/src/service-adapters/groq/groq-adapter.ts +203 -0
  98. package/src/service-adapters/index.ts +18 -0
  99. package/src/service-adapters/langchain/langchain-adapter.ts +111 -0
  100. package/src/service-adapters/langchain/langserve.ts +88 -0
  101. package/src/service-adapters/langchain/types.ts +14 -0
  102. package/src/service-adapters/langchain/utils.ts +313 -0
  103. package/src/service-adapters/openai/openai-adapter.ts +283 -0
  104. package/src/service-adapters/openai/openai-assistant-adapter.ts +344 -0
  105. package/src/service-adapters/openai/utils.ts +199 -0
  106. package/src/service-adapters/service-adapter.ts +41 -0
  107. package/src/service-adapters/shared/error-utils.ts +61 -0
  108. package/src/service-adapters/shared/index.ts +1 -0
  109. package/src/service-adapters/unify/unify-adapter.ts +151 -0
  110. package/src/utils/failed-response-status-reasons.ts +70 -0
  111. package/src/utils/index.ts +1 -0
  112. package/src/v2/index.ts +3 -0
  113. package/tests/global.d.ts +13 -0
  114. package/tests/service-adapters/anthropic/allowlist-approach.test.ts +226 -0
  115. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +389 -0
  116. package/tests/service-adapters/openai/allowlist-approach.test.ts +238 -0
  117. package/tests/service-adapters/openai/openai-adapter.test.ts +301 -0
  118. package/tests/setup.jest.ts +21 -0
  119. package/tests/tsconfig.json +10 -0
  120. package/tsconfig.json +13 -0
  121. package/tsup.config.ts +20 -0
  122. package/typedoc.json +4 -0
@@ -0,0 +1,329 @@
1
+ import { CopilotKitLowLevelError, isStructuredCopilotKitError } from "@copilotkit/shared";
2
+ import { catchError, mergeMap, ReplaySubject, scan } from "rxjs";
3
+ import { generateHelpfulErrorMessage } from "../../lib/streaming";
4
+ import {
5
+ RuntimeEvent,
6
+ RuntimeEventTypes,
7
+ RuntimeMetaEventName,
8
+ } from "../../service-adapters/events";
9
+ import { CustomEventNames, LangGraphEvent, LangGraphEventTypes } from "./events";
10
+
11
+ interface LangGraphEventWithState {
12
+ event: LangGraphEvent | null;
13
+
14
+ isMessageStart: boolean;
15
+ isMessageEnd: boolean;
16
+ isToolCallStart: boolean;
17
+ isToolCallEnd: boolean;
18
+ isToolCall: boolean;
19
+
20
+ lastMessageId: string | null;
21
+ lastToolCallId: string | null;
22
+ lastToolCallName: string | null;
23
+ currentContent: string | null;
24
+ processedToolCallIds: Set<string>;
25
+ }
26
+
27
+ export class RemoteLangGraphEventSource {
28
+ public eventStream$ = new ReplaySubject<LangGraphEvent>();
29
+
30
+ private shouldEmitToolCall(
31
+ shouldEmitToolCalls: string | string[] | boolean,
32
+ toolCallName: string,
33
+ ) {
34
+ if (typeof shouldEmitToolCalls === "boolean") {
35
+ return shouldEmitToolCalls;
36
+ }
37
+ if (Array.isArray(shouldEmitToolCalls)) {
38
+ return shouldEmitToolCalls.includes(toolCallName);
39
+ }
40
+ return shouldEmitToolCalls === toolCallName;
41
+ }
42
+
43
+ private getCurrentContent(event: LangGraphEvent) {
44
+ // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs
45
+ const content = event.data?.chunk?.kwargs?.content ?? event.data?.chunk?.content;
46
+
47
+ if (!content) {
48
+ const toolCallChunks = this.getCurrentToolCallChunks(event) ?? [];
49
+ for (const chunk of toolCallChunks) {
50
+ if (chunk.args) {
51
+ return chunk.args;
52
+ }
53
+ }
54
+ }
55
+
56
+ if (typeof content === "string") {
57
+ return content;
58
+ } else if (Array.isArray(content) && content.length > 0) {
59
+ return content[0].text;
60
+ }
61
+
62
+ return null;
63
+ }
64
+
65
+ private getCurrentMessageId(event: LangGraphEvent) {
66
+ // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs
67
+ return event.data?.chunk?.kwargs?.id ?? event.data?.chunk?.id;
68
+ }
69
+
70
+ private getCurrentToolCallChunks(event: LangGraphEvent) {
71
+ // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs
72
+ return event.data?.chunk?.kwargs?.tool_call_chunks ?? event.data?.chunk?.tool_call_chunks;
73
+ }
74
+
75
+ private getResponseMetadata(event: LangGraphEvent) {
76
+ // @ts-expect-error -- LangGraph Platform implementation stores data outside of kwargs
77
+ return event.data?.chunk?.kwargs?.response_metadata ?? event.data?.chunk?.response_metadata;
78
+ }
79
+
80
+ processLangGraphEvents() {
81
+ let lastEventWithState: LangGraphEventWithState | null = null;
82
+
83
+ return this.eventStream$.pipe(
84
+ scan(
85
+ (acc, event) => {
86
+ if (event.event === LangGraphEventTypes.OnChatModelStream) {
87
+ const prevMessageId = acc.lastMessageId;
88
+ acc.currentContent = this.getCurrentContent(event);
89
+ acc.lastMessageId = this.getCurrentMessageId(event) ?? acc.lastMessageId;
90
+ const toolCallChunks = this.getCurrentToolCallChunks(event) ?? [];
91
+ const responseMetadata = this.getResponseMetadata(event);
92
+ // Check if a given event is a tool call
93
+ const toolCallCheck = toolCallChunks && toolCallChunks.length > 0;
94
+ let isToolCallEnd = responseMetadata?.finish_reason === "tool_calls";
95
+
96
+ acc.isToolCallStart = toolCallChunks.some((chunk: any) => chunk.name && chunk.id);
97
+ acc.isMessageStart = prevMessageId !== acc.lastMessageId && !acc.isToolCallStart;
98
+
99
+ let previousRoundHadToolCall = acc.isToolCall;
100
+ acc.isToolCall = toolCallCheck;
101
+ // Previous "acc.isToolCall" was set but now it won't pass the check, it means the tool call just ended.
102
+ if (previousRoundHadToolCall && !toolCallCheck) {
103
+ isToolCallEnd = true;
104
+ }
105
+ acc.isToolCallEnd = isToolCallEnd;
106
+ acc.isMessageEnd = responseMetadata?.finish_reason === "stop";
107
+ ({ name: acc.lastToolCallName, id: acc.lastToolCallId } = toolCallChunks.find(
108
+ (chunk: any) => chunk.name && chunk.id,
109
+ ) ?? { name: acc.lastToolCallName, id: acc.lastToolCallId });
110
+ }
111
+ acc.event = event;
112
+ lastEventWithState = acc; // Capture the state
113
+ return acc;
114
+ },
115
+ {
116
+ event: null,
117
+ isMessageStart: false,
118
+ isMessageEnd: false,
119
+ isToolCallStart: false,
120
+ isToolCallEnd: false,
121
+ isToolCall: false,
122
+ lastMessageId: null,
123
+ lastToolCallId: null,
124
+ lastToolCallName: null,
125
+ currentContent: null,
126
+ processedToolCallIds: new Set<string>(),
127
+ } as LangGraphEventWithState,
128
+ ),
129
+ mergeMap((acc): RuntimeEvent[] => {
130
+ const events: RuntimeEvent[] = [];
131
+
132
+ let shouldEmitMessages = true;
133
+ let shouldEmitToolCalls: string | string[] | boolean = true;
134
+
135
+ if (acc.event.event == LangGraphEventTypes.OnChatModelStream) {
136
+ if ("copilotkit:emit-tool-calls" in (acc.event.metadata || {})) {
137
+ shouldEmitToolCalls = acc.event.metadata["copilotkit:emit-tool-calls"];
138
+ }
139
+ if ("copilotkit:emit-messages" in (acc.event.metadata || {})) {
140
+ shouldEmitMessages = acc.event.metadata["copilotkit:emit-messages"];
141
+ }
142
+ }
143
+
144
+ if (acc.event.event === LangGraphEventTypes.OnInterrupt) {
145
+ events.push({
146
+ type: RuntimeEventTypes.MetaEvent,
147
+ name: RuntimeMetaEventName.LangGraphInterruptEvent,
148
+ value: acc.event.value,
149
+ });
150
+ }
151
+ if (acc.event.event === LangGraphEventTypes.OnCopilotKitInterrupt) {
152
+ events.push({
153
+ type: RuntimeEventTypes.MetaEvent,
154
+ name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent,
155
+ data: acc.event.data,
156
+ });
157
+ }
158
+
159
+ // Handle CopilotKit error events with preserved semantic information
160
+ if (acc.event.event === LangGraphEventTypes.OnCopilotKitError) {
161
+ const errorData = acc.event.data.error;
162
+
163
+ // Create a structured error with the original semantic information
164
+ const preservedError = new CopilotKitLowLevelError({
165
+ error: new Error(errorData.message),
166
+ url: "langgraph agent",
167
+ message: `${errorData.type}: ${errorData.message}`,
168
+ });
169
+
170
+ // Add additional error context to the error object
171
+ if (errorData.status_code) {
172
+ (preservedError as any).statusCode = errorData.status_code;
173
+ }
174
+ if (errorData.response_data) {
175
+ (preservedError as any).responseData = errorData.response_data;
176
+ }
177
+ (preservedError as any).agentName = errorData.agent_name;
178
+ (preservedError as any).originalErrorType = errorData.type;
179
+
180
+ // Throw the structured error to be handled by the catchError operator
181
+ throw preservedError;
182
+ }
183
+
184
+ const responseMetadata = this.getResponseMetadata(acc.event);
185
+
186
+ // Tool call ended: emit ActionExecutionEnd
187
+ if (
188
+ acc.isToolCallEnd &&
189
+ this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName) &&
190
+ acc.lastToolCallId &&
191
+ !acc.processedToolCallIds.has(acc.lastToolCallId)
192
+ ) {
193
+ acc.processedToolCallIds.add(acc.lastToolCallId);
194
+
195
+ events.push({
196
+ type: RuntimeEventTypes.ActionExecutionEnd,
197
+ actionExecutionId: acc.lastToolCallId,
198
+ });
199
+ }
200
+
201
+ // Message ended: emit TextMessageEnd
202
+ else if (responseMetadata?.finish_reason === "stop" && shouldEmitMessages) {
203
+ events.push({
204
+ type: RuntimeEventTypes.TextMessageEnd,
205
+ messageId: acc.lastMessageId,
206
+ });
207
+ }
208
+
209
+ switch (acc.event!.event) {
210
+ //
211
+ // Custom events
212
+ //
213
+ case LangGraphEventTypes.OnCustomEvent:
214
+ //
215
+ // Manually emit a message
216
+ //
217
+ if (acc.event.name === CustomEventNames.CopilotKitManuallyEmitMessage) {
218
+ events.push({
219
+ type: RuntimeEventTypes.TextMessageStart,
220
+ messageId: acc.event.data.message_id,
221
+ });
222
+ events.push({
223
+ type: RuntimeEventTypes.TextMessageContent,
224
+ messageId: acc.event.data.message_id,
225
+ content: acc.event.data.message,
226
+ });
227
+ events.push({
228
+ type: RuntimeEventTypes.TextMessageEnd,
229
+ messageId: acc.event.data.message_id,
230
+ });
231
+ }
232
+ //
233
+ // Manually emit a tool call
234
+ //
235
+ else if (acc.event.name === CustomEventNames.CopilotKitManuallyEmitToolCall) {
236
+ events.push({
237
+ type: RuntimeEventTypes.ActionExecutionStart,
238
+ actionExecutionId: acc.event.data.id,
239
+ actionName: acc.event.data.name,
240
+ parentMessageId: acc.event.data.id,
241
+ });
242
+ events.push({
243
+ type: RuntimeEventTypes.ActionExecutionArgs,
244
+ actionExecutionId: acc.event.data.id,
245
+ args: JSON.stringify(acc.event.data.args),
246
+ });
247
+ events.push({
248
+ type: RuntimeEventTypes.ActionExecutionEnd,
249
+ actionExecutionId: acc.event.data.id,
250
+ });
251
+ }
252
+ break;
253
+ case LangGraphEventTypes.OnCopilotKitStateSync:
254
+ events.push({
255
+ type: RuntimeEventTypes.AgentStateMessage,
256
+ threadId: acc.event.thread_id,
257
+ role: acc.event.role,
258
+ agentName: acc.event.agent_name,
259
+ nodeName: acc.event.node_name,
260
+ runId: acc.event.run_id,
261
+ active: acc.event.active,
262
+ state: JSON.stringify(acc.event.state),
263
+ running: acc.event.running,
264
+ });
265
+ break;
266
+ case LangGraphEventTypes.OnChatModelStream:
267
+ if (
268
+ acc.isToolCallStart &&
269
+ this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName)
270
+ ) {
271
+ events.push({
272
+ type: RuntimeEventTypes.ActionExecutionStart,
273
+ actionExecutionId: acc.lastToolCallId,
274
+ actionName: acc.lastToolCallName,
275
+ parentMessageId: acc.lastMessageId,
276
+ });
277
+ }
278
+ // Message started: emit TextMessageStart
279
+ else if (acc.isMessageStart && shouldEmitMessages) {
280
+ acc.processedToolCallIds.clear();
281
+ events.push({
282
+ type: RuntimeEventTypes.TextMessageStart,
283
+ messageId: acc.lastMessageId,
284
+ });
285
+ }
286
+
287
+ // Tool call args: emit ActionExecutionArgs
288
+ if (
289
+ acc.isToolCall &&
290
+ acc.currentContent &&
291
+ this.shouldEmitToolCall(shouldEmitToolCalls, acc.lastToolCallName)
292
+ ) {
293
+ events.push({
294
+ type: RuntimeEventTypes.ActionExecutionArgs,
295
+ actionExecutionId: acc.lastToolCallId,
296
+ args: acc.currentContent,
297
+ });
298
+ }
299
+ // Message content: emit TextMessageContent
300
+ else if (!acc.isToolCall && acc.currentContent && shouldEmitMessages) {
301
+ events.push({
302
+ type: RuntimeEventTypes.TextMessageContent,
303
+ messageId: acc.lastMessageId,
304
+ content: acc.currentContent,
305
+ });
306
+ }
307
+ break;
308
+ }
309
+ return events;
310
+ }),
311
+ catchError((error) => {
312
+ // If it's a structured CopilotKitError, re-throw it to be handled by the frontend error system
313
+ if (isStructuredCopilotKitError(error)) {
314
+ throw error;
315
+ }
316
+
317
+ // Determine a more helpful error message based on context
318
+ let helpfulMessage = generateHelpfulErrorMessage(error, "LangGraph agent connection");
319
+
320
+ // For all other errors, preserve the raw error information in a structured format
321
+ throw new CopilotKitLowLevelError({
322
+ error: error instanceof Error ? error : new Error(String(error)),
323
+ url: "langgraph event stream",
324
+ message: helpfulMessage,
325
+ });
326
+ }),
327
+ );
328
+ }
329
+ }
@@ -0,0 +1,377 @@
1
+ import { ActionExecutionMessage, ResultMessage, TextMessage } from "../../graphql/types/converted";
2
+
3
+ export enum LangGraphEventTypes {
4
+ OnChainStart = "on_chain_start",
5
+ OnChainStream = "on_chain_stream",
6
+ OnChainEnd = "on_chain_end",
7
+ OnChatModelStart = "on_chat_model_start",
8
+ OnChatModelStream = "on_chat_model_stream",
9
+ OnChatModelEnd = "on_chat_model_end",
10
+ OnToolStart = "on_tool_start",
11
+ OnToolEnd = "on_tool_end",
12
+ OnCopilotKitStateSync = "on_copilotkit_state_sync",
13
+ OnCopilotKitEmitMessage = "on_copilotkit_emit_message",
14
+ OnCopilotKitEmitToolCall = "on_copilotkit_emit_tool_call",
15
+ OnCustomEvent = "on_custom_event",
16
+ OnInterrupt = "on_interrupt",
17
+ OnCopilotKitInterrupt = "on_copilotkit_interrupt",
18
+ OnCopilotKitError = "on_copilotkit_error",
19
+ }
20
+
21
+ export enum MetaEventNames {
22
+ LangGraphInterruptEvent = "LangGraphInterruptEvent",
23
+ CopilotKitLangGraphInterruptEvent = "CopilotKitLangGraphInterruptEvent",
24
+ }
25
+
26
+ export enum CustomEventNames {
27
+ CopilotKitManuallyEmitMessage = "copilotkit_manually_emit_message",
28
+ CopilotKitManuallyEmitToolCall = "copilotkit_manually_emit_tool_call",
29
+ CopilotKitManuallyEmitIntermediateState = "copilotkit_manually_emit_intermediate_state",
30
+ CopilotKitExit = "copilotkit_exit",
31
+ }
32
+
33
+ type LangGraphOnCopilotKitStateSyncEvent = {
34
+ event: LangGraphEventTypes.OnCopilotKitStateSync;
35
+ thread_id: string;
36
+ agent_name: string;
37
+ node_name: string;
38
+ run_id: string;
39
+ active: boolean;
40
+ role: string;
41
+ state: any;
42
+ running: boolean;
43
+ };
44
+
45
+ type LangGraphOnChainStartEvent = {
46
+ event: LangGraphEventTypes.OnChainStart;
47
+ run_id: string;
48
+ name: string;
49
+ tags: string[];
50
+ metadata: { thread_id: string };
51
+ data: {
52
+ input: any;
53
+ };
54
+ parent_ids: string[];
55
+ };
56
+
57
+ type LangGraphOnChainEndEvent = {
58
+ event: LangGraphEventTypes.OnChainEnd;
59
+ name: string;
60
+ run_id: string;
61
+ tags: string[];
62
+ metadata: {
63
+ thread_id: string;
64
+ langgraph_step: number;
65
+ langgraph_node: string;
66
+ langgraph_triggers: string[];
67
+ langgraph_task_idx: number;
68
+ thread_ts: string;
69
+ };
70
+ data: {
71
+ input: any;
72
+ output: any;
73
+ };
74
+ parent_ids: string[];
75
+ };
76
+
77
+ type LangGraphOnChatModelStartEvent = {
78
+ event: LangGraphEventTypes.OnChatModelStart;
79
+ name: string;
80
+ run_id: string;
81
+ tags: string[];
82
+ metadata: {
83
+ thread_id: string;
84
+ langgraph_step: number;
85
+ langgraph_node: string;
86
+ langgraph_triggers: string[];
87
+ langgraph_task_idx: number;
88
+ thread_ts: string;
89
+ ls_provider: string;
90
+ ls_model_name: string;
91
+ ls_model_type: string;
92
+ ls_temperature: number;
93
+ };
94
+ data: {
95
+ input: {
96
+ messages: {
97
+ lc: number;
98
+ type: string;
99
+ id: string[];
100
+ kwargs: {
101
+ content: string;
102
+ type: string;
103
+ id: string;
104
+ };
105
+ }[][];
106
+ };
107
+ };
108
+ parent_ids: string[];
109
+ };
110
+
111
+ type LangGraphOnChatModelStreamEvent = {
112
+ event: LangGraphEventTypes.OnChatModelStream;
113
+ name: string;
114
+ run_id: string;
115
+ tags: string[];
116
+ metadata: {
117
+ thread_id: string;
118
+ langgraph_step: number;
119
+ langgraph_node: string;
120
+ langgraph_triggers: string[];
121
+ langgraph_task_idx: number;
122
+ thread_ts: string;
123
+ ls_provider: string;
124
+ ls_model_name: string;
125
+ ls_model_type: string;
126
+ ls_temperature: number;
127
+ };
128
+ data: {
129
+ chunk: {
130
+ lc: number;
131
+ type: string;
132
+ id: string;
133
+ kwargs: {
134
+ content: string | { text: string; type: string; index: number }[];
135
+ additional_kwargs: {
136
+ tool_calls: {
137
+ index: number;
138
+ id: string;
139
+ function: { arguments: string; name: string };
140
+ type: string;
141
+ }[];
142
+ };
143
+ type: string;
144
+ id: string;
145
+ tool_calls: { name: string; args: {}; id: string; type: string }[];
146
+ tool_call_chunks: {
147
+ name: string;
148
+ args: string;
149
+ id: string;
150
+ index: number;
151
+ type: string;
152
+ }[];
153
+ invalid_tool_calls: any[];
154
+ };
155
+ };
156
+ };
157
+ parent_ids: string[];
158
+ };
159
+
160
+ type LangGraphOnChatModelEndEvent = {
161
+ event: LangGraphEventTypes.OnChatModelEnd;
162
+ name: string;
163
+ run_id: string;
164
+ tags: string[];
165
+ metadata: {
166
+ thread_id: string;
167
+ langgraph_step: number;
168
+ langgraph_node: string;
169
+ langgraph_triggers: string[];
170
+ langgraph_task_idx: number;
171
+ thread_ts: string;
172
+ ls_provider: string;
173
+ ls_model_name: string;
174
+ ls_model_type: string;
175
+ ls_temperature: number;
176
+ };
177
+ data: {
178
+ input: any;
179
+ output: {
180
+ generations: {
181
+ text: string;
182
+ generation_info: {
183
+ finish_reason: string;
184
+ model_name: string;
185
+ system_fingerprint: string;
186
+ };
187
+ type: string;
188
+ message: {
189
+ lc: number;
190
+ type: string;
191
+ id: string[];
192
+ kwargs: {
193
+ content: string;
194
+ additional_kwargs: {
195
+ tool_calls: {
196
+ index: number;
197
+ id: string;
198
+ function: { arguments: string; name: string };
199
+ type: string;
200
+ }[];
201
+ };
202
+ response_metadata: {
203
+ finish_reason: string;
204
+ model_name: string;
205
+ system_fingerprint: string;
206
+ };
207
+ type: string;
208
+ id: string;
209
+ tool_calls: { name: string; args: { query: string }; id: string; type: string }[];
210
+ invalid_tool_calls: any[];
211
+ };
212
+ };
213
+ }[][];
214
+ llm_output: any;
215
+ run: any;
216
+ };
217
+ };
218
+ parent_ids: string[];
219
+ };
220
+
221
+ type LangGraphOnChainStreamEvent = {
222
+ event: LangGraphEventTypes.OnChainStream;
223
+ name: string;
224
+ run_id: string;
225
+ tags: string[];
226
+ metadata: {
227
+ thread_id: string;
228
+ langgraph_step?: number;
229
+ langgraph_node?: string;
230
+ langgraph_triggers?: string[];
231
+ langgraph_task_idx?: number;
232
+ thread_ts?: string;
233
+ };
234
+ data: {
235
+ chunk: {
236
+ messages: {
237
+ lc: number;
238
+ type: string;
239
+ id: string[];
240
+ kwargs: {
241
+ content: string;
242
+ additional_kwargs?: {
243
+ tool_calls?: {
244
+ index: number;
245
+ id: string;
246
+ function: { arguments: string; name: string };
247
+ type: string;
248
+ }[];
249
+ };
250
+ response_metadata?: {
251
+ finish_reason: string;
252
+ model_name: string;
253
+ system_fingerprint: string;
254
+ };
255
+ type: string;
256
+ id: string;
257
+ tool_calls?: { name: string; args: { query: string }; id: string; type: string }[];
258
+ invalid_tool_calls?: any[];
259
+ };
260
+ }[];
261
+ };
262
+ };
263
+ parent_ids: string[];
264
+ };
265
+
266
+ type LangGraphOnToolStartEvent = {
267
+ event: LangGraphEventTypes.OnToolStart;
268
+ name: string;
269
+ run_id: string;
270
+ tags: string[];
271
+ metadata: {
272
+ thread_id: string;
273
+ langgraph_step: number;
274
+ langgraph_node: string;
275
+ langgraph_triggers: string[];
276
+ langgraph_task_idx: number;
277
+ thread_ts: string;
278
+ };
279
+ data: {
280
+ input: {
281
+ query: string;
282
+ };
283
+ };
284
+ parent_ids: string[];
285
+ };
286
+
287
+ type LangGraphOnToolEndEvent = {
288
+ event: LangGraphEventTypes.OnToolEnd;
289
+ name: string;
290
+ run_id: string;
291
+ tags: string[];
292
+ metadata: {
293
+ thread_id: string;
294
+ langgraph_step: number;
295
+ langgraph_node: string;
296
+ langgraph_triggers: string[];
297
+ langgraph_task_idx: number;
298
+ thread_ts: string;
299
+ };
300
+ data: {
301
+ input: {
302
+ query: string;
303
+ };
304
+ output: {
305
+ lc: number;
306
+ type: string;
307
+ id: string[];
308
+ kwargs: {
309
+ content: string[];
310
+ type: string;
311
+ name: string;
312
+ tool_call_id: string;
313
+ status: string;
314
+ };
315
+ };
316
+ };
317
+ parent_ids: string[];
318
+ };
319
+
320
+ type LangGraphOnCustomEvent = {
321
+ event: LangGraphEventTypes.OnCustomEvent;
322
+ run_id: string;
323
+ name: string;
324
+ tags: string[];
325
+ metadata: {
326
+ thread_id: string;
327
+ langgraph_step: number;
328
+ langgraph_node: string;
329
+ langgraph_triggers: string[];
330
+ langgraph_path: [string, string];
331
+ langgraph_checkpoint_ns: string;
332
+ checkpoint_ns: string;
333
+ };
334
+ data: any;
335
+ parent_ids: string[];
336
+ };
337
+
338
+ interface LangGraphInterruptEvent {
339
+ event: LangGraphEventTypes.OnInterrupt;
340
+ value: string;
341
+ }
342
+
343
+ interface CopilotKitLangGraphInterruptEvent {
344
+ event: LangGraphEventTypes.OnCopilotKitInterrupt;
345
+ data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };
346
+ }
347
+
348
+ interface CopilotKitLangGraphErrorEvent {
349
+ event: LangGraphEventTypes.OnCopilotKitError;
350
+ data: {
351
+ error: {
352
+ message: string;
353
+ type: string;
354
+ agent_name: string;
355
+ status_code?: number;
356
+ response_data?: any;
357
+ };
358
+ thread_id: string;
359
+ agent_name: string;
360
+ node_name: string;
361
+ };
362
+ }
363
+
364
+ export type LangGraphEvent =
365
+ | LangGraphOnChainStartEvent
366
+ | LangGraphOnChainStreamEvent
367
+ | LangGraphOnChainEndEvent
368
+ | LangGraphOnChatModelStartEvent
369
+ | LangGraphOnChatModelStreamEvent
370
+ | LangGraphOnChatModelEndEvent
371
+ | LangGraphOnToolStartEvent
372
+ | LangGraphOnToolEndEvent
373
+ | LangGraphOnCopilotKitStateSyncEvent
374
+ | LangGraphOnCustomEvent
375
+ | LangGraphInterruptEvent
376
+ | CopilotKitLangGraphInterruptEvent
377
+ | CopilotKitLangGraphErrorEvent;