agents 0.0.0-3667584 → 0.0.0-36d03e6

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 (56) hide show
  1. package/dist/ai-chat-agent.d.ts +10 -10
  2. package/dist/ai-chat-agent.js +6 -6
  3. package/dist/ai-chat-agent.js.map +1 -1
  4. package/dist/{ai-chat-v5-migration-gdyLiTd8.js → ai-chat-v5-migration-DBHGW4Hv.js} +2 -2
  5. package/dist/{ai-chat-v5-migration-gdyLiTd8.js.map → ai-chat-v5-migration-DBHGW4Hv.js.map} +1 -1
  6. package/dist/ai-chat-v5-migration.js +1 -1
  7. package/dist/ai-react.d.ts +9 -9
  8. package/dist/ai-react.js +17 -11
  9. package/dist/ai-react.js.map +1 -1
  10. package/dist/{ai-types-UZlfLOYP.js → ai-types-B3aQaFv3.js} +2 -2
  11. package/dist/{ai-types-UZlfLOYP.js.map → ai-types-B3aQaFv3.js.map} +1 -1
  12. package/dist/{ai-types-BWW4umHY.d.ts → ai-types-D5YoPrBZ.d.ts} +2 -2
  13. package/dist/ai-types.d.ts +4 -4
  14. package/dist/ai-types.js +1 -1
  15. package/dist/cli.d.ts +8 -0
  16. package/dist/cli.js +27 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/{client-C-nwz-3N.d.ts → client-BaCHMay9.d.ts} +189 -75
  19. package/dist/{client-DjR-lC16.js → client-BfiZ3HQd.js} +3 -3
  20. package/dist/{client-DjR-lC16.js.map → client-BfiZ3HQd.js.map} +1 -1
  21. package/dist/{client-CmMi85Sj.d.ts → client-CbWe9FBd.d.ts} +10 -10
  22. package/dist/{client-CZBVDDoO.js → client-Cbx4ee6L.js} +234 -124
  23. package/dist/client-Cbx4ee6L.js.map +1 -0
  24. package/dist/client.d.ts +8 -8
  25. package/dist/client.js +2 -2
  26. package/dist/codemode/ai.js +5 -5
  27. package/dist/do-oauth-client-provider-CnbnngL2.d.ts +134 -0
  28. package/dist/{do-oauth-client-provider-B2jr6UNq.js → do-oauth-client-provider-D2P1lSft.js} +3 -3
  29. package/dist/do-oauth-client-provider-D2P1lSft.js.map +1 -0
  30. package/dist/{index-CkQU40oY.d.ts → index-DCRAdW9R.d.ts} +53 -39
  31. package/dist/{index-W4JUkafc.d.ts → index-DhJCaDWd.d.ts} +7 -3
  32. package/dist/index.d.ts +36 -36
  33. package/dist/index.js +5 -5
  34. package/dist/mcp/client.d.ts +4 -4
  35. package/dist/mcp/client.js +2 -1
  36. package/dist/mcp/do-oauth-client-provider.d.ts +1 -1
  37. package/dist/mcp/do-oauth-client-provider.js +1 -1
  38. package/dist/mcp/index.d.ts +127 -9
  39. package/dist/mcp/index.js +619 -26
  40. package/dist/mcp/index.js.map +1 -1
  41. package/dist/{mcp-BEwaCsxO.d.ts → mcp-Dw5vDrY8.d.ts} +2 -2
  42. package/dist/observability/index.d.ts +2 -2
  43. package/dist/observability/index.js +5 -5
  44. package/dist/{react-B4e1rDid.d.ts → react-DM_FD53F.d.ts} +17 -17
  45. package/dist/react.d.ts +9 -9
  46. package/dist/react.js +1 -1
  47. package/dist/{serializable-gtr9YMhp.d.ts → serializable-CymX8ovI.d.ts} +8 -3
  48. package/dist/serializable.d.ts +5 -5
  49. package/dist/{src-COfG--3R.js → src-2Qso7XUx.js} +185 -121
  50. package/dist/src-2Qso7XUx.js.map +1 -0
  51. package/package.json +54 -39
  52. package/dist/client-CZBVDDoO.js.map +0 -1
  53. package/dist/do-oauth-client-provider-B2jr6UNq.js.map +0 -1
  54. package/dist/do-oauth-client-provider-CCwGwnrA.d.ts +0 -55
  55. package/dist/src-COfG--3R.js.map +0 -1
  56. package/src/index.ts +0 -2031
@@ -1,13 +1,81 @@
1
- import { MessageType } from "./ai-types-UZlfLOYP.js";
2
- import { camelCaseToKebabCase } from "./client-DjR-lC16.js";
3
- import { DisposableStore, MCPClientManager } from "./client-CZBVDDoO.js";
4
- import { DurableObjectOAuthClientProvider } from "./do-oauth-client-provider-B2jr6UNq.js";
1
+ import { t as MessageType } from "./ai-types-B3aQaFv3.js";
2
+ import { r as camelCaseToKebabCase } from "./client-BfiZ3HQd.js";
3
+ import { r as DisposableStore, t as MCPClientManager } from "./client-Cbx4ee6L.js";
4
+ import { t as DurableObjectOAuthClientProvider } from "./do-oauth-client-provider-D2P1lSft.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { parseCronExpression } from "cron-schedule";
7
7
  import { nanoid } from "nanoid";
8
8
  import { EmailMessage } from "cloudflare:email";
9
9
  import { Server, getServerByName, routePartykitRequest } from "partyserver";
10
10
 
11
+ //#region src/mcp/client-storage.ts
12
+ /**
13
+ * SQL-based storage adapter that wraps SQL operations
14
+ * Used by Agent class to provide SQL access to MCPClientManager
15
+ */
16
+ var AgentMCPClientStorage = class {
17
+ constructor(sql, kv) {
18
+ this.sql = sql;
19
+ this.kv = kv;
20
+ }
21
+ async saveServer(server) {
22
+ this.sql`
23
+ INSERT OR REPLACE INTO cf_agents_mcp_servers (
24
+ id,
25
+ name,
26
+ server_url,
27
+ client_id,
28
+ auth_url,
29
+ callback_url,
30
+ server_options
31
+ )
32
+ VALUES (
33
+ ${server.id},
34
+ ${server.name},
35
+ ${server.server_url},
36
+ ${server.client_id ?? null},
37
+ ${server.auth_url ?? null},
38
+ ${server.callback_url},
39
+ ${server.server_options ?? null}
40
+ )
41
+ `;
42
+ }
43
+ async removeServer(serverId) {
44
+ this.sql`
45
+ DELETE FROM cf_agents_mcp_servers WHERE id = ${serverId}
46
+ `;
47
+ }
48
+ async listServers() {
49
+ return this.sql`
50
+ SELECT id, name, server_url, client_id, auth_url, callback_url, server_options
51
+ FROM cf_agents_mcp_servers
52
+ `;
53
+ }
54
+ async getServerByCallbackUrl(callbackUrl) {
55
+ const results = this.sql`
56
+ SELECT id, name, server_url, client_id, auth_url, callback_url, server_options
57
+ FROM cf_agents_mcp_servers
58
+ WHERE callback_url = ${callbackUrl}
59
+ LIMIT 1
60
+ `;
61
+ return results.length > 0 ? results[0] : null;
62
+ }
63
+ async clearAuthUrl(serverId) {
64
+ this.sql`
65
+ UPDATE cf_agents_mcp_servers
66
+ SET auth_url = NULL
67
+ WHERE id = ${serverId}
68
+ `;
69
+ }
70
+ async get(key) {
71
+ return this.kv.get(key);
72
+ }
73
+ async put(key, value) {
74
+ return this.kv.put(key, value);
75
+ }
76
+ };
77
+
78
+ //#endregion
11
79
  //#region src/observability/index.ts
12
80
  /**
13
81
  * A generic observability implementation that logs events to the console.
@@ -153,8 +221,8 @@ var Agent = class Agent extends Server {
153
221
  super(ctx, env);
154
222
  this._state = DEFAULT_STATE;
155
223
  this._disposables = new DisposableStore();
224
+ this._destroyed = false;
156
225
  this._ParentClass = Object.getPrototypeOf(this).constructor;
157
- this.mcp = new MCPClientManager(this._ParentClass.name, "0.0.1");
158
226
  this.initialState = DEFAULT_STATE;
159
227
  this.observability = genericObservability;
160
228
  this._flushingQueue = false;
@@ -192,28 +260,45 @@ var Agent = class Agent extends Server {
192
260
  }
193
261
  });
194
262
  if (row.type === "cron") {
263
+ if (this._destroyed) return;
195
264
  const nextExecutionTime = getNextCronTime(row.cron);
196
265
  const nextTimestamp = Math.floor(nextExecutionTime.getTime() / 1e3);
197
266
  this.sql`
198
267
  UPDATE cf_agents_schedules SET time = ${nextTimestamp} WHERE id = ${row.id}
199
268
  `;
200
- } else this.sql`
269
+ } else {
270
+ if (this._destroyed) return;
271
+ this.sql`
201
272
  DELETE FROM cf_agents_schedules WHERE id = ${row.id}
202
273
  `;
274
+ }
203
275
  }
276
+ if (this._destroyed) return;
204
277
  await this._scheduleNextAlarm();
205
278
  };
279
+ this.mcp = new MCPClientManager(this._ParentClass.name, "0.0.1", { storage: new AgentMCPClientStorage(this.sql.bind(this), this.ctx.storage.kv) });
206
280
  if (!wrappedClasses.has(this.constructor)) {
207
281
  this._autoWrapCustomMethods();
208
282
  wrappedClasses.add(this.constructor);
209
283
  }
210
- this._disposables.add(this.mcp.onConnected(async () => {
211
- this.broadcastMcpServers();
284
+ this._disposables.add(this.mcp.onServerStateChanged(async () => {
285
+ await this.broadcastMcpServers();
212
286
  }));
213
287
  this._disposables.add(this.mcp.onObservabilityEvent((event) => {
214
288
  this.observability?.emit(event);
215
289
  }));
216
290
  this.sql`
291
+ CREATE TABLE IF NOT EXISTS cf_agents_mcp_servers (
292
+ id TEXT PRIMARY KEY NOT NULL,
293
+ name TEXT NOT NULL,
294
+ server_url TEXT NOT NULL,
295
+ callback_url TEXT NOT NULL,
296
+ client_id TEXT,
297
+ auth_url TEXT,
298
+ server_options TEXT
299
+ )
300
+ `;
301
+ this.sql`
217
302
  CREATE TABLE IF NOT EXISTS cf_agents_state (
218
303
  id TEXT PRIMARY KEY NOT NULL,
219
304
  state TEXT
@@ -227,32 +312,16 @@ var Agent = class Agent extends Server {
227
312
  created_at INTEGER DEFAULT (unixepoch())
228
313
  )
229
314
  `;
230
- this.ctx.blockConcurrencyWhile(async () => {
231
- return this._tryCatch(async () => {
232
- this.sql`
233
- CREATE TABLE IF NOT EXISTS cf_agents_schedules (
234
- id TEXT PRIMARY KEY NOT NULL DEFAULT (randomblob(9)),
235
- callback TEXT,
236
- payload TEXT,
237
- type TEXT NOT NULL CHECK(type IN ('scheduled', 'delayed', 'cron')),
238
- time INTEGER,
239
- delayInSeconds INTEGER,
240
- cron TEXT,
241
- created_at INTEGER DEFAULT (unixepoch())
242
- )
243
- `;
244
- await this.alarm();
245
- });
246
- });
247
315
  this.sql`
248
- CREATE TABLE IF NOT EXISTS cf_agents_mcp_servers (
249
- id TEXT PRIMARY KEY NOT NULL,
250
- name TEXT NOT NULL,
251
- server_url TEXT NOT NULL,
252
- callback_url TEXT NOT NULL,
253
- client_id TEXT,
254
- auth_url TEXT,
255
- server_options TEXT
316
+ CREATE TABLE IF NOT EXISTS cf_agents_schedules (
317
+ id TEXT PRIMARY KEY NOT NULL DEFAULT (randomblob(9)),
318
+ callback TEXT,
319
+ payload TEXT,
320
+ type TEXT NOT NULL CHECK(type IN ('scheduled', 'delayed', 'cron')),
321
+ time INTEGER,
322
+ delayInSeconds INTEGER,
323
+ cron TEXT,
324
+ created_at INTEGER DEFAULT (unixepoch())
256
325
  )
257
326
  `;
258
327
  const _onRequest = this.onRequest.bind(this);
@@ -263,16 +332,9 @@ var Agent = class Agent extends Server {
263
332
  request,
264
333
  email: void 0
265
334
  }, async () => {
266
- if (this.mcp.isCallbackRequest(request)) {
267
- const result = await this.mcp.handleCallbackRequest(request);
268
- this.broadcastMcpServers();
269
- if (result.authSuccess) this.mcp.establishConnection(result.serverId).catch((error) => {
270
- console.error("Background connection failed:", error);
271
- }).finally(() => {
272
- this.broadcastMcpServers();
273
- });
274
- return this.handleOAuthCallbackResponse(result, request);
275
- }
335
+ await this.mcp.ensureJsonSchema();
336
+ const oauthResponse = await this.handleMcpOAuthCallback(request);
337
+ if (oauthResponse) return oauthResponse;
276
338
  return this._tryCatch(() => _onRequest(request));
277
339
  });
278
340
  };
@@ -284,6 +346,7 @@ var Agent = class Agent extends Server {
284
346
  request: void 0,
285
347
  email: void 0
286
348
  }, async () => {
349
+ await this.mcp.ensureJsonSchema();
287
350
  if (typeof message !== "string") return this._tryCatch(() => _onMessage(connection, message));
288
351
  let parsed;
289
352
  try {
@@ -348,13 +411,13 @@ var Agent = class Agent extends Server {
348
411
  connection,
349
412
  request: ctx$1.request,
350
413
  email: void 0
351
- }, () => {
414
+ }, async () => {
352
415
  if (this.state) connection.send(JSON.stringify({
353
416
  state: this.state,
354
417
  type: MessageType.CF_AGENT_STATE
355
418
  }));
356
419
  connection.send(JSON.stringify({
357
- mcp: this.getMcpServers(),
420
+ mcp: await this.getMcpServers(),
358
421
  type: MessageType.CF_AGENT_MCP_SERVERS
359
422
  }));
360
423
  this.observability?.emit({
@@ -375,27 +438,9 @@ var Agent = class Agent extends Server {
375
438
  request: void 0,
376
439
  email: void 0
377
440
  }, async () => {
378
- await this._tryCatch(() => {
379
- const servers = this.sql`
380
- SELECT id, name, server_url, client_id, auth_url, callback_url, server_options FROM cf_agents_mcp_servers;
381
- `;
382
- this.broadcastMcpServers();
383
- if (servers && Array.isArray(servers) && servers.length > 0) {
384
- servers.forEach((server) => {
385
- if (server.callback_url) this.mcp.registerCallbackUrl(`${server.callback_url}/${server.id}`);
386
- });
387
- servers.forEach((server) => {
388
- this._connectToMcpServerInternal(server.name, server.server_url, server.callback_url, server.server_options ? JSON.parse(server.server_options) : void 0, {
389
- id: server.id,
390
- oauthClientId: server.client_id ?? void 0
391
- }).then(() => {
392
- this.broadcastMcpServers();
393
- }).catch((error) => {
394
- console.error(`Error connecting to MCP server: ${server.name} (${server.server_url})`, error);
395
- this.broadcastMcpServers();
396
- });
397
- });
398
- }
441
+ await this._tryCatch(async () => {
442
+ await this.mcp.restoreConnectionsFromStorage(this.name);
443
+ await this.broadcastMcpServers();
399
444
  return _onStart(props);
400
445
  });
401
446
  });
@@ -801,7 +846,7 @@ var Agent = class Agent extends Server {
801
846
  async _scheduleNextAlarm() {
802
847
  const result = this.sql`
803
848
  SELECT time FROM cf_agents_schedules
804
- WHERE time > ${Math.floor(Date.now() / 1e3)}
849
+ WHERE time >= ${Math.floor(Date.now() / 1e3)}
805
850
  ORDER BY time ASC
806
851
  LIMIT 1
807
852
  `;
@@ -815,15 +860,18 @@ var Agent = class Agent extends Server {
815
860
  * Destroy the Agent, removing all state and scheduled tasks
816
861
  */
817
862
  async destroy() {
863
+ this.sql`DROP TABLE IF EXISTS cf_agents_mcp_servers`;
818
864
  this.sql`DROP TABLE IF EXISTS cf_agents_state`;
819
865
  this.sql`DROP TABLE IF EXISTS cf_agents_schedules`;
820
- this.sql`DROP TABLE IF EXISTS cf_agents_mcp_servers`;
821
866
  this.sql`DROP TABLE IF EXISTS cf_agents_queues`;
822
867
  await this.ctx.storage.deleteAlarm();
823
868
  await this.ctx.storage.deleteAll();
824
869
  this._disposables.dispose();
825
- await this.mcp.dispose?.();
826
- this.ctx.abort("destroyed");
870
+ await this.mcp.dispose();
871
+ this._destroyed = true;
872
+ setTimeout(() => {
873
+ this.ctx.abort("destroyed");
874
+ }, 0);
827
875
  this.observability?.emit({
828
876
  displayMessage: "Agent destroyed",
829
877
  id: nanoid(),
@@ -858,29 +906,10 @@ var Agent = class Agent extends Server {
858
906
  resolvedCallbackHost = `${requestUrl.protocol}//${requestUrl.host}`;
859
907
  }
860
908
  const callbackUrl = `${resolvedCallbackHost}/${agentsPrefix}/${camelCaseToKebabCase(this._ParentClass.name)}/${this.name}/callback`;
861
- const result = await this._connectToMcpServerInternal(serverName, url, callbackUrl, options);
862
- this.sql`
863
- INSERT
864
- OR REPLACE INTO cf_agents_mcp_servers (id, name, server_url, client_id, auth_url, callback_url, server_options)
865
- VALUES (
866
- ${result.id},
867
- ${serverName},
868
- ${url},
869
- ${result.clientId ?? null},
870
- ${result.authUrl ?? null},
871
- ${callbackUrl},
872
- ${options ? JSON.stringify(options) : null}
873
- );
874
- `;
875
- this.broadcastMcpServers();
876
- return result;
877
- }
878
- async _connectToMcpServerInternal(_serverName, url, callbackUrl, options, reconnect) {
879
- const authProvider = new DurableObjectOAuthClientProvider(this.ctx.storage, this.name, callbackUrl);
880
- if (reconnect) {
881
- authProvider.serverId = reconnect.id;
882
- if (reconnect.oauthClientId) authProvider.clientId = reconnect.oauthClientId;
883
- }
909
+ await this.mcp.ensureJsonSchema();
910
+ const id = nanoid(8);
911
+ const authProvider = new DurableObjectOAuthClientProvider(this.ctx.storage.kv, this.name, callbackUrl);
912
+ authProvider.serverId = id;
884
913
  const transportType = options?.transport?.type ?? "auto";
885
914
  let headerTransportOpts = {};
886
915
  if (options?.transport?.headers) headerTransportOpts = {
@@ -890,59 +919,78 @@ var Agent = class Agent extends Server {
890
919
  }) },
891
920
  requestInit: { headers: options?.transport?.headers }
892
921
  };
893
- const { id, authUrl, clientId } = await this.mcp.connect(url, {
922
+ await this.mcp.registerServer(id, {
923
+ url,
924
+ name: serverName,
925
+ callbackUrl,
894
926
  client: options?.client,
895
- reconnect,
896
927
  transport: {
897
928
  ...headerTransportOpts,
898
929
  authProvider,
899
930
  type: transportType
900
931
  }
901
932
  });
933
+ const result = await this.mcp.connectToServer(id);
902
934
  return {
903
- authUrl,
904
- clientId,
905
- id
935
+ id,
936
+ authUrl: result.state === "authenticating" ? result.authUrl : void 0
906
937
  };
907
938
  }
908
939
  async removeMcpServer(id) {
909
- this.mcp.closeConnection(id);
910
- this.mcp.unregisterCallbackUrl(id);
911
- this.sql`
912
- DELETE FROM cf_agents_mcp_servers WHERE id = ${id};
913
- `;
914
- this.broadcastMcpServers();
940
+ if (this.mcp.mcpConnections[id]) await this.mcp.closeConnection(id);
941
+ await this.mcp.removeServer(id);
915
942
  }
916
- getMcpServers() {
943
+ async getMcpServers() {
917
944
  const mcpState = {
918
945
  prompts: this.mcp.listPrompts(),
919
946
  resources: this.mcp.listResources(),
920
947
  servers: {},
921
948
  tools: this.mcp.listTools()
922
949
  };
923
- const servers = this.sql`
924
- SELECT id, name, server_url, client_id, auth_url, callback_url, server_options FROM cf_agents_mcp_servers;
925
- `;
950
+ const servers = await this.mcp.listServers();
926
951
  if (servers && Array.isArray(servers) && servers.length > 0) for (const server of servers) {
927
952
  const serverConn = this.mcp.mcpConnections[server.id];
953
+ let defaultState = "not-connected";
954
+ if (!serverConn && server.auth_url) defaultState = "authenticating";
928
955
  mcpState.servers[server.id] = {
929
956
  auth_url: server.auth_url,
930
957
  capabilities: serverConn?.serverCapabilities ?? null,
931
958
  instructions: serverConn?.instructions ?? null,
932
959
  name: server.name,
933
960
  server_url: server.server_url,
934
- state: serverConn?.connectionState ?? "authenticating"
961
+ state: serverConn?.connectionState ?? defaultState
935
962
  };
936
963
  }
937
964
  return mcpState;
938
965
  }
939
- broadcastMcpServers() {
966
+ async broadcastMcpServers() {
940
967
  this.broadcast(JSON.stringify({
941
- mcp: this.getMcpServers(),
968
+ mcp: await this.getMcpServers(),
942
969
  type: MessageType.CF_AGENT_MCP_SERVERS
943
970
  }));
944
971
  }
945
972
  /**
973
+ * Handle MCP OAuth callback request if it's an OAuth callback.
974
+ *
975
+ * This method encapsulates the entire OAuth callback flow:
976
+ * 1. Checks if the request is an MCP OAuth callback
977
+ * 2. Processes the OAuth code exchange
978
+ * 3. Establishes the connection if successful
979
+ * 4. Broadcasts MCP server state updates
980
+ * 5. Returns the appropriate HTTP response
981
+ *
982
+ * @param request The incoming HTTP request
983
+ * @returns Response if this was an OAuth callback, null otherwise
984
+ */
985
+ async handleMcpOAuthCallback(request) {
986
+ if (!await this.mcp.isCallbackRequest(request)) return null;
987
+ const result = await this.mcp.handleCallbackRequest(request);
988
+ if (result.authSuccess) this.mcp.establishConnection(result.serverId).catch((error) => {
989
+ console.error("[Agent handleMcpOAuthCallback] Background connection failed:", error);
990
+ });
991
+ return this.handleOAuthCallbackResponse(result, request);
992
+ }
993
+ /**
946
994
  * Handle OAuth callback response using MCPClientManager configuration
947
995
  * @param result OAuth callback result
948
996
  * @param request The original request (needed for base URL)
@@ -951,10 +999,21 @@ var Agent = class Agent extends Server {
951
999
  handleOAuthCallbackResponse(result, request) {
952
1000
  const config = this.mcp.getOAuthCallbackConfig();
953
1001
  if (config?.customHandler) return config.customHandler(result);
954
- if (config?.successRedirect && result.authSuccess) return Response.redirect(config.successRedirect);
955
- if (config?.errorRedirect && !result.authSuccess) return Response.redirect(`${config.errorRedirect}?error=${encodeURIComponent(result.authError || "Unknown error")}`);
956
- const baseUrl = new URL(request.url).origin;
957
- return Response.redirect(baseUrl);
1002
+ const baseOrigin = new URL(request.url).origin;
1003
+ if (config?.successRedirect && result.authSuccess) try {
1004
+ return Response.redirect(new URL(config.successRedirect, baseOrigin).href);
1005
+ } catch (e) {
1006
+ console.error("Invalid successRedirect URL:", config.successRedirect, e);
1007
+ return Response.redirect(baseOrigin);
1008
+ }
1009
+ if (config?.errorRedirect && !result.authSuccess) try {
1010
+ const errorUrl = `${config.errorRedirect}?error=${encodeURIComponent(result.authError || "Unknown error")}`;
1011
+ return Response.redirect(new URL(errorUrl, baseOrigin).href);
1012
+ } catch (e) {
1013
+ console.error("Invalid errorRedirect URL:", config.errorRedirect, e);
1014
+ return Response.redirect(baseOrigin);
1015
+ }
1016
+ return Response.redirect(baseOrigin);
958
1017
  }
959
1018
  };
960
1019
  const wrappedClasses = /* @__PURE__ */ new Set();
@@ -980,10 +1039,15 @@ async function routeAgentRequest(request, env, options) {
980
1039
  prefix: "agents",
981
1040
  ...options
982
1041
  });
983
- if (response && corsHeaders && request.headers.get("upgrade")?.toLowerCase() !== "websocket" && request.headers.get("Upgrade")?.toLowerCase() !== "websocket") response = new Response(response.body, { headers: {
984
- ...response.headers,
985
- ...corsHeaders
986
- } });
1042
+ if (response && corsHeaders && request.headers.get("upgrade")?.toLowerCase() !== "websocket" && request.headers.get("Upgrade")?.toLowerCase() !== "websocket") {
1043
+ const newHeaders = new Headers(response.headers);
1044
+ for (const [key, value] of Object.entries(corsHeaders)) newHeaders.set(key, value);
1045
+ response = new Response(response.body, {
1046
+ status: response.status,
1047
+ statusText: response.statusText,
1048
+ headers: newHeaders
1049
+ });
1050
+ }
987
1051
  return response;
988
1052
  }
989
1053
  /**
@@ -1175,5 +1239,5 @@ var StreamingResponse = class {
1175
1239
  };
1176
1240
 
1177
1241
  //#endregion
1178
- export { Agent, StreamingResponse, callable, createAddressBasedEmailResolver, createCatchAllEmailResolver, createHeaderBasedEmailResolver, genericObservability, getAgentByName, getCurrentAgent, routeAgentEmail, routeAgentRequest, unstable_callable };
1179
- //# sourceMappingURL=src-COfG--3R.js.map
1242
+ export { createCatchAllEmailResolver as a, getCurrentAgent as c, unstable_callable as d, genericObservability as f, createAddressBasedEmailResolver as i, routeAgentEmail as l, StreamingResponse as n, createHeaderBasedEmailResolver as o, callable as r, getAgentByName as s, Agent as t, routeAgentRequest as u };
1243
+ //# sourceMappingURL=src-2Qso7XUx.js.map