@namzu/sdk 48.0.0 → 48.1.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 +26 -0
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +11 -0
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +19 -0
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +363 -2
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/era.d.ts.map +1 -1
- package/dist/connector/mcp/era.js +7 -0
- package/dist/connector/mcp/era.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts +15 -0
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
- package/dist/connector/mcp/streamable-http.js +281 -6
- package/dist/connector/mcp/streamable-http.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +1 -0
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +137 -18
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/resident/initiative.d.ts +6 -6
- package/dist/manager/resident/outbox.d.ts +4 -4
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +2 -0
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/retention/archive.js +1 -1
- package/dist/session/retention/archive.js.map +1 -1
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +2 -0
- package/dist/store/session/disk.js.map +1 -1
- package/dist/tools/builtins/browser.js +2 -2
- package/dist/tools/builtins/browser.js.map +1 -1
- package/dist/types/agent/scheduler.d.ts +6 -1
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +19 -1
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.map +1 -1
- package/dist/types/connector/mcp.d.ts +13 -0
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/session/sub-session.d.ts +2 -0
- package/dist/types/session/sub-session.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/connector/mcp/adapter.ts +15 -0
- package/src/connector/mcp/client.ts +405 -2
- package/src/connector/mcp/era.ts +7 -0
- package/src/connector/mcp/streamable-http.ts +302 -5
- package/src/manager/agent/lifecycle.ts +158 -19
- package/src/scheduler/local.ts +2 -0
- package/src/session/retention/archive.ts +1 -1
- package/src/store/session/disk.ts +3 -0
- package/src/tools/builtins/browser.ts +2 -2
- package/src/types/agent/scheduler.ts +6 -1
- package/src/types/agent/task.ts +21 -1
- package/src/types/connector/mcp.ts +14 -0
- package/src/types/session/sub-session.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/types/connector/mcp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/types/connector/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,6 +93,8 @@ export interface SubSession {
|
|
|
93
93
|
failureMode: FailureMode;
|
|
94
94
|
completionMode: CompletionMode;
|
|
95
95
|
workspaceId: WorkspaceId | null;
|
|
96
|
+
/** Keep this delegated workspace when the child ends or its session is archived. */
|
|
97
|
+
workspaceRetention?: 'retain';
|
|
96
98
|
/**
|
|
97
99
|
* For interventions, the immutable artifact being addressed. Chains form
|
|
98
100
|
* a strict acyclic DAG — see session-hierarchy.md §4.5.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-session.d.ts","sourceRoot":"","sources":["../../../src/types/session/sub-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAE9F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAA;AAE5E;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAA;AAEzD;;;;;GAKG;AACH,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,YAAY,CAAA;IAChB,eAAe,EAAE,SAAS,CAAA;IAC1B,cAAc,EAAE,SAAS,CAAA;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB;;;;;;;OAOG;IACH,MAAM,EAAE,gBAAgB,CAAA;IACxB,SAAS,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,IAAI,CAAA;IACf,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B;;;OAGG;IACH,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,SAAS,EAAE,IAAI,CAAA;CACf"}
|
|
1
|
+
{"version":3,"file":"sub-session.d.ts","sourceRoot":"","sources":["../../../src/types/session/sub-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAE9F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAA;AAE5E;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAA;AAEzD;;;;;GAKG;AACH,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,YAAY,CAAA;IAChB,eAAe,EAAE,SAAS,CAAA;IAC1B,cAAc,EAAE,SAAS,CAAA;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB;;;;;;;OAOG;IACH,MAAM,EAAE,gBAAgB,CAAA;IACxB,SAAS,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,IAAI,CAAA;IACf,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,QAAQ,CAAA;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,SAAS,EAAE,IAAI,CAAA;CACf"}
|
package/package.json
CHANGED
|
@@ -546,6 +546,21 @@ export function mcpToolToToolDefinition(
|
|
|
546
546
|
try {
|
|
547
547
|
const result = await client.callTool(tool.name, input as Record<string, unknown>, {
|
|
548
548
|
signal: context.abortSignal,
|
|
549
|
+
...(context.report
|
|
550
|
+
? {
|
|
551
|
+
onProgress: (update) => {
|
|
552
|
+
const fraction =
|
|
553
|
+
update.total === undefined
|
|
554
|
+
? undefined
|
|
555
|
+
: Math.min(1, update.progress / update.total)
|
|
556
|
+
context.report?.(
|
|
557
|
+
update.message ??
|
|
558
|
+
`MCP tool: ${update.progress}${update.total === undefined ? '' : `/${update.total}`}`,
|
|
559
|
+
fraction,
|
|
560
|
+
)
|
|
561
|
+
},
|
|
562
|
+
}
|
|
563
|
+
: {}),
|
|
549
564
|
})
|
|
550
565
|
return frameServerResult(mcpToolResultToToolResult(result), serverName, tool.name)
|
|
551
566
|
} catch (error) {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto'
|
|
2
|
+
|
|
1
3
|
import type {
|
|
2
4
|
MCPClientConfig,
|
|
3
5
|
MCPClientState,
|
|
@@ -9,6 +11,7 @@ import type {
|
|
|
9
11
|
MCPInitializeResult,
|
|
10
12
|
MCPJsonRpcMessage,
|
|
11
13
|
MCPLifecycleEvent,
|
|
14
|
+
MCPProgressUpdate,
|
|
12
15
|
MCPPromptDefinition,
|
|
13
16
|
MCPPromptMessage,
|
|
14
17
|
MCPRequestOptions,
|
|
@@ -48,7 +51,7 @@ import {
|
|
|
48
51
|
} from './errors.js'
|
|
49
52
|
import { HttpSseTransport } from './http-sse.js'
|
|
50
53
|
import { StdioTransport } from './stdio.js'
|
|
51
|
-
import { StreamableHttpTransport } from './streamable-http.js'
|
|
54
|
+
import { MCPSubscriptionResponseError, StreamableHttpTransport } from './streamable-http.js'
|
|
52
55
|
import { type McpParamHeaderBinding, validateMcpHeaderAnnotations } from './x-mcp-header.js'
|
|
53
56
|
|
|
54
57
|
import {
|
|
@@ -70,9 +73,104 @@ const MAX_LIST_PAGES = 100
|
|
|
70
73
|
|
|
71
74
|
/** A cancellation notification must never become the next unbounded wait. */
|
|
72
75
|
const CANCEL_NOTIFICATION_TIMEOUT_MS = 1_000
|
|
76
|
+
const MAX_PROGRESS_MESSAGE_BYTES = 512
|
|
77
|
+
const ANSI_CSI_PATTERN = new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]*[@-~]`, 'g')
|
|
78
|
+
const SUBSCRIPTION_ID_META_KEY = 'io.modelcontextprotocol/subscriptionId'
|
|
79
|
+
const SUBSCRIPTION_RETRY_MAX_MS = 30_000
|
|
80
|
+
/** Auth may refresh; timeouts, conflicts and rate limits can clear without reconnecting. */
|
|
81
|
+
const RETRYABLE_SUBSCRIPTION_CLIENT_STATUSES = new Set([401, 403, 408, 409, 425, 429])
|
|
82
|
+
|
|
83
|
+
type ListChangeFilter = {
|
|
84
|
+
toolsListChanged?: true
|
|
85
|
+
promptsListChanged?: true
|
|
86
|
+
resourcesListChanged?: true
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface ModernSubscription {
|
|
90
|
+
readonly id: number
|
|
91
|
+
readonly requested: ListChangeFilter
|
|
92
|
+
readonly controller: AbortController
|
|
93
|
+
readonly ackTimer: ReturnType<typeof setTimeout>
|
|
94
|
+
acknowledged?: ListChangeFilter
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const SUBSCRIPTION_NOTIFICATIONS = {
|
|
98
|
+
'notifications/tools/list_changed': 'toolsListChanged',
|
|
99
|
+
'notifications/prompts/list_changed': 'promptsListChanged',
|
|
100
|
+
'notifications/resources/list_changed': 'resourcesListChanged',
|
|
101
|
+
} as const
|
|
102
|
+
|
|
103
|
+
function subscriptionFilter(capabilities: MCPServerCapabilities | undefined): ListChangeFilter {
|
|
104
|
+
return {
|
|
105
|
+
...(capabilities?.tools?.listChanged === true ? { toolsListChanged: true as const } : {}),
|
|
106
|
+
...(capabilities?.prompts?.listChanged === true ? { promptsListChanged: true as const } : {}),
|
|
107
|
+
...(capabilities?.resources?.listChanged === true
|
|
108
|
+
? { resourcesListChanged: true as const }
|
|
109
|
+
: {}),
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function acknowledgedFilter(
|
|
114
|
+
value: unknown,
|
|
115
|
+
requested: ListChangeFilter,
|
|
116
|
+
): ListChangeFilter | undefined {
|
|
117
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined
|
|
118
|
+
const record = value as Record<string, unknown>
|
|
119
|
+
const acknowledged: ListChangeFilter = {}
|
|
120
|
+
for (const [key, entry] of Object.entries(record)) {
|
|
121
|
+
if (!Object.hasOwn(requested, key) || (entry !== true && entry !== false)) return undefined
|
|
122
|
+
if (entry === true) (acknowledged as Record<string, true>)[key] = true
|
|
123
|
+
}
|
|
124
|
+
return acknowledged
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** A rejected listen request with the same inputs cannot heal by repeating it. */
|
|
128
|
+
function isPermanentSubscriptionFailure(error: unknown, requestId: number): boolean {
|
|
129
|
+
if (!(error instanceof MCPHttpStatusError || error instanceof MCPSubscriptionResponseError))
|
|
130
|
+
return false
|
|
131
|
+
try {
|
|
132
|
+
const reply = JSON.parse(error.bodyText) as MCPJsonRpcMessage
|
|
133
|
+
if (
|
|
134
|
+
reply?.jsonrpc === '2.0' &&
|
|
135
|
+
reply.id === requestId &&
|
|
136
|
+
reply.method === undefined &&
|
|
137
|
+
reply.error?.code === JSON_RPC_METHOD_NOT_FOUND
|
|
138
|
+
) {
|
|
139
|
+
return true
|
|
140
|
+
}
|
|
141
|
+
} catch {
|
|
142
|
+
// Only a failed HTTP status can determine policy without a JSON-RPC reply.
|
|
143
|
+
}
|
|
144
|
+
return (
|
|
145
|
+
error instanceof MCPHttpStatusError &&
|
|
146
|
+
error.status >= 400 &&
|
|
147
|
+
error.status < 500 &&
|
|
148
|
+
!RETRYABLE_SUBSCRIPTION_CLIENT_STATUSES.has(error.status)
|
|
149
|
+
)
|
|
150
|
+
}
|
|
73
151
|
|
|
74
152
|
const NAMZU_CLIENT_INFO = { name: 'namzu-sdk', version: VERSION }
|
|
75
153
|
|
|
154
|
+
/** Keep server-authored status text safe and small before it reaches a host UI. */
|
|
155
|
+
function progressMessage(value: unknown): string | undefined {
|
|
156
|
+
if (typeof value !== 'string') return undefined
|
|
157
|
+
const plain = value
|
|
158
|
+
.slice(0, MAX_PROGRESS_MESSAGE_BYTES * 4)
|
|
159
|
+
.replace(ANSI_CSI_PATTERN, '')
|
|
160
|
+
.replace(/[\p{Cc}\p{Cf}\p{Cs}]/gu, ' ')
|
|
161
|
+
.trim()
|
|
162
|
+
if (!plain) return undefined
|
|
163
|
+
let bounded = ''
|
|
164
|
+
let bytes = 0
|
|
165
|
+
for (const character of plain) {
|
|
166
|
+
const length = Buffer.byteLength(character, 'utf8')
|
|
167
|
+
if (bytes + length > MAX_PROGRESS_MESSAGE_BYTES) break
|
|
168
|
+
bounded += character
|
|
169
|
+
bytes += length
|
|
170
|
+
}
|
|
171
|
+
return bounded
|
|
172
|
+
}
|
|
173
|
+
|
|
76
174
|
/**
|
|
77
175
|
* The three header names the protocol owns, lower-cased for matching.
|
|
78
176
|
*
|
|
@@ -132,9 +230,16 @@ export class MCPClient {
|
|
|
132
230
|
}
|
|
133
231
|
>()
|
|
134
232
|
private nextRequestId = 1
|
|
233
|
+
private progressRequests = new Map<
|
|
234
|
+
string,
|
|
235
|
+
{ onProgress: (update: MCPProgressUpdate) => void; lastProgress?: number }
|
|
236
|
+
>()
|
|
135
237
|
private notificationHandlers: Array<(method: string, params?: Record<string, unknown>) => void> =
|
|
136
238
|
[]
|
|
137
239
|
private lifecycleListeners: MCPEventListener[] = []
|
|
240
|
+
private modernSubscription?: ModernSubscription
|
|
241
|
+
private subscriptionRestartTimer?: ReturnType<typeof setTimeout>
|
|
242
|
+
private subscriptionFailures = 0
|
|
138
243
|
/** Best-effort protocol cancellations still belong to this connection generation. */
|
|
139
244
|
private cancellationControllers = new Set<AbortController>()
|
|
140
245
|
private log: Logger
|
|
@@ -188,6 +293,7 @@ export class MCPClient {
|
|
|
188
293
|
throw new Error(`MCPClient already connected to "${this.config.serverName}"`)
|
|
189
294
|
}
|
|
190
295
|
|
|
296
|
+
this.stopModernSubscription(false)
|
|
191
297
|
this.status = 'connecting'
|
|
192
298
|
// Tool schemas belong to a listing, and a listing belongs to a
|
|
193
299
|
// connection. Carrying bindings across a reconnect would mirror the
|
|
@@ -203,6 +309,7 @@ export class MCPClient {
|
|
|
203
309
|
try {
|
|
204
310
|
this.transport.onMessage((msg) => this.handleMessage(msg))
|
|
205
311
|
this.transport.onClose(() => {
|
|
312
|
+
this.stopModernSubscription(false)
|
|
206
313
|
this.status = 'disconnected'
|
|
207
314
|
this.abortCancellations(new Error('MCP transport closed'))
|
|
208
315
|
this.log.info('MCP transport closed')
|
|
@@ -210,6 +317,7 @@ export class MCPClient {
|
|
|
210
317
|
this.rejectAllPending(`MCP transport to "${this.config.serverName}" closed`)
|
|
211
318
|
})
|
|
212
319
|
this.transport.onError((err) => {
|
|
320
|
+
this.stopModernSubscription(false)
|
|
213
321
|
this.status = 'error'
|
|
214
322
|
this.abortCancellations(err)
|
|
215
323
|
this.error = err.message
|
|
@@ -501,6 +609,7 @@ export class MCPClient {
|
|
|
501
609
|
[NAMZU.SERVER_NAME]: result.serverInfo.name,
|
|
502
610
|
}
|
|
503
611
|
this.log.info('Connected to MCP server', connectedAttributes)
|
|
612
|
+
this.startModernSubscription()
|
|
504
613
|
return result
|
|
505
614
|
}
|
|
506
615
|
|
|
@@ -527,8 +636,151 @@ export class MCPClient {
|
|
|
527
636
|
}
|
|
528
637
|
}
|
|
529
638
|
|
|
639
|
+
/** Subscribe only to change kinds the modern server actually advertised. */
|
|
640
|
+
private startModernSubscription(): void {
|
|
641
|
+
if (this.status !== 'connected' || this.era?.kind !== 'modern' || this.modernSubscription) {
|
|
642
|
+
return
|
|
643
|
+
}
|
|
644
|
+
const requested = subscriptionFilter(this.serverCapabilities)
|
|
645
|
+
if (Object.keys(requested).length === 0) return
|
|
646
|
+
const id = this.nextRequestId++
|
|
647
|
+
const controller = new AbortController()
|
|
648
|
+
const envelope = buildEnvelope({
|
|
649
|
+
era: this.era,
|
|
650
|
+
method: 'subscriptions/listen',
|
|
651
|
+
params: { notifications: requested },
|
|
652
|
+
clientInfo: this.config.clientInfo ?? NAMZU_CLIENT_INFO,
|
|
653
|
+
capabilities: this.config.capabilities ?? {},
|
|
654
|
+
})
|
|
655
|
+
const subscription: ModernSubscription = {
|
|
656
|
+
id,
|
|
657
|
+
requested,
|
|
658
|
+
controller,
|
|
659
|
+
ackTimer: setTimeout(() => {
|
|
660
|
+
this.finishModernSubscription(subscription, 'acknowledgment timed out', true)
|
|
661
|
+
}, this.requestTimeoutMs),
|
|
662
|
+
}
|
|
663
|
+
subscription.ackTimer.unref?.()
|
|
664
|
+
this.modernSubscription = subscription
|
|
665
|
+
const message: MCPJsonRpcMessage = {
|
|
666
|
+
jsonrpc: '2.0',
|
|
667
|
+
id,
|
|
668
|
+
method: 'subscriptions/listen',
|
|
669
|
+
params: envelope.params,
|
|
670
|
+
}
|
|
671
|
+
try {
|
|
672
|
+
const options = {
|
|
673
|
+
signal: controller.signal,
|
|
674
|
+
...this.eraHeaderOptions(envelope.headers),
|
|
675
|
+
}
|
|
676
|
+
const transport = this.transport
|
|
677
|
+
const streaming = transport instanceof StreamableHttpTransport
|
|
678
|
+
const sending =
|
|
679
|
+
transport instanceof StreamableHttpTransport
|
|
680
|
+
? transport.sendSubscription(message, options, (frame) => {
|
|
681
|
+
if (this.modernSubscription !== subscription) return
|
|
682
|
+
// This callback belongs to the listen POST alone, so its first
|
|
683
|
+
// JSON-RPC frame must be this request's acknowledgment.
|
|
684
|
+
if (!subscription.acknowledged) {
|
|
685
|
+
const meta = frame.params?._meta
|
|
686
|
+
const frameId =
|
|
687
|
+
meta && typeof meta === 'object' && !Array.isArray(meta)
|
|
688
|
+
? (meta as Record<string, unknown>)[SUBSCRIPTION_ID_META_KEY]
|
|
689
|
+
: undefined
|
|
690
|
+
if (frame.method !== 'notifications/subscriptions/acknowledged' || frameId !== id) {
|
|
691
|
+
// A final JSON-RPC result is a valid graceful or error close.
|
|
692
|
+
if (frame.id === id) this.handleMessage(frame)
|
|
693
|
+
else
|
|
694
|
+
this.finishModernSubscription(
|
|
695
|
+
subscription,
|
|
696
|
+
'first stream message was not its acknowledgment',
|
|
697
|
+
true,
|
|
698
|
+
)
|
|
699
|
+
return
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
this.handleMessage(frame)
|
|
703
|
+
})
|
|
704
|
+
: transport.send(message, options)
|
|
705
|
+
void sending.then(
|
|
706
|
+
() => {
|
|
707
|
+
// stdio's send only writes the request. Its eventual result
|
|
708
|
+
// arrives through handleMessage, whereas HTTP's send owns the
|
|
709
|
+
// response stream and settling means it closed.
|
|
710
|
+
if (streaming) this.finishModernSubscription(subscription, 'stream ended', false)
|
|
711
|
+
},
|
|
712
|
+
(err: unknown) => {
|
|
713
|
+
if (!controller.signal.aborted) {
|
|
714
|
+
this.failModernSubscription(subscription, err)
|
|
715
|
+
}
|
|
716
|
+
},
|
|
717
|
+
)
|
|
718
|
+
} catch (err) {
|
|
719
|
+
this.failModernSubscription(subscription, err)
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
private failModernSubscription(subscription: ModernSubscription, error: unknown): void {
|
|
724
|
+
if (this.modernSubscription !== subscription) return
|
|
725
|
+
const retry = !isPermanentSubscriptionFailure(error, subscription.id)
|
|
726
|
+
if (!retry) {
|
|
727
|
+
this.log.warn('Modern MCP subscription rejected; live updates stopped until reconnection', {
|
|
728
|
+
'namzu.connector.server': this.config.serverName,
|
|
729
|
+
'namzu.connector.reason': toErrorMessage(error),
|
|
730
|
+
})
|
|
731
|
+
}
|
|
732
|
+
this.finishModernSubscription(subscription, toErrorMessage(error), true, retry)
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/** Stop one subscription, and retry with a bounded delay while connected. */
|
|
736
|
+
private finishModernSubscription(
|
|
737
|
+
subscription: ModernSubscription,
|
|
738
|
+
reason: string,
|
|
739
|
+
cancelPeer: boolean,
|
|
740
|
+
retry = true,
|
|
741
|
+
): void {
|
|
742
|
+
if (this.modernSubscription !== subscription) return
|
|
743
|
+
this.modernSubscription = undefined
|
|
744
|
+
clearTimeout(subscription.ackTimer)
|
|
745
|
+
subscription.controller.abort(new Error(`MCP subscription ${reason}`))
|
|
746
|
+
if (cancelPeer && !(this.transport instanceof StreamableHttpTransport) && this.isConnected()) {
|
|
747
|
+
this.sendCancellation(subscription.id, `Subscription ${reason}`)
|
|
748
|
+
}
|
|
749
|
+
if (!retry || this.status !== 'connected' || this.era?.kind !== 'modern') return
|
|
750
|
+
this.subscriptionFailures++
|
|
751
|
+
const delay = Math.min(
|
|
752
|
+
1_000 * 2 ** Math.min(this.subscriptionFailures - 1, 5),
|
|
753
|
+
SUBSCRIPTION_RETRY_MAX_MS,
|
|
754
|
+
)
|
|
755
|
+
this.log.warn('Modern MCP subscription ended; retrying', {
|
|
756
|
+
'namzu.connector.server': this.config.serverName,
|
|
757
|
+
'namzu.connector.reason': reason,
|
|
758
|
+
'namzu.connector.retry_ms': delay,
|
|
759
|
+
})
|
|
760
|
+
this.subscriptionRestartTimer = setTimeout(() => {
|
|
761
|
+
this.subscriptionRestartTimer = undefined
|
|
762
|
+
this.startModernSubscription()
|
|
763
|
+
}, delay)
|
|
764
|
+
this.subscriptionRestartTimer.unref?.()
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
private stopModernSubscription(cancelPeer: boolean): void {
|
|
768
|
+
if (this.subscriptionRestartTimer) clearTimeout(this.subscriptionRestartTimer)
|
|
769
|
+
this.subscriptionRestartTimer = undefined
|
|
770
|
+
const subscription = this.modernSubscription
|
|
771
|
+
this.modernSubscription = undefined
|
|
772
|
+
this.subscriptionFailures = 0
|
|
773
|
+
if (!subscription) return
|
|
774
|
+
clearTimeout(subscription.ackTimer)
|
|
775
|
+
subscription.controller.abort(new Error('MCP connection closed'))
|
|
776
|
+
if (cancelPeer && !(this.transport instanceof StreamableHttpTransport) && this.isConnected()) {
|
|
777
|
+
this.sendCancellation(subscription.id, 'Subscription closed')
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
530
781
|
async disconnect(): Promise<void> {
|
|
531
782
|
const reason = new Error('MCPClient disconnecting')
|
|
783
|
+
this.stopModernSubscription(true)
|
|
532
784
|
this.abortCancellations(reason)
|
|
533
785
|
const alreadyDisconnected = this.status === 'disconnected'
|
|
534
786
|
|
|
@@ -853,6 +1105,20 @@ export class MCPClient {
|
|
|
853
1105
|
*/
|
|
854
1106
|
onNotification(handler: (method: string, params?: Record<string, unknown>) => void): () => void {
|
|
855
1107
|
this.notificationHandlers.push(handler)
|
|
1108
|
+
// A list may have changed between the first fetch and the subscription
|
|
1109
|
+
// acknowledgment. Reconcile when a listener joins an already-acknowledged
|
|
1110
|
+
// stream, as well as when a stream is acknowledged with listeners present.
|
|
1111
|
+
const subscription = this.modernSubscription
|
|
1112
|
+
if (subscription?.acknowledged) {
|
|
1113
|
+
queueMicrotask(() => {
|
|
1114
|
+
if (
|
|
1115
|
+
this.modernSubscription === subscription &&
|
|
1116
|
+
this.notificationHandlers.includes(handler)
|
|
1117
|
+
) {
|
|
1118
|
+
this.reconcileSubscription(subscription, handler)
|
|
1119
|
+
}
|
|
1120
|
+
})
|
|
1121
|
+
}
|
|
856
1122
|
return () => {
|
|
857
1123
|
const index = this.notificationHandlers.indexOf(handler)
|
|
858
1124
|
if (index >= 0) this.notificationHandlers.splice(index, 1)
|
|
@@ -930,10 +1196,21 @@ export class MCPClient {
|
|
|
930
1196
|
// Refuse before allocating an id or asking the transport to do work.
|
|
931
1197
|
options?.signal?.throwIfAborted()
|
|
932
1198
|
const id = this.nextRequestId++
|
|
1199
|
+
const progressToken = method === 'tools/call' && options?.onProgress ? randomUUID() : undefined
|
|
1200
|
+
const requestParams =
|
|
1201
|
+
progressToken === undefined
|
|
1202
|
+
? params
|
|
1203
|
+
: {
|
|
1204
|
+
...params,
|
|
1205
|
+
_meta: {
|
|
1206
|
+
...(params._meta as Record<string, unknown> | undefined),
|
|
1207
|
+
progressToken,
|
|
1208
|
+
},
|
|
1209
|
+
}
|
|
933
1210
|
const envelope = buildEnvelope({
|
|
934
1211
|
era: this.era,
|
|
935
1212
|
method,
|
|
936
|
-
params,
|
|
1213
|
+
params: requestParams,
|
|
937
1214
|
clientInfo: this.config.clientInfo ?? NAMZU_CLIENT_INFO,
|
|
938
1215
|
capabilities: this.config.capabilities ?? {},
|
|
939
1216
|
...this.paramHeaderBindings(method, params),
|
|
@@ -967,6 +1244,7 @@ export class MCPClient {
|
|
|
967
1244
|
clearTimeout(timer)
|
|
968
1245
|
options?.signal?.removeEventListener('abort', onCallerAbort)
|
|
969
1246
|
if (this.pendingRequests.get(id) === entry) this.pendingRequests.delete(id)
|
|
1247
|
+
if (progressToken !== undefined) this.progressRequests.delete(progressToken)
|
|
970
1248
|
}
|
|
971
1249
|
const settle = (terminal: Terminal, value: unknown): boolean => {
|
|
972
1250
|
if (settled) return false
|
|
@@ -1014,6 +1292,9 @@ export class MCPClient {
|
|
|
1014
1292
|
}
|
|
1015
1293
|
|
|
1016
1294
|
this.pendingRequests.set(id, entry)
|
|
1295
|
+
if (progressToken !== undefined && options?.onProgress) {
|
|
1296
|
+
this.progressRequests.set(progressToken, { onProgress: options.onProgress })
|
|
1297
|
+
}
|
|
1017
1298
|
const timer = setTimeout(() => {
|
|
1018
1299
|
const error = new Error(
|
|
1019
1300
|
`MCP request "${method}" to "${this.config.serverName}" timed out after ${this.requestTimeoutMs}ms`,
|
|
@@ -1254,6 +1535,10 @@ export class MCPClient {
|
|
|
1254
1535
|
}
|
|
1255
1536
|
|
|
1256
1537
|
private handleMessage(message: MCPJsonRpcMessage): void {
|
|
1538
|
+
if (message.method === 'notifications/progress' && message.id === undefined) {
|
|
1539
|
+
this.handleProgressNotification(message.params)
|
|
1540
|
+
}
|
|
1541
|
+
if (this.handleModernSubscriptionMessage(message)) return
|
|
1257
1542
|
if (message.id !== undefined) {
|
|
1258
1543
|
const pending = this.pendingRequests.get(message.id)
|
|
1259
1544
|
if (pending) {
|
|
@@ -1301,6 +1586,124 @@ export class MCPClient {
|
|
|
1301
1586
|
}
|
|
1302
1587
|
}
|
|
1303
1588
|
|
|
1589
|
+
private handleProgressNotification(params: Record<string, unknown> | undefined): void {
|
|
1590
|
+
const token = params?.progressToken
|
|
1591
|
+
if (typeof token !== 'string') return
|
|
1592
|
+
const pending = this.progressRequests.get(token)
|
|
1593
|
+
if (!pending) return
|
|
1594
|
+
const progress = params?.progress
|
|
1595
|
+
if (typeof progress !== 'number' || !Number.isFinite(progress) || progress < 0) return
|
|
1596
|
+
if (pending.lastProgress !== undefined && progress <= pending.lastProgress) return
|
|
1597
|
+
pending.lastProgress = progress
|
|
1598
|
+
const total = params?.total
|
|
1599
|
+
const message = progressMessage(params?.message)
|
|
1600
|
+
const update: MCPProgressUpdate = {
|
|
1601
|
+
progress,
|
|
1602
|
+
...(typeof total === 'number' && Number.isFinite(total) && total > 0 ? { total } : {}),
|
|
1603
|
+
...(message === undefined ? {} : { message }),
|
|
1604
|
+
}
|
|
1605
|
+
try {
|
|
1606
|
+
pending.onProgress(update)
|
|
1607
|
+
} catch (error) {
|
|
1608
|
+
this.log.warn('MCP progress listener threw', {
|
|
1609
|
+
'exception.message': toErrorMessage(error),
|
|
1610
|
+
})
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
|
|
1614
|
+
/**
|
|
1615
|
+
* The modern subscription stream is authority-scoped by its request ID.
|
|
1616
|
+
* A bare or wrong-ID list_changed notification must not refresh a live
|
|
1617
|
+
* toolset, and no event may precede its acknowledgment.
|
|
1618
|
+
*/
|
|
1619
|
+
private handleModernSubscriptionMessage(message: MCPJsonRpcMessage): boolean {
|
|
1620
|
+
if (this.era?.kind !== 'modern') return false
|
|
1621
|
+
const subscription = this.modernSubscription
|
|
1622
|
+
if (subscription && message.id === subscription.id) {
|
|
1623
|
+
if (message.error?.code === JSON_RPC_METHOD_NOT_FOUND) {
|
|
1624
|
+
this.log.warn('Modern MCP subscription rejected; live updates stopped until reconnection', {
|
|
1625
|
+
'namzu.connector.server': this.config.serverName,
|
|
1626
|
+
'namzu.connector.reason': `MCP error ${message.error.code}: ${message.error.message}`,
|
|
1627
|
+
})
|
|
1628
|
+
}
|
|
1629
|
+
this.finishModernSubscription(
|
|
1630
|
+
subscription,
|
|
1631
|
+
message.error
|
|
1632
|
+
? `server rejected subscription: ${message.error.message}`
|
|
1633
|
+
: 'server closed stream',
|
|
1634
|
+
false,
|
|
1635
|
+
message.error?.code !== JSON_RPC_METHOD_NOT_FOUND && message.error !== undefined,
|
|
1636
|
+
)
|
|
1637
|
+
return true
|
|
1638
|
+
}
|
|
1639
|
+
const method = message.method
|
|
1640
|
+
if (!method) return false
|
|
1641
|
+
const isAck = method === 'notifications/subscriptions/acknowledged'
|
|
1642
|
+
const kind = Object.hasOwn(SUBSCRIPTION_NOTIFICATIONS, method)
|
|
1643
|
+
? SUBSCRIPTION_NOTIFICATIONS[method as keyof typeof SUBSCRIPTION_NOTIFICATIONS]
|
|
1644
|
+
: undefined
|
|
1645
|
+
const isSubscribedEvent =
|
|
1646
|
+
isAck || kind !== undefined || method === 'notifications/resources/updated'
|
|
1647
|
+
if (!isSubscribedEvent) return false
|
|
1648
|
+
const meta = message.params?._meta
|
|
1649
|
+
const id =
|
|
1650
|
+
meta && typeof meta === 'object' && !Array.isArray(meta)
|
|
1651
|
+
? (meta as Record<string, unknown>)[SUBSCRIPTION_ID_META_KEY]
|
|
1652
|
+
: undefined
|
|
1653
|
+
if (!subscription || id !== subscription.id || message.id !== undefined) {
|
|
1654
|
+
this.log.warn('Ignoring MCP subscription notification without the active subscription ID', {
|
|
1655
|
+
'namzu.connector.server': this.config.serverName,
|
|
1656
|
+
'namzu.connector.method': method,
|
|
1657
|
+
})
|
|
1658
|
+
return true
|
|
1659
|
+
}
|
|
1660
|
+
if (isAck) {
|
|
1661
|
+
if (subscription.acknowledged) {
|
|
1662
|
+
this.finishModernSubscription(subscription, 'duplicate acknowledgment', true)
|
|
1663
|
+
return true
|
|
1664
|
+
}
|
|
1665
|
+
const acknowledged = acknowledgedFilter(message.params?.notifications, subscription.requested)
|
|
1666
|
+
if (!acknowledged) {
|
|
1667
|
+
this.finishModernSubscription(subscription, 'invalid acknowledgment filter', true)
|
|
1668
|
+
return true
|
|
1669
|
+
}
|
|
1670
|
+
subscription.acknowledged = acknowledged
|
|
1671
|
+
clearTimeout(subscription.ackTimer)
|
|
1672
|
+
for (const handler of [...this.notificationHandlers]) {
|
|
1673
|
+
this.reconcileSubscription(subscription, handler)
|
|
1674
|
+
}
|
|
1675
|
+
return true
|
|
1676
|
+
}
|
|
1677
|
+
if (!subscription.acknowledged) {
|
|
1678
|
+
this.finishModernSubscription(
|
|
1679
|
+
subscription,
|
|
1680
|
+
'notification arrived before acknowledgment',
|
|
1681
|
+
true,
|
|
1682
|
+
)
|
|
1683
|
+
return true
|
|
1684
|
+
}
|
|
1685
|
+
if (!kind || subscription.acknowledged[kind] !== true) {
|
|
1686
|
+
this.log.warn('Ignoring unrequested MCP subscription notification', {
|
|
1687
|
+
'namzu.connector.server': this.config.serverName,
|
|
1688
|
+
'namzu.connector.method': method,
|
|
1689
|
+
})
|
|
1690
|
+
return true
|
|
1691
|
+
}
|
|
1692
|
+
for (const handler of [...this.notificationHandlers]) handler(method, message.params)
|
|
1693
|
+
return true
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
/** Re-list once when a subscription becomes live; it may have missed a change while opening. */
|
|
1697
|
+
private reconcileSubscription(
|
|
1698
|
+
subscription: ModernSubscription,
|
|
1699
|
+
handler: (method: string, params?: Record<string, unknown>) => void,
|
|
1700
|
+
): void {
|
|
1701
|
+
if (this.modernSubscription !== subscription) return
|
|
1702
|
+
for (const [method, kind] of Object.entries(SUBSCRIPTION_NOTIFICATIONS)) {
|
|
1703
|
+
if (subscription.acknowledged?.[kind as keyof ListChangeFilter]) handler(method)
|
|
1704
|
+
}
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1304
1707
|
private requireConnected(): void {
|
|
1305
1708
|
if (this.status !== 'connected') {
|
|
1306
1709
|
throw new Error(
|
package/src/connector/mcp/era.ts
CHANGED
|
@@ -326,6 +326,13 @@ function classifyAnswer(
|
|
|
326
326
|
}
|
|
327
327
|
|
|
328
328
|
if (error instanceof MCPHttpStatusError) {
|
|
329
|
+
// Authentication and authorization failures say nothing about the
|
|
330
|
+
// peer's protocol era. Retrying them as a legacy initialize request
|
|
331
|
+
// only hides the actual refusal and sends another request with the
|
|
332
|
+
// same unusable credentials.
|
|
333
|
+
if (error.status === 401 || error.status === 403) {
|
|
334
|
+
return { kind: 'refuse', error }
|
|
335
|
+
}
|
|
329
336
|
const verdict = classifyModernHttpFailure(error.status, error.bodyText)
|
|
330
337
|
if (verdict.kind === 'legacy') return { kind: 'legacy' }
|
|
331
338
|
if (isUnsupportedProtocolVersionError(verdict.error)) {
|