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
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* options — what `mcpClientPool` is built from, read and checked once.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: one options type + one reader that refuses by name.
|
|
6
|
+
* Role: The pool's budgets and clocks (`docs/design/2026-10-mcp-client-pool.md`
|
|
7
|
+
* § 3.1). Every number is checked when the pool is built, never at the
|
|
8
|
+
* first call. The pool takes the `mcpClient` options that shape one
|
|
9
|
+
* connection and hands them to every client it opens; it never takes
|
|
10
|
+
* `connection`, because it must build the transport itself — to end
|
|
11
|
+
* the session, to hear the tools-changed notice, and to place the send
|
|
12
|
+
* gate.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.readPoolOptions = exports.MAX_SHARED_TOOLS = exports.MAX_DEFINITION_ENTRIES = exports.MCP_POOL_DEFAULTS = void 0;
|
|
16
|
+
const replay_js_1 = require("../replay.js");
|
|
17
|
+
/** The defaults, named so a test and a docstring cannot drift from the code. */
|
|
18
|
+
exports.MCP_POOL_DEFAULTS = Object.freeze({
|
|
19
|
+
maxClients: 64,
|
|
20
|
+
maxClientsPerPrincipal: 8,
|
|
21
|
+
maxEnding: 8,
|
|
22
|
+
maxOperations: 256,
|
|
23
|
+
initTimeoutMs: 30_000,
|
|
24
|
+
idleMs: 600_000,
|
|
25
|
+
maxLeaseMs: 900_000,
|
|
26
|
+
definitionTtlMs: 600_000,
|
|
27
|
+
});
|
|
28
|
+
/** At most this many shared definition entries are kept; the least recently used goes first. */
|
|
29
|
+
exports.MAX_DEFINITION_ENTRIES = 256;
|
|
30
|
+
/** A list longer than this is used by its own client and never shared. */
|
|
31
|
+
exports.MAX_SHARED_TOOLS = 512;
|
|
32
|
+
/**
|
|
33
|
+
* Read `options` once.
|
|
34
|
+
*
|
|
35
|
+
* @throws TypeError naming the option, when one is missing, mistyped or out of
|
|
36
|
+
* range, or when `connection` is given — here, when the pool is built.
|
|
37
|
+
*/
|
|
38
|
+
function readPoolOptions(options) {
|
|
39
|
+
if (options === null || typeof options !== 'object') {
|
|
40
|
+
throw new TypeError('mcpClientPool: options must be an object with `name` and `transport`.');
|
|
41
|
+
}
|
|
42
|
+
const { name } = options;
|
|
43
|
+
if (typeof name !== 'string' || name.trim() === '') {
|
|
44
|
+
throw new TypeError('mcpClientPool: `name` must be a non-empty string — the server name every tool and record carries.');
|
|
45
|
+
}
|
|
46
|
+
const where = `mcpClientPool[${name}]`;
|
|
47
|
+
if (options.connection !== undefined) {
|
|
48
|
+
throw new TypeError(`${where}: \`connection\` is not taken. The pool builds every client's transport itself — ` +
|
|
49
|
+
'to end its session, to hear the tools-changed notice and to place the send gate. Pass ' +
|
|
50
|
+
'`transport`, or a function of the identity that returns one.');
|
|
51
|
+
}
|
|
52
|
+
const transport = transportOf(options.transport, where);
|
|
53
|
+
const count = (key) => positiveInteger(options[key], exports.MCP_POOL_DEFAULTS[key], key, where);
|
|
54
|
+
const definitions = options.definitions ?? 'per-client';
|
|
55
|
+
if (definitions !== 'per-client' && typeof definitions?.share !== 'function') {
|
|
56
|
+
throw new TypeError(`${where}: \`definitions\` must be 'per-client' or { share: (identity) => names | undefined }.`);
|
|
57
|
+
}
|
|
58
|
+
if (options.onEvent !== undefined && typeof options.onEvent !== 'function') {
|
|
59
|
+
throw new TypeError(`${where}: \`onEvent\` must be a function.`);
|
|
60
|
+
}
|
|
61
|
+
if (options.now !== undefined && typeof options.now !== 'function') {
|
|
62
|
+
throw new TypeError(`${where}: the clock option must be a function returning milliseconds.`);
|
|
63
|
+
}
|
|
64
|
+
// Refused by field now, as each client would refuse it at its first open.
|
|
65
|
+
if (options.replay !== undefined)
|
|
66
|
+
(0, replay_js_1.replayDeclarationOf)(options.replay, where);
|
|
67
|
+
return {
|
|
68
|
+
name,
|
|
69
|
+
transport,
|
|
70
|
+
maxClients: count('maxClients'),
|
|
71
|
+
maxClientsPerPrincipal: count('maxClientsPerPrincipal'),
|
|
72
|
+
maxEnding: count('maxEnding'),
|
|
73
|
+
maxOperations: count('maxOperations'),
|
|
74
|
+
initTimeoutMs: count('initTimeoutMs'),
|
|
75
|
+
idleMs: count('idleMs'),
|
|
76
|
+
maxLeaseMs: count('maxLeaseMs'),
|
|
77
|
+
definitionTtlMs: count('definitionTtlMs'),
|
|
78
|
+
share: definitions === 'per-client' ? undefined : definitions.share,
|
|
79
|
+
requirePrincipal: flag(options.requirePrincipal, true, 'requirePrincipal', where),
|
|
80
|
+
requireTenant: flag(options.requireTenant, false, 'requireTenant', where),
|
|
81
|
+
onEvent: options.onEvent,
|
|
82
|
+
client: {
|
|
83
|
+
...(options.resultMode !== undefined && { resultMode: options.resultMode }),
|
|
84
|
+
...(options.clientInfo !== undefined && { clientInfo: options.clientInfo }),
|
|
85
|
+
...(options.retryOnThrottle !== undefined && { retryOnThrottle: options.retryOnThrottle }),
|
|
86
|
+
...(options.replay !== undefined && { replay: options.replay }),
|
|
87
|
+
...(options.sdk !== undefined && { sdk: options.sdk }),
|
|
88
|
+
...(options.jsonSchemaValidator !== undefined && {
|
|
89
|
+
jsonSchemaValidator: options.jsonSchemaValidator,
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
92
|
+
now: options.now ?? Date.now,
|
|
93
|
+
open: options._open,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
exports.readPoolOptions = readPoolOptions;
|
|
97
|
+
/** One transport for everyone, or a function of the identity — as a function either way. */
|
|
98
|
+
function transportOf(value, where) {
|
|
99
|
+
if (typeof value === 'function')
|
|
100
|
+
return value;
|
|
101
|
+
if (value !== null && typeof value === 'object' && typeof value.transport === 'string') {
|
|
102
|
+
return () => value;
|
|
103
|
+
}
|
|
104
|
+
throw new TypeError(`${where}: \`transport\` must be an MCP transport ({ transport: 'http' | 'gateway' | 'stdio', … }) ` +
|
|
105
|
+
'or a function of the identity that returns one.');
|
|
106
|
+
}
|
|
107
|
+
/** A whole number ≥ 1, or the default when absent. */
|
|
108
|
+
function positiveInteger(value, fallback, key, where) {
|
|
109
|
+
if (value === undefined)
|
|
110
|
+
return fallback;
|
|
111
|
+
if (typeof value === 'number' && Number.isInteger(value) && value >= 1)
|
|
112
|
+
return value;
|
|
113
|
+
throw new TypeError(`${where}: \`${key}\` must be a whole number ≥ 1.`);
|
|
114
|
+
}
|
|
115
|
+
/** A boolean, or the default when absent. */
|
|
116
|
+
function flag(value, fallback, key, where) {
|
|
117
|
+
if (value === undefined)
|
|
118
|
+
return fallback;
|
|
119
|
+
if (typeof value === 'boolean')
|
|
120
|
+
return value;
|
|
121
|
+
throw new TypeError(`${where}: \`${key}\` must be true or false.`);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/mcp/pool/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* plan — what one client is opened from, resolved before anything opens, and
|
|
4
|
+
* the context its tool definitions belong to.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: a pure resolution step + two hashes.
|
|
7
|
+
* Role: § 6.1–6.2 of the design. A client is opened from a PLAN: the
|
|
8
|
+
* transport the factory returns for this identity, resolved at that
|
|
9
|
+
* moment and kept unchanged for the client's life. The plan's
|
|
10
|
+
* `configHash` is SHA-256 over a canonical encoding of the transport's
|
|
11
|
+
* comparable data — the pool name; the transport kind and URL; header
|
|
12
|
+
* names and a digest of their values; a gateway's service, scopes,
|
|
13
|
+
* mode and credential provider id; stdio's command, args and working
|
|
14
|
+
* directory; the transport's own stated `settings`; `resultMode` and
|
|
15
|
+
* `clientInfo`. A function (a `fetch`, an AWS client) cannot be
|
|
16
|
+
* compared: the app's `configuration` name covers it.
|
|
17
|
+
*
|
|
18
|
+
* The definitions CONTEXT is the binding a tool is listed under:
|
|
19
|
+
*
|
|
20
|
+
* - per client (the default): `pc:<configHash>` — the client's own list;
|
|
21
|
+
* - shared, when the app's `share` names both a configuration and an
|
|
22
|
+
* authorization: `sh:<sha256(configHash, configuration, authorization,
|
|
23
|
+
* tenant)>`. The tenant is always in it: the app's names widen sharing
|
|
24
|
+
* across principals, never across tenants.
|
|
25
|
+
*
|
|
26
|
+
* The transport is resolved once, when a client opens; the context is not. The
|
|
27
|
+
* app's names can move — a policy version in `authorization` — so the pool asks
|
|
28
|
+
* `share` again at every listing, every call and every send gate
|
|
29
|
+
* (`contextFor`), over the client's own `configHash`: a conversation that
|
|
30
|
+
* already has a client follows a new name as a new conversation would.
|
|
31
|
+
*
|
|
32
|
+
* Neither hash leaves the process; the app's names are hashed and never kept.
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.configHashOf = exports.contextFor = exports.resolvePlan = void 0;
|
|
36
|
+
const canonicalJson_js_1 = require("../../lib/canonicalJson.js");
|
|
37
|
+
const sha256_js_1 = require("../../lib/sha256.js");
|
|
38
|
+
/**
|
|
39
|
+
* The plan for `key`: the transport the factory returns now, and the context
|
|
40
|
+
* its definitions belong to.
|
|
41
|
+
*
|
|
42
|
+
* @throws what the transport factory or `share` throws, and a TypeError when
|
|
43
|
+
* `share` answers with anything but two names or `undefined` — the caller
|
|
44
|
+
* refuses the open with `init-failed`, the error as its `cause`
|
|
45
|
+
*/
|
|
46
|
+
function resolvePlan(settings, key) {
|
|
47
|
+
const transport = settings.transport(key.identity);
|
|
48
|
+
if (transport === null ||
|
|
49
|
+
typeof transport !== 'object' ||
|
|
50
|
+
typeof transport.transport !== 'string') {
|
|
51
|
+
throw new TypeError(`mcpClientPool[${settings.name}]: the \`transport\` function returned something that is not an MCP transport.`);
|
|
52
|
+
}
|
|
53
|
+
const configHash = configHashOf(settings, transport);
|
|
54
|
+
return { transport, configHash, ...contextFor(settings, key, configHash) };
|
|
55
|
+
}
|
|
56
|
+
exports.resolvePlan = resolvePlan;
|
|
57
|
+
/**
|
|
58
|
+
* The definitions context `key` belongs to now, for a client opened with
|
|
59
|
+
* `configHash`: the app's `share` asked again.
|
|
60
|
+
*
|
|
61
|
+
* @throws what `share` throws, and a TypeError when it answers with anything
|
|
62
|
+
* but two names or `undefined`
|
|
63
|
+
*/
|
|
64
|
+
function contextFor(settings, key, configHash) {
|
|
65
|
+
const names = shareOf(settings, key);
|
|
66
|
+
if (names === undefined)
|
|
67
|
+
return { context: `pc:${configHash}`, shared: false };
|
|
68
|
+
const context = (0, sha256_js_1.sha256Hex)((0, canonicalJson_js_1.canonicalJson)({
|
|
69
|
+
configHash,
|
|
70
|
+
configuration: names.configuration,
|
|
71
|
+
authorization: names.authorization,
|
|
72
|
+
tenant: key.tenant,
|
|
73
|
+
}));
|
|
74
|
+
return { context: `sh:${context}`, shared: true };
|
|
75
|
+
}
|
|
76
|
+
exports.contextFor = contextFor;
|
|
77
|
+
/** The app's two names for this conversation, or `undefined` for a list of its own. */
|
|
78
|
+
function shareOf(settings, key) {
|
|
79
|
+
if (settings.share === undefined)
|
|
80
|
+
return undefined;
|
|
81
|
+
const names = settings.share(key.identity);
|
|
82
|
+
if (names === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
if (names !== null &&
|
|
85
|
+
typeof names === 'object' &&
|
|
86
|
+
typeof names.configuration === 'string' &&
|
|
87
|
+
typeof names.authorization === 'string') {
|
|
88
|
+
const { configuration, authorization } = names;
|
|
89
|
+
return { configuration, authorization };
|
|
90
|
+
}
|
|
91
|
+
throw new TypeError(`mcpClientPool[${settings.name}]: \`definitions.share\` must return { configuration, authorization } ` +
|
|
92
|
+
'(two strings) or undefined, synchronously.');
|
|
93
|
+
}
|
|
94
|
+
/** SHA-256 over the transport's comparable data (see the module note). */
|
|
95
|
+
function configHashOf(settings, transport) {
|
|
96
|
+
return (0, sha256_js_1.sha256Hex)((0, canonicalJson_js_1.canonicalJson)({
|
|
97
|
+
pool: settings.name,
|
|
98
|
+
transport: comparableOf(transport),
|
|
99
|
+
resultMode: settings.client.resultMode ?? null,
|
|
100
|
+
clientInfo: settings.client.clientInfo ?? null,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
exports.configHashOf = configHashOf;
|
|
104
|
+
/** The comparable part of a transport: data only, functions left out. */
|
|
105
|
+
function comparableOf(transport) {
|
|
106
|
+
if (transport.transport === 'stdio') {
|
|
107
|
+
return {
|
|
108
|
+
kind: 'stdio',
|
|
109
|
+
command: transport.command,
|
|
110
|
+
args: [...(transport.args ?? [])],
|
|
111
|
+
cwd: transport.cwd ?? null,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const headers = headersOf(transport.headers);
|
|
115
|
+
if (transport.transport === 'gateway') {
|
|
116
|
+
return {
|
|
117
|
+
kind: 'gateway',
|
|
118
|
+
url: transport.url,
|
|
119
|
+
headers,
|
|
120
|
+
service: transport.service,
|
|
121
|
+
scopes: [...(transport.scopes ?? [])],
|
|
122
|
+
mode: transport.mode ?? null,
|
|
123
|
+
credentials: transport.credentials?.id ?? null,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
kind: 'http',
|
|
128
|
+
url: transport.url,
|
|
129
|
+
headers,
|
|
130
|
+
settings: transport.settings ?? null,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/** Header names, and a digest of their values — never the values themselves. */
|
|
134
|
+
function headersOf(headers) {
|
|
135
|
+
if (headers === undefined)
|
|
136
|
+
return { names: [], digest: null };
|
|
137
|
+
const lowered = Object.fromEntries(Object.entries(headers).map(([name, value]) => [name.toLowerCase(), value]));
|
|
138
|
+
return { names: Object.keys(lowered).sort(), digest: (0, sha256_js_1.sha256Hex)((0, canonicalJson_js_1.canonicalJson)(lowered)) };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/mcp/pool/plan.ts"],"names":[],"mappings":"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"}
|