agents 0.12.4 → 0.13.1

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 (62) hide show
  1. package/README.md +8 -8
  2. package/dist/{agent-tool-types-CM_50fcV.d.ts → agent-tool-types-Dn9n-3SI.d.ts} +234 -85
  3. package/dist/agent-tool-types.d.ts +1 -1
  4. package/dist/{agent-tools-BylX6WXG.d.ts → agent-tools-B1ttU-pq.d.ts} +2 -2
  5. package/dist/agent-tools-BAdX1vdI.js.map +1 -1
  6. package/dist/agent-tools.d.ts +1 -1
  7. package/dist/agent-tools.js.map +1 -1
  8. package/dist/ai-chat-agent.js.map +1 -1
  9. package/dist/ai-chat-v5-migration.js.map +1 -1
  10. package/dist/ai-react.js.map +1 -1
  11. package/dist/ai-types.js.map +1 -1
  12. package/dist/browser/ai.js +1 -1
  13. package/dist/browser/ai.js.map +1 -1
  14. package/dist/browser/index.js +1 -1
  15. package/dist/browser/tanstack-ai.js +1 -1
  16. package/dist/browser/tanstack-ai.js.map +1 -1
  17. package/dist/chat/index.d.ts +2 -2
  18. package/dist/chat/index.js.map +1 -1
  19. package/dist/{classPrivateFieldGet2-CS51BNGR.js → classPrivateFieldGet2-Evpt0SEr.js} +5 -5
  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.js.map +1 -1
  25. package/dist/{compaction-helpers-bYvP1o2S.d.ts → compaction-helpers-DAe-xiVY.d.ts} +33 -15
  26. package/dist/compaction-helpers-DvcZnvQ1.js.map +1 -1
  27. package/dist/email.d.ts +1 -1
  28. package/dist/email.js.map +1 -1
  29. package/dist/experimental/memory/session/index.d.ts +247 -34
  30. package/dist/experimental/memory/session/index.js +540 -135
  31. package/dist/experimental/memory/session/index.js.map +1 -1
  32. package/dist/experimental/memory/utils/index.d.ts +1 -1
  33. package/dist/experimental/memory/utils/index.js.map +1 -1
  34. package/dist/experimental/webmcp.js.map +1 -1
  35. package/dist/index.d.ts +71 -57
  36. package/dist/index.js +583 -45
  37. package/dist/index.js.map +1 -1
  38. package/dist/internal_context.js.map +1 -1
  39. package/dist/mcp/client.d.ts +12 -12
  40. package/dist/mcp/do-oauth-client-provider.js.map +1 -1
  41. package/dist/mcp/index.d.ts +40 -40
  42. package/dist/mcp/index.js +21 -45
  43. package/dist/mcp/index.js.map +1 -1
  44. package/dist/mcp/x402.js.map +1 -1
  45. package/dist/observability/index.js.map +1 -1
  46. package/dist/react.d.ts +3 -3
  47. package/dist/react.js.map +1 -1
  48. package/dist/retries.js.map +1 -1
  49. package/dist/schedule.js.map +1 -1
  50. package/dist/serializable.d.ts +1 -1
  51. package/dist/{shared-DzJYHisH.js → shared-CiKaIK4h.js} +4 -5
  52. package/dist/{shared-DzJYHisH.js.map → shared-CiKaIK4h.js.map} +1 -1
  53. package/dist/sub-routing.d.ts +6 -6
  54. package/dist/sub-routing.js.map +1 -1
  55. package/dist/tool-output-truncation-CH-khbZ3.js.map +1 -1
  56. package/dist/types.js.map +1 -1
  57. package/dist/utils.js.map +1 -1
  58. package/dist/vite.js.map +1 -1
  59. package/dist/workflow-types.js.map +1 -1
  60. package/dist/workflows.d.ts +1 -1
  61. package/dist/workflows.js.map +1 -1
  62. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"internal_context.js","names":[],"sources":["../src/internal_context.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { Connection } from \"partyserver\";\n\nexport type AgentEmail = {\n from: string;\n to: string;\n getRaw: () => Promise<Uint8Array>;\n headers: Headers;\n rawSize: number;\n setReject: (reason: string) => void;\n forward: (rcptTo: string, headers?: Headers) => Promise<EmailSendResult>;\n reply: (options: {\n from: string;\n to: string;\n raw: string;\n }) => Promise<EmailSendResult>;\n /** @internal Indicates email was routed via createSecureReplyEmailResolver */\n _secureRouted?: boolean;\n};\n\nexport type AgentContextStore = {\n // Using unknown to avoid circular dependency with Agent\n agent: unknown;\n connection: Connection | undefined;\n request: Request | undefined;\n email: AgentEmail | undefined;\n};\n\n/**\n * @internal — This is an internal implementation detail.\n * Importing or relying on this symbol **will** break your code in a future release.\n */\nexport const __DO_NOT_USE_WILL_BREAK__agentContext =\n new AsyncLocalStorage<AgentContextStore>();\n"],"mappings":";;;;;;AAgCA,MAAa,wCACX,IAAI,mBAAsC"}
1
+ {"version":3,"file":"internal_context.js","names":[],"sources":["../src/internal_context.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { Connection } from \"partyserver\";\n\nexport type AgentEmail = {\n from: string;\n to: string;\n getRaw: () => Promise<Uint8Array>;\n headers: Headers;\n rawSize: number;\n setReject: (reason: string) => void;\n forward: (rcptTo: string, headers?: Headers) => Promise<EmailSendResult>;\n reply: (options: {\n from: string;\n to: string;\n raw: string;\n }) => Promise<EmailSendResult>;\n /** @internal Indicates email was routed via createSecureReplyEmailResolver */\n _secureRouted?: boolean;\n};\n\nexport type AgentContextStore = {\n // Using unknown to avoid circular dependency with Agent\n agent: unknown;\n connection: Connection | undefined;\n request: Request | undefined;\n email: AgentEmail | undefined;\n};\n\n/**\n * @internal — This is an internal implementation detail.\n * Importing or relying on this symbol **will** break your code in a future release.\n */\nexport const __DO_NOT_USE_WILL_BREAK__agentContext =\n new AsyncLocalStorage<AgentContextStore>();\n"],"mappings":";;;;;;AAgCA,MAAa,wCACX,IAAI,kBAAqC"}
@@ -1,16 +1,16 @@
1
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";
2
+ _t as getNamespacedData,
3
+ ct as MCPClientManagerOptions,
4
+ dt as MCPConnectionResult,
5
+ ft as MCPDiscoverResult,
6
+ gt as RegisterServerOptions,
7
+ ht as MCPServerOptions,
8
+ lt as MCPClientOAuthCallbackConfig,
9
+ mt as MCPServerFilter,
10
+ pt as MCPOAuthCallbackResult,
11
+ st as MCPClientManager,
12
+ ut as MCPClientOAuthResult
13
+ } from "../agent-tool-types-Dn9n-3SI.js";
14
14
  export {
15
15
  MCPClientManager,
16
16
  MCPClientManagerOptions,
@@ -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,53 +1,53 @@
1
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";
2
+ At as McpAuthContext,
3
+ Ct as ElicitRequest,
4
+ Dt as CreateMcpHandlerOptions,
5
+ Et as McpAgent,
6
+ Ft as SSEEdgeClientTransport,
7
+ It as StreamableHTTPEdgeClientTransport,
8
+ Lt as McpClientOptions,
9
+ Mt as TransportState,
10
+ Nt as WorkerTransport,
11
+ Ot as createMcpHandler,
12
+ Pt as WorkerTransportOptions,
13
+ St as RPC_DO_PREFIX,
14
+ Tt as ElicitResult,
15
+ bt as RPCServerTransport,
16
+ dt as MCPConnectionResult,
17
+ ft as MCPDiscoverResult,
18
+ ht as MCPServerOptions,
19
+ jt as getMcpAuthContext,
20
+ kt as experimental_createMcpHandler,
21
+ lt as MCPClientOAuthCallbackConfig,
22
+ ut as MCPClientOAuthResult,
23
+ vt as RPCClientTransport,
24
+ wt as ElicitRequestSchema,
25
+ xt as RPCServerTransportOptions,
26
+ yt as RPCClientTransportOptions
27
+ } from "../agent-tool-types-Dn9n-3SI.js";
28
28
  export {
29
- CreateMcpHandlerOptions,
30
- ElicitRequest,
29
+ type CreateMcpHandlerOptions,
30
+ type ElicitRequest,
31
31
  ElicitRequestSchema,
32
- ElicitResult,
33
- MCPClientOAuthCallbackConfig,
34
- MCPClientOAuthResult,
35
- MCPConnectionResult,
36
- MCPDiscoverResult,
37
- MCPServerOptions,
32
+ type ElicitResult,
33
+ type MCPClientOAuthCallbackConfig,
34
+ type MCPClientOAuthResult,
35
+ type MCPConnectionResult,
36
+ type MCPDiscoverResult,
37
+ type MCPServerOptions,
38
38
  McpAgent,
39
- McpAuthContext,
40
- McpClientOptions,
39
+ type McpAuthContext,
40
+ type McpClientOptions,
41
41
  RPCClientTransport,
42
- RPCClientTransportOptions,
42
+ type RPCClientTransportOptions,
43
43
  RPCServerTransport,
44
- RPCServerTransportOptions,
44
+ type RPCServerTransportOptions,
45
45
  RPC_DO_PREFIX,
46
46
  SSEEdgeClientTransport,
47
47
  StreamableHTTPEdgeClientTransport,
48
- TransportState,
48
+ type TransportState,
49
49
  WorkerTransport,
50
- WorkerTransportOptions,
50
+ type WorkerTransportOptions,
51
51
  createMcpHandler,
52
52
  experimental_createMcpHandler,
53
53
  getMcpAuthContext
package/dist/mcp/index.js CHANGED
@@ -541,21 +541,9 @@ 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
- }
555
544
  constructor(options) {
556
545
  this._started = false;
557
546
  this._requestResponseMap = /* @__PURE__ */ new Map();
558
- this._activeRequestId = new AsyncLocalStorage();
559
547
  const { agent } = getCurrentAgent();
560
548
  if (!agent) throw new Error("McpAgent was not found in Transport constructor");
561
549
  this.sessionId = agent.getSessionId();
@@ -634,34 +622,35 @@ var StreamableHTTPServerTransport = class {
634
622
  if (Array.isArray(rawMessage)) messages = rawMessage.map((msg) => JSONRPCMessageSchema.parse(msg));
635
623
  else messages = [JSONRPCMessageSchema.parse(rawMessage)];
636
624
  const hasRequests = messages.some(isJSONRPCRequest);
637
- const dispatchMessage = async (message) => {
625
+ if (!hasRequests) for (const message of messages) {
638
626
  if (this.messageInterceptor) {
639
627
  if (await this.messageInterceptor(message, {
640
628
  authInfo,
641
629
  requestInfo
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;
630
+ })) continue;
652
631
  }
653
632
  this.onmessage?.(message, {
654
633
  authInfo,
655
634
  requestInfo
656
635
  });
657
- };
658
- if (!hasRequests) for (const message of messages) await dispatchMessage(message);
636
+ }
659
637
  else if (hasRequests) {
660
638
  const { connection } = getCurrentAgent();
661
639
  if (!connection) throw new Error("Connection was not found in handlePostRequest");
662
640
  const requestIds = messages.filter(isJSONRPCRequest).map((message) => message.id);
663
641
  connection.setState({ requestIds });
664
- for (const message of messages) await dispatchMessage(message);
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
+ }
665
654
  }
666
655
  }
667
656
  async close() {
@@ -673,23 +662,13 @@ var StreamableHTTPServerTransport = class {
673
662
  async send(message, options) {
674
663
  const { agent } = getCurrentAgent();
675
664
  if (!agent) throw new Error("Agent was not found in send");
676
- const contextRequestId = this._activeRequestId.getStore();
677
665
  let requestId = options?.relatedRequestId;
678
666
  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
- }
687
667
  if (requestId === void 0) {
688
668
  if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");
689
- if (standaloneConnection === void 0) {
690
- if (isJSONRPCRequest(message)) throw new Error("No connection established for server-to-client request");
691
- return;
692
- }
669
+ let standaloneConnection;
670
+ for (const conn of agent.getConnections()) if (conn.state?._standaloneSse) standaloneConnection = conn;
671
+ if (standaloneConnection === void 0) return;
693
672
  let eventId;
694
673
  if (this._eventStore) eventId = await this._eventStore.storeEvent(standaloneConnection.id, message);
695
674
  this.writeSSEEvent(standaloneConnection, message, eventId);
@@ -704,10 +683,7 @@ var StreamableHTTPServerTransport = class {
704
683
  this._requestResponseMap.set(requestId, message);
705
684
  const relatedIds = connection.state?.requestIds ?? [];
706
685
  shouldClose = relatedIds.every((id) => this._requestResponseMap.has(id));
707
- if (shouldClose) {
708
- for (const id of relatedIds) this._requestResponseMap.delete(id);
709
- connection.setState({ requestIds: [] });
710
- }
686
+ if (shouldClose) for (const id of relatedIds) this._requestResponseMap.delete(id);
711
687
  }
712
688
  this.writeSSEEvent(connection, message, eventId, shouldClose);
713
689
  }
@@ -1477,7 +1453,7 @@ var McpAgent = class McpAgent extends Agent {
1477
1453
  }
1478
1454
  }
1479
1455
  /** Elicit user input with a message and schema */
1480
- async elicitInput(params) {
1456
+ async elicitInput(params, options) {
1481
1457
  const requestId = `elicit_${Math.random().toString(36).substring(2, 11)}`;
1482
1458
  const elicitRequest = {
1483
1459
  jsonrpc: "2.0",
@@ -1513,7 +1489,7 @@ var McpAgent = class McpAgent extends Agent {
1513
1489
  };
1514
1490
  return this.keepAliveWhile(async () => {
1515
1491
  if (this._transport) try {
1516
- await this._transport.send(elicitRequest);
1492
+ await this._transport.send(elicitRequest, options);
1517
1493
  } catch (error) {
1518
1494
  cleanup();
1519
1495
  throw error;