agentfootprint 12.0.1 → 12.2.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/AGENTS.md +1 -1
- package/CAPABILITIES.md +3 -0
- package/ai-instructions/claude-code/SKILL.md +1 -1
- package/dist/adapters/mcp/agentcoreRuntime/invoke.js +113 -7
- package/dist/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -1
- package/dist/adapters/mcp/agentcoreRuntime/session.js +21 -21
- package/dist/adapters/mcp/agentcoreRuntime/session.js.map +1 -1
- package/dist/adapters/mcp/agentcoreRuntime/transport.js +79 -5
- package/dist/adapters/mcp/agentcoreRuntime/transport.js.map +1 -1
- package/dist/core/Agent.js +6 -0
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +4 -0
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +8 -0
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.d.ts +23 -4
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js +112 -6
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -1
- package/dist/esm/adapters/mcp/agentcoreRuntime/session.d.ts +20 -6
- package/dist/esm/adapters/mcp/agentcoreRuntime/session.js +21 -21
- package/dist/esm/adapters/mcp/agentcoreRuntime/session.js.map +1 -1
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js +81 -7
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js.map +1 -1
- package/dist/esm/core/Agent.js +6 -0
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.js +4 -0
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.d.ts +12 -0
- package/dist/esm/core/slots/buildToolsSlot.js +8 -0
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +41 -0
- package/dist/esm/events/registry.d.ts +3 -1
- package/dist/esm/events/registry.js +2 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/identity/types.d.ts +7 -3
- package/dist/esm/identity/types.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/boundedJson.d.ts +14 -7
- package/dist/esm/lib/boundedJson.js +14 -7
- package/dist/esm/lib/boundedJson.js.map +1 -1
- package/dist/esm/mcp/callChecks.d.ts +160 -0
- package/dist/esm/mcp/callChecks.js +237 -0
- package/dist/esm/mcp/callChecks.js.map +1 -0
- package/dist/esm/mcp/callLifetime.js +5 -2
- package/dist/esm/mcp/callLifetime.js.map +1 -1
- package/dist/esm/mcp/clientPort.d.ts +78 -0
- package/dist/esm/mcp/clientPort.js +33 -0
- package/dist/esm/mcp/clientPort.js.map +1 -0
- package/dist/esm/mcp/gatewayTransport.js +13 -3
- package/dist/esm/mcp/gatewayTransport.js.map +1 -1
- package/dist/esm/mcp/index.d.ts +11 -1
- package/dist/esm/mcp/index.js +15 -0
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/listingGenerations.d.ts +54 -0
- package/dist/esm/mcp/listingGenerations.js +75 -0
- package/dist/esm/mcp/listingGenerations.js.map +1 -0
- package/dist/esm/mcp/mcpClient.d.ts +18 -1
- package/dist/esm/mcp/mcpClient.js +302 -57
- package/dist/esm/mcp/mcpClient.js.map +1 -1
- package/dist/esm/mcp/mockMcpClient.js +13 -0
- package/dist/esm/mcp/mockMcpClient.js.map +1 -1
- package/dist/esm/mcp/pool/boundTool.d.ts +58 -0
- package/dist/esm/mcp/pool/boundTool.js +218 -0
- package/dist/esm/mcp/pool/boundTool.js.map +1 -0
- package/dist/esm/mcp/pool/clientSet.d.ts +73 -0
- package/dist/esm/mcp/pool/clientSet.js +152 -0
- package/dist/esm/mcp/pool/clientSet.js.map +1 -0
- package/dist/esm/mcp/pool/definitions.d.ts +103 -0
- package/dist/esm/mcp/pool/definitions.js +168 -0
- package/dist/esm/mcp/pool/definitions.js.map +1 -0
- package/dist/esm/mcp/pool/errors.d.ts +76 -0
- package/dist/esm/mcp/pool/errors.js +91 -0
- package/dist/esm/mcp/pool/errors.js.map +1 -0
- package/dist/esm/mcp/pool/identityKey.d.ts +57 -0
- package/dist/esm/mcp/pool/identityKey.js +94 -0
- package/dist/esm/mcp/pool/identityKey.js.map +1 -0
- package/dist/esm/mcp/pool/lease.d.ts +36 -0
- package/dist/esm/mcp/pool/lease.js +51 -0
- package/dist/esm/mcp/pool/lease.js.map +1 -0
- package/dist/esm/mcp/pool/listTools.d.ts +33 -0
- package/dist/esm/mcp/pool/listTools.js +146 -0
- package/dist/esm/mcp/pool/listTools.js.map +1 -0
- package/dist/esm/mcp/pool/mcpClientPool.d.ts +121 -0
- package/dist/esm/mcp/pool/mcpClientPool.js +151 -0
- package/dist/esm/mcp/pool/mcpClientPool.js.map +1 -0
- package/dist/esm/mcp/pool/options.d.ts +183 -0
- package/dist/esm/mcp/pool/options.js +119 -0
- package/dist/esm/mcp/pool/options.js.map +1 -0
- package/dist/esm/mcp/pool/plan.d.ts +77 -0
- package/dist/esm/mcp/pool/plan.js +134 -0
- package/dist/esm/mcp/pool/plan.js.map +1 -0
- package/dist/esm/mcp/pool/pool.d.ts +307 -0
- package/dist/esm/mcp/pool/pool.js +1071 -0
- package/dist/esm/mcp/pool/pool.js.map +1 -0
- package/dist/esm/mcp/pool/pooledClient.d.ts +93 -0
- package/dist/esm/mcp/pool/pooledClient.js +90 -0
- package/dist/esm/mcp/pool/pooledClient.js.map +1 -0
- package/dist/esm/mcp/pool/record.d.ts +80 -0
- package/dist/esm/mcp/pool/record.js +75 -0
- package/dist/esm/mcp/pool/record.js.map +1 -0
- package/dist/esm/mcp/pool/sessionEnded.d.ts +24 -0
- package/dist/esm/mcp/pool/sessionEnded.js +31 -0
- package/dist/esm/mcp/pool/sessionEnded.js.map +1 -0
- package/dist/esm/mcp/pool/work.d.ts +116 -0
- package/dist/esm/mcp/pool/work.js +213 -0
- package/dist/esm/mcp/pool/work.js.map +1 -0
- package/dist/esm/mcp/requestGuard.d.ts +70 -0
- package/dist/esm/mcp/requestGuard.js +98 -0
- package/dist/esm/mcp/requestGuard.js.map +1 -0
- package/dist/esm/mcp/requestLedger.d.ts +35 -1
- package/dist/esm/mcp/requestLedger.js +76 -3
- package/dist/esm/mcp/requestLedger.js.map +1 -1
- package/dist/esm/mcp/seriesEvidence.d.ts +10 -6
- package/dist/esm/mcp/seriesEvidence.js +16 -7
- package/dist/esm/mcp/seriesEvidence.js.map +1 -1
- package/dist/esm/mcp/terminate.d.ts +94 -0
- package/dist/esm/mcp/terminate.js +184 -0
- package/dist/esm/mcp/terminate.js.map +1 -0
- package/dist/esm/mcp/throttleRetry.js +71 -7
- package/dist/esm/mcp/throttleRetry.js.map +1 -1
- package/dist/esm/mcp/toolList.d.ts +90 -0
- package/dist/esm/mcp/toolList.js +123 -0
- package/dist/esm/mcp/toolList.js.map +1 -0
- package/dist/esm/mcp/types.d.ts +197 -3
- package/dist/esm/redaction/knownStrings.js +34 -0
- package/dist/esm/redaction/knownStrings.js.map +1 -1
- package/dist/esm/tool-providers/index.d.ts +2 -2
- package/dist/esm/tool-providers/index.js +15 -1
- package/dist/esm/tool-providers/index.js.map +1 -1
- package/dist/esm/tools/mcpClientUse.d.ts +59 -0
- package/dist/esm/tools/mcpClientUse.js +216 -0
- package/dist/esm/tools/mcpClientUse.js.map +1 -0
- package/dist/esm/tools/toolProvider.d.ts +16 -0
- package/dist/esm/tools/toolSessions.d.ts +41 -0
- package/dist/esm/tools/toolSessions.js +41 -1
- package/dist/esm/tools/toolSessions.js.map +1 -1
- package/dist/events/registry.js +2 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/identity/types.js.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/boundedJson.js +14 -7
- package/dist/lib/boundedJson.js.map +1 -1
- package/dist/mcp/callChecks.js +247 -0
- package/dist/mcp/callChecks.js.map +1 -0
- package/dist/mcp/callLifetime.js +5 -2
- package/dist/mcp/callLifetime.js.map +1 -1
- package/dist/mcp/clientPort.js +38 -0
- package/dist/mcp/clientPort.js.map +1 -0
- package/dist/mcp/gatewayTransport.js +13 -3
- package/dist/mcp/gatewayTransport.js.map +1 -1
- package/dist/mcp/index.js +25 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/listingGenerations.js +80 -0
- package/dist/mcp/listingGenerations.js.map +1 -0
- package/dist/mcp/mcpClient.js +306 -59
- package/dist/mcp/mcpClient.js.map +1 -1
- package/dist/mcp/mockMcpClient.js +13 -0
- package/dist/mcp/mockMcpClient.js.map +1 -1
- package/dist/mcp/pool/boundTool.js +223 -0
- package/dist/mcp/pool/boundTool.js.map +1 -0
- package/dist/mcp/pool/clientSet.js +157 -0
- package/dist/mcp/pool/clientSet.js.map +1 -0
- package/dist/mcp/pool/definitions.js +174 -0
- package/dist/mcp/pool/definitions.js.map +1 -0
- package/dist/mcp/pool/errors.js +96 -0
- package/dist/mcp/pool/errors.js.map +1 -0
- package/dist/mcp/pool/identityKey.js +99 -0
- package/dist/mcp/pool/identityKey.js.map +1 -0
- package/dist/mcp/pool/lease.js +55 -0
- package/dist/mcp/pool/lease.js.map +1 -0
- package/dist/mcp/pool/listTools.js +150 -0
- package/dist/mcp/pool/listTools.js.map +1 -0
- package/dist/mcp/pool/mcpClientPool.js +155 -0
- package/dist/mcp/pool/mcpClientPool.js.map +1 -0
- package/dist/mcp/pool/options.js +123 -0
- package/dist/mcp/pool/options.js.map +1 -0
- package/dist/mcp/pool/plan.js +140 -0
- package/dist/mcp/pool/plan.js.map +1 -0
- package/dist/mcp/pool/pool.js +1075 -0
- package/dist/mcp/pool/pool.js.map +1 -0
- package/dist/mcp/pool/pooledClient.js +94 -0
- package/dist/mcp/pool/pooledClient.js.map +1 -0
- package/dist/mcp/pool/record.js +80 -0
- package/dist/mcp/pool/record.js.map +1 -0
- package/dist/mcp/pool/sessionEnded.js +35 -0
- package/dist/mcp/pool/sessionEnded.js.map +1 -0
- package/dist/mcp/pool/work.js +219 -0
- package/dist/mcp/pool/work.js.map +1 -0
- package/dist/mcp/requestGuard.js +106 -0
- package/dist/mcp/requestGuard.js.map +1 -0
- package/dist/mcp/requestLedger.js +76 -3
- package/dist/mcp/requestLedger.js.map +1 -1
- package/dist/mcp/seriesEvidence.js +16 -7
- package/dist/mcp/seriesEvidence.js.map +1 -1
- package/dist/mcp/terminate.js +193 -0
- package/dist/mcp/terminate.js.map +1 -0
- package/dist/mcp/throttleRetry.js +71 -7
- package/dist/mcp/throttleRetry.js.map +1 -1
- package/dist/mcp/toolList.js +128 -0
- package/dist/mcp/toolList.js.map +1 -0
- package/dist/redaction/knownStrings.js +34 -0
- package/dist/redaction/knownStrings.js.map +1 -1
- package/dist/tool-providers/index.js +20 -1
- package/dist/tool-providers/index.js.map +1 -1
- package/dist/tools/mcpClientUse.js +225 -0
- package/dist/tools/mcpClientUse.js.map +1 -0
- package/dist/tools/toolSessions.js +44 -1
- package/dist/tools/toolSessions.js.map +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts +23 -4
- package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts.map +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/session.d.ts +20 -6
- package/dist/types/adapters/mcp/agentcoreRuntime/session.d.ts.map +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts +12 -0
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +41 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +3 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/identity/types.d.ts +7 -3
- package/dist/types/identity/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/boundedJson.d.ts +14 -7
- package/dist/types/lib/boundedJson.d.ts.map +1 -1
- package/dist/types/mcp/callChecks.d.ts +161 -0
- package/dist/types/mcp/callChecks.d.ts.map +1 -0
- package/dist/types/mcp/callLifetime.d.ts.map +1 -1
- package/dist/types/mcp/clientPort.d.ts +79 -0
- package/dist/types/mcp/clientPort.d.ts.map +1 -0
- package/dist/types/mcp/gatewayTransport.d.ts.map +1 -1
- package/dist/types/mcp/index.d.ts +11 -1
- package/dist/types/mcp/index.d.ts.map +1 -1
- package/dist/types/mcp/listingGenerations.d.ts +55 -0
- package/dist/types/mcp/listingGenerations.d.ts.map +1 -0
- package/dist/types/mcp/mcpClient.d.ts +18 -1
- package/dist/types/mcp/mcpClient.d.ts.map +1 -1
- package/dist/types/mcp/mockMcpClient.d.ts.map +1 -1
- package/dist/types/mcp/pool/boundTool.d.ts +59 -0
- package/dist/types/mcp/pool/boundTool.d.ts.map +1 -0
- package/dist/types/mcp/pool/clientSet.d.ts +74 -0
- package/dist/types/mcp/pool/clientSet.d.ts.map +1 -0
- package/dist/types/mcp/pool/definitions.d.ts +104 -0
- package/dist/types/mcp/pool/definitions.d.ts.map +1 -0
- package/dist/types/mcp/pool/errors.d.ts +77 -0
- package/dist/types/mcp/pool/errors.d.ts.map +1 -0
- package/dist/types/mcp/pool/identityKey.d.ts +58 -0
- package/dist/types/mcp/pool/identityKey.d.ts.map +1 -0
- package/dist/types/mcp/pool/lease.d.ts +37 -0
- package/dist/types/mcp/pool/lease.d.ts.map +1 -0
- package/dist/types/mcp/pool/listTools.d.ts +34 -0
- package/dist/types/mcp/pool/listTools.d.ts.map +1 -0
- package/dist/types/mcp/pool/mcpClientPool.d.ts +122 -0
- package/dist/types/mcp/pool/mcpClientPool.d.ts.map +1 -0
- package/dist/types/mcp/pool/options.d.ts +184 -0
- package/dist/types/mcp/pool/options.d.ts.map +1 -0
- package/dist/types/mcp/pool/plan.d.ts +78 -0
- package/dist/types/mcp/pool/plan.d.ts.map +1 -0
- package/dist/types/mcp/pool/pool.d.ts +308 -0
- package/dist/types/mcp/pool/pool.d.ts.map +1 -0
- package/dist/types/mcp/pool/pooledClient.d.ts +94 -0
- package/dist/types/mcp/pool/pooledClient.d.ts.map +1 -0
- package/dist/types/mcp/pool/record.d.ts +81 -0
- package/dist/types/mcp/pool/record.d.ts.map +1 -0
- package/dist/types/mcp/pool/sessionEnded.d.ts +25 -0
- package/dist/types/mcp/pool/sessionEnded.d.ts.map +1 -0
- package/dist/types/mcp/pool/work.d.ts +117 -0
- package/dist/types/mcp/pool/work.d.ts.map +1 -0
- package/dist/types/mcp/requestGuard.d.ts +71 -0
- package/dist/types/mcp/requestGuard.d.ts.map +1 -0
- package/dist/types/mcp/requestLedger.d.ts +35 -1
- package/dist/types/mcp/requestLedger.d.ts.map +1 -1
- package/dist/types/mcp/seriesEvidence.d.ts +10 -6
- package/dist/types/mcp/seriesEvidence.d.ts.map +1 -1
- package/dist/types/mcp/terminate.d.ts +95 -0
- package/dist/types/mcp/terminate.d.ts.map +1 -0
- package/dist/types/mcp/throttleRetry.d.ts.map +1 -1
- package/dist/types/mcp/toolList.d.ts +91 -0
- package/dist/types/mcp/toolList.d.ts.map +1 -0
- package/dist/types/mcp/types.d.ts +197 -3
- package/dist/types/mcp/types.d.ts.map +1 -1
- package/dist/types/redaction/knownStrings.d.ts.map +1 -1
- package/dist/types/tool-providers/index.d.ts +2 -2
- package/dist/types/tool-providers/index.d.ts.map +1 -1
- package/dist/types/tools/mcpClientUse.d.ts +60 -0
- package/dist/types/tools/mcpClientUse.d.ts.map +1 -0
- package/dist/types/tools/toolProvider.d.ts +16 -0
- package/dist/types/tools/toolProvider.d.ts.map +1 -1
- package/dist/types/tools/toolSessions.d.ts +41 -0
- package/dist/types/tools/toolSessions.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -60,9 +60,10 @@
|
|
|
60
60
|
*/
|
|
61
61
|
import { createVendingFetch, gatewayTransport, } from '../../../mcp/gatewayTransport.js';
|
|
62
62
|
import { joinableRetry, joinedSpec, retryingFetchFor, retryRule, } from '../../../mcp/throttleRetry.js';
|
|
63
|
-
import {
|
|
63
|
+
import { guardOf, withGuard } from '../../../mcp/requestGuard.js';
|
|
64
|
+
import { invokeFetch, invokeSdk, STOP_RUNTIME_SESSION, } from './invoke.js';
|
|
64
65
|
import { safeAnswer } from './safeAnswer.js';
|
|
65
|
-
import { sessionStrategy } from './session.js';
|
|
66
|
+
import { AGENTCORE_RUNTIME_SESSION_HEADER, sessionStrategy, } from './session.js';
|
|
66
67
|
import { SESSION_BUSY_ASSUMES, sessionBusy } from './sessionBusy.js';
|
|
67
68
|
/**
|
|
68
69
|
* The session-busy retry's defaults, chosen by their MINIMUM total wait.
|
|
@@ -105,9 +106,45 @@ export function agentCoreRuntimeMcpTransport(options) {
|
|
|
105
106
|
return {
|
|
106
107
|
transport: 'http',
|
|
107
108
|
url,
|
|
108
|
-
fetch: sessionedFetch(session, send, { rules: busy === undefined ? [] : [busy] }),
|
|
109
|
+
fetch: sessionedFetch(session, send, { rules: busy === undefined ? [] : [busy] }, stopUrl(options)),
|
|
110
|
+
settings: settingsOf(options),
|
|
109
111
|
};
|
|
110
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* What this transport keeps inside its `fetch`, stated as data
|
|
115
|
+
* (`McpHttpTransport.settings`): its auth strategy and session strategy, and on
|
|
116
|
+
* the bearer path the service, scopes, mode and credential provider id a token
|
|
117
|
+
* is vended for. Names and modes only — never a credential.
|
|
118
|
+
*/
|
|
119
|
+
function settingsOf(options) {
|
|
120
|
+
const auth = options.auth ?? 'sigv4';
|
|
121
|
+
const session = options.session ?? 'per-call';
|
|
122
|
+
if (auth === 'sigv4')
|
|
123
|
+
return { auth: 'sigv4', session };
|
|
124
|
+
return {
|
|
125
|
+
auth: 'bearer',
|
|
126
|
+
session,
|
|
127
|
+
service: auth.service ?? DEFAULT_BEARER_SERVICE,
|
|
128
|
+
...(auth.scopes !== undefined && { scopes: [...auth.scopes] }),
|
|
129
|
+
mode: auth.mode ?? 'machine',
|
|
130
|
+
credentials: auth.bearer.id,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Where `StopRuntimeSession` goes over HTTPS:
|
|
135
|
+
* `POST https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{url-encoded ARN}/stopruntimesession`,
|
|
136
|
+
* with `qualifier` as a query parameter when given — the operation's request
|
|
137
|
+
* line. The SigV4 path sends the AWS SDK's command instead, and ignores it.
|
|
138
|
+
*/
|
|
139
|
+
function stopUrl(options) {
|
|
140
|
+
const query = new URLSearchParams();
|
|
141
|
+
if (options.qualifier)
|
|
142
|
+
query.set('qualifier', options.qualifier);
|
|
143
|
+
const base = `https://bedrock-agentcore.${options.region}.amazonaws.com/runtimes/` +
|
|
144
|
+
`${encodeURIComponent(options.agentRuntimeArn)}/stopruntimesession`;
|
|
145
|
+
const search = query.toString();
|
|
146
|
+
return search === '' ? base : `${base}?${search}`;
|
|
147
|
+
}
|
|
111
148
|
/**
|
|
112
149
|
* The transport's fetch: the session around ONE retry series around the auth.
|
|
113
150
|
*
|
|
@@ -118,19 +155,56 @@ export function agentCoreRuntimeMcpTransport(options) {
|
|
|
118
155
|
* rebuilt into this same series, inside the session and the rewrite — never
|
|
119
156
|
* wrapped around them as a second loop — and so is the client's request ledger.
|
|
120
157
|
*/
|
|
121
|
-
function sessionedFetch(session, send, spec) {
|
|
158
|
+
function sessionedFetch(session, send, spec, stopAt) {
|
|
122
159
|
const retried = retryingFetchFor(send, spec);
|
|
123
160
|
const sessioned = async (input, init) => {
|
|
124
161
|
const headers = new Headers(init?.headers);
|
|
162
|
+
// A handle this transport does not hold throws here, before anything is
|
|
163
|
+
// sent (`session.ts` · `LocalSessionHandleLostError`).
|
|
125
164
|
const step = session.request(headers, (init?.method ?? 'GET').toUpperCase());
|
|
126
165
|
if ('answer' in step)
|
|
127
166
|
return step.answer;
|
|
167
|
+
if ('stop' in step)
|
|
168
|
+
return stopSession(retried, stopAt, step.stop, init);
|
|
128
169
|
const response = await retried(input, { ...init, headers });
|
|
129
170
|
// What the MCP client may read of a failure is rewritten from safe parts —
|
|
130
171
|
// ONE rule for both auth paths, after the retry has read the original.
|
|
131
172
|
return step.settle(await safeAnswer(response));
|
|
132
173
|
};
|
|
133
|
-
return joinableRetry(sessioned, (join) => sessionedFetch(session, send, joinedSpec(spec, join)));
|
|
174
|
+
return joinableRetry(sessioned, (join) => sessionedFetch(session, send, joinedSpec(spec, join), stopAt));
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A `'reuse'` connection's `DELETE`, as `StopRuntimeSession` for its runtime
|
|
178
|
+
* session — sent through the SAME series as every other request, so the
|
|
179
|
+
* platform's 409 while it starts or stops the session is retried like the
|
|
180
|
+
* session-busy refusal, signed (or vended) afresh each attempt. Answered as a
|
|
181
|
+
* server answers the `DELETE`: 204 once stopped; 404 when the platform no longer
|
|
182
|
+
* holds the session ("not found or already terminated"); otherwise the safe
|
|
183
|
+
* failure (`safeAnswer.ts`), its status kept.
|
|
184
|
+
*
|
|
185
|
+
* Carries the `DELETE`'s signal and, for a pooled client, its send gate
|
|
186
|
+
* (`mcp/requestGuard.ts`), so a deadline or a stale binding sends nothing.
|
|
187
|
+
*/
|
|
188
|
+
async function stopSession(retried, stopAt, runtimeSessionId, init) {
|
|
189
|
+
const stop = {
|
|
190
|
+
method: 'POST',
|
|
191
|
+
headers: {
|
|
192
|
+
'content-type': 'application/json',
|
|
193
|
+
[AGENTCORE_RUNTIME_SESSION_HEADER]: runtimeSessionId,
|
|
194
|
+
},
|
|
195
|
+
// The operation's idempotency token: one per stop, so an attempt the
|
|
196
|
+
// series repeats is the same stop.
|
|
197
|
+
body: JSON.stringify({ clientToken: globalThis.crypto.randomUUID() }),
|
|
198
|
+
...(init?.signal !== undefined && init.signal !== null && { signal: init.signal }),
|
|
199
|
+
[STOP_RUNTIME_SESSION]: runtimeSessionId,
|
|
200
|
+
};
|
|
201
|
+
const guard = guardOf(init);
|
|
202
|
+
const response = await retried(stopAt, guard === undefined ? stop : withGuard(stop, guard));
|
|
203
|
+
if (response.ok) {
|
|
204
|
+
await response.body?.cancel().catch(() => undefined);
|
|
205
|
+
return new Response(null, { status: 204, statusText: 'No Content' });
|
|
206
|
+
}
|
|
207
|
+
return safeAnswer(response);
|
|
134
208
|
}
|
|
135
209
|
/**
|
|
136
210
|
* The HTTPS endpoint of a runtime's MCP server:
|
|
@@ -168,7 +242,7 @@ function authStrategy(options, url) {
|
|
|
168
242
|
const auth = options.auth ?? 'sigv4';
|
|
169
243
|
const sdk = injectedSdk(options);
|
|
170
244
|
if (auth === 'sigv4') {
|
|
171
|
-
const { client, InvokeAgentRuntimeCommand } = invokeSdk({
|
|
245
|
+
const { client, InvokeAgentRuntimeCommand, StopRuntimeSessionCommand } = invokeSdk({
|
|
172
246
|
region: options.region,
|
|
173
247
|
...(options.client !== undefined && { client: options.client }),
|
|
174
248
|
...(sdk !== undefined && { sdk }),
|
|
@@ -177,7 +251,7 @@ function authStrategy(options, url) {
|
|
|
177
251
|
agentRuntimeArn: options.agentRuntimeArn,
|
|
178
252
|
...(options.qualifier !== undefined && { qualifier: options.qualifier }),
|
|
179
253
|
...(options.accountId !== undefined && { accountId: options.accountId }),
|
|
180
|
-
}, client, InvokeAgentRuntimeCommand);
|
|
254
|
+
}, client, InvokeAgentRuntimeCommand, StopRuntimeSessionCommand);
|
|
181
255
|
}
|
|
182
256
|
if (auth !== null && typeof auth === 'object' && auth.bearer !== undefined) {
|
|
183
257
|
if (typeof auth.bearer.getCredential !== 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../../src/adapters/mcp/agentcoreRuntime/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,SAAS,GAKV,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../../src/adapters/mcp/agentcoreRuntime/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/core/Agent.js
CHANGED
|
@@ -4753,6 +4753,12 @@ export class Agent extends RunnerBase {
|
|
|
4753
4753
|
integrityLedger: this.integrityLedgerHolder,
|
|
4754
4754
|
...(this.externalToolProvider && { toolProvider: this.externalToolProvider }),
|
|
4755
4755
|
...(this.externalToolProvider && { providerToolCache }),
|
|
4756
|
+
// The caller of THIS run, for `ToolDispatchContext.callerIdentity`: the
|
|
4757
|
+
// instance's caller on its own run, the member's run on a mount — never a
|
|
4758
|
+
// derived identity (the `hiddenSkillIdsNow` precedent).
|
|
4759
|
+
...(this.externalToolProvider && {
|
|
4760
|
+
callerIdentity: (scope) => this.ownScopes.has(scope) ? this.lastRunIdentity : memberIdentityIn(scope),
|
|
4761
|
+
}),
|
|
4756
4762
|
toolClaimants,
|
|
4757
4763
|
servedTools,
|
|
4758
4764
|
...(readSkillFor && { readSkillFor }),
|