@copilotkit/runtime 1.75.2 → 1.77.0

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 (101) hide show
  1. package/dist/agent/converters/aisdk.cjs +21 -9
  2. package/dist/agent/converters/aisdk.cjs.map +1 -1
  3. package/dist/agent/converters/aisdk.d.cts.map +1 -1
  4. package/dist/agent/converters/aisdk.d.mts.map +1 -1
  5. package/dist/agent/converters/aisdk.mjs +21 -10
  6. package/dist/agent/converters/aisdk.mjs.map +1 -1
  7. package/dist/agent/converters/tanstack.cjs +8 -6
  8. package/dist/agent/converters/tanstack.cjs.map +1 -1
  9. package/dist/agent/converters/tanstack.d.cts.map +1 -1
  10. package/dist/agent/converters/tanstack.d.mts.map +1 -1
  11. package/dist/agent/converters/tanstack.mjs +9 -7
  12. package/dist/agent/converters/tanstack.mjs.map +1 -1
  13. package/dist/agent/converters/usage.cjs +8 -2
  14. package/dist/agent/converters/usage.cjs.map +1 -1
  15. package/dist/agent/converters/usage.d.cts +3 -1
  16. package/dist/agent/converters/usage.d.cts.map +1 -1
  17. package/dist/agent/converters/usage.d.mts +3 -1
  18. package/dist/agent/converters/usage.d.mts.map +1 -1
  19. package/dist/agent/converters/usage.mjs +8 -2
  20. package/dist/agent/converters/usage.mjs.map +1 -1
  21. package/dist/agent/index.cjs +127 -34
  22. package/dist/agent/index.cjs.map +1 -1
  23. package/dist/agent/index.d.cts +18 -6
  24. package/dist/agent/index.d.cts.map +1 -1
  25. package/dist/agent/index.d.mts +18 -6
  26. package/dist/agent/index.d.mts.map +1 -1
  27. package/dist/agent/index.mjs +129 -36
  28. package/dist/agent/index.mjs.map +1 -1
  29. package/dist/agent/mcp-tool-names.cjs +84 -0
  30. package/dist/agent/mcp-tool-names.cjs.map +1 -0
  31. package/dist/agent/mcp-tool-names.mjs +81 -0
  32. package/dist/agent/mcp-tool-names.mjs.map +1 -0
  33. package/dist/lib/runtime/copilot-runtime.cjs +20 -9
  34. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  35. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  36. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  37. package/dist/lib/runtime/copilot-runtime.mjs +20 -9
  38. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  39. package/dist/package.cjs +7 -8
  40. package/dist/package.mjs +7 -8
  41. package/dist/v2/runtime/core/fetch-handler.cjs +16 -1
  42. package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -1
  43. package/dist/v2/runtime/core/fetch-handler.d.cts.map +1 -1
  44. package/dist/v2/runtime/core/fetch-handler.d.mts.map +1 -1
  45. package/dist/v2/runtime/core/fetch-handler.mjs +16 -1
  46. package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -1
  47. package/dist/v2/runtime/core/fetch-router.cjs +8 -0
  48. package/dist/v2/runtime/core/fetch-router.cjs.map +1 -1
  49. package/dist/v2/runtime/core/fetch-router.mjs +8 -0
  50. package/dist/v2/runtime/core/fetch-router.mjs.map +1 -1
  51. package/dist/v2/runtime/core/hooks.cjs.map +1 -1
  52. package/dist/v2/runtime/core/hooks.d.cts +3 -0
  53. package/dist/v2/runtime/core/hooks.d.cts.map +1 -1
  54. package/dist/v2/runtime/core/hooks.d.mts +3 -0
  55. package/dist/v2/runtime/core/hooks.d.mts.map +1 -1
  56. package/dist/v2/runtime/core/hooks.mjs.map +1 -1
  57. package/dist/v2/runtime/endpoints/single-route-helpers.cjs +1 -0
  58. package/dist/v2/runtime/endpoints/single-route-helpers.cjs.map +1 -1
  59. package/dist/v2/runtime/endpoints/single-route-helpers.mjs +1 -0
  60. package/dist/v2/runtime/endpoints/single-route-helpers.mjs.map +1 -1
  61. package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs +41 -0
  62. package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs.map +1 -0
  63. package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs +40 -0
  64. package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs.map +1 -0
  65. package/dist/v2/runtime/handlers/intelligence/connect.cjs +1 -0
  66. package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -1
  67. package/dist/v2/runtime/handlers/intelligence/connect.mjs +1 -0
  68. package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -1
  69. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +90 -4
  70. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
  71. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +90 -4
  72. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
  73. package/dist/v2/runtime/intelligence-platform/client.cjs +20 -0
  74. package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
  75. package/dist/v2/runtime/intelligence-platform/client.d.cts +10 -0
  76. package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
  77. package/dist/v2/runtime/intelligence-platform/client.d.mts +10 -0
  78. package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
  79. package/dist/v2/runtime/intelligence-platform/client.mjs +20 -0
  80. package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
  81. package/dist/v2/runtime/intelligence-platform/trajectories.cjs +80 -0
  82. package/dist/v2/runtime/intelligence-platform/trajectories.cjs.map +1 -0
  83. package/dist/v2/runtime/intelligence-platform/trajectories.d.cts +12 -0
  84. package/dist/v2/runtime/intelligence-platform/trajectories.d.cts.map +1 -0
  85. package/dist/v2/runtime/intelligence-platform/trajectories.d.mts +12 -0
  86. package/dist/v2/runtime/intelligence-platform/trajectories.d.mts.map +1 -0
  87. package/dist/v2/runtime/intelligence-platform/trajectories.mjs +76 -0
  88. package/dist/v2/runtime/intelligence-platform/trajectories.mjs.map +1 -0
  89. package/dist/v2/runtime/runner/in-memory.cjs +16 -1
  90. package/dist/v2/runtime/runner/in-memory.cjs.map +1 -1
  91. package/dist/v2/runtime/runner/in-memory.d.cts.map +1 -1
  92. package/dist/v2/runtime/runner/in-memory.d.mts.map +1 -1
  93. package/dist/v2/runtime/runner/in-memory.mjs +16 -1
  94. package/dist/v2/runtime/runner/in-memory.mjs.map +1 -1
  95. package/dist/v2/runtime/runner/intelligence.cjs +5 -2
  96. package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
  97. package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
  98. package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
  99. package/dist/v2/runtime/runner/intelligence.mjs +6 -3
  100. package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
  101. package/package.json +7 -10
@@ -30,6 +30,15 @@ type ModelSpecifier = string | LanguageModel;
30
30
  interface MCPClientConfigHTTP {
31
31
  /** Type of MCP client */
32
32
  type: "http";
33
+ /**
34
+ * Optional name for this server. When a tool name collides with another
35
+ * MCP server's tool or with an app tool, the MCP tool is exposed as
36
+ * `<name>_<tool>`. Without a name, the prefix is `mcp<N>`, where N is the
37
+ * server's position among `mcpClients` and then `mcpServers`, from 1.
38
+ * Give each server a different name: if a prefixed name is already in use,
39
+ * a number is added (`<name>_<tool>_2`).
40
+ */
41
+ name?: string;
33
42
  /** URL of the MCP server */
34
43
  url: string;
35
44
  /**
@@ -46,6 +55,15 @@ interface MCPClientConfigHTTP {
46
55
  interface MCPClientConfigSSE {
47
56
  /** Type of MCP client */
48
57
  type: "sse";
58
+ /**
59
+ * Optional name for this server. When a tool name collides with another
60
+ * MCP server's tool or with an app tool, the MCP tool is exposed as
61
+ * `<name>_<tool>`. Without a name, the prefix is `mcp<N>`, where N is the
62
+ * server's position among `mcpClients` and then `mcpServers`, from 1.
63
+ * Give each server a different name: if a prefixed name is already in use,
64
+ * a number is added (`<name>_<tool>_2`).
65
+ */
66
+ name?: string;
49
67
  /** URL of the MCP server */
50
68
  url: string;
51
69
  /** Optional HTTP headers (e.g., for authentication) */
@@ -67,12 +85,6 @@ interface MCPClientProvider {
67
85
  /** Return tools to be merged into the agent's tool set. */
68
86
  tools(): Promise<ToolSet>;
69
87
  }
70
- /**
71
- * Resolves a model specifier to a LanguageModel instance
72
- * @param spec - Model string (e.g., "openai/gpt-4o") or LanguageModel instance
73
- * @param apiKey - Optional API key to use instead of environment variables
74
- * @returns LanguageModel instance
75
- */
76
88
  declare function resolveModel(spec: ModelSpecifier, apiKey?: string): LanguageModel;
77
89
  /**
78
90
  * Which vendor a model specifier will actually reach, as a closed vocabulary.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/agent/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/agent/index.ts"],"mappings":"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"}
@@ -31,6 +31,15 @@ type ModelSpecifier = string | LanguageModel;
31
31
  interface MCPClientConfigHTTP {
32
32
  /** Type of MCP client */
33
33
  type: "http";
34
+ /**
35
+ * Optional name for this server. When a tool name collides with another
36
+ * MCP server's tool or with an app tool, the MCP tool is exposed as
37
+ * `<name>_<tool>`. Without a name, the prefix is `mcp<N>`, where N is the
38
+ * server's position among `mcpClients` and then `mcpServers`, from 1.
39
+ * Give each server a different name: if a prefixed name is already in use,
40
+ * a number is added (`<name>_<tool>_2`).
41
+ */
42
+ name?: string;
34
43
  /** URL of the MCP server */
35
44
  url: string;
36
45
  /**
@@ -47,6 +56,15 @@ interface MCPClientConfigHTTP {
47
56
  interface MCPClientConfigSSE {
48
57
  /** Type of MCP client */
49
58
  type: "sse";
59
+ /**
60
+ * Optional name for this server. When a tool name collides with another
61
+ * MCP server's tool or with an app tool, the MCP tool is exposed as
62
+ * `<name>_<tool>`. Without a name, the prefix is `mcp<N>`, where N is the
63
+ * server's position among `mcpClients` and then `mcpServers`, from 1.
64
+ * Give each server a different name: if a prefixed name is already in use,
65
+ * a number is added (`<name>_<tool>_2`).
66
+ */
67
+ name?: string;
50
68
  /** URL of the MCP server */
51
69
  url: string;
52
70
  /** Optional HTTP headers (e.g., for authentication) */
@@ -68,12 +86,6 @@ interface MCPClientProvider {
68
86
  /** Return tools to be merged into the agent's tool set. */
69
87
  tools(): Promise<ToolSet>;
70
88
  }
71
- /**
72
- * Resolves a model specifier to a LanguageModel instance
73
- * @param spec - Model string (e.g., "openai/gpt-4o") or LanguageModel instance
74
- * @param apiKey - Optional API key to use instead of environment variables
75
- * @returns LanguageModel instance
76
- */
77
89
  declare function resolveModel(spec: ModelSpecifier, apiKey?: string): LanguageModel;
78
90
  /**
79
91
  * Which vendor a model specifier will actually reach, as a closed vocabulary.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/agent/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/agent/index.ts"],"mappings":"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"}
@@ -1,15 +1,16 @@
1
1
  import "reflect-metadata";
2
2
  import { createStateEventNormalizer } from "./state-delta.mjs";
3
3
  import { collectStandardRunFinishedDetails, getNonEmptyString, isRecord } from "./converters/usage.mjs";
4
- import { convertAISDKStream, formatToolError, getAISDKRunFinishedDetails } from "./converters/aisdk.mjs";
4
+ import { convertAISDKStream, formatToolError, getAISDKRunFinishedDetails, resolveStreamPartMessageId } from "./converters/aisdk.mjs";
5
5
  import { convertInputToTanStackAI, convertTanStackStream } from "./converters/tanstack.mjs";
6
6
  import { SkillRegistry } from "../v2/runtime/intelligence-platform/skill-registry/registry.mjs";
7
7
  import { assertNoSkillToolConflicts, prepareLearnedSkills } from "./learned-skills.mjs";
8
+ import { mergeMCPTools, toToolNamePrefix } from "./mcp-tool-names.mjs";
8
9
  import { createOpenAI } from "@ai-sdk/openai";
9
10
  import { classifyModelHost, randomUUID, safeParseToolArgs, schemaToJsonSchema } from "@copilotkit/shared";
10
11
  import { createGoogleGenerativeAI } from "@ai-sdk/google";
11
12
  import { Observable } from "rxjs";
12
- import { AbstractAgent, EventType } from "@ag-ui/client";
13
+ import { AbstractAgent, EventType, PROTOCOL_VERSION } from "@ag-ui/client";
13
14
  import { RENDER_A2UI_TOOL } from "@ag-ui/a2ui-middleware";
14
15
  import { Validator } from "@cfworker/json-schema";
15
16
  import { jsonSchema, stepCountIs, streamText, tool } from "ai";
@@ -26,6 +27,64 @@ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/
26
27
  * @param apiKey - Optional API key to use instead of environment variables
27
28
  * @returns LanguageModel instance
28
29
  */
30
+ /**
31
+ * An AG-UI tool result as the AI SDK's tool result output.
32
+ *
33
+ * Providers hold one response per tool call, and the Google adapter emits one
34
+ * functionResponse per text entry of a content list, so all of a result's text
35
+ * is collected into a single entry: text parts run together, and a
36
+ * URL-referenced part contributes the URL it carries on a line of its own —
37
+ * the bytes are not here to hand over, and the reference is the content the
38
+ * tool actually returned. A result with no inline media is that text alone.
39
+ * One with inline media is a content list: the text entry first, when there is
40
+ * any, then each media part with its bytes and media type. A media-only result
41
+ * is media alone: a placeholder text would be content the tool never returned.
42
+ * Which adapters can place media inside a tool response is theirs to decide.
43
+ * A provider file handle (`file` source) is neither bytes nor a URL, and this
44
+ * path cannot hand it to the provider, so the part is dropped with a warning.
45
+ * A result whose parts were all dropped is the empty string, as AG-UI 1.0
46
+ * requires: the call must still be answered.
47
+ */
48
+ function warnDroppedFileSource(what) {
49
+ console.warn(`[CopilotKit] Dropping a ${what} that references a provider file handle: it is not a URL or inline data, so it cannot be sent to the model here.`);
50
+ }
51
+ function toolResultOutput(content) {
52
+ if (typeof content === "string") return {
53
+ type: "text",
54
+ value: content
55
+ };
56
+ const segments = [];
57
+ const media = [];
58
+ let open = false;
59
+ for (const part of content) if (part.type === "text") {
60
+ if (open) segments[segments.length - 1] += part.text;
61
+ else segments.push(part.text);
62
+ open = true;
63
+ } else if (part.source.type === "file") warnDroppedFileSource(`${part.type} part in a tool result`);
64
+ else if (part.source.type === "url") {
65
+ segments.push(part.source.value);
66
+ open = false;
67
+ } else {
68
+ media.push({
69
+ type: "media",
70
+ data: part.source.value,
71
+ mediaType: part.source.mimeType
72
+ });
73
+ open = false;
74
+ }
75
+ const text = segments.join("\n");
76
+ if (media.length === 0) return {
77
+ type: "text",
78
+ value: text
79
+ };
80
+ return {
81
+ type: "content",
82
+ value: [...text.length > 0 ? [{
83
+ type: "text",
84
+ text
85
+ }] : [], ...media]
86
+ };
87
+ }
29
88
  function resolveModel(spec, apiKey) {
30
89
  if (typeof spec !== "string") return spec;
31
90
  const parts = spec.replace("/", ":").trim().split(":");
@@ -150,6 +209,7 @@ function convertUserMessageContent(content) {
150
209
  image: source.value,
151
210
  mediaType: source.mimeType
152
211
  });
212
+ else if (source.type === "file") warnDroppedFileSource("image part");
153
213
  else if (source.type === "url") try {
154
214
  parts.push({
155
215
  type: "image",
@@ -171,6 +231,7 @@ function convertUserMessageContent(content) {
171
231
  data: source.value,
172
232
  mediaType: source.mimeType
173
233
  });
234
+ else if (source.type === "file") warnDroppedFileSource(`${part.type} part`);
174
235
  else if (source.type === "url") try {
175
236
  parts.push({
176
237
  type: "file",
@@ -276,10 +337,7 @@ function convertMessagesToVercelAISDKMessages(messages, options = {}) {
276
337
  type: "tool-result",
277
338
  toolCallId: message.toolCallId,
278
339
  toolName,
279
- output: {
280
- type: "text",
281
- value: message.content
282
- }
340
+ output: toolResultOutput(message.content)
283
341
  }]
284
342
  };
285
343
  result.push(toolMsg);
@@ -457,7 +515,8 @@ var BuiltInAgent = class BuiltInAgent extends AbstractAgent {
457
515
  const startEvent = {
458
516
  type: EventType.RUN_STARTED,
459
517
  threadId: input.threadId,
460
- runId: input.runId
518
+ runId: input.runId,
519
+ protocolVersion: PROTOCOL_VERSION
461
520
  };
462
521
  subscriber.next(startEvent);
463
522
  const model = resolveModel(config.model, config.apiKey);
@@ -626,16 +685,19 @@ This is state from the application that you can edit by calling AGUISendStateSna
626
685
  }
627
686
  })
628
687
  };
629
- if (config.mcpClients && config.mcpClients.length > 0) for (const client of config.mcpClients) {
688
+ const mcpToolSources = [];
689
+ const userMcpClients = config.mcpClients ?? [];
690
+ for (const [index, client] of userMcpClients.entries()) {
630
691
  const mcpTools = await client.tools();
631
692
  abortController.signal.throwIfAborted();
632
- streamTextParams.tools = {
633
- ...streamTextParams.tools,
634
- ...mcpTools
635
- };
693
+ mcpToolSources.push({
694
+ label: `mcp${index + 1}`,
695
+ tools: mcpTools
696
+ });
636
697
  }
637
698
  const allMcpServers = [...config.mcpServers ?? []];
638
- if (allMcpServers.length > 0) for (const serverConfig of allMcpServers) {
699
+ if (allMcpServers.length > 0) for (const [index, serverConfig] of allMcpServers.entries()) {
700
+ const label = serverConfig.name ? toToolNamePrefix(serverConfig.name) : `mcp${userMcpClients.length + index + 1}`;
639
701
  let transport;
640
702
  if (serverConfig.type === "http") transport = new StreamableHTTPClientTransport(new URL(serverConfig.url), serverConfig.options);
641
703
  else if (serverConfig.type === "sse") {
@@ -660,16 +722,17 @@ This is state from the application that you can edit by calling AGUISendStateSna
660
722
  try {
661
723
  const mcpTools = await mcpClient.tools();
662
724
  abortController.signal.throwIfAborted();
663
- streamTextParams.tools = {
664
- ...streamTextParams.tools,
665
- ...mcpTools
666
- };
725
+ mcpToolSources.push({
726
+ label,
727
+ tools: mcpTools
728
+ });
667
729
  } catch (err) {
668
730
  abortController.signal.throwIfAborted();
669
731
  console.error(`[CopilotKit] MCP server ${serverConfig.url} tools() failed — skipping its tools for this run:`, err);
670
732
  }
671
733
  }
672
734
  }
735
+ if (mcpToolSources.length > 0) streamTextParams.tools = mergeMCPTools(streamTextParams.tools ?? {}, mcpToolSources);
673
736
  if (this.skillRegistry) {
674
737
  assertNoSkillToolConflicts(streamTextParams.tools ?? {});
675
738
  streamTextParams.tools = {
@@ -710,7 +773,8 @@ This is state from the application that you can edit by calling AGUISendStateSna
710
773
  const abortEndEvent = {
711
774
  type: EventType.RUN_FINISHED,
712
775
  threadId: input.threadId,
713
- runId: input.runId
776
+ runId: input.runId,
777
+ ...input.protocolVersion !== void 0 ? { outcome: { type: "cancelled" } } : {}
714
778
  };
715
779
  subscriber.next(abortEndEvent);
716
780
  terminalEventEmitted = true;
@@ -718,8 +782,7 @@ This is state from the application that you can edit by calling AGUISendStateSna
718
782
  break;
719
783
  }
720
784
  case "reasoning-start": {
721
- const providedId = "id" in part ? part.id : void 0;
722
- reasoningMessageId = !providedId || providedId === "0" || /^(txt|reasoning|msg)-0$/.test(providedId) ? randomUUID() : providedId;
785
+ reasoningMessageId = resolveStreamPartMessageId("id" in part ? part.id : void 0);
723
786
  const reasoningStartEvent = {
724
787
  type: EventType.REASONING_START,
725
788
  messageId: reasoningMessageId
@@ -775,11 +838,9 @@ This is state from the application that you can edit by calling AGUISendStateSna
775
838
  break;
776
839
  }
777
840
  case "tool-input-end": break;
778
- case "text-start": {
779
- const providedId = "id" in part ? part.id : void 0;
780
- messageId = !providedId || providedId === "0" || /^(txt|reasoning|msg)-0$/.test(providedId) ? randomUUID() : providedId;
841
+ case "text-start":
842
+ messageId = resolveStreamPartMessageId("id" in part ? part.id : void 0);
781
843
  break;
782
- }
783
844
  case "text-delta": {
784
845
  const textDelta = "text" in part ? part.text : "";
785
846
  const textEvent = {
@@ -1010,7 +1071,8 @@ This is state from the application that you can edit by calling AGUISendStateSna
1010
1071
  const startEvent = {
1011
1072
  type: EventType.RUN_STARTED,
1012
1073
  threadId: input.threadId,
1013
- runId: input.runId
1074
+ runId: input.runId,
1075
+ protocolVersion: PROTOCOL_VERSION
1014
1076
  };
1015
1077
  subscriber.next(startEvent);
1016
1078
  const ctx = {
@@ -1025,20 +1087,47 @@ This is state from the application that you can edit by calling AGUISendStateSna
1025
1087
  throw new InterruptSignal(interrupts);
1026
1088
  }
1027
1089
  };
1028
- const answeredToolCallIds = new Set(input.messages.filter((m) => m.role === "tool").map((m) => m.toolCallId).filter((id) => typeof id === "string"));
1029
- const resumeToolMessages = (input.resume ?? []).filter((entry) => !answeredToolCallIds.has(entry.interruptId)).map((entry) => ({
1030
- id: randomUUID(),
1031
- role: "tool",
1032
- toolCallId: entry.interruptId,
1033
- content: JSON.stringify(entry.status === "cancelled" ? { status: "cancelled" } : entry.payload ?? { status: "resolved" })
1034
- }));
1035
- const factoryInput = resumeToolMessages.length > 0 && config.type !== "custom" ? {
1036
- ...input,
1037
- messages: [...input.messages, ...resumeToolMessages]
1038
- } : input;
1039
1090
  (async () => {
1040
1091
  const runFinishedDetails = {};
1041
1092
  try {
1093
+ const toolCallIds = new Set(input.messages.flatMap((message) => message.role === "assistant" ? (message.toolCalls ?? []).map((call) => call.id) : []));
1094
+ const answeredToolMessages = input.messages.filter((message) => message.role === "tool");
1095
+ const answeredToolCallIds = new Set(answeredToolMessages.map((message) => message.toolCallId));
1096
+ const nativeResume = config.type === "custom" ? [] : input.resume ?? [];
1097
+ const resumeToolMessages = [];
1098
+ const decisionsByCall = /* @__PURE__ */ new Map();
1099
+ for (const entry of nativeResume) {
1100
+ if (!toolCallIds.has(entry.interruptId)) continue;
1101
+ const content = JSON.stringify(entry.status === "cancelled" ? { status: "cancelled" } : entry.payload ?? { status: "resolved" });
1102
+ if (decisionsByCall.has(entry.interruptId)) {
1103
+ if (decisionsByCall.get(entry.interruptId) !== content) throw new Error(`Conflicting decisions for resumed tool call ${entry.interruptId}`);
1104
+ continue;
1105
+ }
1106
+ decisionsByCall.set(entry.interruptId, content);
1107
+ if (answeredToolCallIds.has(entry.interruptId)) continue;
1108
+ resumeToolMessages.push({
1109
+ id: randomUUID(),
1110
+ role: "tool",
1111
+ toolCallId: entry.interruptId,
1112
+ content
1113
+ });
1114
+ }
1115
+ const resumedIds = new Set(nativeResume.map((entry) => entry.interruptId));
1116
+ const resumedResults = new Map([...answeredToolMessages, ...resumeToolMessages].filter((message) => resumedIds.has(message.toolCallId)).map((message) => [message.toolCallId, message.content]));
1117
+ for (const message of resumeToolMessages) {
1118
+ const event = {
1119
+ type: EventType.TOOL_CALL_RESULT,
1120
+ messageId: message.id,
1121
+ toolCallId: message.toolCallId,
1122
+ role: "tool",
1123
+ content: message.content
1124
+ };
1125
+ subscriber.next(event);
1126
+ }
1127
+ const factoryInput = resumeToolMessages.length > 0 && config.type !== "custom" ? {
1128
+ ...input,
1129
+ messages: [...input.messages, ...resumeToolMessages]
1130
+ } : input;
1042
1131
  const learnedSkills = await prepareLearnedSkills(this.skillRegistry, controller.signal);
1043
1132
  controller.signal.throwIfAborted();
1044
1133
  const factoryCtx = {
@@ -1065,6 +1154,10 @@ This is state from the application that you can edit by calling AGUISendStateSna
1065
1154
  }
1066
1155
  }
1067
1156
  for await (const event of events) {
1157
+ if (event.type === EventType.TOOL_CALL_RESULT && "toolCallId" in event && typeof event.toolCallId === "string" && "content" in event && resumedResults.has(event.toolCallId)) {
1158
+ if (resumedResults.get(event.toolCallId) !== event.content) throw new Error(`Conflicting result for resumed tool call ${event.toolCallId}`);
1159
+ continue;
1160
+ }
1068
1161
  if (config.type === "custom" && event.type === EventType.RUN_FINISHED) {
1069
1162
  customRunFinishedEvent = event;
1070
1163
  collectStandardRunFinishedDetails(event, runFinishedDetails);