agentfootprint 12.1.0 → 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 -1
- 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/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 +9 -1
- package/dist/esm/mcp/index.js +8 -0
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/mcpClient.d.ts +18 -1
- package/dist/esm/mcp/mcpClient.js +203 -43
- 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/types.d.ts +85 -7
- 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 +7 -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/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 +16 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcpClient.js +207 -45
- 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/redaction/knownStrings.js +34 -0
- package/dist/redaction/knownStrings.js.map +1 -1
- package/dist/tool-providers/index.js +12 -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/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 +9 -1
- package/dist/types/mcp/index.d.ts.map +1 -1
- 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/types.d.ts +85 -7
- 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
|
@@ -88,6 +88,12 @@ class RequestLedger {
|
|
|
88
88
|
sending = new Map();
|
|
89
89
|
/** Matched requests whose JSON-RPC answer is awaited (`strict` only) — by id. */
|
|
90
90
|
awaiting = new Map();
|
|
91
|
+
/**
|
|
92
|
+
* A pooled call's guard by its request's id, until the call settles: the SDK's
|
|
93
|
+
* `notifications/cancelled` for that request is work started for the call, and
|
|
94
|
+
* is counted under it (`requestGuard.ts`).
|
|
95
|
+
*/
|
|
96
|
+
guards = new Map();
|
|
91
97
|
initializeId;
|
|
92
98
|
initializeAnswered = false;
|
|
93
99
|
markers = 0;
|
|
@@ -102,11 +108,12 @@ class RequestLedger {
|
|
|
102
108
|
* is where its attempts are filed, when the call carries the run's evidence
|
|
103
109
|
* port.
|
|
104
110
|
*/
|
|
105
|
-
issue(ticket) {
|
|
111
|
+
issue(ticket, guard) {
|
|
106
112
|
this.markers += 1;
|
|
107
113
|
const call = {
|
|
108
114
|
marker: `call-${this.markers}`,
|
|
109
115
|
...(ticket !== undefined && { ticket }),
|
|
116
|
+
...(guard !== undefined && { guard }),
|
|
110
117
|
};
|
|
111
118
|
this.issued.set(call.marker, call);
|
|
112
119
|
return call;
|
|
@@ -116,6 +123,9 @@ class RequestLedger {
|
|
|
116
123
|
if (this.issued.get(call.marker) === call)
|
|
117
124
|
this.issued.delete(call.marker);
|
|
118
125
|
const request = call.request;
|
|
126
|
+
if (request !== undefined && this.guards.get(request.id) === call.guard) {
|
|
127
|
+
this.guards.delete(request.id);
|
|
128
|
+
}
|
|
119
129
|
if (request !== undefined && this.awaiting.get(request.id) === request.replay) {
|
|
120
130
|
this.awaiting.delete(request.id);
|
|
121
131
|
}
|
|
@@ -125,6 +135,7 @@ class RequestLedger {
|
|
|
125
135
|
this.issued.clear();
|
|
126
136
|
this.sending.clear();
|
|
127
137
|
this.awaiting.clear();
|
|
138
|
+
this.guards.clear();
|
|
128
139
|
}
|
|
129
140
|
/**
|
|
130
141
|
* Whether this connection's answers pass the observer: the `initialize`
|
|
@@ -237,6 +248,7 @@ class RequestLedger {
|
|
|
237
248
|
...(entry.ticket !== undefined && { ticket: entry.ticket }),
|
|
238
249
|
cancelled: entry.cut.signal,
|
|
239
250
|
replay: entry.replay,
|
|
251
|
+
...(entry.guard !== undefined && { guard: entry.guard }),
|
|
240
252
|
};
|
|
241
253
|
}
|
|
242
254
|
/** One message through the watched transport. */
|
|
@@ -245,12 +257,24 @@ class RequestLedger {
|
|
|
245
257
|
this.noteInitialize(message);
|
|
246
258
|
const id = requestIdOf(message);
|
|
247
259
|
if (id === undefined)
|
|
248
|
-
return original
|
|
260
|
+
return this.sendOther(original, message, options);
|
|
249
261
|
// The marker comes out before anything else: the server never sees it.
|
|
250
262
|
const taken = (0, callMarker_js_1.takeMarker)(message);
|
|
251
263
|
const call = taken.marker === undefined ? undefined : this.issued.get(taken.marker);
|
|
252
264
|
// One request per marker: a second message carrying it is not this call's.
|
|
253
265
|
const matched = call !== undefined && call.request === undefined ? call : undefined;
|
|
266
|
+
// A pooled call's send gate, asked here — the last boundary on a transport
|
|
267
|
+
// whose `send` writes without waiting (stdio). Refused, nothing is sent and
|
|
268
|
+
// the marker stays unused. On a pooled connection a tool call without a
|
|
269
|
+
// guarded call of its own is the pool's to answer (`guardFor`), whatever
|
|
270
|
+
// the replay policy.
|
|
271
|
+
const guard = matched?.guard ?? this.options.guardFor?.(message);
|
|
272
|
+
try {
|
|
273
|
+
guard?.check();
|
|
274
|
+
}
|
|
275
|
+
catch (refusal) {
|
|
276
|
+
return Promise.reject(refusal);
|
|
277
|
+
}
|
|
254
278
|
if (matched === undefined && this.options.strict) {
|
|
255
279
|
return Promise.reject(new replayUnavailable_js_1.McpReplayUnavailableError('request-unmatched', this.options.server, toolNameOf(message)));
|
|
256
280
|
}
|
|
@@ -265,20 +289,62 @@ class RequestLedger {
|
|
|
265
289
|
...(matched?.ticket !== undefined && { ticket: matched.ticket }),
|
|
266
290
|
cut: new AbortController(),
|
|
267
291
|
replay,
|
|
292
|
+
...(guard !== undefined && { guard }),
|
|
268
293
|
};
|
|
294
|
+
if (guard !== undefined)
|
|
295
|
+
this.guards.set(id, guard);
|
|
269
296
|
this.sending.set(id, entry);
|
|
270
297
|
const release = () => {
|
|
271
298
|
if (this.sending.get(id) === entry)
|
|
272
299
|
this.sending.delete(id);
|
|
273
300
|
};
|
|
274
301
|
try {
|
|
275
|
-
|
|
302
|
+
const sent = Promise.resolve(original(taken.message, options)).finally(release);
|
|
303
|
+
guard?.track(sent);
|
|
304
|
+
return sent;
|
|
276
305
|
}
|
|
277
306
|
catch (err) {
|
|
278
307
|
release();
|
|
279
308
|
throw err;
|
|
280
309
|
}
|
|
281
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Any message but a `tools/call`: sent as it always was — unless a pool
|
|
313
|
+
* guards it (`guardFor`), and then a REQUEST is checked first and refused
|
|
314
|
+
* unsent, and every message's send is counted under the guard.
|
|
315
|
+
* Notifications are never refused: a `notifications/cancelled` is the
|
|
316
|
+
* courtesy that tells the server to stop.
|
|
317
|
+
*/
|
|
318
|
+
sendOther(original, message, options) {
|
|
319
|
+
// A cancellation is counted under the call it cancels; anything else under
|
|
320
|
+
// the pool's guard for the client's current work.
|
|
321
|
+
const guard = this.cancelledGuard(message) ?? this.options.guardFor?.(message);
|
|
322
|
+
if (guard === undefined)
|
|
323
|
+
return original(message, options);
|
|
324
|
+
if (isRequest(message)) {
|
|
325
|
+
try {
|
|
326
|
+
guard.check();
|
|
327
|
+
}
|
|
328
|
+
catch (refusal) {
|
|
329
|
+
return Promise.reject(refusal);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
const sent = Promise.resolve(original(message, options));
|
|
333
|
+
guard.track(sent);
|
|
334
|
+
return sent;
|
|
335
|
+
}
|
|
336
|
+
/** The guard of the pooled call a `notifications/cancelled` names, if any. */
|
|
337
|
+
cancelledGuard(message) {
|
|
338
|
+
if (message === null || typeof message !== 'object' || Array.isArray(message))
|
|
339
|
+
return undefined;
|
|
340
|
+
const { method, params } = message;
|
|
341
|
+
if (method !== CANCELLED || params === null || typeof params !== 'object')
|
|
342
|
+
return undefined;
|
|
343
|
+
const requestId = params.requestId;
|
|
344
|
+
if (typeof requestId !== 'string' && typeof requestId !== 'number')
|
|
345
|
+
return undefined;
|
|
346
|
+
return this.guards.get(requestId);
|
|
347
|
+
}
|
|
282
348
|
/** The `initialize` request: its answer is the one that proves the observer is in place. */
|
|
283
349
|
noteInitialize(message) {
|
|
284
350
|
if (message === null || typeof message !== 'object' || Array.isArray(message))
|
|
@@ -325,6 +391,13 @@ function responseIdOf(message) {
|
|
|
325
391
|
return undefined;
|
|
326
392
|
return typeof fields.id === 'string' || typeof fields.id === 'number' ? fields.id : undefined;
|
|
327
393
|
}
|
|
394
|
+
/** A JSON-RPC request — a method and an id. A notification or a response is not one. */
|
|
395
|
+
function isRequest(message) {
|
|
396
|
+
if (message === null || typeof message !== 'object' || Array.isArray(message))
|
|
397
|
+
return false;
|
|
398
|
+
const { method, id } = message;
|
|
399
|
+
return typeof method === 'string' && (typeof id === 'string' || typeof id === 'number');
|
|
400
|
+
}
|
|
328
401
|
/** The id of a `tools/call` REQUEST — a response or a notification has none to claim. */
|
|
329
402
|
function requestIdOf(message) {
|
|
330
403
|
if (message === null || typeof message !== 'object' || Array.isArray(message))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestLedger.js","sourceRoot":"","sources":["../../src/mcp/requestLedger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"requestLedger.js","sourceRoot":"","sources":["../../src/mcp/requestLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,18 +124,20 @@ class SeriesEvidence {
|
|
|
124
124
|
/**
|
|
125
125
|
* The series delivered a response. It is the last attempt's — an answer, or a
|
|
126
126
|
* refusal it will not ask again after. A refusal it MEANT to ask again after
|
|
127
|
-
* is delivered when the
|
|
128
|
-
*
|
|
129
|
-
*
|
|
127
|
+
* is delivered when the series stopped inside the wait: the deadline landed
|
|
128
|
+
* there (`no-time-left`), or a pooled call's send gate refused the next
|
|
129
|
+
* attempt before it was sent (`stoppedBy`, `not-permitted`). The end says
|
|
130
|
+
* which, during the `wait`; the attempt that was never sent has no row.
|
|
131
|
+
* Filed when the call has read it.
|
|
130
132
|
*/
|
|
131
|
-
delivered() {
|
|
133
|
+
delivered(stoppedBy) {
|
|
132
134
|
const last = this.last;
|
|
133
135
|
if (last === undefined) {
|
|
134
136
|
this.fileWhenSettled(UNACCOUNTED);
|
|
135
137
|
return;
|
|
136
138
|
}
|
|
137
139
|
this.fileWhenSettled(last.reason === 'retryable'
|
|
138
|
-
? { ...endOf(last), reason: 'no-time-left', during: 'wait' }
|
|
140
|
+
? { ...endOf(last), reason: stoppedBy ?? 'no-time-left', during: 'wait' }
|
|
139
141
|
: endOf(last));
|
|
140
142
|
}
|
|
141
143
|
/**
|
|
@@ -145,14 +147,21 @@ class SeriesEvidence {
|
|
|
145
147
|
* as one: a deadline that had passed before the first request (`timed-out`,
|
|
146
148
|
* no `during`, nothing sent) or one a future runner reports from inside a wait
|
|
147
149
|
* (`during: 'wait'`); anything else is filed as a failure the record cannot
|
|
148
|
-
* account for, so a request is never left unfiled.
|
|
150
|
+
* account for, so a request is never left unfiled. A pooled call's send gate
|
|
151
|
+
* that refused the next attempt before it was sent ends it as `stoppedBy`,
|
|
152
|
+
* during the `wait`. Filed when the call settles.
|
|
149
153
|
*/
|
|
150
|
-
threw(outOfTime) {
|
|
154
|
+
threw(outOfTime, stoppedBy) {
|
|
151
155
|
const last = this.last;
|
|
152
156
|
if (last !== undefined && last.reason !== 'retryable') {
|
|
153
157
|
this.fileWhenSettled(endOf(last));
|
|
154
158
|
return;
|
|
155
159
|
}
|
|
160
|
+
// A pooled call's send gate refused the next attempt before it was sent.
|
|
161
|
+
if (last !== undefined && stoppedBy !== undefined) {
|
|
162
|
+
this.fileWhenSettled({ ...endOf(last), reason: stoppedBy, during: 'wait' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
156
165
|
if (!outOfTime) {
|
|
157
166
|
this.fileWhenSettled(UNACCOUNTED);
|
|
158
167
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seriesEvidence.js","sourceRoot":"","sources":["../../src/mcp/seriesEvidence.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;;;AAYH,oEAIqC;AACrC,2CAAkE;AA8ClE,MAAM,MAAM,GACV,qEAAqE,CAAC;AACxE,MAAM,WAAW,GACf,oDAAoD,CAAC;AAEvD,2EAA2E;AAC3E,MAAa,cAAc;IAYN;IACA;IACA;IAbF,IAAI,GAAyB,EAAE,CAAC;IACzC,OAAO,GAAG,CAAC,CAAC;IACZ,IAAI,CAAiC;IACrC,KAAK,GAAG,KAAK,CAAC;IACd,OAAO,GAAG,KAAK,CAAC;IACxB,uFAAuF;IACtE,SAAS,GAAG,IAAI,2BAAe,EAAE,CAAC;IACnD,2EAA2E;IACnE,MAAM,CAAiC;IAE/C,YACmB,IAAyB,EACzB,KAAmB,EACnB,UAAuB;QAFvB,SAAI,GAAJ,IAAI,CAAqB;QACzB,UAAK,GAAL,KAAK,CAAc;QACnB,eAAU,GAAV,UAAU,CAAa;IACvC,CAAC;IAEJ,+EAA+E;IAC/E,OAAO,CACL,MAAqB,EACrB,IAA6B,EAC7B,QAAwB,EACxB,KAAoB;QAEpB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAClF,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,CAAS,EAAE,UAAmB;QACxC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED;;;;;OAKG;IACH,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC;YACR,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,WAAW;YACnB,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"seriesEvidence.js","sourceRoot":"","sources":["../../src/mcp/seriesEvidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* terminate — ending a client's remote session, and saying what the remote side
|
|
4
|
+
* answered.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: a pass-through `fetch` that reads one status + one bounded procedure.
|
|
7
|
+
* Role: `McpClient.terminate()` (`mcpClient.ts`). The MCP SDK's
|
|
8
|
+
* `StreamableHTTPClientTransport.close()` only aborts the requests in
|
|
9
|
+
* flight; `terminateSession()` is the one method that sends the
|
|
10
|
+
* Streamable HTTP `DELETE` carrying `Mcp-Session-Id`. It treats a 405
|
|
11
|
+
* as success, so the status is read here, by a pass-through `fetch`
|
|
12
|
+
* the library installs on every transport it builds — it changes no
|
|
13
|
+
* request and reads only a `DELETE`'s answer.
|
|
14
|
+
*
|
|
15
|
+
* The procedure, at most once per client:
|
|
16
|
+
*
|
|
17
|
+
* 1. no session id was ever issued → `'no-session'`, nothing is sent;
|
|
18
|
+
* 2. otherwise the transport's own `terminateSession()`, bounded by
|
|
19
|
+
* `TOOL_TEARDOWN_TIMEOUT_MS` (the tool-session tier's `withTimeout`, shared):
|
|
20
|
+
* at the deadline the request is aborted and the outcome is `'timed-out'`;
|
|
21
|
+
* 3. a local close, whatever happened.
|
|
22
|
+
*
|
|
23
|
+
* ONE DEADLINE ANSWERS THE CALLER: the remote answer and the local close are
|
|
24
|
+
* waited for together for at most `TOOL_TEARDOWN_TIMEOUT_MS` of ELAPSED time,
|
|
25
|
+
* measured by timers started together at the start — never by reading the wall
|
|
26
|
+
* clock, so a clock stepped back cannot stretch it. A close that finishes in
|
|
27
|
+
* time is finished before the caller hears; one that hangs does not hold the
|
|
28
|
+
* answer. The work's own settlement — the `DELETE`, a `fetch` that ignores its
|
|
29
|
+
* abort, the close — may come later, and is returned apart (`settled`): the MCP
|
|
30
|
+
* client pool keeps an ending charged until then. The clock (`now`) only
|
|
31
|
+
* measures `durationMs`.
|
|
32
|
+
*
|
|
33
|
+
* Never vendor-aware: the one port is the Streamable HTTP `DELETE`. A transport
|
|
34
|
+
* that turns it into something else (AgentCore Runtime's `StopRuntimeSession`)
|
|
35
|
+
* answers it like a server would.
|
|
36
|
+
*/
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.classOf = exports.endSession = exports.endLocally = exports.outcomeWithout = exports.DeleteWatch = exports.canTerminate = void 0;
|
|
39
|
+
const abort_js_1 = require("../lib/abort.js");
|
|
40
|
+
const toolSessions_js_1 = require("../tools/toolSessions.js");
|
|
41
|
+
/**
|
|
42
|
+
* Can `client` end its remote session? Reads the member, never assumes it —
|
|
43
|
+
* the feature-detection law (`provider-contract/types.ts` · `canStageCodeInputs`).
|
|
44
|
+
* True for `mcpClient()` and `mockMcpClient()`; false for a hand-written client
|
|
45
|
+
* without `terminate`.
|
|
46
|
+
*/
|
|
47
|
+
function canTerminate(client) {
|
|
48
|
+
if (client === null || typeof client !== 'object')
|
|
49
|
+
return false;
|
|
50
|
+
try {
|
|
51
|
+
return typeof client.terminate === 'function';
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.canTerminate = canTerminate;
|
|
58
|
+
/**
|
|
59
|
+
* What the pass-through `fetch` saw of a transport's `DELETE` requests: the
|
|
60
|
+
* status of the latest answer, and the signal it links into each one while an
|
|
61
|
+
* ending is under way.
|
|
62
|
+
*/
|
|
63
|
+
class DeleteWatch {
|
|
64
|
+
status;
|
|
65
|
+
cut;
|
|
66
|
+
/** Arm for one ending: forget the last status, link `cut` into its `DELETE`. */
|
|
67
|
+
arm(cut) {
|
|
68
|
+
this.status = undefined;
|
|
69
|
+
this.cut = cut;
|
|
70
|
+
}
|
|
71
|
+
/** The status the latest `DELETE` was answered with, if one was. */
|
|
72
|
+
get answered() {
|
|
73
|
+
return this.status;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* `inner` (the global `fetch` when `undefined`, looked up at call time),
|
|
77
|
+
* passed through untouched except that a `DELETE`'s answer status is read and
|
|
78
|
+
* an armed ending's signal is linked into it.
|
|
79
|
+
*/
|
|
80
|
+
fetch(inner) {
|
|
81
|
+
const send = inner ?? ((input, init) => globalThis.fetch(input, init));
|
|
82
|
+
return async (input, init) => {
|
|
83
|
+
if ((init?.method ?? 'GET').toUpperCase() !== 'DELETE')
|
|
84
|
+
return send(input, init);
|
|
85
|
+
const signal = this.cut === undefined ? init?.signal : (0, abort_js_1.eitherSignal)(init?.signal ?? undefined, this.cut);
|
|
86
|
+
const response = await send(input, signal === undefined ? init : { ...init, signal });
|
|
87
|
+
this.status = response.status;
|
|
88
|
+
return response;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.DeleteWatch = DeleteWatch;
|
|
93
|
+
/** The outcome for an ending that sent nothing. */
|
|
94
|
+
function outcomeWithout(remote, durationMs = 0) {
|
|
95
|
+
return { remote, resolved: remote === 'no-session', durationMs };
|
|
96
|
+
}
|
|
97
|
+
exports.outcomeWithout = outcomeWithout;
|
|
98
|
+
/**
|
|
99
|
+
* An ending that sends nothing — `remote` says why — only the local close:
|
|
100
|
+
* the caller is answered when the close finishes or at `timeoutMs`, whichever
|
|
101
|
+
* comes first; `settled` waits for the close itself.
|
|
102
|
+
*/
|
|
103
|
+
function endLocally(remote, close, now = Date.now, timeoutMs = toolSessions_js_1.TOOL_TEARDOWN_TIMEOUT_MS) {
|
|
104
|
+
const startedAt = now();
|
|
105
|
+
const closing = settle(close);
|
|
106
|
+
return {
|
|
107
|
+
outcome: within(closing, timeoutMs).then(() => outcomeWithout(remote, Math.max(0, now() - startedAt))),
|
|
108
|
+
settled: closing,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
exports.endLocally = endLocally;
|
|
112
|
+
/**
|
|
113
|
+
* End `transport`'s session, then close locally with `close` — the procedure
|
|
114
|
+
* in the module note. `watch` is the `DeleteWatch` installed on the transport's
|
|
115
|
+
* fetch. `now` is the clock the duration is measured with.
|
|
116
|
+
*/
|
|
117
|
+
function endSession(transport, watch, close, now = Date.now, timeoutMs = toolSessions_js_1.TOOL_TEARDOWN_TIMEOUT_MS) {
|
|
118
|
+
if (transport.sessionId === undefined)
|
|
119
|
+
return endLocally('no-session', close, now, timeoutMs);
|
|
120
|
+
const startedAt = now();
|
|
121
|
+
const deadline = new AbortController();
|
|
122
|
+
watch.arm(deadline.signal);
|
|
123
|
+
// The transport's own termination; its promise is the work this ending
|
|
124
|
+
// waits for, however long the caller is answered before it.
|
|
125
|
+
const work = Promise.resolve().then(() => transport.terminateSession());
|
|
126
|
+
const remote = (0, toolSessions_js_1.withTimeout)(() => work, timeoutMs, 'MCP session termination').then(() => answered(watch.answered, startedAt, now), (error) => {
|
|
127
|
+
if (error instanceof toolSessions_js_1.ToolTeardownTimeoutError) {
|
|
128
|
+
deadline.abort(error);
|
|
129
|
+
return finished('timed-out', startedAt, now);
|
|
130
|
+
}
|
|
131
|
+
return failedWith(error, watch.answered, startedAt, now);
|
|
132
|
+
});
|
|
133
|
+
// Closed locally once the remote side has its answer, whatever it is.
|
|
134
|
+
const closing = remote.then(() => settle(close));
|
|
135
|
+
// The caller's wait for that close starts NOW, beside the remote one: both
|
|
136
|
+
// end at the same elapsed deadline, whatever the wall clock does meanwhile.
|
|
137
|
+
const outcome = within(closing, timeoutMs).then(() => remote);
|
|
138
|
+
return {
|
|
139
|
+
outcome,
|
|
140
|
+
settled: Promise.allSettled([work, closing]).then(() => undefined),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
exports.endSession = endSession;
|
|
144
|
+
/** `close()`, never rejecting. */
|
|
145
|
+
function settle(close) {
|
|
146
|
+
return Promise.resolve()
|
|
147
|
+
.then(close)
|
|
148
|
+
.then(() => undefined, () => undefined);
|
|
149
|
+
}
|
|
150
|
+
/** `work`, or `ms` of elapsed time from now — whichever comes first. Never rejects; the work goes on. */
|
|
151
|
+
function within(work, ms) {
|
|
152
|
+
return (0, toolSessions_js_1.withTimeout)(() => work, ms, 'MCP local close').then(() => undefined, () => undefined);
|
|
153
|
+
}
|
|
154
|
+
/** The SDK resolved: a 2xx, or a 405 it treats as success. */
|
|
155
|
+
function answered(status, startedAt, now) {
|
|
156
|
+
if (status === 405)
|
|
157
|
+
return finished('not-offered', startedAt, now, status);
|
|
158
|
+
if (status !== undefined && status >= 200 && status < 300) {
|
|
159
|
+
return finished('terminated', startedAt, now, status);
|
|
160
|
+
}
|
|
161
|
+
// Resolved without an answer this watch saw: nothing was sent.
|
|
162
|
+
return finished('no-session', startedAt, now, status);
|
|
163
|
+
}
|
|
164
|
+
/** The SDK rejected: a 404, another status, a lost handle, or no answer at all. */
|
|
165
|
+
function failedWith(error, status, startedAt, now) {
|
|
166
|
+
if ((0, toolSessions_js_1.isLocalSessionHandleLost)(error)) {
|
|
167
|
+
return finished('handle-lost', startedAt, now, undefined, classOf(error));
|
|
168
|
+
}
|
|
169
|
+
if (status === 404)
|
|
170
|
+
return finished('already-gone', startedAt, now, status);
|
|
171
|
+
return finished('failed', startedAt, now, status, classOf(error));
|
|
172
|
+
}
|
|
173
|
+
function finished(remote, startedAt, now, status, errorClass) {
|
|
174
|
+
return {
|
|
175
|
+
remote,
|
|
176
|
+
resolved: remote === 'terminated' || remote === 'already-gone' || remote === 'no-session',
|
|
177
|
+
...(status !== undefined && { status }),
|
|
178
|
+
...(errorClass !== undefined && { errorClass }),
|
|
179
|
+
durationMs: Math.max(0, now() - startedAt),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/** A failure's class name, never its message. */
|
|
183
|
+
function classOf(error) {
|
|
184
|
+
if (error instanceof Error) {
|
|
185
|
+
const ctor = error.constructor;
|
|
186
|
+
if (typeof ctor?.name === 'string' && ctor.name !== '')
|
|
187
|
+
return ctor.name;
|
|
188
|
+
return error.name;
|
|
189
|
+
}
|
|
190
|
+
return typeof error;
|
|
191
|
+
}
|
|
192
|
+
exports.classOf = classOf;
|
|
193
|
+
//# sourceMappingURL=terminate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../src/mcp/terminate.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,6 +108,7 @@ const footprintjs_1 = require("footprintjs");
|
|
|
108
108
|
const abort_js_1 = require("../lib/abort.js");
|
|
109
109
|
const backoff_js_1 = require("./backoff.js");
|
|
110
110
|
const replay_js_1 = require("./replay.js");
|
|
111
|
+
const requestGuard_js_1 = require("./requestGuard.js");
|
|
111
112
|
const seriesEvidence_js_1 = require("./seriesEvidence.js");
|
|
112
113
|
/** HTTP 429, with the server's own `Retry-After` when it sent one. */
|
|
113
114
|
function throttled(response) {
|
|
@@ -353,6 +354,16 @@ class Series {
|
|
|
353
354
|
permitted;
|
|
354
355
|
/** The attempt sent and not yet recorded — what a cancellation cuts in flight. */
|
|
355
356
|
inFlight;
|
|
357
|
+
/**
|
|
358
|
+
* The send gate of the pooled operation this request belongs to
|
|
359
|
+
* (`requestGuard.ts`) — on the request's `init`, or on its ledger claim.
|
|
360
|
+
* Absent for a request no pool sent.
|
|
361
|
+
*/
|
|
362
|
+
gate;
|
|
363
|
+
/** The attempt the gate stopped before it was sent: it has no row. */
|
|
364
|
+
gateStopped;
|
|
365
|
+
/** The error the latest failed attempt ended with — what a gate stop ends the series on. */
|
|
366
|
+
lastError;
|
|
356
367
|
constructor(rules, input, init, declaration, ledger) {
|
|
357
368
|
this.rules = rules;
|
|
358
369
|
this.input = input;
|
|
@@ -365,6 +376,7 @@ class Series {
|
|
|
365
376
|
const { maxElapsedMs } = this.owner;
|
|
366
377
|
this.deadline = Number.isFinite(maxElapsedMs) ? this.startedAt + maxElapsedMs : undefined;
|
|
367
378
|
const claimed = ledger?.claim(init?.body);
|
|
379
|
+
this.gate = (0, requestGuard_js_1.guardOf)(init) ?? claimed?.guard;
|
|
368
380
|
const ticket = claimed?.ticket;
|
|
369
381
|
// A request no ledger claimed keeps its facts here, with no answer to watch.
|
|
370
382
|
this.shared = claimed?.replay ?? new replay_js_1.RequestReplay('', false);
|
|
@@ -456,6 +468,20 @@ class Series {
|
|
|
456
468
|
* streaming for as long as the caller's own signal allows.
|
|
457
469
|
*/
|
|
458
470
|
async send(inner, t) {
|
|
471
|
+
// A pooled operation's send gate, asked before every attempt — the first
|
|
472
|
+
// was asked by the pool's own fetch an instant before the series began; a
|
|
473
|
+
// later one is asked here, after the wait, before anything is sent. A
|
|
474
|
+
// binding that went stale or an operation out of time sends nothing more:
|
|
475
|
+
// the attempt is never sent, so it has no row (`report`).
|
|
476
|
+
if (t.attempt > 1 && this.gate !== undefined) {
|
|
477
|
+
try {
|
|
478
|
+
this.gate.check();
|
|
479
|
+
}
|
|
480
|
+
catch (refusal) {
|
|
481
|
+
this.gateStopped = t.attempt;
|
|
482
|
+
throw refusal;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
459
485
|
this.attemptNo = t.attempt;
|
|
460
486
|
// From here the request is SENT — counted, as a row, however the attempt ends.
|
|
461
487
|
this.inFlight = t.attempt;
|
|
@@ -468,8 +494,15 @@ class Series {
|
|
|
468
494
|
const cut = this.cutsInFlight ? (0, abort_js_1.linkedController)(t.signal) : undefined;
|
|
469
495
|
const signal = (0, abort_js_1.eitherSignal)(this.signal, cut?.controller.signal);
|
|
470
496
|
try {
|
|
471
|
-
const
|
|
472
|
-
|
|
497
|
+
const sent = cut === undefined ? this.init : { ...this.init, ...(signal && { signal }) };
|
|
498
|
+
// The gate rides every attempt's `init`, so the vending fetch and the AWS
|
|
499
|
+
// command ask it after their own waits (`requestGuard.ts`).
|
|
500
|
+
const init = this.gate !== undefined && (0, requestGuard_js_1.guardOf)(sent) === undefined ? (0, requestGuard_js_1.withGuard)(sent, this.gate) : sent;
|
|
501
|
+
const pending = inner(this.input, init);
|
|
502
|
+
// An attempt this series gives up on — a cut, a deadline — may still be
|
|
503
|
+
// running underneath: it stays counted under the operation until it settles.
|
|
504
|
+
this.gate?.track(pending);
|
|
505
|
+
const response = await pending;
|
|
473
506
|
this.seen = { attempt: t.attempt, status: response.status };
|
|
474
507
|
const refused = await this.recognise(response, signal);
|
|
475
508
|
if (refused === undefined)
|
|
@@ -512,6 +545,11 @@ class Series {
|
|
|
512
545
|
retryOn(error) {
|
|
513
546
|
this.plannedWaitMs = 0;
|
|
514
547
|
this.permitted = undefined;
|
|
548
|
+
// An attempt the gate stopped was never sent: nothing follows it, and the
|
|
549
|
+
// failure the series ends on stays the last attempt that was.
|
|
550
|
+
if (this.gateStopped !== undefined)
|
|
551
|
+
return this.decline('not-permitted');
|
|
552
|
+
this.lastError = error;
|
|
515
553
|
const refused = this.latest;
|
|
516
554
|
const refusal = refused !== undefined && error === refused.refusal ? refused : undefined;
|
|
517
555
|
// What failed: a refusal a rule recognised, or a request that failed in
|
|
@@ -520,6 +558,10 @@ class Series {
|
|
|
520
558
|
const failure = refusal === undefined ? (0, replay_js_1.thrownFailure)(error) : refusalOf(refusal.rule);
|
|
521
559
|
if (failure === undefined)
|
|
522
560
|
return this.decline('not-retryable');
|
|
561
|
+
// The pooled operation's gate, asked before a repeat is planned: a stale
|
|
562
|
+
// binding or an operation out of time permits nothing more to be sent.
|
|
563
|
+
if (!this.gateAllows())
|
|
564
|
+
return this.decline('not-permitted');
|
|
523
565
|
const decision = (0, replay_js_1.permit)(this.declaration, this.target, failure);
|
|
524
566
|
if (!decision.repeat)
|
|
525
567
|
return this.decline(decision.declined);
|
|
@@ -552,6 +594,18 @@ class Series {
|
|
|
552
594
|
this.declined = reason;
|
|
553
595
|
return false;
|
|
554
596
|
}
|
|
597
|
+
/** Whether the pooled operation's gate lets another attempt be sent. True with no gate. */
|
|
598
|
+
gateAllows() {
|
|
599
|
+
if (this.gate === undefined)
|
|
600
|
+
return true;
|
|
601
|
+
try {
|
|
602
|
+
this.gate.check();
|
|
603
|
+
return true;
|
|
604
|
+
}
|
|
605
|
+
catch {
|
|
606
|
+
return false;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
555
609
|
elapsedAfter(waitMs) {
|
|
556
610
|
return Date.now() - this.startedAt + waitMs;
|
|
557
611
|
}
|
|
@@ -562,6 +616,9 @@ class Series {
|
|
|
562
616
|
* cost the run its evidence.
|
|
563
617
|
*/
|
|
564
618
|
report(record) {
|
|
619
|
+
// Stopped by the gate before it was sent: no row, nothing to count.
|
|
620
|
+
if (record.attempt === this.gateStopped)
|
|
621
|
+
return;
|
|
565
622
|
const refused = this.latest;
|
|
566
623
|
if (this.inFlight === record.attempt)
|
|
567
624
|
this.inFlight = undefined;
|
|
@@ -632,14 +689,21 @@ class Series {
|
|
|
632
689
|
throw (0, abort_js_1.abortErrorOf)(this.cancel);
|
|
633
690
|
}
|
|
634
691
|
// The series ended on a refusal — attempts spent, a ceiling reached, no
|
|
635
|
-
// time left
|
|
636
|
-
|
|
692
|
+
// time left, or a pooled operation's gate that permits nothing more. The
|
|
693
|
+
// server's answer is delivered as it sent it.
|
|
694
|
+
const stopped = this.gateStopped !== undefined;
|
|
695
|
+
// A gate stop is the decision the record ends on — never a deadline the
|
|
696
|
+
// series did not reach, never an attempt that was not sent.
|
|
697
|
+
const stoppedBy = stopped ? 'not-permitted' : undefined;
|
|
698
|
+
if (this.latest !== undefined && (error === this.latest.refusal || stopped)) {
|
|
637
699
|
this.shared.deliveredStatus(this.latest.response.status);
|
|
638
|
-
this.evidence?.delivered();
|
|
700
|
+
this.evidence?.delivered(stoppedBy);
|
|
639
701
|
return this.latest.response;
|
|
640
702
|
}
|
|
641
|
-
this.evidence?.threw(this.deadline !== undefined && Date.now() >= this.deadline);
|
|
642
|
-
|
|
703
|
+
this.evidence?.threw(this.deadline !== undefined && Date.now() >= this.deadline, stoppedBy);
|
|
704
|
+
// A gate stop after a failure with no answer ends on that failure: the
|
|
705
|
+
// attempt that was sent is the one the caller hears about.
|
|
706
|
+
throw stopped ? this.lastError : error;
|
|
643
707
|
}
|
|
644
708
|
supersede() {
|
|
645
709
|
if (this.latest !== undefined)
|