agents 0.12.3 → 0.12.4

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 (81) hide show
  1. package/dist/{agent-tool-types-DSteYkkS.d.ts → agent-tool-types-CM_50fcV.d.ts} +104 -87
  2. package/dist/agent-tool-types.d.ts +1 -1
  3. package/dist/agent-tools-BAdX1vdI.js.map +1 -1
  4. package/dist/{agent-tools-eGTCdVZX.d.ts → agent-tools-BylX6WXG.d.ts} +2 -2
  5. package/dist/agent-tools.d.ts +1 -1
  6. package/dist/agent-tools.js.map +1 -1
  7. package/dist/browser/ai.d.ts +2 -2
  8. package/dist/browser/ai.js +1 -1
  9. package/dist/browser/ai.js.map +1 -1
  10. package/dist/browser/index.d.ts +41 -10
  11. package/dist/browser/index.js +1 -1
  12. package/dist/browser/tanstack-ai.d.ts +2 -2
  13. package/dist/browser/tanstack-ai.js +1 -1
  14. package/dist/browser/tanstack-ai.js.map +1 -1
  15. package/dist/chat/index.d.ts +297 -148
  16. package/dist/chat/index.js +43 -14
  17. package/dist/chat/index.js.map +1 -1
  18. package/dist/{classPrivateFieldGet2-Bqby-AHD.js → classPrivateFieldGet2-CS51BNGR.js} +5 -5
  19. package/dist/cli/index.d.ts +1 -1
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/client-D1kFXo80.js.map +1 -1
  22. package/dist/client.d.ts +1 -1
  23. package/dist/client.js.map +1 -1
  24. package/dist/codemode/ai.d.ts +1 -1
  25. package/dist/{compaction-helpers-CSaqCmdE.js → compaction-helpers-DvcZnvQ1.js} +1 -1
  26. package/dist/{compaction-helpers-CSaqCmdE.js.map → compaction-helpers-DvcZnvQ1.js.map} +1 -1
  27. package/dist/{compaction-helpers-CzCq1-fF.d.ts → compaction-helpers-bYvP1o2S.d.ts} +10 -3
  28. package/dist/{do-oauth-client-provider-C38aWbFV.d.ts → do-oauth-client-provider-4OKQU9rT.d.ts} +1 -1
  29. package/dist/{email-X72-zjuq.d.ts → email-J0GGS3sa.d.ts} +1 -1
  30. package/dist/email.d.ts +2 -2
  31. package/dist/email.js.map +1 -1
  32. package/dist/experimental/memory/session/index.d.ts +126 -26
  33. package/dist/experimental/memory/session/index.js +13 -3
  34. package/dist/experimental/memory/session/index.js.map +1 -1
  35. package/dist/experimental/memory/utils/index.d.ts +41 -5
  36. package/dist/experimental/memory/utils/index.js +15 -5
  37. package/dist/experimental/memory/utils/index.js.map +1 -1
  38. package/dist/experimental/webmcp.d.ts +9 -3
  39. package/dist/experimental/webmcp.js.map +1 -1
  40. package/dist/{index-Biv6K70p.d.ts → index-DKey3P4s.d.ts} +26 -2
  41. package/dist/index.d.ts +48 -44
  42. package/dist/index.js +122 -85
  43. package/dist/index.js.map +1 -1
  44. package/dist/{internal_context-BvuGZieY.d.ts → internal_context-BZrMS0B5.d.ts} +1 -1
  45. package/dist/internal_context.d.ts +1 -1
  46. package/dist/mcp/client.d.ts +26 -2
  47. package/dist/mcp/do-oauth-client-provider.d.ts +10 -2
  48. package/dist/mcp/do-oauth-client-provider.js.map +1 -1
  49. package/dist/mcp/index.d.ts +54 -2
  50. package/dist/mcp/index.js +43 -19
  51. package/dist/mcp/index.js.map +1 -1
  52. package/dist/mcp/x402.d.ts +74 -17
  53. package/dist/mcp/x402.js.map +1 -1
  54. package/dist/observability/index.d.ts +16 -2
  55. package/dist/observability/index.js +1 -1
  56. package/dist/observability/index.js.map +1 -1
  57. package/dist/react.d.ts +2 -2
  58. package/dist/react.js.map +1 -1
  59. package/dist/{retries-fLD8cGNf.d.ts → retries-BVdRl5ZE.d.ts} +1 -1
  60. package/dist/retries.d.ts +1 -1
  61. package/dist/retries.js.map +1 -1
  62. package/dist/schedule.js.map +1 -1
  63. package/dist/serializable.d.ts +1 -1
  64. package/dist/{shared-Ch9slKdI.d.ts → shared-Cvj92byG.d.ts} +1 -1
  65. package/dist/{shared-C6l4ZKRN.js → shared-DzJYHisH.js} +3 -3
  66. package/dist/{shared-C6l4ZKRN.js.map → shared-DzJYHisH.js.map} +1 -1
  67. package/dist/sub-routing.d.ts +6 -6
  68. package/dist/sub-routing.js.map +1 -1
  69. package/dist/tool-output-truncation-CH-khbZ3.js +98 -0
  70. package/dist/tool-output-truncation-CH-khbZ3.js.map +1 -0
  71. package/dist/{types-DAHCZC_W.d.ts → types-_JjKmv-l.d.ts} +1 -1
  72. package/dist/types.d.ts +1 -1
  73. package/dist/types.js.map +1 -1
  74. package/dist/utils.js.map +1 -1
  75. package/dist/vite.js.map +1 -1
  76. package/dist/{workflow-types-DHs0L0KP.d.ts → workflow-types-Dkzg4hAx.d.ts} +1 -1
  77. package/dist/workflow-types.d.ts +1 -1
  78. package/dist/workflow-types.js.map +1 -1
  79. package/dist/workflows.d.ts +2 -2
  80. package/dist/workflows.js.map +1 -1
  81. package/package.json +9 -9
@@ -34,4 +34,4 @@ export {
34
34
  __DO_NOT_USE_WILL_BREAK__agentContext as r,
35
35
  AgentContextStore as t
36
36
  };
37
- //# sourceMappingURL=internal_context-BvuGZieY.d.ts.map
37
+ //# sourceMappingURL=internal_context-BZrMS0B5.d.ts.map
@@ -2,5 +2,5 @@ import {
2
2
  n as AgentEmail,
3
3
  r as __DO_NOT_USE_WILL_BREAK__agentContext,
4
4
  t as AgentContextStore
5
- } from "./internal_context-BvuGZieY.js";
5
+ } from "./internal_context-BZrMS0B5.js";
6
6
  export { AgentContextStore, AgentEmail, __DO_NOT_USE_WILL_BREAK__agentContext };
@@ -1,2 +1,26 @@
1
- import { $ as MCPClientManagerOptions, Q as MCPClientManager, at as MCPServerFilter, ct as getNamespacedData, et as MCPClientOAuthCallbackConfig, it as MCPOAuthCallbackResult, nt as MCPConnectionResult, ot as MCPServerOptions, rt as MCPDiscoverResult, st as RegisterServerOptions, tt as MCPClientOAuthResult } from "../agent-tool-types-DSteYkkS.js";
2
- export { MCPClientManager, MCPClientManagerOptions, MCPClientOAuthCallbackConfig, MCPClientOAuthResult, MCPConnectionResult, MCPDiscoverResult, MCPOAuthCallbackResult, MCPServerFilter, MCPServerOptions, RegisterServerOptions, getNamespacedData };
1
+ import {
2
+ at as MCPDiscoverResult,
3
+ ct as MCPServerOptions,
4
+ et as MCPClientManager,
5
+ it as MCPConnectionResult,
6
+ lt as RegisterServerOptions,
7
+ nt as MCPClientOAuthCallbackConfig,
8
+ ot as MCPOAuthCallbackResult,
9
+ rt as MCPClientOAuthResult,
10
+ st as MCPServerFilter,
11
+ tt as MCPClientManagerOptions,
12
+ ut as getNamespacedData
13
+ } from "../agent-tool-types-CM_50fcV.js";
14
+ export {
15
+ MCPClientManager,
16
+ MCPClientManagerOptions,
17
+ MCPClientOAuthCallbackConfig,
18
+ MCPClientOAuthResult,
19
+ MCPConnectionResult,
20
+ MCPDiscoverResult,
21
+ MCPOAuthCallbackResult,
22
+ MCPServerFilter,
23
+ MCPServerOptions,
24
+ RegisterServerOptions,
25
+ getNamespacedData
26
+ };
@@ -1,2 +1,10 @@
1
- import { n as AgentsOAuthProvider, r as DurableObjectOAuthClientProvider, t as AgentMcpOAuthProvider } from "../do-oauth-client-provider-C38aWbFV.js";
2
- export { AgentMcpOAuthProvider, AgentsOAuthProvider, DurableObjectOAuthClientProvider };
1
+ import {
2
+ n as AgentsOAuthProvider,
3
+ r as DurableObjectOAuthClientProvider,
4
+ t as AgentMcpOAuthProvider
5
+ } from "../do-oauth-client-provider-4OKQU9rT.js";
6
+ export {
7
+ AgentMcpOAuthProvider,
8
+ AgentsOAuthProvider,
9
+ DurableObjectOAuthClientProvider
10
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"do-oauth-client-provider.js","names":[],"sources":["../../src/mcp/do-oauth-client-provider.ts"],"sourcesContent":["import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type {\n OAuthClientInformation,\n OAuthClientInformationFull,\n OAuthClientMetadata,\n OAuthTokens\n} from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport { nanoid } from \"nanoid\";\n\nconst STATE_EXPIRATION_MS = 10 * 60 * 1000; // 10 minutes\n\ninterface StoredState {\n nonce: string;\n serverId: string;\n createdAt: number;\n}\n\n// A slight extension to the standard OAuthClientProvider interface because `redirectToAuthorization` doesn't give us the interface we need\n// This allows us to track authentication for a specific server and associated dynamic client registration\nexport interface AgentMcpOAuthProvider extends OAuthClientProvider {\n authUrl: string | undefined;\n clientId: string | undefined;\n serverId: string | undefined;\n checkState(\n state: string\n ): Promise<{ valid: boolean; serverId?: string; error?: string }>;\n consumeState(state: string): Promise<void>;\n deleteCodeVerifier(): Promise<void>;\n}\n\n/**\n * @deprecated Use {@link AgentMcpOAuthProvider} instead.\n */\nexport type AgentsOAuthProvider = AgentMcpOAuthProvider;\n\nexport class DurableObjectOAuthClientProvider implements AgentMcpOAuthProvider {\n private _authUrl_: string | undefined;\n private _serverId_: string | undefined;\n private _clientId_: string | undefined;\n\n constructor(\n public storage: DurableObjectStorage,\n public clientName: string,\n public baseRedirectUrl: string\n ) {\n if (!storage) {\n throw new Error(\n \"DurableObjectOAuthClientProvider requires a valid DurableObjectStorage instance\"\n );\n }\n }\n\n get clientMetadata(): OAuthClientMetadata {\n return {\n client_name: this.clientName,\n client_uri: this.clientUri,\n grant_types: [\"authorization_code\", \"refresh_token\"],\n redirect_uris: [this.redirectUrl],\n response_types: [\"code\"],\n token_endpoint_auth_method: \"none\"\n };\n }\n\n get clientUri() {\n return new URL(this.redirectUrl).origin;\n }\n\n get redirectUrl() {\n return this.baseRedirectUrl;\n }\n\n get clientId() {\n if (!this._clientId_) {\n throw new Error(\"Trying to access clientId before it was set\");\n }\n return this._clientId_;\n }\n\n set clientId(clientId_: string) {\n this._clientId_ = clientId_;\n }\n\n get serverId() {\n if (!this._serverId_) {\n throw new Error(\"Trying to access serverId before it was set\");\n }\n return this._serverId_;\n }\n\n set serverId(serverId_: string) {\n this._serverId_ = serverId_;\n }\n\n keyPrefix(clientId: string) {\n return `/${this.clientName}/${this.serverId}/${clientId}`;\n }\n\n clientInfoKey(clientId: string) {\n return `${this.keyPrefix(clientId)}/client_info/`;\n }\n\n async clientInformation(): Promise<OAuthClientInformation | undefined> {\n if (!this._clientId_) {\n return undefined;\n }\n return (\n (await this.storage.get<OAuthClientInformation>(\n this.clientInfoKey(this.clientId)\n )) ?? undefined\n );\n }\n\n async saveClientInformation(\n clientInformation: OAuthClientInformationFull\n ): Promise<void> {\n await this.storage.put(\n this.clientInfoKey(clientInformation.client_id),\n clientInformation\n );\n this.clientId = clientInformation.client_id;\n }\n\n tokenKey(clientId: string) {\n return `${this.keyPrefix(clientId)}/token`;\n }\n\n async tokens(): Promise<OAuthTokens | undefined> {\n if (!this._clientId_) {\n return undefined;\n }\n return (\n (await this.storage.get<OAuthTokens>(this.tokenKey(this.clientId))) ??\n undefined\n );\n }\n\n async saveTokens(tokens: OAuthTokens): Promise<void> {\n await this.storage.put(this.tokenKey(this.clientId), tokens);\n }\n\n get authUrl() {\n return this._authUrl_;\n }\n\n stateKey(nonce: string) {\n return `/${this.clientName}/${this.serverId}/state/${nonce}`;\n }\n\n async state(): Promise<string> {\n const nonce = nanoid();\n const state = `${nonce}.${this.serverId}`;\n const storedState: StoredState = {\n nonce,\n serverId: this.serverId,\n createdAt: Date.now()\n };\n await this.storage.put(this.stateKey(nonce), storedState);\n return state;\n }\n\n async checkState(\n state: string\n ): Promise<{ valid: boolean; serverId?: string; error?: string }> {\n const parts = state.split(\".\");\n if (parts.length !== 2) {\n return { valid: false, error: \"Invalid state format\" };\n }\n\n const [nonce, serverId] = parts;\n const key = this.stateKey(nonce);\n const storedState = await this.storage.get<StoredState>(key);\n\n if (!storedState) {\n return { valid: false, error: \"State not found or already used\" };\n }\n\n if (storedState.serverId !== serverId) {\n await this.storage.delete(key);\n return { valid: false, error: \"State serverId mismatch\" };\n }\n\n const age = Date.now() - storedState.createdAt;\n if (age > STATE_EXPIRATION_MS) {\n await this.storage.delete(key);\n return { valid: false, error: \"State expired\" };\n }\n\n return { valid: true, serverId };\n }\n\n async consumeState(state: string): Promise<void> {\n const parts = state.split(\".\");\n if (parts.length !== 2) {\n // This should never happen since checkState validates format first.\n // Log for debugging but don't throw - state consumption is best-effort.\n console.warn(`[OAuth] consumeState called with invalid state format`);\n return;\n }\n const [nonce] = parts;\n await this.storage.delete(this.stateKey(nonce));\n }\n\n async redirectToAuthorization(authUrl: URL): Promise<void> {\n this._authUrl_ = authUrl.toString();\n }\n\n async invalidateCredentials(\n scope: \"all\" | \"client\" | \"tokens\" | \"verifier\"\n ): Promise<void> {\n if (!this._clientId_) return;\n\n const deleteKeys: string[] = [];\n\n if (scope === \"all\" || scope === \"client\") {\n deleteKeys.push(this.clientInfoKey(this.clientId));\n }\n if (scope === \"all\" || scope === \"tokens\") {\n deleteKeys.push(this.tokenKey(this.clientId));\n }\n if (scope === \"all\" || scope === \"verifier\") {\n deleteKeys.push(this.codeVerifierKey(this.clientId));\n }\n\n if (deleteKeys.length > 0) {\n await this.storage.delete(deleteKeys);\n }\n }\n\n codeVerifierKey(clientId: string) {\n return `${this.keyPrefix(clientId)}/code_verifier`;\n }\n\n async saveCodeVerifier(verifier: string): Promise<void> {\n const key = this.codeVerifierKey(this.clientId);\n\n // Don't overwrite existing verifier to preserve first PKCE verifier\n const existing = await this.storage.get<string>(key);\n if (existing) {\n return;\n }\n\n await this.storage.put(key, verifier);\n }\n\n async codeVerifier(): Promise<string> {\n const codeVerifier = await this.storage.get<string>(\n this.codeVerifierKey(this.clientId)\n );\n if (!codeVerifier) {\n throw new Error(\"No code verifier found\");\n }\n return codeVerifier;\n }\n\n async deleteCodeVerifier(): Promise<void> {\n await this.storage.delete(this.codeVerifierKey(this.clientId));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"do-oauth-client-provider.js","names":[],"sources":["../../src/mcp/do-oauth-client-provider.ts"],"sourcesContent":["import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type {\n OAuthClientInformation,\n OAuthClientInformationFull,\n OAuthClientMetadata,\n OAuthTokens\n} from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport { nanoid } from \"nanoid\";\n\nconst STATE_EXPIRATION_MS = 10 * 60 * 1000; // 10 minutes\n\ninterface StoredState {\n nonce: string;\n serverId: string;\n createdAt: number;\n}\n\n// A slight extension to the standard OAuthClientProvider interface because `redirectToAuthorization` doesn't give us the interface we need\n// This allows us to track authentication for a specific server and associated dynamic client registration\nexport interface AgentMcpOAuthProvider extends OAuthClientProvider {\n authUrl: string | undefined;\n clientId: string | undefined;\n serverId: string | undefined;\n checkState(\n state: string\n ): Promise<{ valid: boolean; serverId?: string; error?: string }>;\n consumeState(state: string): Promise<void>;\n deleteCodeVerifier(): Promise<void>;\n}\n\n/**\n * @deprecated Use {@link AgentMcpOAuthProvider} instead.\n */\nexport type AgentsOAuthProvider = AgentMcpOAuthProvider;\n\nexport class DurableObjectOAuthClientProvider implements AgentMcpOAuthProvider {\n private _authUrl_: string | undefined;\n private _serverId_: string | undefined;\n private _clientId_: string | undefined;\n\n constructor(\n public storage: DurableObjectStorage,\n public clientName: string,\n public baseRedirectUrl: string\n ) {\n if (!storage) {\n throw new Error(\n \"DurableObjectOAuthClientProvider requires a valid DurableObjectStorage instance\"\n );\n }\n }\n\n get clientMetadata(): OAuthClientMetadata {\n return {\n client_name: this.clientName,\n client_uri: this.clientUri,\n grant_types: [\"authorization_code\", \"refresh_token\"],\n redirect_uris: [this.redirectUrl],\n response_types: [\"code\"],\n token_endpoint_auth_method: \"none\"\n };\n }\n\n get clientUri() {\n return new URL(this.redirectUrl).origin;\n }\n\n get redirectUrl() {\n return this.baseRedirectUrl;\n }\n\n get clientId() {\n if (!this._clientId_) {\n throw new Error(\"Trying to access clientId before it was set\");\n }\n return this._clientId_;\n }\n\n set clientId(clientId_: string) {\n this._clientId_ = clientId_;\n }\n\n get serverId() {\n if (!this._serverId_) {\n throw new Error(\"Trying to access serverId before it was set\");\n }\n return this._serverId_;\n }\n\n set serverId(serverId_: string) {\n this._serverId_ = serverId_;\n }\n\n keyPrefix(clientId: string) {\n return `/${this.clientName}/${this.serverId}/${clientId}`;\n }\n\n clientInfoKey(clientId: string) {\n return `${this.keyPrefix(clientId)}/client_info/`;\n }\n\n async clientInformation(): Promise<OAuthClientInformation | undefined> {\n if (!this._clientId_) {\n return undefined;\n }\n return (\n (await this.storage.get<OAuthClientInformation>(\n this.clientInfoKey(this.clientId)\n )) ?? undefined\n );\n }\n\n async saveClientInformation(\n clientInformation: OAuthClientInformationFull\n ): Promise<void> {\n await this.storage.put(\n this.clientInfoKey(clientInformation.client_id),\n clientInformation\n );\n this.clientId = clientInformation.client_id;\n }\n\n tokenKey(clientId: string) {\n return `${this.keyPrefix(clientId)}/token`;\n }\n\n async tokens(): Promise<OAuthTokens | undefined> {\n if (!this._clientId_) {\n return undefined;\n }\n return (\n (await this.storage.get<OAuthTokens>(this.tokenKey(this.clientId))) ??\n undefined\n );\n }\n\n async saveTokens(tokens: OAuthTokens): Promise<void> {\n await this.storage.put(this.tokenKey(this.clientId), tokens);\n }\n\n get authUrl() {\n return this._authUrl_;\n }\n\n stateKey(nonce: string) {\n return `/${this.clientName}/${this.serverId}/state/${nonce}`;\n }\n\n async state(): Promise<string> {\n const nonce = nanoid();\n const state = `${nonce}.${this.serverId}`;\n const storedState: StoredState = {\n nonce,\n serverId: this.serverId,\n createdAt: Date.now()\n };\n await this.storage.put(this.stateKey(nonce), storedState);\n return state;\n }\n\n async checkState(\n state: string\n ): Promise<{ valid: boolean; serverId?: string; error?: string }> {\n const parts = state.split(\".\");\n if (parts.length !== 2) {\n return { valid: false, error: \"Invalid state format\" };\n }\n\n const [nonce, serverId] = parts;\n const key = this.stateKey(nonce);\n const storedState = await this.storage.get<StoredState>(key);\n\n if (!storedState) {\n return { valid: false, error: \"State not found or already used\" };\n }\n\n if (storedState.serverId !== serverId) {\n await this.storage.delete(key);\n return { valid: false, error: \"State serverId mismatch\" };\n }\n\n const age = Date.now() - storedState.createdAt;\n if (age > STATE_EXPIRATION_MS) {\n await this.storage.delete(key);\n return { valid: false, error: \"State expired\" };\n }\n\n return { valid: true, serverId };\n }\n\n async consumeState(state: string): Promise<void> {\n const parts = state.split(\".\");\n if (parts.length !== 2) {\n // This should never happen since checkState validates format first.\n // Log for debugging but don't throw - state consumption is best-effort.\n console.warn(`[OAuth] consumeState called with invalid state format`);\n return;\n }\n const [nonce] = parts;\n await this.storage.delete(this.stateKey(nonce));\n }\n\n async redirectToAuthorization(authUrl: URL): Promise<void> {\n this._authUrl_ = authUrl.toString();\n }\n\n async invalidateCredentials(\n scope: \"all\" | \"client\" | \"tokens\" | \"verifier\"\n ): Promise<void> {\n if (!this._clientId_) return;\n\n const deleteKeys: string[] = [];\n\n if (scope === \"all\" || scope === \"client\") {\n deleteKeys.push(this.clientInfoKey(this.clientId));\n }\n if (scope === \"all\" || scope === \"tokens\") {\n deleteKeys.push(this.tokenKey(this.clientId));\n }\n if (scope === \"all\" || scope === \"verifier\") {\n deleteKeys.push(this.codeVerifierKey(this.clientId));\n }\n\n if (deleteKeys.length > 0) {\n await this.storage.delete(deleteKeys);\n }\n }\n\n codeVerifierKey(clientId: string) {\n return `${this.keyPrefix(clientId)}/code_verifier`;\n }\n\n async saveCodeVerifier(verifier: string): Promise<void> {\n const key = this.codeVerifierKey(this.clientId);\n\n // Don't overwrite existing verifier to preserve first PKCE verifier\n const existing = await this.storage.get<string>(key);\n if (existing) {\n return;\n }\n\n await this.storage.put(key, verifier);\n }\n\n async codeVerifier(): Promise<string> {\n const codeVerifier = await this.storage.get<string>(\n this.codeVerifierKey(this.clientId)\n );\n if (!codeVerifier) {\n throw new Error(\"No code verifier found\");\n }\n return codeVerifier;\n }\n\n async deleteCodeVerifier(): Promise<void> {\n await this.storage.delete(this.codeVerifierKey(this.clientId));\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,54 @@
1
- import { Ct as TransportState, Dt as StreamableHTTPEdgeClientTransport, Et as SSEEdgeClientTransport, Ot as McpClientOptions, St as getMcpAuthContext, Tt as WorkerTransportOptions, _t as McpAgent, bt as experimental_createMcpHandler, dt as RPCServerTransport, et as MCPClientOAuthCallbackConfig, ft as RPCServerTransportOptions, gt as ElicitResult, ht as ElicitRequestSchema, lt as RPCClientTransport, mt as ElicitRequest, nt as MCPConnectionResult, ot as MCPServerOptions, pt as RPC_DO_PREFIX, rt as MCPDiscoverResult, tt as MCPClientOAuthResult, ut as RPCClientTransportOptions, vt as CreateMcpHandlerOptions, wt as WorkerTransport, xt as McpAuthContext, yt as createMcpHandler } from "../agent-tool-types-DSteYkkS.js";
2
- export { CreateMcpHandlerOptions, ElicitRequest, ElicitRequestSchema, ElicitResult, MCPClientOAuthCallbackConfig, MCPClientOAuthResult, MCPConnectionResult, MCPDiscoverResult, MCPServerOptions, McpAgent, McpAuthContext, McpClientOptions, RPCClientTransport, RPCClientTransportOptions, RPCServerTransport, RPCServerTransportOptions, RPC_DO_PREFIX, SSEEdgeClientTransport, StreamableHTTPEdgeClientTransport, TransportState, WorkerTransport, WorkerTransportOptions, createMcpHandler, experimental_createMcpHandler, getMcpAuthContext };
1
+ import {
2
+ At as McpClientOptions,
3
+ Ct as McpAuthContext,
4
+ Dt as WorkerTransportOptions,
5
+ Et as WorkerTransport,
6
+ Ot as SSEEdgeClientTransport,
7
+ St as experimental_createMcpHandler,
8
+ Tt as TransportState,
9
+ _t as ElicitRequestSchema,
10
+ at as MCPDiscoverResult,
11
+ bt as CreateMcpHandlerOptions,
12
+ ct as MCPServerOptions,
13
+ dt as RPCClientTransport,
14
+ ft as RPCClientTransportOptions,
15
+ gt as ElicitRequest,
16
+ ht as RPC_DO_PREFIX,
17
+ it as MCPConnectionResult,
18
+ kt as StreamableHTTPEdgeClientTransport,
19
+ mt as RPCServerTransportOptions,
20
+ nt as MCPClientOAuthCallbackConfig,
21
+ pt as RPCServerTransport,
22
+ rt as MCPClientOAuthResult,
23
+ vt as ElicitResult,
24
+ wt as getMcpAuthContext,
25
+ xt as createMcpHandler,
26
+ yt as McpAgent
27
+ } from "../agent-tool-types-CM_50fcV.js";
28
+ export {
29
+ CreateMcpHandlerOptions,
30
+ ElicitRequest,
31
+ ElicitRequestSchema,
32
+ ElicitResult,
33
+ MCPClientOAuthCallbackConfig,
34
+ MCPClientOAuthResult,
35
+ MCPConnectionResult,
36
+ MCPDiscoverResult,
37
+ MCPServerOptions,
38
+ McpAgent,
39
+ McpAuthContext,
40
+ McpClientOptions,
41
+ RPCClientTransport,
42
+ RPCClientTransportOptions,
43
+ RPCServerTransport,
44
+ RPCServerTransportOptions,
45
+ RPC_DO_PREFIX,
46
+ SSEEdgeClientTransport,
47
+ StreamableHTTPEdgeClientTransport,
48
+ TransportState,
49
+ WorkerTransport,
50
+ WorkerTransportOptions,
51
+ createMcpHandler,
52
+ experimental_createMcpHandler,
53
+ getMcpAuthContext
54
+ };
package/dist/mcp/index.js CHANGED
@@ -541,9 +541,21 @@ var McpSSETransport = class {
541
541
  * Besides these points, the implementation is the same and should be updated to match the original as new features are added.
542
542
  */
543
543
  var StreamableHTTPServerTransport = class {
544
+ getStandaloneSseConnection(agent) {
545
+ for (const conn of agent.getConnections()) if (conn.state?._standaloneSse) return conn;
546
+ }
547
+ getOnlyActiveRequestId(agent) {
548
+ const requestIds = /* @__PURE__ */ new Set();
549
+ for (const conn of agent.getConnections()) for (const id of conn.state?.requestIds ?? []) {
550
+ requestIds.add(id);
551
+ if (requestIds.size > 1) return void 0;
552
+ }
553
+ return requestIds.values().next().value;
554
+ }
544
555
  constructor(options) {
545
556
  this._started = false;
546
557
  this._requestResponseMap = /* @__PURE__ */ new Map();
558
+ this._activeRequestId = new AsyncLocalStorage();
547
559
  const { agent } = getCurrentAgent();
548
560
  if (!agent) throw new Error("McpAgent was not found in Transport constructor");
549
561
  this.sessionId = agent.getSessionId();
@@ -622,35 +634,34 @@ var StreamableHTTPServerTransport = class {
622
634
  if (Array.isArray(rawMessage)) messages = rawMessage.map((msg) => JSONRPCMessageSchema.parse(msg));
623
635
  else messages = [JSONRPCMessageSchema.parse(rawMessage)];
624
636
  const hasRequests = messages.some(isJSONRPCRequest);
625
- if (!hasRequests) for (const message of messages) {
637
+ const dispatchMessage = async (message) => {
626
638
  if (this.messageInterceptor) {
627
639
  if (await this.messageInterceptor(message, {
628
640
  authInfo,
629
641
  requestInfo
630
- })) continue;
642
+ })) return;
643
+ }
644
+ if (isJSONRPCRequest(message)) {
645
+ this._activeRequestId.run(message.id, () => {
646
+ this.onmessage?.(message, {
647
+ authInfo,
648
+ requestInfo
649
+ });
650
+ });
651
+ return;
631
652
  }
632
653
  this.onmessage?.(message, {
633
654
  authInfo,
634
655
  requestInfo
635
656
  });
636
- }
657
+ };
658
+ if (!hasRequests) for (const message of messages) await dispatchMessage(message);
637
659
  else if (hasRequests) {
638
660
  const { connection } = getCurrentAgent();
639
661
  if (!connection) throw new Error("Connection was not found in handlePostRequest");
640
662
  const requestIds = messages.filter(isJSONRPCRequest).map((message) => message.id);
641
663
  connection.setState({ requestIds });
642
- for (const message of messages) {
643
- if (this.messageInterceptor) {
644
- if (await this.messageInterceptor(message, {
645
- authInfo,
646
- requestInfo
647
- })) continue;
648
- }
649
- this.onmessage?.(message, {
650
- authInfo,
651
- requestInfo
652
- });
653
- }
664
+ for (const message of messages) await dispatchMessage(message);
654
665
  }
655
666
  }
656
667
  async close() {
@@ -662,13 +673,23 @@ var StreamableHTTPServerTransport = class {
662
673
  async send(message, options) {
663
674
  const { agent } = getCurrentAgent();
664
675
  if (!agent) throw new Error("Agent was not found in send");
676
+ const contextRequestId = this._activeRequestId.getStore();
665
677
  let requestId = options?.relatedRequestId;
666
678
  if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) requestId = message.id;
679
+ let standaloneConnection;
680
+ if (requestId === void 0) {
681
+ standaloneConnection = this.getStandaloneSseConnection(agent);
682
+ if (standaloneConnection === void 0) {
683
+ if (contextRequestId !== void 0 && (isJSONRPCRequest(message) || isJSONRPCNotification(message))) requestId = contextRequestId;
684
+ else if (isJSONRPCRequest(message) || isJSONRPCNotification(message)) requestId = this.getOnlyActiveRequestId(agent);
685
+ }
686
+ }
667
687
  if (requestId === void 0) {
668
688
  if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");
669
- let standaloneConnection;
670
- for (const conn of agent.getConnections()) if (conn.state?._standaloneSse) standaloneConnection = conn;
671
- if (standaloneConnection === void 0) return;
689
+ if (standaloneConnection === void 0) {
690
+ if (isJSONRPCRequest(message)) throw new Error("No connection established for server-to-client request");
691
+ return;
692
+ }
672
693
  let eventId;
673
694
  if (this._eventStore) eventId = await this._eventStore.storeEvent(standaloneConnection.id, message);
674
695
  this.writeSSEEvent(standaloneConnection, message, eventId);
@@ -683,7 +704,10 @@ var StreamableHTTPServerTransport = class {
683
704
  this._requestResponseMap.set(requestId, message);
684
705
  const relatedIds = connection.state?.requestIds ?? [];
685
706
  shouldClose = relatedIds.every((id) => this._requestResponseMap.has(id));
686
- if (shouldClose) for (const id of relatedIds) this._requestResponseMap.delete(id);
707
+ if (shouldClose) {
708
+ for (const id of relatedIds) this._requestResponseMap.delete(id);
709
+ connection.setState({ requestIds: [] });
710
+ }
687
711
  }
688
712
  this.writeSSEEvent(connection, message, eventId, shouldClose);
689
713
  }