@namzu/sdk 40.0.0 → 42.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +236 -0
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +3 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +11 -0
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/runAgent.d.ts +14 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +3 -0
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +8 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +11 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/connector/index.d.ts +2 -2
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +1 -1
- package/dist/connector/index.js.map +1 -1
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +92 -4
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/audio-admission.d.ts +17 -0
- package/dist/connector/mcp/audio-admission.d.ts.map +1 -0
- package/dist/connector/mcp/audio-admission.js +171 -0
- package/dist/connector/mcp/audio-admission.js.map +1 -0
- package/dist/connector/mcp/client.d.ts +252 -1
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +611 -39
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/envelope.d.ts +91 -0
- package/dist/connector/mcp/envelope.d.ts.map +1 -0
- package/dist/connector/mcp/envelope.js +173 -0
- package/dist/connector/mcp/envelope.js.map +1 -0
- package/dist/connector/mcp/era.d.ts +130 -0
- package/dist/connector/mcp/era.d.ts.map +1 -0
- package/dist/connector/mcp/era.js +304 -0
- package/dist/connector/mcp/era.js.map +1 -0
- package/dist/connector/mcp/errors.d.ts +106 -0
- package/dist/connector/mcp/errors.d.ts.map +1 -0
- package/dist/connector/mcp/errors.js +154 -0
- package/dist/connector/mcp/errors.js.map +1 -0
- package/dist/connector/mcp/http-sse.d.ts +11 -0
- package/dist/connector/mcp/http-sse.d.ts.map +1 -1
- package/dist/connector/mcp/http-sse.js +21 -6
- package/dist/connector/mcp/http-sse.js.map +1 -1
- package/dist/connector/mcp/index.d.ts +7 -0
- package/dist/connector/mcp/index.d.ts.map +1 -1
- package/dist/connector/mcp/index.js +10 -0
- package/dist/connector/mcp/index.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts +83 -0
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
- package/dist/connector/mcp/streamable-http.js +177 -11
- package/dist/connector/mcp/streamable-http.js.map +1 -1
- package/dist/connector/mcp/x-mcp-header.d.ts +56 -0
- package/dist/connector/mcp/x-mcp-header.d.ts.map +1 -0
- package/dist/connector/mcp/x-mcp-header.js +254 -0
- package/dist/connector/mcp/x-mcp-header.js.map +1 -0
- package/dist/constants/mcp/index.d.ts +123 -15
- package/dist/constants/mcp/index.d.ts.map +1 -1
- package/dist/constants/mcp/index.js +135 -16
- package/dist/constants/mcp/index.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +43 -0
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts +20 -0
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
- package/dist/prompt/coding-agent-doctrine.js +19 -3
- package/dist/prompt/coding-agent-doctrine.js.map +1 -1
- package/dist/prompt/index.d.ts +1 -1
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +1 -1
- package/dist/prompt/index.js.map +1 -1
- package/dist/public-runtime.d.ts +7 -4
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +16 -4
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +1 -1
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +4 -2
- package/dist/public-tools.js.map +1 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +10 -1
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/bidi/session.d.ts +11 -0
- package/dist/runtime/bidi/session.d.ts.map +1 -1
- package/dist/runtime/bidi/session.js +2 -0
- package/dist/runtime/bidi/session.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +6 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +6 -0
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/guardrail-presets.d.ts +187 -1
- package/dist/runtime/query/guardrail-presets.d.ts.map +1 -1
- package/dist/runtime/query/guardrail-presets.js +298 -0
- package/dist/runtime/query/guardrail-presets.js.map +1 -1
- package/dist/runtime/query/index.d.ts +14 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +3 -0
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +2 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +3 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +46 -3
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +8 -0
- package/dist/scheduler/local.js.map +1 -1
- package/dist/store/run/disk.d.ts +35 -1
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +100 -0
- package/dist/store/run/disk.js.map +1 -1
- package/dist/tools/coordinator/agent.d.ts.map +1 -1
- package/dist/tools/coordinator/agent.js +17 -2
- package/dist/tools/coordinator/agent.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +17 -3
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/untrusted-envelope.d.ts +35 -0
- package/dist/tools/untrusted-envelope.d.ts.map +1 -1
- package/dist/tools/untrusted-envelope.js +91 -3
- package/dist/tools/untrusted-envelope.js.map +1 -1
- package/dist/types/agent/base.d.ts +23 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +20 -0
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +39 -0
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/connector/mcp.d.ts +205 -0
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +56 -0
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/store.d.ts +41 -0
- package/dist/types/run/store.d.ts.map +1 -1
- package/dist/types/sandbox/index.d.ts +68 -1
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +19 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/ReactiveAgent.ts +3 -0
- package/src/agents/SupervisorAgent.ts +11 -0
- package/src/agents/runAgent.ts +18 -0
- package/src/bridge/a2a/mapper.ts +8 -0
- package/src/bridge/sse/mapper.ts +11 -0
- package/src/connector/index.ts +27 -0
- package/src/connector/mcp/adapter.ts +103 -4
- package/src/connector/mcp/audio-admission.ts +173 -0
- package/src/connector/mcp/client.ts +694 -45
- package/src/connector/mcp/envelope.ts +235 -0
- package/src/connector/mcp/era.ts +400 -0
- package/src/connector/mcp/errors.ts +171 -0
- package/src/connector/mcp/http-sse.ts +23 -6
- package/src/connector/mcp/index.ts +37 -0
- package/src/connector/mcp/streamable-http.ts +199 -11
- package/src/connector/mcp/x-mcp-header.ts +322 -0
- package/src/constants/mcp/index.ts +145 -16
- package/src/manager/agent/lifecycle.ts +51 -0
- package/src/prompt/coding-agent-doctrine.ts +31 -4
- package/src/prompt/index.ts +1 -0
- package/src/public-runtime.ts +42 -0
- package/src/public-tools.ts +8 -2
- package/src/registry/tool/execute.ts +9 -1
- package/src/runtime/bidi/session.ts +13 -0
- package/src/runtime/query/executor.ts +13 -0
- package/src/runtime/query/guardrail-presets.ts +356 -0
- package/src/runtime/query/index.ts +17 -0
- package/src/runtime/query/tooling.ts +5 -0
- package/src/sandbox/provider/local.ts +45 -2
- package/src/scheduler/local.ts +8 -0
- package/src/store/run/disk.ts +108 -0
- package/src/tools/coordinator/agent.ts +17 -2
- package/src/tools/coordinator/index.ts +17 -3
- package/src/tools/untrusted-envelope.ts +94 -3
- package/src/types/agent/base.ts +24 -0
- package/src/types/agent/scheduler.ts +21 -0
- package/src/types/agent/task.ts +41 -0
- package/src/types/connector/mcp.ts +205 -1
- package/src/types/run/events.ts +56 -0
- package/src/types/run/store.ts +42 -0
- package/src/types/sandbox/index.ts +69 -1
- package/src/types/tool/index.ts +20 -0
|
@@ -30,12 +30,15 @@ export class HttpSseTransport {
|
|
|
30
30
|
postUrl;
|
|
31
31
|
log;
|
|
32
32
|
timeoutMs;
|
|
33
|
+
/** Defaults to the ambient global `fetch`; never read again once captured. */
|
|
34
|
+
fetchImpl;
|
|
33
35
|
constructor(config, log) {
|
|
34
36
|
this.config = config;
|
|
35
37
|
const base = stripTrailingSlashes(config.url);
|
|
36
38
|
this.sseUrl = `${base}/sse`;
|
|
37
39
|
this.postUrl = `${base}/message`;
|
|
38
40
|
this.timeoutMs = validateConnectorTimeoutMs(config.timeoutMs ?? DEFAULT_TIMEOUT_MS, 'HttpSseTransport timeoutMs');
|
|
41
|
+
this.fetchImpl = config.fetch ?? fetch;
|
|
39
42
|
this.log = resolveLogger(log).child({ [SCOPE_ATTRIBUTE]: 'connector/mcp/http-sse' });
|
|
40
43
|
}
|
|
41
44
|
async connect() {
|
|
@@ -82,12 +85,9 @@ export class HttpSseTransport {
|
|
|
82
85
|
const owned = this.beginSend(options?.signal);
|
|
83
86
|
const operation = new ConnectorHttpOperation(owned.controller.signal, this.timeoutMs, 'HTTP-SSE MCP send');
|
|
84
87
|
try {
|
|
85
|
-
const response = await operation.run(() =>
|
|
88
|
+
const response = await operation.run(() => this.fetchImpl(this.postUrl, {
|
|
86
89
|
method: 'POST',
|
|
87
|
-
headers:
|
|
88
|
-
'Content-Type': 'application/json',
|
|
89
|
-
...this.config.headers,
|
|
90
|
-
},
|
|
90
|
+
headers: this.buildHeaders(options?.headers),
|
|
91
91
|
body: JSON.stringify(message),
|
|
92
92
|
redirect: 'manual',
|
|
93
93
|
signal: operation.signal,
|
|
@@ -123,6 +123,21 @@ export class HttpSseTransport {
|
|
|
123
123
|
isConnected() {
|
|
124
124
|
return this.connected;
|
|
125
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* `extra` comes from `MCPTransportSendOptions.headers` — the client's
|
|
128
|
+
* per-send authority — and is merged over this transport's own static
|
|
129
|
+
* config headers so a caller's value wins on a collision. See
|
|
130
|
+
* {@link StreamableHttpTransport}'s method of the same name, which this
|
|
131
|
+
* mirrors; the HTTP-SSE POST had no equivalent merge until now, so a
|
|
132
|
+
* per-request header or bearer token silently never reached the wire.
|
|
133
|
+
*/
|
|
134
|
+
buildHeaders(extra) {
|
|
135
|
+
return {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
...this.config.headers,
|
|
138
|
+
...extra,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
126
141
|
beginSend(signal) {
|
|
127
142
|
signal?.throwIfAborted();
|
|
128
143
|
const controller = new AbortController();
|
|
@@ -163,7 +178,7 @@ export class HttpSseTransport {
|
|
|
163
178
|
});
|
|
164
179
|
}
|
|
165
180
|
async listenSSE(generation, signal) {
|
|
166
|
-
const response = await
|
|
181
|
+
const response = await this.fetchImpl(this.sseUrl, {
|
|
167
182
|
headers: {
|
|
168
183
|
Accept: 'text/event-stream',
|
|
169
184
|
...this.config.headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-sse.js","sourceRoot":"","sources":["../../../src/connector/mcp/http-sse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-sse.js","sourceRoot":"","sources":["../../../src/connector/mcp/http-sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,13 @@ export { StdioTransport } from './stdio.js';
|
|
|
2
2
|
export { HttpSseTransport } from './http-sse.js';
|
|
3
3
|
export { StreamableHttpTransport } from './streamable-http.js';
|
|
4
4
|
export { MCPClient } from './client.js';
|
|
5
|
+
export { isHeaderMismatchError, isMissingRequiredClientCapabilityError, isResourceNotFoundError, isUnsupportedProtocolVersionError, MCPHttpStatusError, MCPInputRequiredError, MCPInvalidResultTypeError, MCPProtocolError, } from './errors.js';
|
|
6
|
+
export { classifyModernHttpFailure, createMcpEraCache, defaultMcpEraCache, isRecognizedModernError, mcpEraCacheKey, resolveMcpEra, } from './era.js';
|
|
7
|
+
export type { McpEraProbe, McpEraProbeAnswer, McpEraResolution, McpEraResolutionInput, } from './era.js';
|
|
8
|
+
export { buildEnvelope, decodeResult, encodeMcpHeaderValue } from './envelope.js';
|
|
9
|
+
export type { McpEnvelope, McpEnvelopeInput, MCPDecodedResult } from './envelope.js';
|
|
10
|
+
export { validateMcpHeaderAnnotations } from './x-mcp-header.js';
|
|
11
|
+
export type { McpHeaderAnnotationVerdict, McpParamHeaderBinding } from './x-mcp-header.js';
|
|
5
12
|
export { mcpToolToToolDefinition, toolDefinitionToMCPTool, mcpJsonSchemaToZod, zodToMCPJsonSchema, mcpToolResultToToolResult, toolResultToMCPToolResult, } from './adapter.js';
|
|
6
13
|
export { MCPToolDiscovery } from './discovery.js';
|
|
7
14
|
export { mcpPromptToToolDefinition, renderPromptMessages } from './prompt-adapter.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connector/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAM1E,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACtF,YAAY,EACX,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connector/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EACN,qBAAqB,EACrB,sCAAsC,EACtC,uBAAuB,EACvB,iCAAiC,EACjC,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,GAChB,MAAM,aAAa,CAAA;AAKpB,OAAO,EACN,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,aAAa,GACb,MAAM,UAAU,CAAA;AACjB,YAAY,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACjF,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAKpF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE1F,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAM1E,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACtF,YAAY,EACX,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -2,6 +2,16 @@ export { StdioTransport } from './stdio.js';
|
|
|
2
2
|
export { HttpSseTransport } from './http-sse.js';
|
|
3
3
|
export { StreamableHttpTransport } from './streamable-http.js';
|
|
4
4
|
export { MCPClient } from './client.js';
|
|
5
|
+
export { isHeaderMismatchError, isMissingRequiredClientCapabilityError, isResourceNotFoundError, isUnsupportedProtocolVersionError, MCPHttpStatusError, MCPInputRequiredError, MCPInvalidResultTypeError, MCPProtocolError, } from './errors.js';
|
|
6
|
+
// Era resolution lives beside the client, never inside a transport: stdio
|
|
7
|
+
// and HTTP share the whole state machine and differ only in the probe, so
|
|
8
|
+
// a transport that owned a copy would strand the other one.
|
|
9
|
+
export { classifyModernHttpFailure, createMcpEraCache, defaultMcpEraCache, isRecognizedModernError, mcpEraCacheKey, resolveMcpEra, } from './era.js';
|
|
10
|
+
export { buildEnvelope, decodeResult, encodeMcpHeaderValue } from './envelope.js';
|
|
11
|
+
// The repo's first refusal path: a tool definition namzu declines to expose.
|
|
12
|
+
// Exported so a host can ask the same question of a schema it holds — and
|
|
13
|
+
// because `McpEnvelopeInput.paramHeaders` names the binding type.
|
|
14
|
+
export { validateMcpHeaderAnnotations } from './x-mcp-header.js';
|
|
5
15
|
export { mcpToolToToolDefinition, toolDefinitionToMCPTool, mcpJsonSchemaToZod, zodToMCPJsonSchema, mcpToolResultToToolResult, toolResultToMCPToolResult, } from './adapter.js';
|
|
6
16
|
export { MCPToolDiscovery } from './discovery.js';
|
|
7
17
|
export { mcpPromptToToolDefinition, renderPromptMessages } from './prompt-adapter.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connector/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAQtF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connector/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EACN,qBAAqB,EACrB,sCAAsC,EACtC,uBAAuB,EACvB,iCAAiC,EACjC,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,GAChB,MAAM,aAAa,CAAA;AAEpB,0EAA0E;AAC1E,0EAA0E;AAC1E,4DAA4D;AAC5D,OAAO,EACN,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,aAAa,GACb,MAAM,UAAU,CAAA;AAOjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAGjF,6EAA6E;AAC7E,0EAA0E;AAC1E,kEAAkE;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAQtF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -7,13 +7,53 @@ export declare class StreamableHttpTransport implements MCPTransport {
|
|
|
7
7
|
private errorHandlers;
|
|
8
8
|
private connected;
|
|
9
9
|
private sessionId;
|
|
10
|
+
/**
|
|
11
|
+
* The most recent SSE event `id` this transport has seen, if any.
|
|
12
|
+
*
|
|
13
|
+
* Legacy-only in effect, never in name: this transport only ever holds a
|
|
14
|
+
* `sessionId` on a legacy connection (a modern connection has no
|
|
15
|
+
* `initialize` reply to capture one from — `MCPClient` probes with
|
|
16
|
+
* `server/discover` instead), and {@link buildHeaders} sends
|
|
17
|
+
* `Last-Event-ID` only alongside a session id. Deliberately NOT cleared
|
|
18
|
+
* by `close()`: the whole point is arming the header for the request
|
|
19
|
+
* that follows a reconnect, once a fresh session exists to carry it.
|
|
20
|
+
*/
|
|
21
|
+
private lastEventId;
|
|
10
22
|
private generation;
|
|
11
23
|
private activeSends;
|
|
12
24
|
private log;
|
|
13
25
|
private readonly timeoutMs;
|
|
26
|
+
/** Defaults to the ambient global `fetch`; never read again once captured. */
|
|
27
|
+
private readonly fetchImpl;
|
|
14
28
|
constructor(config: MCPStreamableHttpTransportConfig, log?: Logger);
|
|
15
29
|
connect(): Promise<void>;
|
|
16
30
|
close(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Forget the session this transport has been attaching to requests,
|
|
33
|
+
* without otherwise disturbing the connection.
|
|
34
|
+
*
|
|
35
|
+
* Used by `MCPClient`'s legacy session-recovery path: a `404` on a
|
|
36
|
+
* request means the server has forgotten this session, and the spec's
|
|
37
|
+
* remedy is a fresh `initialize` sent with no session id attached — which
|
|
38
|
+
* only happens if this transport stops sending the stale one first.
|
|
39
|
+
*/
|
|
40
|
+
resetSession(): void;
|
|
41
|
+
/** Whether this transport is currently attaching a session id to its requests. */
|
|
42
|
+
hasSession(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Tell the peer this session is done, without making `close()` wait on
|
|
45
|
+
* the answer.
|
|
46
|
+
*
|
|
47
|
+
* A SHOULD, not a MUST: it lets a cooperative server free resources
|
|
48
|
+
* promptly instead of waiting out its own idle timeout, but a server that
|
|
49
|
+
* never hears it is no worse off than before this existed. Fire-and-forget
|
|
50
|
+
* on purpose — `close()`'s existing bounded-teardown guarantee must not
|
|
51
|
+
* grow a dependency on a round trip to a peer that may already be gone —
|
|
52
|
+
* and bounded by its own short timeout so a peer that never answers does
|
|
53
|
+
* not leave a request open indefinitely. A modern origin never reaches
|
|
54
|
+
* this: it never had a session id to send in the first place.
|
|
55
|
+
*/
|
|
56
|
+
private sendSessionDelete;
|
|
17
57
|
/** See {@link StdioTransport} — the same append-only handler leak. */
|
|
18
58
|
private clearHandlers;
|
|
19
59
|
send(message: MCPJsonRpcMessage, options?: MCPTransportSendOptions): Promise<void>;
|
|
@@ -21,10 +61,53 @@ export declare class StreamableHttpTransport implements MCPTransport {
|
|
|
21
61
|
onClose(handler: () => void): void;
|
|
22
62
|
onError(handler: (error: Error) => void): void;
|
|
23
63
|
isConnected(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* `extra` comes from `MCPTransportSendOptions.headers` — the client's
|
|
66
|
+
* per-send authority, `MCP-Protocol-Version` today — and is merged over
|
|
67
|
+
* this transport's own static config headers so a caller's value wins
|
|
68
|
+
* on a collision. `Mcp-Session-Id` is applied after both: it is
|
|
69
|
+
* transport-managed state a caller cannot see to conflict with.
|
|
70
|
+
*/
|
|
24
71
|
private buildHeaders;
|
|
25
72
|
private captureSessionId;
|
|
26
73
|
private beginSend;
|
|
27
74
|
private assertCurrent;
|
|
28
75
|
private dispatchResponseMessages;
|
|
76
|
+
/**
|
|
77
|
+
* Parse an SSE body and remember the newest event `id` it carried, if
|
|
78
|
+
* any.
|
|
79
|
+
*
|
|
80
|
+
* The id survives past this one call — see the `lastEventId` field's own
|
|
81
|
+
* doc comment — so it is available to arm `Last-Event-ID` on whatever
|
|
82
|
+
* request follows a later reconnect.
|
|
83
|
+
*/
|
|
84
|
+
private parseSseAndCaptureEventId;
|
|
29
85
|
}
|
|
86
|
+
/** What one SSE-formatted Streamable HTTP response body parsed into. */
|
|
87
|
+
export interface MCPSseParseResult {
|
|
88
|
+
readonly messages: MCPJsonRpcMessage[];
|
|
89
|
+
/**
|
|
90
|
+
* The value of the last `id:` field seen across every event in the body
|
|
91
|
+
* — including one whose `data:` was empty, SSE's own priming event.
|
|
92
|
+
* `undefined` when no event in the body carried an id at all.
|
|
93
|
+
*/
|
|
94
|
+
readonly lastEventId?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parse a response body served as `text/event-stream`.
|
|
98
|
+
*
|
|
99
|
+
* Exported and pure so it is a direct unit-test target, with no transport,
|
|
100
|
+
* socket or server needed to see what it decides.
|
|
101
|
+
*
|
|
102
|
+
* Already correct on three counts before this: `data:` with or without a
|
|
103
|
+
* leading space, multi-line data joined with `\n`, and the empty-data
|
|
104
|
+
* priming event skipped as a message. This adds the two genuinely new
|
|
105
|
+
* pieces — capturing `id:` (armed by the caller for a legacy
|
|
106
|
+
* `Last-Event-ID` reconnect) and treating a `:`-prefixed comment or another
|
|
107
|
+
* unrecognized line as exactly what the spec says it is: not a field, never
|
|
108
|
+
* malformed input. Neither needed a special case: both filters below already
|
|
109
|
+
* select a line by its OWN prefix and so already ignore anything else — a
|
|
110
|
+
* comment, an `event:` line, a `retry:` line — without one.
|
|
111
|
+
*/
|
|
112
|
+
export declare function parseSseMessages(raw: string): MCPSseParseResult;
|
|
30
113
|
//# sourceMappingURL=streamable-http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-http.d.ts","sourceRoot":"","sources":["../../../src/connector/mcp/streamable-http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"streamable-http.d.ts","sourceRoot":"","sources":["../../../src/connector/mcp/streamable-http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,iBAAiB,EACjB,gCAAgC,EAChC,YAAY,EACZ,uBAAuB,EACvB,MAAM,gCAAgC,CAAA;AAEvC,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,uBAAuB,CAAA;AAgBlE,qBAAa,uBAAwB,YAAW,YAAY;IA0B1D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAzBxB,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAsB;IACvC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;gBAGtB,MAAM,EAAE,gCAAgC,EACzD,GAAG,CAAC,EAAE,MAAM;IAUP,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B;;;;;;;;OAQG;IACH,YAAY,IAAI,IAAI;IAIpB,kFAAkF;IAClF,UAAU,IAAI,OAAO;IAIrB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,iBAAiB;IAoCzB,sEAAsE;IACtE,OAAO,CAAC,aAAa;IAMf,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDxF,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAI9D,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI9C,WAAW,IAAI,OAAO;IAItB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;YAOP,wBAAwB;IAuBtC;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;CAKjC;AA4BD,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IACtC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAmC/D"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { SCOPE_ATTRIBUTE } from '../../utils/log/types.js';
|
|
2
2
|
import { resolveLogger } from '../../utils/logger.js';
|
|
3
3
|
import { ConnectorHttpOperation, validateConnectorTimeoutMs } from '../http-operation.js';
|
|
4
|
+
import { MCPHttpStatusError } from './errors.js';
|
|
4
5
|
import { refuseMcpHttpRedirect } from './http-redirect.js';
|
|
5
6
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
7
|
+
/**
|
|
8
|
+
* How long a best-effort session teardown DELETE is given before this
|
|
9
|
+
* transport stops tracking it.
|
|
10
|
+
*
|
|
11
|
+
* `close()` never awaits this at all — the bound exists only so a DELETE to
|
|
12
|
+
* an unresponsive peer does not accumulate as a dangling request forever.
|
|
13
|
+
*/
|
|
14
|
+
const SESSION_DELETE_TIMEOUT_MS = 5_000;
|
|
6
15
|
export class StreamableHttpTransport {
|
|
7
16
|
config;
|
|
8
17
|
messageHandlers = [];
|
|
@@ -10,13 +19,28 @@ export class StreamableHttpTransport {
|
|
|
10
19
|
errorHandlers = [];
|
|
11
20
|
connected = false;
|
|
12
21
|
sessionId = null;
|
|
22
|
+
/**
|
|
23
|
+
* The most recent SSE event `id` this transport has seen, if any.
|
|
24
|
+
*
|
|
25
|
+
* Legacy-only in effect, never in name: this transport only ever holds a
|
|
26
|
+
* `sessionId` on a legacy connection (a modern connection has no
|
|
27
|
+
* `initialize` reply to capture one from — `MCPClient` probes with
|
|
28
|
+
* `server/discover` instead), and {@link buildHeaders} sends
|
|
29
|
+
* `Last-Event-ID` only alongside a session id. Deliberately NOT cleared
|
|
30
|
+
* by `close()`: the whole point is arming the header for the request
|
|
31
|
+
* that follows a reconnect, once a fresh session exists to carry it.
|
|
32
|
+
*/
|
|
33
|
+
lastEventId = null;
|
|
13
34
|
generation = 0;
|
|
14
35
|
activeSends = new Set();
|
|
15
36
|
log;
|
|
16
37
|
timeoutMs;
|
|
38
|
+
/** Defaults to the ambient global `fetch`; never read again once captured. */
|
|
39
|
+
fetchImpl;
|
|
17
40
|
constructor(config, log) {
|
|
18
41
|
this.config = config;
|
|
19
42
|
this.timeoutMs = validateConnectorTimeoutMs(config.timeoutMs ?? DEFAULT_TIMEOUT_MS, 'StreamableHttpTransport timeoutMs');
|
|
43
|
+
this.fetchImpl = config.fetch ?? fetch;
|
|
20
44
|
this.log = resolveLogger(log).child({ [SCOPE_ATTRIBUTE]: 'connector/mcp/streamable-http' });
|
|
21
45
|
}
|
|
22
46
|
async connect() {
|
|
@@ -27,16 +51,20 @@ export class StreamableHttpTransport {
|
|
|
27
51
|
this.log.info('StreamableHttpTransport connected', { 'namzu.mcp.url': this.config.url });
|
|
28
52
|
}
|
|
29
53
|
async close() {
|
|
54
|
+
// Read and clear before anything else can observe or re-enter: whatever
|
|
55
|
+
// happens below, this transport no longer believes it holds this session.
|
|
56
|
+
const sessionId = this.sessionId;
|
|
57
|
+
this.sessionId = null;
|
|
30
58
|
if (!this.connected) {
|
|
31
59
|
// Never connected, or already closed: nothing will notify, so this is
|
|
32
60
|
// the only chance to drop what `connect()` registered before it failed.
|
|
33
61
|
this.clearHandlers();
|
|
34
|
-
|
|
62
|
+
if (sessionId)
|
|
63
|
+
this.sendSessionDelete(sessionId);
|
|
35
64
|
return;
|
|
36
65
|
}
|
|
37
66
|
this.connected = false;
|
|
38
67
|
this.generation++;
|
|
39
|
-
this.sessionId = null;
|
|
40
68
|
const reason = new Error('StreamableHttpTransport closed');
|
|
41
69
|
for (const controller of this.activeSends)
|
|
42
70
|
controller.abort(reason);
|
|
@@ -45,6 +73,73 @@ export class StreamableHttpTransport {
|
|
|
45
73
|
handler();
|
|
46
74
|
// After the notification, never before it.
|
|
47
75
|
this.clearHandlers();
|
|
76
|
+
if (sessionId)
|
|
77
|
+
this.sendSessionDelete(sessionId);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Forget the session this transport has been attaching to requests,
|
|
81
|
+
* without otherwise disturbing the connection.
|
|
82
|
+
*
|
|
83
|
+
* Used by `MCPClient`'s legacy session-recovery path: a `404` on a
|
|
84
|
+
* request means the server has forgotten this session, and the spec's
|
|
85
|
+
* remedy is a fresh `initialize` sent with no session id attached — which
|
|
86
|
+
* only happens if this transport stops sending the stale one first.
|
|
87
|
+
*/
|
|
88
|
+
resetSession() {
|
|
89
|
+
this.sessionId = null;
|
|
90
|
+
}
|
|
91
|
+
/** Whether this transport is currently attaching a session id to its requests. */
|
|
92
|
+
hasSession() {
|
|
93
|
+
return this.sessionId !== null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Tell the peer this session is done, without making `close()` wait on
|
|
97
|
+
* the answer.
|
|
98
|
+
*
|
|
99
|
+
* A SHOULD, not a MUST: it lets a cooperative server free resources
|
|
100
|
+
* promptly instead of waiting out its own idle timeout, but a server that
|
|
101
|
+
* never hears it is no worse off than before this existed. Fire-and-forget
|
|
102
|
+
* on purpose — `close()`'s existing bounded-teardown guarantee must not
|
|
103
|
+
* grow a dependency on a round trip to a peer that may already be gone —
|
|
104
|
+
* and bounded by its own short timeout so a peer that never answers does
|
|
105
|
+
* not leave a request open indefinitely. A modern origin never reaches
|
|
106
|
+
* this: it never had a session id to send in the first place.
|
|
107
|
+
*/
|
|
108
|
+
sendSessionDelete(sessionId) {
|
|
109
|
+
const controller = new AbortController();
|
|
110
|
+
const timer = setTimeout(() => {
|
|
111
|
+
controller.abort(new Error('MCP session DELETE timed out'));
|
|
112
|
+
}, SESSION_DELETE_TIMEOUT_MS);
|
|
113
|
+
timer.unref?.();
|
|
114
|
+
const headers = {
|
|
115
|
+
...this.config.headers,
|
|
116
|
+
'Mcp-Session-Id': sessionId,
|
|
117
|
+
};
|
|
118
|
+
let sending;
|
|
119
|
+
try {
|
|
120
|
+
sending = this.fetchImpl(this.config.url, {
|
|
121
|
+
method: 'DELETE',
|
|
122
|
+
headers,
|
|
123
|
+
redirect: 'manual',
|
|
124
|
+
signal: controller.signal,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
clearTimeout(timer);
|
|
129
|
+
this.log.debug('Failed to send MCP legacy session DELETE', {
|
|
130
|
+
'namzu.mcp.url': this.config.url,
|
|
131
|
+
'exception.message': err instanceof Error ? err.message : String(err),
|
|
132
|
+
});
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
void sending
|
|
136
|
+
.catch((err) => {
|
|
137
|
+
this.log.debug('Failed to send MCP legacy session DELETE', {
|
|
138
|
+
'namzu.mcp.url': this.config.url,
|
|
139
|
+
'exception.message': err instanceof Error ? err.message : String(err),
|
|
140
|
+
});
|
|
141
|
+
})
|
|
142
|
+
.finally(() => clearTimeout(timer));
|
|
48
143
|
}
|
|
49
144
|
/** See {@link StdioTransport} — the same append-only handler leak. */
|
|
50
145
|
clearHandlers() {
|
|
@@ -59,16 +154,16 @@ export class StreamableHttpTransport {
|
|
|
59
154
|
const owned = this.beginSend(options?.signal);
|
|
60
155
|
const operation = new ConnectorHttpOperation(owned.controller.signal, this.timeoutMs, 'Streamable HTTP MCP send');
|
|
61
156
|
try {
|
|
62
|
-
const response = await operation.run(() =>
|
|
157
|
+
const response = await operation.run(() => this.fetchImpl(this.config.url, {
|
|
63
158
|
method: 'POST',
|
|
64
|
-
headers: this.buildHeaders(),
|
|
159
|
+
headers: this.buildHeaders(options?.headers),
|
|
65
160
|
body: JSON.stringify(message),
|
|
66
161
|
redirect: 'manual',
|
|
67
162
|
signal: operation.signal,
|
|
68
163
|
}));
|
|
69
164
|
refuseMcpHttpRedirect(response, message.method);
|
|
70
165
|
if (!response.ok) {
|
|
71
|
-
throw new
|
|
166
|
+
throw new MCPHttpStatusError('StreamableHttpTransport', response.status, response.statusText, await readErrorBody(response, operation));
|
|
72
167
|
}
|
|
73
168
|
this.assertCurrent(owned.generation, operation);
|
|
74
169
|
// MCP assigns the session during initialize. Letting an ordinary or
|
|
@@ -99,14 +194,28 @@ export class StreamableHttpTransport {
|
|
|
99
194
|
isConnected() {
|
|
100
195
|
return this.connected;
|
|
101
196
|
}
|
|
102
|
-
|
|
197
|
+
/**
|
|
198
|
+
* `extra` comes from `MCPTransportSendOptions.headers` — the client's
|
|
199
|
+
* per-send authority, `MCP-Protocol-Version` today — and is merged over
|
|
200
|
+
* this transport's own static config headers so a caller's value wins
|
|
201
|
+
* on a collision. `Mcp-Session-Id` is applied after both: it is
|
|
202
|
+
* transport-managed state a caller cannot see to conflict with.
|
|
203
|
+
*/
|
|
204
|
+
buildHeaders(extra) {
|
|
103
205
|
const headers = {
|
|
104
206
|
'Content-Type': 'application/json',
|
|
105
207
|
Accept: 'application/json, text/event-stream',
|
|
106
208
|
...this.config.headers,
|
|
209
|
+
...extra,
|
|
107
210
|
};
|
|
108
211
|
if (this.sessionId) {
|
|
109
212
|
headers['Mcp-Session-Id'] = this.sessionId;
|
|
213
|
+
// Resumption is a legacy-only concept, and gated the same way the
|
|
214
|
+
// session id itself is: a modern connection never captures a
|
|
215
|
+
// `sessionId` (see the field's own doc comment), so this branch is
|
|
216
|
+
// unreachable there without a second, redundant era flag.
|
|
217
|
+
if (this.lastEventId)
|
|
218
|
+
headers['Last-Event-ID'] = this.lastEventId;
|
|
110
219
|
}
|
|
111
220
|
return headers;
|
|
112
221
|
}
|
|
@@ -150,7 +259,7 @@ export class StreamableHttpTransport {
|
|
|
150
259
|
return;
|
|
151
260
|
const contentType = response.headers.get('content-type') ?? '';
|
|
152
261
|
const messages = contentType.includes('text/event-stream')
|
|
153
|
-
?
|
|
262
|
+
? this.parseSseAndCaptureEventId(text)
|
|
154
263
|
: parseJsonMessages(text);
|
|
155
264
|
for (const message of messages) {
|
|
156
265
|
this.assertCurrent(generation, operation);
|
|
@@ -160,18 +269,75 @@ export class StreamableHttpTransport {
|
|
|
160
269
|
}
|
|
161
270
|
}
|
|
162
271
|
}
|
|
272
|
+
/**
|
|
273
|
+
* Parse an SSE body and remember the newest event `id` it carried, if
|
|
274
|
+
* any.
|
|
275
|
+
*
|
|
276
|
+
* The id survives past this one call — see the `lastEventId` field's own
|
|
277
|
+
* doc comment — so it is available to arm `Last-Event-ID` on whatever
|
|
278
|
+
* request follows a later reconnect.
|
|
279
|
+
*/
|
|
280
|
+
parseSseAndCaptureEventId(raw) {
|
|
281
|
+
const { messages, lastEventId } = parseSseMessages(raw);
|
|
282
|
+
if (lastEventId !== undefined)
|
|
283
|
+
this.lastEventId = lastEventId;
|
|
284
|
+
return messages;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* The body of a failed response, or an empty string.
|
|
289
|
+
*
|
|
290
|
+
* Carried on the error rather than discarded, because a status alone cannot
|
|
291
|
+
* tell a legacy origin from a modern one: a modern server answers an
|
|
292
|
+
* unknown method with `404` and a JSON-RPC error body precisely so that a
|
|
293
|
+
* client can tell the two apart. Reading it must never turn a clean HTTP
|
|
294
|
+
* failure into a different one, so a body that cannot be read is simply
|
|
295
|
+
* absent — the status error is the real answer either way.
|
|
296
|
+
*/
|
|
297
|
+
async function readErrorBody(response, operation) {
|
|
298
|
+
try {
|
|
299
|
+
return await operation.run(() => response.text());
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return '';
|
|
303
|
+
}
|
|
163
304
|
}
|
|
164
305
|
function parseJsonMessages(raw) {
|
|
165
306
|
const parsed = JSON.parse(raw);
|
|
166
307
|
return Array.isArray(parsed) ? parsed : [parsed];
|
|
167
308
|
}
|
|
168
|
-
|
|
309
|
+
/**
|
|
310
|
+
* Parse a response body served as `text/event-stream`.
|
|
311
|
+
*
|
|
312
|
+
* Exported and pure so it is a direct unit-test target, with no transport,
|
|
313
|
+
* socket or server needed to see what it decides.
|
|
314
|
+
*
|
|
315
|
+
* Already correct on three counts before this: `data:` with or without a
|
|
316
|
+
* leading space, multi-line data joined with `\n`, and the empty-data
|
|
317
|
+
* priming event skipped as a message. This adds the two genuinely new
|
|
318
|
+
* pieces — capturing `id:` (armed by the caller for a legacy
|
|
319
|
+
* `Last-Event-ID` reconnect) and treating a `:`-prefixed comment or another
|
|
320
|
+
* unrecognized line as exactly what the spec says it is: not a field, never
|
|
321
|
+
* malformed input. Neither needed a special case: both filters below already
|
|
322
|
+
* select a line by its OWN prefix and so already ignore anything else — a
|
|
323
|
+
* comment, an `event:` line, a `retry:` line — without one.
|
|
324
|
+
*/
|
|
325
|
+
export function parseSseMessages(raw) {
|
|
169
326
|
const normalized = raw.replace(/\r\n/g, '\n');
|
|
170
327
|
const events = normalized.split(/\n\n+/);
|
|
171
328
|
const messages = [];
|
|
329
|
+
let lastEventId;
|
|
172
330
|
for (const event of events) {
|
|
173
|
-
const
|
|
174
|
-
|
|
331
|
+
const lines = event.split('\n');
|
|
332
|
+
const idLines = lines
|
|
333
|
+
.filter((line) => line.startsWith('id:'))
|
|
334
|
+
.map((line) => line.slice('id:'.length).trim());
|
|
335
|
+
// The LAST `id:` field within one event wins, per SSE's own
|
|
336
|
+
// field-processing rules — relevant only for a malformed event that
|
|
337
|
+
// repeats the field, but cheap to get right.
|
|
338
|
+
if (idLines.length > 0)
|
|
339
|
+
lastEventId = idLines.at(-1);
|
|
340
|
+
const dataLines = lines
|
|
175
341
|
.filter((line) => line.startsWith('data:'))
|
|
176
342
|
.map((line) => line.slice('data:'.length).trimStart());
|
|
177
343
|
if (dataLines.length === 0)
|
|
@@ -187,6 +353,6 @@ function parseSseMessages(raw) {
|
|
|
187
353
|
messages.push(parsed);
|
|
188
354
|
}
|
|
189
355
|
}
|
|
190
|
-
return messages;
|
|
356
|
+
return lastEventId !== undefined ? { messages, lastEventId } : { messages };
|
|
191
357
|
}
|
|
192
358
|
//# sourceMappingURL=streamable-http.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-http.js","sourceRoot":"","sources":["../../../src/connector/mcp/streamable-http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"streamable-http.js","sourceRoot":"","sources":["../../../src/connector/mcp/streamable-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One validated `x-mcp-header` annotation: which header to write, which
|
|
3
|
+
* argument to read it from, and how to spell that argument.
|
|
4
|
+
*
|
|
5
|
+
* `path` is the exact chain of `properties` keys leading to the annotated
|
|
6
|
+
* property, which is also the path into a call's `arguments` object. It is
|
|
7
|
+
* produced only by {@link validateMcpHeaderAnnotations}, so a binding cannot
|
|
8
|
+
* exist for a property that was not statically reachable.
|
|
9
|
+
*/
|
|
10
|
+
export interface McpParamHeaderBinding {
|
|
11
|
+
/** The full field name, prefix included — `Mcp-Param-Region`. */
|
|
12
|
+
readonly header: string;
|
|
13
|
+
/** The chain of `properties` keys, read against the call's `arguments`. */
|
|
14
|
+
readonly path: readonly string[];
|
|
15
|
+
readonly type: 'string' | 'boolean' | 'integer';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Whether a tool definition may be exposed, and what it asked to mirror.
|
|
19
|
+
*
|
|
20
|
+
* A verdict about the WHOLE tool, not about one annotation: the spec makes a
|
|
21
|
+
* single bad annotation invalidate the tool definition, because a client
|
|
22
|
+
* that mirrored the rest would send a request the server then rejects for
|
|
23
|
+
* headers it cannot explain.
|
|
24
|
+
*/
|
|
25
|
+
export type McpHeaderAnnotationVerdict = {
|
|
26
|
+
readonly ok: true;
|
|
27
|
+
readonly bindings: readonly McpParamHeaderBinding[];
|
|
28
|
+
} | {
|
|
29
|
+
readonly ok: false;
|
|
30
|
+
readonly reason: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Decide whether a tool may be exposed, and collect what it asked to mirror.
|
|
34
|
+
*
|
|
35
|
+
* The six constraints, in the spec's own order: non-empty; HTTP field-name
|
|
36
|
+
* token syntax; no control characters; case-insensitively unique across the
|
|
37
|
+
* whole `inputSchema`; applied only to `string`, `boolean` or `integer`
|
|
38
|
+
* (never `number`); and statically reachable through a chain of `properties`
|
|
39
|
+
* keys alone.
|
|
40
|
+
*
|
|
41
|
+
* Returns a REASON rather than throwing, because the caller's job is to drop
|
|
42
|
+
* one tool and keep the rest: a listing where one definition is malformed
|
|
43
|
+
* must still deliver the others, and an exception here would take the whole
|
|
44
|
+
* listing down with it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateMcpHeaderAnnotations(inputSchema: unknown): McpHeaderAnnotationVerdict;
|
|
47
|
+
/**
|
|
48
|
+
* The `Mcp-Param-*` field values for one call's arguments, unencoded.
|
|
49
|
+
*
|
|
50
|
+
* Returns the values as the BODY carries them; wrapping a value that cannot
|
|
51
|
+
* be written into a header field verbatim is the envelope's job, so the
|
|
52
|
+
* sentinel rule lives in one place for `Mcp-Name` and `Mcp-Param-*` alike
|
|
53
|
+
* rather than being reimplemented here.
|
|
54
|
+
*/
|
|
55
|
+
export declare function mcpParamHeaderValues(bindings: readonly McpParamHeaderBinding[], args: unknown): Record<string, string>;
|
|
56
|
+
//# sourceMappingURL=x-mcp-header.d.ts.map
|