@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.
- package/dist/agent/converters/aisdk.cjs +21 -9
- package/dist/agent/converters/aisdk.cjs.map +1 -1
- package/dist/agent/converters/aisdk.d.cts.map +1 -1
- package/dist/agent/converters/aisdk.d.mts.map +1 -1
- package/dist/agent/converters/aisdk.mjs +21 -10
- package/dist/agent/converters/aisdk.mjs.map +1 -1
- package/dist/agent/converters/tanstack.cjs +8 -6
- package/dist/agent/converters/tanstack.cjs.map +1 -1
- package/dist/agent/converters/tanstack.d.cts.map +1 -1
- package/dist/agent/converters/tanstack.d.mts.map +1 -1
- package/dist/agent/converters/tanstack.mjs +9 -7
- package/dist/agent/converters/tanstack.mjs.map +1 -1
- package/dist/agent/converters/usage.cjs +8 -2
- package/dist/agent/converters/usage.cjs.map +1 -1
- package/dist/agent/converters/usage.d.cts +3 -1
- package/dist/agent/converters/usage.d.cts.map +1 -1
- package/dist/agent/converters/usage.d.mts +3 -1
- package/dist/agent/converters/usage.d.mts.map +1 -1
- package/dist/agent/converters/usage.mjs +8 -2
- package/dist/agent/converters/usage.mjs.map +1 -1
- package/dist/agent/index.cjs +127 -34
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +18 -6
- package/dist/agent/index.d.cts.map +1 -1
- package/dist/agent/index.d.mts +18 -6
- package/dist/agent/index.d.mts.map +1 -1
- package/dist/agent/index.mjs +129 -36
- package/dist/agent/index.mjs.map +1 -1
- package/dist/agent/mcp-tool-names.cjs +84 -0
- package/dist/agent/mcp-tool-names.cjs.map +1 -0
- package/dist/agent/mcp-tool-names.mjs +81 -0
- package/dist/agent/mcp-tool-names.mjs.map +1 -0
- package/dist/lib/runtime/copilot-runtime.cjs +20 -9
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +20 -9
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +7 -8
- package/dist/package.mjs +7 -8
- package/dist/v2/runtime/core/fetch-handler.cjs +16 -1
- package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.d.cts.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.d.mts.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.mjs +16 -1
- package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -1
- package/dist/v2/runtime/core/fetch-router.cjs +8 -0
- package/dist/v2/runtime/core/fetch-router.cjs.map +1 -1
- package/dist/v2/runtime/core/fetch-router.mjs +8 -0
- package/dist/v2/runtime/core/fetch-router.mjs.map +1 -1
- package/dist/v2/runtime/core/hooks.cjs.map +1 -1
- package/dist/v2/runtime/core/hooks.d.cts +3 -0
- package/dist/v2/runtime/core/hooks.d.cts.map +1 -1
- package/dist/v2/runtime/core/hooks.d.mts +3 -0
- package/dist/v2/runtime/core/hooks.d.mts.map +1 -1
- package/dist/v2/runtime/core/hooks.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/single-route-helpers.cjs +1 -0
- package/dist/v2/runtime/endpoints/single-route-helpers.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/single-route-helpers.mjs +1 -0
- package/dist/v2/runtime/endpoints/single-route-helpers.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs +41 -0
- package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs +40 -0
- package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/connect.cjs +1 -0
- package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.mjs +1 -0
- package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +90 -4
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +90 -4
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.cjs +20 -0
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts +10 -0
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts +10 -0
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +20 -0
- package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/trajectories.cjs +80 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.d.cts +12 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.d.mts +12 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.mjs +76 -0
- package/dist/v2/runtime/intelligence-platform/trajectories.mjs.map +1 -0
- package/dist/v2/runtime/runner/in-memory.cjs +16 -1
- package/dist/v2/runtime/runner/in-memory.cjs.map +1 -1
- package/dist/v2/runtime/runner/in-memory.d.cts.map +1 -1
- package/dist/v2/runtime/runner/in-memory.d.mts.map +1 -1
- package/dist/v2/runtime/runner/in-memory.mjs +16 -1
- package/dist/v2/runtime/runner/in-memory.mjs.map +1 -1
- package/dist/v2/runtime/runner/intelligence.cjs +5 -2
- package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.mjs +6 -3
- package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
- package/package.json +7 -10
package/dist/agent/index.d.cts
CHANGED
|
@@ -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":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/agent/index.ts"],"mappings":"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"}
|
package/dist/agent/index.d.mts
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/agent/index.ts"],"mappings":"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"}
|
package/dist/agent/index.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
633
|
-
|
|
634
|
-
|
|
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
|
-
|
|
664
|
-
|
|
665
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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);
|