@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.
Files changed (54) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  3. package/dist/connector/mcp/adapter.js +11 -0
  4. package/dist/connector/mcp/adapter.js.map +1 -1
  5. package/dist/connector/mcp/client.d.ts +19 -0
  6. package/dist/connector/mcp/client.d.ts.map +1 -1
  7. package/dist/connector/mcp/client.js +363 -2
  8. package/dist/connector/mcp/client.js.map +1 -1
  9. package/dist/connector/mcp/era.d.ts.map +1 -1
  10. package/dist/connector/mcp/era.js +7 -0
  11. package/dist/connector/mcp/era.js.map +1 -1
  12. package/dist/connector/mcp/streamable-http.d.ts +15 -0
  13. package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
  14. package/dist/connector/mcp/streamable-http.js +281 -6
  15. package/dist/connector/mcp/streamable-http.js.map +1 -1
  16. package/dist/manager/agent/lifecycle.d.ts +1 -0
  17. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  18. package/dist/manager/agent/lifecycle.js +137 -18
  19. package/dist/manager/agent/lifecycle.js.map +1 -1
  20. package/dist/manager/resident/initiative.d.ts +6 -6
  21. package/dist/manager/resident/outbox.d.ts +4 -4
  22. package/dist/scheduler/local.d.ts.map +1 -1
  23. package/dist/scheduler/local.js +2 -0
  24. package/dist/scheduler/local.js.map +1 -1
  25. package/dist/session/retention/archive.js +1 -1
  26. package/dist/session/retention/archive.js.map +1 -1
  27. package/dist/store/session/disk.d.ts.map +1 -1
  28. package/dist/store/session/disk.js +2 -0
  29. package/dist/store/session/disk.js.map +1 -1
  30. package/dist/tools/builtins/browser.js +2 -2
  31. package/dist/tools/builtins/browser.js.map +1 -1
  32. package/dist/types/agent/scheduler.d.ts +6 -1
  33. package/dist/types/agent/scheduler.d.ts.map +1 -1
  34. package/dist/types/agent/task.d.ts +19 -1
  35. package/dist/types/agent/task.d.ts.map +1 -1
  36. package/dist/types/agent/task.js.map +1 -1
  37. package/dist/types/connector/mcp.d.ts +13 -0
  38. package/dist/types/connector/mcp.d.ts.map +1 -1
  39. package/dist/types/session/sub-session.d.ts +2 -0
  40. package/dist/types/session/sub-session.d.ts.map +1 -1
  41. package/package.json +1 -1
  42. package/src/connector/mcp/adapter.ts +15 -0
  43. package/src/connector/mcp/client.ts +405 -2
  44. package/src/connector/mcp/era.ts +7 -0
  45. package/src/connector/mcp/streamable-http.ts +302 -5
  46. package/src/manager/agent/lifecycle.ts +158 -19
  47. package/src/scheduler/local.ts +2 -0
  48. package/src/session/retention/archive.ts +1 -1
  49. package/src/store/session/disk.ts +3 -0
  50. package/src/tools/builtins/browser.ts +2 -2
  51. package/src/types/agent/scheduler.ts +6 -1
  52. package/src/types/agent/task.ts +21 -1
  53. package/src/types/connector/mcp.ts +14 -0
  54. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/sdk",
3
- "version": "48.0.0",
3
+ "version": "48.1.0",
4
4
  "description": "Open-source AI agent SDK with a built-in runtime. Nothing between you and your agents.",
5
5
  "license": "FSL-1.1-MIT",
6
6
  "engines": {
@@ -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(
@@ -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)) {