@copilotkit/runtime 1.50.0-beta.1 → 1.50.0-beta.3

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 (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/index.d.ts +76 -286
  3. package/dist/index.js +306 -281
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +299 -270
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/langgraph.d.ts +284 -0
  8. package/dist/langgraph.js +211 -0
  9. package/dist/langgraph.js.map +1 -0
  10. package/dist/langgraph.mjs +206 -0
  11. package/dist/langgraph.mjs.map +1 -0
  12. package/dist/v2/index.d.ts +1 -0
  13. package/dist/v2/index.js +7 -0
  14. package/dist/v2/index.js.map +1 -1
  15. package/dist/v2/index.mjs +1 -0
  16. package/dist/v2/index.mjs.map +1 -1
  17. package/package.json +55 -17
  18. package/src/graphql/message-conversion/agui-to-gql.test.ts +2 -2
  19. package/src/graphql/message-conversion/gql-to-agui.test.ts +30 -28
  20. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +8 -8
  21. package/src/langgraph.ts +1 -0
  22. package/src/lib/index.ts +41 -1
  23. package/src/lib/integrations/nextjs/app-router.ts +3 -1
  24. package/src/lib/integrations/node-http/index.ts +132 -11
  25. package/src/lib/integrations/shared.ts +2 -2
  26. package/src/lib/runtime/agent-integrations/{langgraph.agent.ts → langgraph/agent.ts} +5 -30
  27. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +34 -0
  28. package/src/lib/runtime/agent-integrations/langgraph/index.ts +2 -0
  29. package/src/lib/runtime/copilot-runtime.ts +25 -46
  30. package/src/service-adapters/anthropic/anthropic-adapter.ts +16 -3
  31. package/src/service-adapters/bedrock/bedrock-adapter.ts +4 -1
  32. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +2 -1
  33. package/src/service-adapters/google/google-genai-adapter.ts +9 -4
  34. package/src/service-adapters/groq/groq-adapter.ts +16 -3
  35. package/src/service-adapters/langchain/langchain-adapter.ts +5 -3
  36. package/src/service-adapters/langchain/langserve.ts +2 -1
  37. package/src/service-adapters/openai/openai-adapter.ts +17 -3
  38. package/src/service-adapters/openai/openai-assistant-adapter.ts +26 -11
  39. package/src/service-adapters/unify/unify-adapter.ts +3 -1
  40. package/src/v2/index.ts +1 -0
  41. package/tsup.config.ts +5 -2
@@ -0,0 +1,206 @@
1
+ import { map } from 'rxjs';
2
+ import { LangGraphAgent as LangGraphAgent$1 } from '@ag-ui/langgraph';
3
+ export { LangGraphHttpAgent } from '@ag-ui/langgraph';
4
+ import { EventType } from '@ag-ui/client';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+
9
+ // src/lib/runtime/agent-integrations/langgraph/consts.ts
10
+ var CustomEventNames;
11
+ (function(CustomEventNames3) {
12
+ CustomEventNames3["CopilotKitManuallyEmitMessage"] = "copilotkit_manually_emit_message";
13
+ CustomEventNames3["CopilotKitManuallyEmitToolCall"] = "copilotkit_manually_emit_tool_call";
14
+ CustomEventNames3["CopilotKitManuallyEmitIntermediateState"] = "copilotkit_manually_emit_intermediate_state";
15
+ CustomEventNames3["CopilotKitExit"] = "copilotkit_exit";
16
+ })(CustomEventNames || (CustomEventNames = {}));
17
+
18
+ // src/agents/langgraph/events.ts
19
+ var LangGraphEventTypes;
20
+ (function(LangGraphEventTypes2) {
21
+ LangGraphEventTypes2["OnChainStart"] = "on_chain_start";
22
+ LangGraphEventTypes2["OnChainStream"] = "on_chain_stream";
23
+ LangGraphEventTypes2["OnChainEnd"] = "on_chain_end";
24
+ LangGraphEventTypes2["OnChatModelStart"] = "on_chat_model_start";
25
+ LangGraphEventTypes2["OnChatModelStream"] = "on_chat_model_stream";
26
+ LangGraphEventTypes2["OnChatModelEnd"] = "on_chat_model_end";
27
+ LangGraphEventTypes2["OnToolStart"] = "on_tool_start";
28
+ LangGraphEventTypes2["OnToolEnd"] = "on_tool_end";
29
+ LangGraphEventTypes2["OnCopilotKitStateSync"] = "on_copilotkit_state_sync";
30
+ LangGraphEventTypes2["OnCopilotKitEmitMessage"] = "on_copilotkit_emit_message";
31
+ LangGraphEventTypes2["OnCopilotKitEmitToolCall"] = "on_copilotkit_emit_tool_call";
32
+ LangGraphEventTypes2["OnCustomEvent"] = "on_custom_event";
33
+ LangGraphEventTypes2["OnInterrupt"] = "on_interrupt";
34
+ LangGraphEventTypes2["OnCopilotKitInterrupt"] = "on_copilotkit_interrupt";
35
+ LangGraphEventTypes2["OnCopilotKitError"] = "on_copilotkit_error";
36
+ })(LangGraphEventTypes || (LangGraphEventTypes = {}));
37
+ var MetaEventNames;
38
+ (function(MetaEventNames2) {
39
+ MetaEventNames2["LangGraphInterruptEvent"] = "LangGraphInterruptEvent";
40
+ MetaEventNames2["CopilotKitLangGraphInterruptEvent"] = "CopilotKitLangGraphInterruptEvent";
41
+ })(MetaEventNames || (MetaEventNames = {}));
42
+ var CustomEventNames2;
43
+ (function(CustomEventNames3) {
44
+ CustomEventNames3["CopilotKitManuallyEmitMessage"] = "copilotkit_manually_emit_message";
45
+ CustomEventNames3["CopilotKitManuallyEmitToolCall"] = "copilotkit_manually_emit_tool_call";
46
+ CustomEventNames3["CopilotKitManuallyEmitIntermediateState"] = "copilotkit_manually_emit_intermediate_state";
47
+ CustomEventNames3["CopilotKitExit"] = "copilotkit_exit";
48
+ })(CustomEventNames2 || (CustomEventNames2 = {}));
49
+ var LangGraphAgent = class extends LangGraphAgent$1 {
50
+ constructor(config) {
51
+ super(config);
52
+ }
53
+ // @ts-ignore
54
+ clone() {
55
+ return new LangGraphAgent(this.config);
56
+ }
57
+ dispatchEvent(event) {
58
+ if (event.type === EventType.CUSTOM) {
59
+ const customEvent = event;
60
+ if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitMessage) {
61
+ this.subscriber.next({
62
+ type: EventType.TEXT_MESSAGE_START,
63
+ role: "assistant",
64
+ messageId: customEvent.value.message_id,
65
+ rawEvent: event
66
+ });
67
+ this.subscriber.next({
68
+ type: EventType.TEXT_MESSAGE_CONTENT,
69
+ messageId: customEvent.value.message_id,
70
+ delta: customEvent.value.message,
71
+ rawEvent: event
72
+ });
73
+ this.subscriber.next({
74
+ type: EventType.TEXT_MESSAGE_END,
75
+ messageId: customEvent.value.message_id,
76
+ rawEvent: event
77
+ });
78
+ return true;
79
+ }
80
+ if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitToolCall) {
81
+ this.subscriber.next({
82
+ type: EventType.TOOL_CALL_START,
83
+ toolCallId: customEvent.value.id,
84
+ toolCallName: customEvent.value.name,
85
+ parentMessageId: customEvent.value.id,
86
+ rawEvent: event
87
+ });
88
+ this.subscriber.next({
89
+ type: EventType.TOOL_CALL_ARGS,
90
+ toolCallId: customEvent.value.id,
91
+ delta: customEvent.value.args,
92
+ rawEvent: event
93
+ });
94
+ this.subscriber.next({
95
+ type: EventType.TOOL_CALL_END,
96
+ toolCallId: customEvent.value.id,
97
+ rawEvent: event
98
+ });
99
+ return true;
100
+ }
101
+ if (customEvent.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState) {
102
+ this.activeRun.manuallyEmittedState = customEvent.value;
103
+ this.dispatchEvent({
104
+ type: EventType.STATE_SNAPSHOT,
105
+ snapshot: this.getStateSnapshot({
106
+ values: this.activeRun.manuallyEmittedState
107
+ }),
108
+ rawEvent: event
109
+ });
110
+ return true;
111
+ }
112
+ if (customEvent.name === CustomEventNames.CopilotKitExit) {
113
+ this.subscriber.next({
114
+ type: EventType.CUSTOM,
115
+ name: "Exit",
116
+ value: true
117
+ });
118
+ return true;
119
+ }
120
+ }
121
+ const rawEvent = event.rawEvent;
122
+ if (!rawEvent) {
123
+ this.subscriber.next(event);
124
+ return true;
125
+ }
126
+ const isMessageEvent = event.type === EventType.TEXT_MESSAGE_START || event.type === EventType.TEXT_MESSAGE_CONTENT || event.type === EventType.TEXT_MESSAGE_END;
127
+ const isToolEvent = event.type === EventType.TOOL_CALL_START || event.type === EventType.TOOL_CALL_ARGS || event.type === EventType.TOOL_CALL_END;
128
+ if ("copilotkit:emit-tool-calls" in (rawEvent.metadata || {})) {
129
+ if (rawEvent.metadata["copilotkit:emit-tool-calls"] === false && isToolEvent) {
130
+ return false;
131
+ }
132
+ }
133
+ if ("copilotkit:emit-messages" in (rawEvent.metadata || {})) {
134
+ if (rawEvent.metadata["copilotkit:emit-messages"] === false && isMessageEvent) {
135
+ return false;
136
+ }
137
+ }
138
+ this.subscriber.next(event);
139
+ return true;
140
+ }
141
+ // @ts-ignore
142
+ run(input) {
143
+ return super.run(input).pipe(map((processedEvent) => {
144
+ var _a, _b, _c, _d, _e;
145
+ if (processedEvent.type === EventType.RAW) {
146
+ const event = processedEvent.event ?? processedEvent.rawEvent;
147
+ const eventType = event.event;
148
+ const toolCallData = (_c = (_b = (_a = event.data) == null ? void 0 : _a.chunk) == null ? void 0 : _b.tool_call_chunks) == null ? void 0 : _c[0];
149
+ const toolCallUsedToPredictState = (_e = (_d = event.metadata) == null ? void 0 : _d["copilotkit:emit-intermediate-state"]) == null ? void 0 : _e.some((predictStateTool) => predictStateTool.tool === (toolCallData == null ? void 0 : toolCallData.name));
150
+ if (eventType === LangGraphEventTypes.OnChatModelStream && toolCallUsedToPredictState) {
151
+ return {
152
+ type: EventType.CUSTOM,
153
+ name: "PredictState",
154
+ value: event.metadata["copilotkit:emit-intermediate-state"]
155
+ };
156
+ }
157
+ }
158
+ return processedEvent;
159
+ }));
160
+ }
161
+ langGraphDefaultMergeState(state, messages, input) {
162
+ const aguiMergedState = super.langGraphDefaultMergeState(state, messages, input);
163
+ const { tools: returnedTools, "ag-ui": agui } = aguiMergedState;
164
+ const rawCombinedTools = [
165
+ ...returnedTools ?? [],
166
+ ...(agui == null ? void 0 : agui.tools) ?? []
167
+ ];
168
+ const combinedTools = Array.from(new Map(rawCombinedTools.map((t) => [
169
+ (t == null ? void 0 : t.id) ?? (t == null ? void 0 : t.name) ?? (t == null ? void 0 : t.key) ?? JSON.stringify(t),
170
+ t
171
+ ])).values());
172
+ return {
173
+ ...aguiMergedState,
174
+ copilotkit: {
175
+ actions: combinedTools,
176
+ context: (agui == null ? void 0 : agui.context) ?? []
177
+ }
178
+ };
179
+ }
180
+ async getSchemaKeys() {
181
+ const CONSTANT_KEYS = [
182
+ "copilotkit"
183
+ ];
184
+ const schemaKeys = await super.getSchemaKeys();
185
+ return {
186
+ config: schemaKeys.config,
187
+ input: schemaKeys.input ? [
188
+ ...schemaKeys.input,
189
+ ...CONSTANT_KEYS
190
+ ] : null,
191
+ output: schemaKeys.output ? [
192
+ ...schemaKeys.output,
193
+ ...CONSTANT_KEYS
194
+ ] : null,
195
+ context: schemaKeys.context ? [
196
+ ...schemaKeys.context,
197
+ ...CONSTANT_KEYS
198
+ ] : null
199
+ };
200
+ }
201
+ };
202
+ __name(LangGraphAgent, "LangGraphAgent");
203
+
204
+ export { CustomEventNames, LangGraphAgent };
205
+ //# sourceMappingURL=out.js.map
206
+ //# sourceMappingURL=langgraph.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/runtime/agent-integrations/langgraph/consts.ts","../src/lib/runtime/agent-integrations/langgraph/agent.ts","../src/agents/langgraph/events.ts"],"names":["CustomEventNames","map","LangGraphEventTypes","MetaEventNames","LangGraphAgent","AGUILangGraphAgent","LangGraphHttpAgent","EventType","constructor","config","clone","dispatchEvent","event","type","CUSTOM","customEvent","name","CopilotKitManuallyEmitMessage","subscriber","next","TEXT_MESSAGE_START","role","messageId","value","message_id","rawEvent","TEXT_MESSAGE_CONTENT","delta","message","TEXT_MESSAGE_END","CopilotKitManuallyEmitToolCall","TOOL_CALL_START","toolCallId","id","toolCallName","parentMessageId","TOOL_CALL_ARGS","args","TOOL_CALL_END","CopilotKitManuallyEmitIntermediateState","activeRun","manuallyEmittedState","STATE_SNAPSHOT","snapshot","getStateSnapshot","values","CopilotKitExit","isMessageEvent","isToolEvent","metadata","run","input","pipe","processedEvent","RAW","eventType","toolCallData","data","chunk","tool_call_chunks","toolCallUsedToPredictState","some","predictStateTool","tool","OnChatModelStream","langGraphDefaultMergeState","state","messages","aguiMergedState","tools","returnedTools","agui","rawCombinedTools","combinedTools","Array","from","Map","t","key","JSON","stringify","copilotkit","actions","context","getSchemaKeys","CONSTANT_KEYS","schemaKeys","output"],"mappings":"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","sourcesContent":["/**\n * Constants for LangGraph integration.\n * This file is separate from langgraph.agent.ts to avoid pulling in @ag-ui/langgraph\n * when only these constants are needed.\n */\n\nimport {\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n} from \"@ag-ui/client\";\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 interface PredictStateTool {\n tool: string;\n state_key: string;\n tool_argument: string;\n}\n","import { map } from \"rxjs\";\nimport { LangGraphEventTypes } from \"../../../../agents/langgraph/events\";\nimport { RawEvent } from \"@ag-ui/core\";\nimport {\n LangGraphAgent as AGUILangGraphAgent,\n LangGraphHttpAgent,\n type LangGraphAgentConfig,\n ProcessedEvents,\n SchemaKeys,\n type State,\n StateEnrichment,\n} from \"@ag-ui/langgraph\";\nimport { Message as LangGraphMessage } from \"@langchain/langgraph-sdk/dist/types.messages\";\nimport { ThreadState } from \"@langchain/langgraph-sdk\";\n\ninterface CopilotKitStateEnrichment {\n copilotkit: {\n actions: StateEnrichment[\"ag-ui\"][\"tools\"];\n context: StateEnrichment[\"ag-ui\"][\"context\"];\n };\n}\n\nimport { RunAgentInput, EventType, CustomEvent } from \"@ag-ui/client\";\n\n// Import and re-export from separate file to maintain API compatibility\nimport { CustomEventNames, TextMessageEvents, ToolCallEvents, PredictStateTool } from \"./consts\";\nexport { CustomEventNames };\n\nexport class LangGraphAgent extends AGUILangGraphAgent {\n constructor(config: LangGraphAgentConfig) {\n super(config);\n }\n\n // @ts-ignore\n public clone() {\n return new LangGraphAgent(this.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({\n values: this.activeRun.manuallyEmittedState,\n } as ThreadState<State>),\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(\n state: State,\n messages: LangGraphMessage[],\n input: RunAgentInput,\n ): State<StateEnrichment & CopilotKitStateEnrichment> {\n const aguiMergedState = super.langGraphDefaultMergeState(state, messages, input);\n const { tools: returnedTools, \"ag-ui\": agui } = aguiMergedState;\n // tolerate undefined and de-duplicate by stable key (id | name | key)\n const rawCombinedTools = [\n ...((returnedTools as any[]) ?? []),\n ...((agui?.tools as any[]) ?? []),\n ];\n const combinedTools = Array.from(\n new Map(\n rawCombinedTools.map((t: any) => [t?.id ?? t?.name ?? t?.key ?? JSON.stringify(t), t]),\n ).values(),\n );\n\n return {\n ...aguiMergedState,\n copilotkit: {\n actions: combinedTools,\n context: agui?.context ?? [],\n },\n };\n }\n\n async getSchemaKeys(): Promise<SchemaKeys> {\n const CONSTANT_KEYS = [\"copilotkit\"];\n const schemaKeys = await super.getSchemaKeys();\n return {\n config: schemaKeys.config,\n input: schemaKeys.input ? [...schemaKeys.input, ...CONSTANT_KEYS] : null,\n output: schemaKeys.output ? [...schemaKeys.output, ...CONSTANT_KEYS] : null,\n context: schemaKeys.context ? [...schemaKeys.context, ...CONSTANT_KEYS] : null,\n };\n }\n}\n\nexport { LangGraphHttpAgent };\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 OnCopilotKitError = \"on_copilotkit_error\",\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\ninterface CopilotKitLangGraphErrorEvent {\n event: LangGraphEventTypes.OnCopilotKitError;\n data: {\n error: {\n message: string;\n type: string;\n agent_name: string;\n status_code?: number;\n response_data?: any;\n };\n thread_id: string;\n agent_name: string;\n node_name: string;\n };\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 | CopilotKitLangGraphErrorEvent;\n"]}
@@ -1 +1,2 @@
1
1
  export * from '@copilotkitnext/runtime';
2
+ export * from '@copilotkitnext/agent';
package/dist/v2/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require('reflect-metadata');
4
4
  var runtime = require('@copilotkitnext/runtime');
5
+ var agent = require('@copilotkitnext/agent');
5
6
 
6
7
 
7
8
 
@@ -11,5 +12,11 @@ Object.keys(runtime).forEach(function (k) {
11
12
  get: function () { return runtime[k]; }
12
13
  });
13
14
  });
15
+ Object.keys(agent).forEach(function (k) {
16
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
17
+ enumerable: true,
18
+ get: function () { return agent[k]; }
19
+ });
20
+ });
14
21
  //# sourceMappingURL=out.js.map
15
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/v2/index.ts"],"names":[],"mappings":";AAAA,OAAO;AACP,cAAc","sourcesContent":["import \"reflect-metadata\";\nexport * from \"@copilotkitnext/runtime\";\n"]}
1
+ {"version":3,"sources":["../../src/v2/index.ts"],"names":[],"mappings":";AAAA,OAAO;AACP,cAAc;AACd,cAAc","sourcesContent":["import \"reflect-metadata\";\nexport * from \"@copilotkitnext/runtime\";\nexport * from \"@copilotkitnext/agent\";\n"]}
package/dist/v2/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import 'reflect-metadata';
2
2
  export * from '@copilotkitnext/runtime';
3
+ export * from '@copilotkitnext/agent';
3
4
  //# sourceMappingURL=out.js.map
4
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/v2/index.ts"],"names":[],"mappings":";AAAA,OAAO;AACP,cAAc","sourcesContent":["import \"reflect-metadata\";\nexport * from \"@copilotkitnext/runtime\";\n"]}
1
+ {"version":3,"sources":["../../src/v2/index.ts"],"names":[],"mappings":";AAAA,OAAO;AACP,cAAc;AACd,cAAc","sourcesContent":["import \"reflect-metadata\";\nexport * from \"@copilotkitnext/runtime\";\nexport * from \"@copilotkitnext/agent\";\n"]}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
- "version": "1.50.0-beta.1",
12
+ "version": "1.50.0-beta.3",
13
13
  "sideEffects": false,
14
14
  "main": "./dist/index.js",
15
15
  "module": "./dist/index.mjs",
@@ -23,6 +23,11 @@
23
23
  "import": "./dist/v2/index.mjs",
24
24
  "require": "./dist/v2/index.js",
25
25
  "types": "./dist/v2/index.d.ts"
26
+ },
27
+ "./langgraph": {
28
+ "import": "./dist/langgraph.mjs",
29
+ "require": "./dist/langgraph.js",
30
+ "types": "./dist/langgraph.d.ts"
26
31
  }
27
32
  },
28
33
  "types": "./dist/index.d.ts",
@@ -41,29 +46,21 @@
41
46
  "tsup": "^6.7.0",
42
47
  "typescript": "^5.2.3",
43
48
  "vitest": "^3.2.4",
44
- "zod-to-json-schema": "^3.23.5",
45
- "eslint-config-custom": "1.4.6",
46
- "tsconfig": "1.4.6"
49
+ "tsconfig": "1.4.6",
50
+ "eslint-config-custom": "1.4.6"
47
51
  },
48
52
  "dependencies": {
49
- "@anthropic-ai/sdk": "^0.57.0",
50
- "@copilotkitnext/agent": "0.0.22",
51
- "@copilotkitnext/runtime": "0.0.22",
53
+ "@copilotkitnext/agent": "0.0.23",
54
+ "@copilotkitnext/runtime": "0.0.23",
52
55
  "@graphql-yoga/plugin-defer-stream": "^3.3.1",
53
- "@langchain/aws": "^0.1.9",
54
- "@langchain/community": "^0.3.29",
56
+ "@hono/node-server": "^1.13.5",
55
57
  "@langchain/core": "^0.3.38",
56
- "@langchain/google-gauth": "^0.1.0",
57
- "@langchain/langgraph-sdk": "^0.0.70",
58
- "@langchain/openai": "^0.4.2",
59
58
  "@scarf/scarf": "^1.3.0",
60
59
  "class-transformer": "^0.5.1",
61
60
  "class-validator": "^0.14.1",
62
61
  "graphql": "^16.8.1",
63
62
  "graphql-scalars": "^1.23.0",
64
63
  "graphql-yoga": "^5.3.1",
65
- "groq-sdk": "^0.5.0",
66
- "@hono/node-server": "^1.13.5",
67
64
  "hono": "^4.10.3",
68
65
  "langchain": "^0.3.3",
69
66
  "openai": "^4.85.1",
@@ -74,14 +71,55 @@
74
71
  "rxjs": "7.8.1",
75
72
  "type-graphql": "2.0.0-rc.1",
76
73
  "zod": "^3.23.3",
77
- "@copilotkit/shared": "1.50.0-beta.1"
74
+ "@copilotkit/shared": "1.50.0-beta.3"
78
75
  },
79
76
  "peerDependencies": {
80
- "@ag-ui/client": ">=0.0.39",
77
+ "@anthropic-ai/sdk": "^0.57.0",
78
+ "@ag-ui/client": "^0.0.41",
81
79
  "@ag-ui/core": ">=0.0.39",
82
80
  "@ag-ui/encoder": ">=0.0.39",
83
81
  "@ag-ui/langgraph": ">=0.0.18",
84
- "@ag-ui/proto": ">=0.0.39"
82
+ "@ag-ui/proto": ">=0.0.39",
83
+ "@langchain/aws": "^0.1.9",
84
+ "@langchain/community": "^0.3.58",
85
+ "@langchain/google-gauth": "^0.1.0",
86
+ "@langchain/langgraph-sdk": "^0.0.70",
87
+ "@langchain/openai": "^0.4.2",
88
+ "groq-sdk": "^0.5.0",
89
+ "langchain": "^0.3.3",
90
+ "openai": "^4.85.1"
91
+ },
92
+ "peerDependenciesMeta": {
93
+ "@anthropic-ai/sdk": {
94
+ "optional": true
95
+ },
96
+ "@ag-ui/langgraph": {
97
+ "optional": true
98
+ },
99
+ "@langchain/aws": {
100
+ "optional": true
101
+ },
102
+ "@langchain/community": {
103
+ "optional": true
104
+ },
105
+ "@langchain/google-gauth": {
106
+ "optional": true
107
+ },
108
+ "@langchain/langgraph-sdk": {
109
+ "optional": true
110
+ },
111
+ "@langchain/openai": {
112
+ "optional": true
113
+ },
114
+ "groq-sdk": {
115
+ "optional": true
116
+ },
117
+ "langchain": {
118
+ "optional": true
119
+ },
120
+ "openai": {
121
+ "optional": true
122
+ }
85
123
  },
86
124
  "keywords": [
87
125
  "copilotkit",
@@ -1,4 +1,4 @@
1
- import { describe, test, expect, vi } from "vitest";
1
+ import { describe, test, expect } from "@jest/globals";
2
2
  import * as gql from "../types/converted/index";
3
3
  import agui from "@copilotkit/shared";
4
4
  import {
@@ -587,7 +587,7 @@ describe("agui-to-gql", () => {
587
587
  });
588
588
 
589
589
  test("should verify render function receives correct props including name", () => {
590
- const mockRender = vi.fn(
590
+ const mockRender = jest.fn(
591
591
  (props) => `Rendered: ${props.name} with args: ${JSON.stringify(props.args)}`,
592
592
  );
593
593
  const aguiMessage: agui.Message = {
@@ -1,4 +1,4 @@
1
- import { describe, test, expect, vi } from "vitest";
1
+ import { describe, test, expect } from "@jest/globals";
2
2
  import * as gql from "../types/converted/index";
3
3
  import { MessageStatusCode } from "../types/message-status.type";
4
4
  import {
@@ -370,7 +370,7 @@ describe("message-conversion", () => {
370
370
  status: { code: MessageStatusCode.Pending },
371
371
  });
372
372
 
373
- const mockRender = vi.fn();
373
+ const mockRender = jest.fn();
374
374
  const mockRenderAndWaitForResponse = (props: any) => "Test Render With Response";
375
375
 
376
376
  const actions = {
@@ -414,7 +414,7 @@ describe("message-conversion", () => {
414
414
  status: { code: MessageStatusCode.Pending },
415
415
  });
416
416
 
417
- const mockRender = vi.fn();
417
+ const mockRender = jest.fn();
418
418
  const actions = {
419
419
  testAction: {
420
420
  name: "testAction",
@@ -445,7 +445,7 @@ describe("message-conversion", () => {
445
445
  status: { code: MessageStatusCode.Success },
446
446
  });
447
447
 
448
- const mockRender = vi.fn();
448
+ const mockRender = jest.fn();
449
449
  const actions = {
450
450
  testAction: {
451
451
  name: "testAction",
@@ -483,7 +483,7 @@ describe("message-conversion", () => {
483
483
  actionName: "testAction",
484
484
  });
485
485
 
486
- const mockRender = vi.fn();
486
+ const mockRender = jest.fn();
487
487
  const actions = {
488
488
  testAction: {
489
489
  name: "testAction",
@@ -517,7 +517,7 @@ describe("message-conversion", () => {
517
517
  status: { code: MessageStatusCode.Pending },
518
518
  });
519
519
 
520
- const mockRender = vi.fn();
520
+ const mockRender = jest.fn();
521
521
  const actions = {
522
522
  testAction: {
523
523
  name: "testAction",
@@ -627,7 +627,7 @@ describe("message-conversion", () => {
627
627
  role: gql.Role.assistant,
628
628
  });
629
629
 
630
- const mockRender = vi.fn();
630
+ const mockRender = jest.fn();
631
631
  const coAgentStateRenders = {
632
632
  testAgent: {
633
633
  name: "testAgent",
@@ -740,7 +740,7 @@ describe("message-conversion", () => {
740
740
  role: gql.Role.assistant,
741
741
  });
742
742
 
743
- const mockRender = vi.fn();
743
+ const mockRender = jest.fn();
744
744
  const coAgentStateRenders = {
745
745
  testAgent: {
746
746
  name: "testAgent",
@@ -853,7 +853,7 @@ describe("message-conversion", () => {
853
853
  const actions = {
854
854
  testAction: {
855
855
  name: "testAction",
856
- render: vi.fn((props) => `Rendered: ${props.args.test}`),
856
+ render: jest.fn((props) => `Rendered: ${props.args.test}`),
857
857
  },
858
858
  };
859
859
 
@@ -889,7 +889,7 @@ describe("message-conversion", () => {
889
889
  const actions = {
890
890
  "*": {
891
891
  name: "*",
892
- render: vi.fn((props) => `Wildcard rendered: ${props.args.test}`),
892
+ render: jest.fn((props) => `Wildcard rendered: ${props.args.test}`),
893
893
  },
894
894
  };
895
895
 
@@ -922,7 +922,7 @@ describe("message-conversion", () => {
922
922
  });
923
923
 
924
924
  test("should pass tool name to wildcard action render function", () => {
925
- const mockRender = vi.fn(
925
+ const mockRender = jest.fn(
926
926
  (props) => `Wildcard rendered: ${props.name} with args: ${JSON.stringify(props.args)}`,
927
927
  );
928
928
  const actions = {
@@ -954,7 +954,9 @@ describe("message-conversion", () => {
954
954
  });
955
955
 
956
956
  test("should pass tool name to regular action render function", () => {
957
- const mockRender = vi.fn((props) => `Regular action rendered: ${JSON.stringify(props.args)}`);
957
+ const mockRender = jest.fn(
958
+ (props) => `Regular action rendered: ${JSON.stringify(props.args)}`,
959
+ );
958
960
  const actions = {
959
961
  testAction: {
960
962
  name: "testAction",
@@ -992,11 +994,11 @@ describe("message-conversion", () => {
992
994
  const actions = {
993
995
  specificAction: {
994
996
  name: "specificAction",
995
- render: vi.fn((props) => "Specific action rendered"),
997
+ render: jest.fn((props) => "Specific action rendered"),
996
998
  },
997
999
  "*": {
998
1000
  name: "*",
999
- render: vi.fn((props) => "Wildcard action rendered"),
1001
+ render: jest.fn((props) => "Wildcard action rendered"),
1000
1002
  },
1001
1003
  };
1002
1004
 
@@ -1032,7 +1034,7 @@ describe("message-conversion", () => {
1032
1034
  const actions = {
1033
1035
  otherAction: {
1034
1036
  name: "otherAction",
1035
- render: vi.fn(),
1037
+ render: jest.fn(),
1036
1038
  },
1037
1039
  };
1038
1040
 
@@ -1095,7 +1097,7 @@ describe("message-conversion", () => {
1095
1097
  const actions = {
1096
1098
  "*": {
1097
1099
  name: "*",
1098
- render: vi.fn((props) => `Result: ${props.result}`),
1100
+ render: jest.fn((props) => `Result: ${props.result}`),
1099
1101
  },
1100
1102
  };
1101
1103
 
@@ -1133,7 +1135,7 @@ describe("message-conversion", () => {
1133
1135
  const actions = {
1134
1136
  "*": {
1135
1137
  name: "*",
1136
- render: vi.fn((props) => `Status: ${props.status}`),
1138
+ render: jest.fn((props) => `Status: ${props.status}`),
1137
1139
  },
1138
1140
  };
1139
1141
 
@@ -1170,7 +1172,7 @@ describe("message-conversion", () => {
1170
1172
  const actions = {
1171
1173
  "*": {
1172
1174
  name: "*",
1173
- render: vi.fn((props) => `Status: ${props.status}`),
1175
+ render: jest.fn((props) => `Status: ${props.status}`),
1174
1176
  },
1175
1177
  };
1176
1178
 
@@ -1207,7 +1209,7 @@ describe("message-conversion", () => {
1207
1209
  const actions = {
1208
1210
  "*": {
1209
1211
  name: "*",
1210
- render: vi.fn((props) => `Status: ${props.status}`),
1212
+ render: jest.fn((props) => `Status: ${props.status}`),
1211
1213
  },
1212
1214
  };
1213
1215
 
@@ -1244,7 +1246,7 @@ describe("message-conversion", () => {
1244
1246
  const actions = {
1245
1247
  "*": {
1246
1248
  name: "*",
1247
- render: vi.fn((props) => `Status: ${props.status}`),
1249
+ render: jest.fn((props) => `Status: ${props.status}`),
1248
1250
  },
1249
1251
  };
1250
1252
 
@@ -1281,7 +1283,7 @@ describe("message-conversion", () => {
1281
1283
  const actions = {
1282
1284
  "*": {
1283
1285
  name: "*",
1284
- render: vi.fn((props) => `Args: ${JSON.stringify(props.args)}`),
1286
+ render: jest.fn((props) => `Args: ${JSON.stringify(props.args)}`),
1285
1287
  },
1286
1288
  };
1287
1289
 
@@ -1317,7 +1319,7 @@ describe("message-conversion", () => {
1317
1319
  const actions = {
1318
1320
  "*": {
1319
1321
  name: "*",
1320
- render: vi.fn((props) => `Args: ${JSON.stringify(props.args)}`),
1322
+ render: jest.fn((props) => `Args: ${JSON.stringify(props.args)}`),
1321
1323
  },
1322
1324
  };
1323
1325
 
@@ -1353,7 +1355,7 @@ describe("message-conversion", () => {
1353
1355
  const actions = {
1354
1356
  "*": {
1355
1357
  name: "*",
1356
- render: vi.fn((props) => `Complex: ${JSON.stringify(props.args)}`),
1358
+ render: jest.fn((props) => `Complex: ${JSON.stringify(props.args)}`),
1357
1359
  },
1358
1360
  };
1359
1361
 
@@ -1401,11 +1403,11 @@ describe("message-conversion", () => {
1401
1403
  const actions = {
1402
1404
  wildcard1: {
1403
1405
  name: "*",
1404
- render: vi.fn((props) => "First wildcard"),
1406
+ render: jest.fn((props) => "First wildcard"),
1405
1407
  },
1406
1408
  wildcard2: {
1407
1409
  name: "*",
1408
- render: vi.fn((props) => "Second wildcard"),
1410
+ render: jest.fn((props) => "Second wildcard"),
1409
1411
  },
1410
1412
  };
1411
1413
 
@@ -1441,7 +1443,7 @@ describe("message-conversion", () => {
1441
1443
  const actions = {
1442
1444
  "*": {
1443
1445
  name: "*",
1444
- render: vi.fn((props) => `Result: ${JSON.stringify(props.result)}`),
1446
+ render: jest.fn((props) => `Result: ${JSON.stringify(props.result)}`),
1445
1447
  },
1446
1448
  };
1447
1449
 
@@ -1478,7 +1480,7 @@ describe("message-conversion", () => {
1478
1480
  const actions = {
1479
1481
  "*": {
1480
1482
  name: "*",
1481
- render: vi.fn((props) => `Result: ${JSON.stringify(props.result)}`),
1483
+ render: jest.fn((props) => `Result: ${JSON.stringify(props.result)}`),
1482
1484
  },
1483
1485
  };
1484
1486
 
@@ -1515,7 +1517,7 @@ describe("message-conversion", () => {
1515
1517
  const actions = {
1516
1518
  "*": {
1517
1519
  name: "*",
1518
- render: vi.fn((props) => `Result: ${JSON.stringify(props.result)}`),
1520
+ render: jest.fn((props) => `Result: ${JSON.stringify(props.result)}`),
1519
1521
  },
1520
1522
  };
1521
1523