agents 0.0.0-07086ea → 0.0.0-087264c

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 (78) hide show
  1. package/README.md +378 -27
  2. package/dist/ai-chat-agent.d.ts +265 -30
  3. package/dist/ai-chat-agent.js +1118 -226
  4. package/dist/ai-chat-agent.js.map +1 -1
  5. package/dist/ai-chat-v5-migration.d.ts +155 -0
  6. package/dist/ai-chat-v5-migration.js +155 -0
  7. package/dist/ai-chat-v5-migration.js.map +1 -0
  8. package/dist/ai-react.d.ts +197 -71
  9. package/dist/ai-react.js +574 -200
  10. package/dist/ai-react.js.map +1 -1
  11. package/dist/ai-types-0OnT3FHg.d.ts +127 -0
  12. package/dist/ai-types-DEtF_8Km.js +28 -0
  13. package/dist/ai-types-DEtF_8Km.js.map +1 -0
  14. package/dist/ai-types.d.ts +6 -74
  15. package/dist/ai-types.js +3 -1
  16. package/dist/cli/index.d.ts +1 -0
  17. package/dist/cli/index.js +28 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/client-CdM5I962.d.ts +104 -0
  20. package/dist/client-DFotUKH_.d.ts +834 -0
  21. package/dist/client-DjTPRM8-.js +117 -0
  22. package/dist/client-DjTPRM8-.js.map +1 -0
  23. package/dist/client-QZa2Rq0l.js +1105 -0
  24. package/dist/client-QZa2Rq0l.js.map +1 -0
  25. package/dist/client.d.ts +11 -79
  26. package/dist/client.js +2 -130
  27. package/dist/codemode/ai.d.ts +27 -0
  28. package/dist/codemode/ai.js +151 -0
  29. package/dist/codemode/ai.js.map +1 -0
  30. package/dist/context-BkKbAa1R.js +8 -0
  31. package/dist/context-BkKbAa1R.js.map +1 -0
  32. package/dist/context-DcbQ8o7k.d.ts +24 -0
  33. package/dist/context.d.ts +6 -0
  34. package/dist/context.js +3 -0
  35. package/dist/do-oauth-client-provider--To1Tsjj.d.ts +70 -0
  36. package/dist/do-oauth-client-provider-B1fVIshX.js +155 -0
  37. package/dist/do-oauth-client-provider-B1fVIshX.js.map +1 -0
  38. package/dist/index-BaskqQ6f.d.ts +576 -0
  39. package/dist/index-DLuxm_9W.d.ts +58 -0
  40. package/dist/index.d.ts +60 -306
  41. package/dist/index.js +7 -21
  42. package/dist/mcp/client.d.ts +2 -768
  43. package/dist/mcp/client.js +4 -10
  44. package/dist/mcp/do-oauth-client-provider.d.ts +2 -41
  45. package/dist/mcp/do-oauth-client-provider.js +2 -106
  46. package/dist/mcp/index.d.ts +197 -71
  47. package/dist/mcp/index.js +1431 -797
  48. package/dist/mcp/index.js.map +1 -1
  49. package/dist/mcp/x402.d.ts +34 -0
  50. package/dist/mcp/x402.js +198 -0
  51. package/dist/mcp/x402.js.map +1 -0
  52. package/dist/mcp-CPSfGUgd.d.ts +61 -0
  53. package/dist/observability/index.d.ts +2 -0
  54. package/dist/observability/index.js +7 -0
  55. package/dist/react.d.ts +107 -12
  56. package/dist/react.js +183 -98
  57. package/dist/react.js.map +1 -1
  58. package/dist/schedule.d.ts +62 -39
  59. package/dist/schedule.js +46 -23
  60. package/dist/schedule.js.map +1 -1
  61. package/dist/serializable-Crsj26mx.d.ts +39 -0
  62. package/dist/serializable.d.ts +7 -0
  63. package/dist/serializable.js +1 -0
  64. package/dist/src-BZDh910Z.js +1181 -0
  65. package/dist/src-BZDh910Z.js.map +1 -0
  66. package/package.json +140 -68
  67. package/dist/ai-types.js.map +0 -1
  68. package/dist/chunk-HMLY7DHA.js +0 -16
  69. package/dist/chunk-HMLY7DHA.js.map +0 -1
  70. package/dist/chunk-WNICV3OI.js +0 -436
  71. package/dist/chunk-WNICV3OI.js.map +0 -1
  72. package/dist/chunk-ZRZEISHY.js +0 -597
  73. package/dist/chunk-ZRZEISHY.js.map +0 -1
  74. package/dist/client.js.map +0 -1
  75. package/dist/index.js.map +0 -1
  76. package/dist/mcp/client.js.map +0 -1
  77. package/dist/mcp/do-oauth-client-provider.js.map +0 -1
  78. package/src/index.ts +0 -918
@@ -0,0 +1,24 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { Connection } from "partyserver";
3
+
4
+ //#region src/context.d.ts
5
+ type AgentEmail = {
6
+ from: string;
7
+ to: string;
8
+ getRaw: () => Promise<Uint8Array>;
9
+ headers: Headers;
10
+ rawSize: number;
11
+ setReject: (reason: string) => void;
12
+ forward: (rcptTo: string, headers?: Headers) => Promise<void>;
13
+ reply: (options: { from: string; to: string; raw: string }) => Promise<void>;
14
+ };
15
+ type AgentContextStore = {
16
+ agent: unknown;
17
+ connection: Connection | undefined;
18
+ request: Request | undefined;
19
+ email: AgentEmail | undefined;
20
+ };
21
+ declare const agentContext: AsyncLocalStorage<AgentContextStore>;
22
+ //#endregion
23
+ export { AgentEmail as n, agentContext as r, AgentContextStore as t };
24
+ //# sourceMappingURL=context-DcbQ8o7k.d.ts.map
@@ -0,0 +1,6 @@
1
+ import {
2
+ n as AgentEmail,
3
+ r as agentContext,
4
+ t as AgentContextStore
5
+ } from "./context-DcbQ8o7k.js";
6
+ export { AgentContextStore, AgentEmail, agentContext };
@@ -0,0 +1,3 @@
1
+ import { t as agentContext } from "./context-BkKbAa1R.js";
2
+
3
+ export { agentContext };
@@ -0,0 +1,70 @@
1
+ import { OAuthClientProvider } from "@modelcontextprotocol/sdk/client/auth.js";
2
+ import {
3
+ OAuthClientInformation,
4
+ OAuthClientInformationFull,
5
+ OAuthClientMetadata,
6
+ OAuthTokens
7
+ } from "@modelcontextprotocol/sdk/shared/auth.js";
8
+
9
+ //#region src/mcp/do-oauth-client-provider.d.ts
10
+ interface AgentsOAuthProvider extends OAuthClientProvider {
11
+ authUrl: string | undefined;
12
+ clientId: string | undefined;
13
+ serverId: string | undefined;
14
+ checkState(state: string): Promise<{
15
+ valid: boolean;
16
+ serverId?: string;
17
+ error?: string;
18
+ }>;
19
+ consumeState(state: string): Promise<void>;
20
+ deleteCodeVerifier(): Promise<void>;
21
+ }
22
+ declare class DurableObjectOAuthClientProvider implements AgentsOAuthProvider {
23
+ storage: DurableObjectStorage;
24
+ clientName: string;
25
+ baseRedirectUrl: string;
26
+ private _authUrl_;
27
+ private _serverId_;
28
+ private _clientId_;
29
+ constructor(
30
+ storage: DurableObjectStorage,
31
+ clientName: string,
32
+ baseRedirectUrl: string
33
+ );
34
+ get clientMetadata(): OAuthClientMetadata;
35
+ get clientUri(): string;
36
+ get redirectUrl(): string;
37
+ get clientId(): string;
38
+ set clientId(clientId_: string);
39
+ get serverId(): string;
40
+ set serverId(serverId_: string);
41
+ keyPrefix(clientId: string): string;
42
+ clientInfoKey(clientId: string): string;
43
+ clientInformation(): Promise<OAuthClientInformation | undefined>;
44
+ saveClientInformation(
45
+ clientInformation: OAuthClientInformationFull
46
+ ): Promise<void>;
47
+ tokenKey(clientId: string): string;
48
+ tokens(): Promise<OAuthTokens | undefined>;
49
+ saveTokens(tokens: OAuthTokens): Promise<void>;
50
+ get authUrl(): string | undefined;
51
+ stateKey(nonce: string): string;
52
+ state(): Promise<string>;
53
+ checkState(state: string): Promise<{
54
+ valid: boolean;
55
+ serverId?: string;
56
+ error?: string;
57
+ }>;
58
+ consumeState(state: string): Promise<void>;
59
+ redirectToAuthorization(authUrl: URL): Promise<void>;
60
+ invalidateCredentials(
61
+ scope: "all" | "client" | "tokens" | "verifier"
62
+ ): Promise<void>;
63
+ codeVerifierKey(clientId: string): string;
64
+ saveCodeVerifier(verifier: string): Promise<void>;
65
+ codeVerifier(): Promise<string>;
66
+ deleteCodeVerifier(): Promise<void>;
67
+ }
68
+ //#endregion
69
+ export { DurableObjectOAuthClientProvider as n, AgentsOAuthProvider as t };
70
+ //# sourceMappingURL=do-oauth-client-provider--To1Tsjj.d.ts.map
@@ -0,0 +1,155 @@
1
+ import { nanoid } from "nanoid";
2
+
3
+ //#region src/mcp/do-oauth-client-provider.ts
4
+ const STATE_EXPIRATION_MS = 600 * 1e3;
5
+ var DurableObjectOAuthClientProvider = class {
6
+ constructor(storage, clientName, baseRedirectUrl) {
7
+ this.storage = storage;
8
+ this.clientName = clientName;
9
+ this.baseRedirectUrl = baseRedirectUrl;
10
+ if (!storage) throw new Error("DurableObjectOAuthClientProvider requires a valid DurableObjectStorage instance");
11
+ }
12
+ get clientMetadata() {
13
+ return {
14
+ client_name: this.clientName,
15
+ client_uri: this.clientUri,
16
+ grant_types: ["authorization_code", "refresh_token"],
17
+ redirect_uris: [this.redirectUrl],
18
+ response_types: ["code"],
19
+ token_endpoint_auth_method: "none"
20
+ };
21
+ }
22
+ get clientUri() {
23
+ return new URL(this.redirectUrl).origin;
24
+ }
25
+ get redirectUrl() {
26
+ return this.baseRedirectUrl;
27
+ }
28
+ get clientId() {
29
+ if (!this._clientId_) throw new Error("Trying to access clientId before it was set");
30
+ return this._clientId_;
31
+ }
32
+ set clientId(clientId_) {
33
+ this._clientId_ = clientId_;
34
+ }
35
+ get serverId() {
36
+ if (!this._serverId_) throw new Error("Trying to access serverId before it was set");
37
+ return this._serverId_;
38
+ }
39
+ set serverId(serverId_) {
40
+ this._serverId_ = serverId_;
41
+ }
42
+ keyPrefix(clientId) {
43
+ return `/${this.clientName}/${this.serverId}/${clientId}`;
44
+ }
45
+ clientInfoKey(clientId) {
46
+ return `${this.keyPrefix(clientId)}/client_info/`;
47
+ }
48
+ async clientInformation() {
49
+ if (!this._clientId_) return;
50
+ return await this.storage.get(this.clientInfoKey(this.clientId)) ?? void 0;
51
+ }
52
+ async saveClientInformation(clientInformation) {
53
+ await this.storage.put(this.clientInfoKey(clientInformation.client_id), clientInformation);
54
+ this.clientId = clientInformation.client_id;
55
+ }
56
+ tokenKey(clientId) {
57
+ return `${this.keyPrefix(clientId)}/token`;
58
+ }
59
+ async tokens() {
60
+ if (!this._clientId_) return;
61
+ return await this.storage.get(this.tokenKey(this.clientId)) ?? void 0;
62
+ }
63
+ async saveTokens(tokens) {
64
+ await this.storage.put(this.tokenKey(this.clientId), tokens);
65
+ }
66
+ get authUrl() {
67
+ return this._authUrl_;
68
+ }
69
+ stateKey(nonce) {
70
+ return `/${this.clientName}/${this.serverId}/state/${nonce}`;
71
+ }
72
+ async state() {
73
+ const nonce = nanoid();
74
+ const state = `${nonce}.${this.serverId}`;
75
+ const storedState = {
76
+ nonce,
77
+ serverId: this.serverId,
78
+ createdAt: Date.now()
79
+ };
80
+ await this.storage.put(this.stateKey(nonce), storedState);
81
+ return state;
82
+ }
83
+ async checkState(state) {
84
+ const parts = state.split(".");
85
+ if (parts.length !== 2) return {
86
+ valid: false,
87
+ error: "Invalid state format"
88
+ };
89
+ const [nonce, serverId] = parts;
90
+ const key = this.stateKey(nonce);
91
+ const storedState = await this.storage.get(key);
92
+ if (!storedState) return {
93
+ valid: false,
94
+ error: "State not found or already used"
95
+ };
96
+ if (storedState.serverId !== serverId) {
97
+ await this.storage.delete(key);
98
+ return {
99
+ valid: false,
100
+ error: "State serverId mismatch"
101
+ };
102
+ }
103
+ if (Date.now() - storedState.createdAt > STATE_EXPIRATION_MS) {
104
+ await this.storage.delete(key);
105
+ return {
106
+ valid: false,
107
+ error: "State expired"
108
+ };
109
+ }
110
+ return {
111
+ valid: true,
112
+ serverId
113
+ };
114
+ }
115
+ async consumeState(state) {
116
+ const parts = state.split(".");
117
+ if (parts.length !== 2) {
118
+ console.warn(`[OAuth] consumeState called with invalid state format: ${state.substring(0, 20)}...`);
119
+ return;
120
+ }
121
+ const [nonce] = parts;
122
+ await this.storage.delete(this.stateKey(nonce));
123
+ }
124
+ async redirectToAuthorization(authUrl) {
125
+ this._authUrl_ = authUrl.toString();
126
+ }
127
+ async invalidateCredentials(scope) {
128
+ if (!this._clientId_) return;
129
+ const deleteKeys = [];
130
+ if (scope === "all" || scope === "client") deleteKeys.push(this.clientInfoKey(this.clientId));
131
+ if (scope === "all" || scope === "tokens") deleteKeys.push(this.tokenKey(this.clientId));
132
+ if (scope === "all" || scope === "verifier") deleteKeys.push(this.codeVerifierKey(this.clientId));
133
+ if (deleteKeys.length > 0) await this.storage.delete(deleteKeys);
134
+ }
135
+ codeVerifierKey(clientId) {
136
+ return `${this.keyPrefix(clientId)}/code_verifier`;
137
+ }
138
+ async saveCodeVerifier(verifier) {
139
+ const key = this.codeVerifierKey(this.clientId);
140
+ if (await this.storage.get(key)) return;
141
+ await this.storage.put(key, verifier);
142
+ }
143
+ async codeVerifier() {
144
+ const codeVerifier = await this.storage.get(this.codeVerifierKey(this.clientId));
145
+ if (!codeVerifier) throw new Error("No code verifier found");
146
+ return codeVerifier;
147
+ }
148
+ async deleteCodeVerifier() {
149
+ await this.storage.delete(this.codeVerifierKey(this.clientId));
150
+ }
151
+ };
152
+
153
+ //#endregion
154
+ export { DurableObjectOAuthClientProvider as t };
155
+ //# sourceMappingURL=do-oauth-client-provider-B1fVIshX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"do-oauth-client-provider-B1fVIshX.js","names":["storage: DurableObjectStorage","clientName: string","baseRedirectUrl: string","storedState: StoredState","deleteKeys: string[]"],"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 AgentsOAuthProvider 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\nexport class DurableObjectOAuthClientProvider implements AgentsOAuthProvider {\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(\n `[OAuth] consumeState called with invalid state format: ${state.substring(0, 20)}...`\n );\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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"}