@strands-agents/sdk 1.0.0-rc.5 → 1.0.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/LICENSE +175 -0
- package/README.md +340 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +6 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +3 -1
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-plugin.js +3 -1
- package/dist/src/__fixtures__/mock-plugin.js.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +3 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +3 -1
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/mcp.test.js +222 -2
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/a2a/__tests__/events.test.js +2 -0
- package/dist/src/a2a/__tests__/events.test.js.map +1 -1
- package/dist/src/a2a/__tests__/executor.test.js +16 -5
- package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
- package/dist/src/a2a/a2a-agent.d.ts +8 -3
- package/dist/src/a2a/a2a-agent.d.ts.map +1 -1
- package/dist/src/a2a/a2a-agent.js +12 -6
- package/dist/src/a2a/a2a-agent.js.map +1 -1
- package/dist/src/a2a/executor.d.ts +13 -0
- package/dist/src/a2a/executor.d.ts.map +1 -1
- package/dist/src/a2a/executor.js +19 -1
- package/dist/src/a2a/executor.js.map +1 -1
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js +23 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.cancel.test.js +1 -1
- package/dist/src/agent/__tests__/agent.cancel.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.js +488 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.js +174 -12
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.js +219 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js +169 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +99 -2
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.js +39 -0
- package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.js +5 -4
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
- package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
- package/dist/src/agent/agent-as-tool.js +4 -2
- package/dist/src/agent/agent-as-tool.js.map +1 -1
- package/dist/src/agent/agent.d.ts +75 -1
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +323 -83
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +2 -2
- package/dist/src/agent/snapshot.d.ts.map +1 -1
- package/dist/src/agent/snapshot.js +8 -2
- package/dist/src/agent/snapshot.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +4 -4
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +2 -2
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +8 -3
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +1 -0
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/errors.d.ts +11 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +12 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +177 -70
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/__tests__/registry.test.js +16 -16
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +95 -25
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +98 -23
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/index.d.ts +5 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/__tests__/warn-once.test.d.ts +2 -0
- package/dist/src/logging/__tests__/warn-once.test.d.ts.map +1 -0
- package/dist/src/logging/__tests__/warn-once.test.js +30 -0
- package/dist/src/logging/__tests__/warn-once.test.js.map +1 -0
- package/dist/src/logging/warn-once.d.ts +13 -0
- package/dist/src/logging/warn-once.d.ts.map +1 -0
- package/dist/src/logging/warn-once.js +18 -0
- package/dist/src/logging/warn-once.js.map +1 -0
- package/dist/src/mcp.d.ts +20 -1
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +10 -1
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/mime.d.ts +2 -1
- package/dist/src/mime.d.ts.map +1 -1
- package/dist/src/mime.js +1 -0
- package/dist/src/mime.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +92 -3
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +113 -2
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/google.test.js +77 -0
- package/dist/src/models/__tests__/google.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +149 -1
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/anthropic.d.ts +12 -1
- package/dist/src/models/anthropic.d.ts.map +1 -1
- package/dist/src/models/anthropic.js +38 -6
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts +12 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +45 -11
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/defaults.d.ts +37 -0
- package/dist/src/models/defaults.d.ts.map +1 -0
- package/dist/src/models/defaults.js +41 -0
- package/dist/src/models/defaults.js.map +1 -0
- package/dist/src/models/google/model.d.ts +14 -1
- package/dist/src/models/google/model.d.ts.map +1 -1
- package/dist/src/models/google/model.js +50 -6
- package/dist/src/models/google/model.js.map +1 -1
- package/dist/src/models/model.d.ts +50 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +120 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/__tests__/chat.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/chat.test.d.ts.map +1 -0
- package/dist/src/models/{__tests__/openai.test.js → openai/__tests__/chat.test.js} +72 -7
- package/dist/src/models/openai/__tests__/chat.test.js.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/responses.test.d.ts.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.js +668 -0
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -0
- package/dist/src/models/openai/chat-adapter.d.ts +33 -0
- package/dist/src/models/openai/chat-adapter.d.ts.map +1 -0
- package/dist/src/models/openai/chat-adapter.js +383 -0
- package/dist/src/models/openai/chat-adapter.js.map +1 -0
- package/dist/src/models/openai/errors.d.ts +16 -0
- package/dist/src/models/openai/errors.d.ts.map +1 -0
- package/dist/src/models/openai/errors.js +40 -0
- package/dist/src/models/openai/errors.js.map +1 -0
- package/dist/src/models/openai/formatting.d.ts +18 -0
- package/dist/src/models/openai/formatting.d.ts.map +1 -0
- package/dist/src/models/openai/formatting.js +38 -0
- package/dist/src/models/openai/formatting.js.map +1 -0
- package/dist/src/models/openai/index.d.ts +19 -0
- package/dist/src/models/openai/index.d.ts.map +1 -0
- package/dist/src/models/openai/index.js +18 -0
- package/dist/src/models/openai/index.js.map +1 -0
- package/dist/src/models/openai/model.d.ts +77 -0
- package/dist/src/models/openai/model.d.ts.map +1 -0
- package/dist/src/models/openai/model.js +211 -0
- package/dist/src/models/openai/model.js.map +1 -0
- package/dist/src/models/openai/responses-adapter.d.ts +78 -0
- package/dist/src/models/openai/responses-adapter.d.ts.map +1 -0
- package/dist/src/models/openai/responses-adapter.js +467 -0
- package/dist/src/models/openai/responses-adapter.js.map +1 -0
- package/dist/src/models/openai/types.d.ts +131 -0
- package/dist/src/models/openai/types.d.ts.map +1 -0
- package/dist/src/models/openai/types.js +5 -0
- package/dist/src/models/openai/types.js.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +122 -28
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js +95 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +5 -2
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js +56 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +19 -1
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +18 -0
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +5 -3
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +22 -15
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/multiagent/index.d.ts +1 -1
- package/dist/src/multiagent/index.d.ts.map +1 -1
- package/dist/src/multiagent/multiagent.d.ts +16 -3
- package/dist/src/multiagent/multiagent.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +10 -3
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +28 -6
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +5 -3
- package/dist/src/multiagent/swarm.d.ts.map +1 -1
- package/dist/src/multiagent/swarm.js +22 -16
- package/dist/src/multiagent/swarm.js.map +1 -1
- package/dist/src/plugins/__tests__/registry.test.js +1 -1
- package/dist/src/plugins/__tests__/registry.test.js.map +1 -1
- package/dist/src/plugins/model-plugin.d.ts +20 -0
- package/dist/src/plugins/model-plugin.d.ts.map +1 -0
- package/dist/src/plugins/model-plugin.js +29 -0
- package/dist/src/plugins/model-plugin.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +13 -11
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
- package/dist/src/session/session-manager.d.ts.map +1 -1
- package/dist/src/session/session-manager.js +9 -0
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/telemetry/__tests__/meter.test.js +23 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
- package/dist/src/telemetry/meter.d.ts +15 -0
- package/dist/src/telemetry/meter.d.ts.map +1 -1
- package/dist/src/telemetry/meter.js +14 -0
- package/dist/src/telemetry/meter.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +24 -3
- package/dist/src/tools/mcp-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-tool.js +103 -31
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/tool.d.ts +11 -1
- package/dist/src/tools/tool.d.ts.map +1 -1
- package/dist/src/tools/tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +48 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +55 -6
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +22 -6
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/elicitation.d.ts +15 -0
- package/dist/src/types/elicitation.d.ts.map +1 -0
- package/dist/src/types/elicitation.js +2 -0
- package/dist/src/types/elicitation.js.map +1 -0
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +9 -5
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +1 -0
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +1 -0
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +1 -0
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/package.json +9 -5
- package/dist/src/models/__tests__/openai.test.d.ts +0 -2
- package/dist/src/models/__tests__/openai.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/openai.test.js.map +0 -1
- package/dist/src/models/openai.d.ts +0 -312
- package/dist/src/models/openai.d.ts.map +0 -1
- package/dist/src/models/openai.js +0 -789
- package/dist/src/models/openai.js.map +0 -1
|
@@ -56,6 +56,12 @@ export class AgentMetrics {
|
|
|
56
56
|
* Returns `undefined` when no invocations have occurred.
|
|
57
57
|
*/
|
|
58
58
|
latestContextSize;
|
|
59
|
+
/**
|
|
60
|
+
* Projected context size for the next model call (inputTokens + outputTokens from the last call).
|
|
61
|
+
* Represents the baseline token count the next invocation will start with.
|
|
62
|
+
* Returns `undefined` when no invocations have occurred.
|
|
63
|
+
*/
|
|
64
|
+
projectedContextSize;
|
|
59
65
|
constructor(data) {
|
|
60
66
|
this.cycleCount = data?.cycleCount ?? 0;
|
|
61
67
|
this.accumulatedUsage = data?.accumulatedUsage ?? createEmptyUsage();
|
|
@@ -63,6 +69,7 @@ export class AgentMetrics {
|
|
|
63
69
|
this.agentInvocations = data?.agentInvocations ?? [];
|
|
64
70
|
this.toolMetrics = data?.toolMetrics ?? {};
|
|
65
71
|
this.latestContextSize = data?.latestContextSize;
|
|
72
|
+
this.projectedContextSize = data?.projectedContextSize;
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
75
|
* The most recent agent invocation, or undefined if none exist.
|
|
@@ -117,6 +124,7 @@ export class AgentMetrics {
|
|
|
117
124
|
agentInvocations: this.agentInvocations,
|
|
118
125
|
toolMetrics: this.toolMetrics,
|
|
119
126
|
...(this.latestContextSize !== undefined && { latestContextSize: this.latestContextSize }),
|
|
127
|
+
...(this.projectedContextSize !== undefined && { projectedContextSize: this.projectedContextSize }),
|
|
120
128
|
};
|
|
121
129
|
}
|
|
122
130
|
}
|
|
@@ -156,6 +164,10 @@ export class Meter {
|
|
|
156
164
|
* The most recent input token count from the last model invocation.
|
|
157
165
|
*/
|
|
158
166
|
_latestContextSize;
|
|
167
|
+
/**
|
|
168
|
+
* Projected context size for the next model call (inputTokens + outputTokens).
|
|
169
|
+
*/
|
|
170
|
+
_projectedContextSize;
|
|
159
171
|
// OTEL instruments (no-op when no MeterProvider is registered)
|
|
160
172
|
_otelMeter;
|
|
161
173
|
_otelCycleCounter;
|
|
@@ -303,6 +315,7 @@ export class Meter {
|
|
|
303
315
|
agentInvocations: this._agentInvocations,
|
|
304
316
|
toolMetrics: this._toolMetrics,
|
|
305
317
|
...(this._latestContextSize !== undefined && { latestContextSize: this._latestContextSize }),
|
|
318
|
+
...(this._projectedContextSize !== undefined && { projectedContextSize: this._projectedContextSize }),
|
|
306
319
|
});
|
|
307
320
|
}
|
|
308
321
|
/**
|
|
@@ -336,6 +349,7 @@ export class Meter {
|
|
|
336
349
|
_updateUsage(usage) {
|
|
337
350
|
accumulateUsage(this._accumulatedUsage, usage);
|
|
338
351
|
this._latestContextSize = usage.inputTokens;
|
|
352
|
+
this._projectedContextSize = usage.inputTokens + usage.outputTokens;
|
|
339
353
|
this._otelInputTokens.add(usage.inputTokens);
|
|
340
354
|
this._otelOutputTokens.add(usage.outputTokens);
|
|
341
355
|
const latestInvocation = this._latestAgentInvocation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meter.js","sourceRoot":"","sources":["../../../src/telemetry/meter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAG1E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"meter.js","sourceRoot":"","sources":["../../../src/telemetry/meter.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,15 +22,36 @@ export declare class McpTool extends Tool {
|
|
|
22
22
|
private readonly mcpClient;
|
|
23
23
|
constructor(config: McpToolConfig);
|
|
24
24
|
stream(toolContext: ToolContext): ToolStreamGenerator;
|
|
25
|
+
/**
|
|
26
|
+
* Maps a single MCP content item to an SDK ToolResultContent block.
|
|
27
|
+
*
|
|
28
|
+
* @param item - MCP content item from tool result
|
|
29
|
+
* @returns Mapped content block
|
|
30
|
+
*/
|
|
31
|
+
private _mapMcpContent;
|
|
32
|
+
/**
|
|
33
|
+
* Maps an MCP image content item to an ImageBlock.
|
|
34
|
+
*
|
|
35
|
+
* @param record - MCP image content with data (base64) and mimeType
|
|
36
|
+
* @returns ImageBlock or TextBlock fallback if format is unsupported
|
|
37
|
+
*/
|
|
38
|
+
private _mapMcpImageContent;
|
|
39
|
+
/**
|
|
40
|
+
* Maps an MCP embedded resource to an SDK content block.
|
|
41
|
+
* Text resources become TextBlock, blob resources with image MIME types become ImageBlock.
|
|
42
|
+
*
|
|
43
|
+
* @param record - MCP embedded resource content
|
|
44
|
+
* @returns Mapped content block or undefined if unsupported
|
|
45
|
+
*/
|
|
46
|
+
private _mapMcpEmbeddedResource;
|
|
25
47
|
/**
|
|
26
48
|
* Type Guard: Checks if value matches the expected MCP SDK result shape.
|
|
27
49
|
* \{ content: unknown[]; isError?: boolean \}
|
|
28
50
|
*/
|
|
29
51
|
private _isMcpToolResult;
|
|
30
52
|
/**
|
|
31
|
-
* Type Guard: Checks if
|
|
32
|
-
* \{ type: 'text'; text: string \}
|
|
53
|
+
* Type Guard: Checks if a media format is a supported image format.
|
|
33
54
|
*/
|
|
34
|
-
private
|
|
55
|
+
private _isImageFormat;
|
|
35
56
|
}
|
|
36
57
|
//# sourceMappingURL=mcp-tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/mcp-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/mcp-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAI7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAG1C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB,MAAM,EAAE,SAAS,CAAA;CAClB;AAED;;;;;;GAMG;AACH,qBAAa,OAAQ,SAAQ,IAAI;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;gBAEzB,MAAM,EAAE,aAAa;IAa1B,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,mBAAmB;IAiD5D;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA6B/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,cAAc;CAGvB"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
1
|
+
import { McpError, ErrorCode, UrlElicitationRequiredError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { createErrorResult, Tool } from './tool.js';
|
|
3
3
|
import { JsonBlock, TextBlock, ToolResultBlock } from '../types/messages.js';
|
|
4
|
+
import { ImageBlock, decodeBase64 } from '../types/media.js';
|
|
5
|
+
import { toMediaFormat, IMAGE_FORMATS } from '../mime.js';
|
|
6
|
+
import { logger } from '../logging/logger.js';
|
|
4
7
|
/**
|
|
5
8
|
* A Tool implementation that proxies calls to a remote MCP server.
|
|
6
9
|
*
|
|
@@ -33,12 +36,10 @@ export class McpTool extends Tool {
|
|
|
33
36
|
if (!this._isMcpToolResult(rawResult)) {
|
|
34
37
|
throw new Error('Invalid tool result from MCP Client: missing content array');
|
|
35
38
|
}
|
|
36
|
-
const content =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return new JsonBlock({ json: item });
|
|
41
|
-
});
|
|
39
|
+
const content = [];
|
|
40
|
+
for (const item of rawResult.content) {
|
|
41
|
+
content.push(this._mapMcpContent(item));
|
|
42
|
+
}
|
|
42
43
|
if (content.length === 0) {
|
|
43
44
|
content.push(new TextBlock('Tool execution completed successfully with no output.'));
|
|
44
45
|
}
|
|
@@ -49,27 +50,103 @@ export class McpTool extends Tool {
|
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
52
|
catch (error) {
|
|
52
|
-
if (error instanceof
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
],
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// Intentionally empty — fall through to createErrorResult below
|
|
53
|
+
if (error instanceof UrlElicitationRequiredError ||
|
|
54
|
+
(error instanceof McpError && error.code === ErrorCode.UrlElicitationRequired)) {
|
|
55
|
+
const elicitations = error instanceof UrlElicitationRequiredError
|
|
56
|
+
? error.elicitations
|
|
57
|
+
: error.data?.elicitations;
|
|
58
|
+
if (Array.isArray(elicitations) && elicitations.length > 0) {
|
|
59
|
+
return new ToolResultBlock({
|
|
60
|
+
toolUseId,
|
|
61
|
+
status: 'error',
|
|
62
|
+
content: [
|
|
63
|
+
new TextBlock(`MCP Elicitation required: [${String(error)}] with data ${JSON.stringify(elicitations)}`),
|
|
64
|
+
],
|
|
65
|
+
});
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
return createErrorResult(error, toolUseId);
|
|
71
69
|
}
|
|
72
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Maps a single MCP content item to an SDK ToolResultContent block.
|
|
73
|
+
*
|
|
74
|
+
* @param item - MCP content item from tool result
|
|
75
|
+
* @returns Mapped content block
|
|
76
|
+
*/
|
|
77
|
+
_mapMcpContent(item) {
|
|
78
|
+
if (!item || typeof item !== 'object') {
|
|
79
|
+
return new JsonBlock({ json: item });
|
|
80
|
+
}
|
|
81
|
+
const record = item;
|
|
82
|
+
switch (record.type) {
|
|
83
|
+
case 'text':
|
|
84
|
+
if (typeof record.text === 'string') {
|
|
85
|
+
return new TextBlock(record.text);
|
|
86
|
+
}
|
|
87
|
+
return new JsonBlock({ json: item });
|
|
88
|
+
case 'image':
|
|
89
|
+
return this._mapMcpImageContent(record);
|
|
90
|
+
case 'resource':
|
|
91
|
+
return this._mapMcpEmbeddedResource(record);
|
|
92
|
+
default:
|
|
93
|
+
return new JsonBlock({ json: item });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Maps an MCP image content item to an ImageBlock.
|
|
98
|
+
*
|
|
99
|
+
* @param record - MCP image content with data (base64) and mimeType
|
|
100
|
+
* @returns ImageBlock or TextBlock fallback if format is unsupported
|
|
101
|
+
*/
|
|
102
|
+
_mapMcpImageContent(record) {
|
|
103
|
+
const data = record.data;
|
|
104
|
+
const mimeType = record.mimeType;
|
|
105
|
+
if (typeof data !== 'string' || typeof mimeType !== 'string') {
|
|
106
|
+
logger.warn('content_type=<image> | mcp image content missing data or mimeType, falling back to json');
|
|
107
|
+
return new JsonBlock({ json: record });
|
|
108
|
+
}
|
|
109
|
+
const format = toMediaFormat(mimeType);
|
|
110
|
+
if (!format || !this._isImageFormat(format)) {
|
|
111
|
+
logger.warn(`mime_type=<${mimeType}> | unsupported mcp image mime type, falling back to json`);
|
|
112
|
+
return new JsonBlock({ json: record });
|
|
113
|
+
}
|
|
114
|
+
return new ImageBlock({
|
|
115
|
+
format,
|
|
116
|
+
source: { bytes: decodeBase64(data) },
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Maps an MCP embedded resource to an SDK content block.
|
|
121
|
+
* Text resources become TextBlock, blob resources with image MIME types become ImageBlock.
|
|
122
|
+
*
|
|
123
|
+
* @param record - MCP embedded resource content
|
|
124
|
+
* @returns Mapped content block or undefined if unsupported
|
|
125
|
+
*/
|
|
126
|
+
_mapMcpEmbeddedResource(record) {
|
|
127
|
+
const resource = record.resource;
|
|
128
|
+
if (!resource || typeof resource !== 'object') {
|
|
129
|
+
return new JsonBlock({ json: record });
|
|
130
|
+
}
|
|
131
|
+
const res = resource;
|
|
132
|
+
// Text resource
|
|
133
|
+
if (typeof res.text === 'string') {
|
|
134
|
+
return new TextBlock(res.text);
|
|
135
|
+
}
|
|
136
|
+
// Blob resource
|
|
137
|
+
if (typeof res.blob === 'string' && typeof res.mimeType === 'string') {
|
|
138
|
+
const format = toMediaFormat(res.mimeType);
|
|
139
|
+
if (format && this._isImageFormat(format)) {
|
|
140
|
+
return new ImageBlock({
|
|
141
|
+
format,
|
|
142
|
+
source: { bytes: decodeBase64(res.blob) },
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Non-image blob: fall back to json
|
|
146
|
+
logger.warn(`mime_type=<${res.mimeType}> | unsupported mcp resource blob mime type, falling back to json`);
|
|
147
|
+
}
|
|
148
|
+
return new JsonBlock({ json: record });
|
|
149
|
+
}
|
|
73
150
|
/**
|
|
74
151
|
* Type Guard: Checks if value matches the expected MCP SDK result shape.
|
|
75
152
|
* \{ content: unknown[]; isError?: boolean \}
|
|
@@ -83,15 +160,10 @@ export class McpTool extends Tool {
|
|
|
83
160
|
return Array.isArray(record.content);
|
|
84
161
|
}
|
|
85
162
|
/**
|
|
86
|
-
* Type Guard: Checks if
|
|
87
|
-
* \{ type: 'text'; text: string \}
|
|
163
|
+
* Type Guard: Checks if a media format is a supported image format.
|
|
88
164
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
const record = value;
|
|
94
|
-
return record.type === 'text' && typeof record.text === 'string';
|
|
165
|
+
_isImageFormat(format) {
|
|
166
|
+
return IMAGE_FORMATS.includes(format);
|
|
95
167
|
}
|
|
96
168
|
}
|
|
97
169
|
//# sourceMappingURL=mcp-tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool.js","sourceRoot":"","sources":["../../../src/tools/mcp-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp-tool.js","sourceRoot":"","sources":["../../../src/tools/mcp-tool.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools/tool.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ToolSpec, ToolUse } from './types.js';
|
|
2
2
|
import { ToolResultBlock } from '../types/messages.js';
|
|
3
|
-
import type { LocalAgent } from '../types/agent.js';
|
|
3
|
+
import type { InvocationState, LocalAgent } from '../types/agent.js';
|
|
4
4
|
export type { ToolSpec } from './types.js';
|
|
5
5
|
/**
|
|
6
6
|
* Context provided to tool implementations during execution.
|
|
@@ -17,6 +17,16 @@ export interface ToolContext {
|
|
|
17
17
|
* Provides access to agent state, conversation history, and cancellation state.
|
|
18
18
|
*/
|
|
19
19
|
agent: LocalAgent;
|
|
20
|
+
/**
|
|
21
|
+
* Per-invocation state shared across hooks and tools for the current
|
|
22
|
+
* agent invocation. Mutable — read and write freely; changes are visible to
|
|
23
|
+
* subsequent hooks, tools, and on {@link AgentResult.invocationState}.
|
|
24
|
+
*
|
|
25
|
+
* Distinct from `agent.appState`: `invocationState` is ephemeral and accepts
|
|
26
|
+
* arbitrary values, while `appState` is durable, JSON-serializable, and
|
|
27
|
+
* deep-copied on read/write.
|
|
28
|
+
*/
|
|
29
|
+
invocationState: InvocationState;
|
|
20
30
|
}
|
|
21
31
|
/**
|
|
22
32
|
* Data for a tool stream event.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/tools/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAa,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/tools/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAa,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGpE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,KAAK,EAAE,UAAU,CAAA;IAEjB;;;;;;;;OAQG;IACH,eAAe,EAAE,eAAe,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,EAAE,iBAAiB,CAAA;IAEvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,YAAW,mBAAmB;IACzD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAS;IAE1C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;gBAEX,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;CAK1C;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;AAE7F;;;;;;;;GAQG;AACH,8BAAsB,IAAI;IACxB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,mBAAmB;CAC/D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,EAAE,OAAO,CAAE,SAAQ,IAAI;IAC1D;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAUpF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/tools/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/tools/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAiD7C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,eAAe;IAC1B;;OAEG;IACM,IAAI,GAAG,iBAA0B,CAAA;IAE1C;;;OAGG;IACM,IAAI,CAAU;IAEvB,YAAY,SAA6B;QACvC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QAC5B,CAAC;IACH,CAAC;CACF;AAQD;;;;;;;;GAQG;AACH,MAAM,OAAgB,IAAI;CAqDzB;AAyBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,SAAiB;IACjE,0DAA0D;IAC1D,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAEzC,OAAO,IAAI,eAAe,CAAC;QACzB,SAAS;QACT,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,UAAU,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,KAAK,EAAE,WAAW;KACnB,CAAC,CAAA;AACJ,CAAC"}
|