agents 0.0.0-d4257c1 → 0.0.0-d6d6d60

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-DjR-lC16.js → client-BfiZ3HQd.js} +3 -3
  19. package/dist/{client-DjR-lC16.js.map → client-BfiZ3HQd.js.map} +1 -1
  20. package/dist/{client-C-nwz-3N.d.ts → client-Bws9q38u.d.ts} +189 -75
  21. package/dist/{client-CmMi85Sj.d.ts → client-CbWe9FBd.d.ts} +10 -10
  22. package/dist/{client-CZBVDDoO.js → client-DvK0u9vD.js} +236 -124
  23. package/dist/client-DvK0u9vD.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-CcTno-25.d.ts +142 -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-Bdzb2feZ.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-DFNXTQzy.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-C1WWpbRo.js} +189 -121
  50. package/dist/src-C1WWpbRo.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,97 @@
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-DvK0u9vD.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 create() {
22
+ this.sql`
23
+ CREATE TABLE IF NOT EXISTS cf_agents_mcp_servers (
24
+ id TEXT PRIMARY KEY NOT NULL,
25
+ name TEXT NOT NULL,
26
+ server_url TEXT NOT NULL,
27
+ callback_url TEXT NOT NULL,
28
+ client_id TEXT,
29
+ auth_url TEXT,
30
+ server_options TEXT
31
+ )
32
+ `;
33
+ }
34
+ async destroy() {
35
+ this.sql`DROP TABLE IF EXISTS cf_agents_mcp_servers`;
36
+ }
37
+ async saveServer(server) {
38
+ this.sql`
39
+ INSERT OR REPLACE INTO cf_agents_mcp_servers (
40
+ id,
41
+ name,
42
+ server_url,
43
+ client_id,
44
+ auth_url,
45
+ callback_url,
46
+ server_options
47
+ )
48
+ VALUES (
49
+ ${server.id},
50
+ ${server.name},
51
+ ${server.server_url},
52
+ ${server.client_id ?? null},
53
+ ${server.auth_url ?? null},
54
+ ${server.callback_url},
55
+ ${server.server_options ?? null}
56
+ )
57
+ `;
58
+ }
59
+ async removeServer(serverId) {
60
+ this.sql`
61
+ DELETE FROM cf_agents_mcp_servers WHERE id = ${serverId}
62
+ `;
63
+ }
64
+ async listServers() {
65
+ return this.sql`
66
+ SELECT id, name, server_url, client_id, auth_url, callback_url, server_options
67
+ FROM cf_agents_mcp_servers
68
+ `;
69
+ }
70
+ async getServerByCallbackUrl(callbackUrl) {
71
+ const results = this.sql`
72
+ SELECT id, name, server_url, client_id, auth_url, callback_url, server_options
73
+ FROM cf_agents_mcp_servers
74
+ WHERE callback_url = ${callbackUrl}
75
+ LIMIT 1
76
+ `;
77
+ return results.length > 0 ? results[0] : null;
78
+ }
79
+ async clearAuthUrl(serverId) {
80
+ this.sql`
81
+ UPDATE cf_agents_mcp_servers
82
+ SET auth_url = NULL
83
+ WHERE id = ${serverId}
84
+ `;
85
+ }
86
+ async get(key) {
87
+ return this.kv.get(key);
88
+ }
89
+ async put(key, value) {
90
+ return this.kv.put(key, value);
91
+ }
92
+ };
93
+
94
+ //#endregion
11
95
  //#region src/observability/index.ts
12
96
  /**
13
97
  * A generic observability implementation that logs events to the console.
@@ -153,8 +237,8 @@ var Agent = class Agent extends Server {
153
237
  super(ctx, env);
154
238
  this._state = DEFAULT_STATE;
155
239
  this._disposables = new DisposableStore();
240
+ this._destroyed = false;
156
241
  this._ParentClass = Object.getPrototypeOf(this).constructor;
157
- this.mcp = new MCPClientManager(this._ParentClass.name, "0.0.1");
158
242
  this.initialState = DEFAULT_STATE;
159
243
  this.observability = genericObservability;
160
244
  this._flushingQueue = false;
@@ -192,23 +276,29 @@ var Agent = class Agent extends Server {
192
276
  }
193
277
  });
194
278
  if (row.type === "cron") {
279
+ if (this._destroyed) return;
195
280
  const nextExecutionTime = getNextCronTime(row.cron);
196
281
  const nextTimestamp = Math.floor(nextExecutionTime.getTime() / 1e3);
197
282
  this.sql`
198
283
  UPDATE cf_agents_schedules SET time = ${nextTimestamp} WHERE id = ${row.id}
199
284
  `;
200
- } else this.sql`
285
+ } else {
286
+ if (this._destroyed) return;
287
+ this.sql`
201
288
  DELETE FROM cf_agents_schedules WHERE id = ${row.id}
202
289
  `;
290
+ }
203
291
  }
292
+ if (this._destroyed) return;
204
293
  await this._scheduleNextAlarm();
205
294
  };
295
+ this.mcp = new MCPClientManager(this._ParentClass.name, "0.0.1", { storage: new AgentMCPClientStorage(this.sql.bind(this), this.ctx.storage.kv) });
206
296
  if (!wrappedClasses.has(this.constructor)) {
207
297
  this._autoWrapCustomMethods();
208
298
  wrappedClasses.add(this.constructor);
209
299
  }
210
- this._disposables.add(this.mcp.onConnected(async () => {
211
- this.broadcastMcpServers();
300
+ this._disposables.add(this.mcp.onServerStateChanged(async () => {
301
+ await this.broadcastMcpServers();
212
302
  }));
213
303
  this._disposables.add(this.mcp.onObservabilityEvent((event) => {
214
304
  this.observability?.emit(event);
@@ -227,32 +317,16 @@ var Agent = class Agent extends Server {
227
317
  created_at INTEGER DEFAULT (unixepoch())
228
318
  )
229
319
  `;
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
320
  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
321
+ CREATE TABLE IF NOT EXISTS cf_agents_schedules (
322
+ id TEXT PRIMARY KEY NOT NULL DEFAULT (randomblob(9)),
323
+ callback TEXT,
324
+ payload TEXT,
325
+ type TEXT NOT NULL CHECK(type IN ('scheduled', 'delayed', 'cron')),
326
+ time INTEGER,
327
+ delayInSeconds INTEGER,
328
+ cron TEXT,
329
+ created_at INTEGER DEFAULT (unixepoch())
256
330
  )
257
331
  `;
258
332
  const _onRequest = this.onRequest.bind(this);
@@ -263,16 +337,9 @@ var Agent = class Agent extends Server {
263
337
  request,
264
338
  email: void 0
265
339
  }, 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
- }
340
+ await this.mcp.ensureJsonSchema();
341
+ const oauthResponse = await this.handleMcpOAuthCallback(request);
342
+ if (oauthResponse) return oauthResponse;
276
343
  return this._tryCatch(() => _onRequest(request));
277
344
  });
278
345
  };
@@ -284,6 +351,7 @@ var Agent = class Agent extends Server {
284
351
  request: void 0,
285
352
  email: void 0
286
353
  }, async () => {
354
+ await this.mcp.ensureJsonSchema();
287
355
  if (typeof message !== "string") return this._tryCatch(() => _onMessage(connection, message));
288
356
  let parsed;
289
357
  try {
@@ -348,13 +416,13 @@ var Agent = class Agent extends Server {
348
416
  connection,
349
417
  request: ctx$1.request,
350
418
  email: void 0
351
- }, () => {
419
+ }, async () => {
352
420
  if (this.state) connection.send(JSON.stringify({
353
421
  state: this.state,
354
422
  type: MessageType.CF_AGENT_STATE
355
423
  }));
356
424
  connection.send(JSON.stringify({
357
- mcp: this.getMcpServers(),
425
+ mcp: await this.getMcpServers(),
358
426
  type: MessageType.CF_AGENT_MCP_SERVERS
359
427
  }));
360
428
  this.observability?.emit({
@@ -375,27 +443,9 @@ var Agent = class Agent extends Server {
375
443
  request: void 0,
376
444
  email: void 0
377
445
  }, 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
- }
446
+ await this._tryCatch(async () => {
447
+ await this.mcp.restoreConnectionsFromStorage(this.name);
448
+ await this.broadcastMcpServers();
399
449
  return _onStart(props);
400
450
  });
401
451
  });
@@ -801,7 +851,7 @@ var Agent = class Agent extends Server {
801
851
  async _scheduleNextAlarm() {
802
852
  const result = this.sql`
803
853
  SELECT time FROM cf_agents_schedules
804
- WHERE time > ${Math.floor(Date.now() / 1e3)}
854
+ WHERE time >= ${Math.floor(Date.now() / 1e3)}
805
855
  ORDER BY time ASC
806
856
  LIMIT 1
807
857
  `;
@@ -817,13 +867,15 @@ var Agent = class Agent extends Server {
817
867
  async destroy() {
818
868
  this.sql`DROP TABLE IF EXISTS cf_agents_state`;
819
869
  this.sql`DROP TABLE IF EXISTS cf_agents_schedules`;
820
- this.sql`DROP TABLE IF EXISTS cf_agents_mcp_servers`;
821
870
  this.sql`DROP TABLE IF EXISTS cf_agents_queues`;
822
871
  await this.ctx.storage.deleteAlarm();
823
872
  await this.ctx.storage.deleteAll();
824
873
  this._disposables.dispose();
825
- await this.mcp.dispose?.();
826
- this.ctx.abort("destroyed");
874
+ await this.mcp.dispose();
875
+ this._destroyed = true;
876
+ setTimeout(() => {
877
+ this.ctx.abort("destroyed");
878
+ }, 0);
827
879
  this.observability?.emit({
828
880
  displayMessage: "Agent destroyed",
829
881
  id: nanoid(),
@@ -858,29 +910,10 @@ var Agent = class Agent extends Server {
858
910
  resolvedCallbackHost = `${requestUrl.protocol}//${requestUrl.host}`;
859
911
  }
860
912
  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
- }
913
+ await this.mcp.ensureJsonSchema();
914
+ const id = nanoid(8);
915
+ const authProvider = new DurableObjectOAuthClientProvider(this.ctx.storage.kv, this.name, callbackUrl);
916
+ authProvider.serverId = id;
884
917
  const transportType = options?.transport?.type ?? "auto";
885
918
  let headerTransportOpts = {};
886
919
  if (options?.transport?.headers) headerTransportOpts = {
@@ -890,59 +923,78 @@ var Agent = class Agent extends Server {
890
923
  }) },
891
924
  requestInit: { headers: options?.transport?.headers }
892
925
  };
893
- const { id, authUrl, clientId } = await this.mcp.connect(url, {
926
+ await this.mcp.registerServer(id, {
927
+ url,
928
+ name: serverName,
929
+ callbackUrl,
894
930
  client: options?.client,
895
- reconnect,
896
931
  transport: {
897
932
  ...headerTransportOpts,
898
933
  authProvider,
899
934
  type: transportType
900
935
  }
901
936
  });
937
+ const result = await this.mcp.connectToServer(id);
902
938
  return {
903
- authUrl,
904
- clientId,
905
- id
939
+ id,
940
+ authUrl: result.state === "authenticating" ? result.authUrl : void 0
906
941
  };
907
942
  }
908
943
  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();
944
+ if (this.mcp.mcpConnections[id]) await this.mcp.closeConnection(id);
945
+ await this.mcp.removeServer(id);
915
946
  }
916
- getMcpServers() {
947
+ async getMcpServers() {
917
948
  const mcpState = {
918
949
  prompts: this.mcp.listPrompts(),
919
950
  resources: this.mcp.listResources(),
920
951
  servers: {},
921
952
  tools: this.mcp.listTools()
922
953
  };
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
- `;
954
+ const servers = await this.mcp.listServers();
926
955
  if (servers && Array.isArray(servers) && servers.length > 0) for (const server of servers) {
927
956
  const serverConn = this.mcp.mcpConnections[server.id];
957
+ let defaultState = "not-connected";
958
+ if (!serverConn && server.auth_url) defaultState = "authenticating";
928
959
  mcpState.servers[server.id] = {
929
960
  auth_url: server.auth_url,
930
961
  capabilities: serverConn?.serverCapabilities ?? null,
931
962
  instructions: serverConn?.instructions ?? null,
932
963
  name: server.name,
933
964
  server_url: server.server_url,
934
- state: serverConn?.connectionState ?? "authenticating"
965
+ state: serverConn?.connectionState ?? defaultState
935
966
  };
936
967
  }
937
968
  return mcpState;
938
969
  }
939
- broadcastMcpServers() {
970
+ async broadcastMcpServers() {
940
971
  this.broadcast(JSON.stringify({
941
- mcp: this.getMcpServers(),
972
+ mcp: await this.getMcpServers(),
942
973
  type: MessageType.CF_AGENT_MCP_SERVERS
943
974
  }));
944
975
  }
945
976
  /**
977
+ * Handle MCP OAuth callback request if it's an OAuth callback.
978
+ *
979
+ * This method encapsulates the entire OAuth callback flow:
980
+ * 1. Checks if the request is an MCP OAuth callback
981
+ * 2. Processes the OAuth code exchange
982
+ * 3. Establishes the connection if successful
983
+ * 4. Broadcasts MCP server state updates
984
+ * 5. Returns the appropriate HTTP response
985
+ *
986
+ * @param request The incoming HTTP request
987
+ * @returns Response if this was an OAuth callback, null otherwise
988
+ */
989
+ async handleMcpOAuthCallback(request) {
990
+ if (!await this.mcp.isCallbackRequest(request)) return null;
991
+ const result = await this.mcp.handleCallbackRequest(request);
992
+ if (result.authSuccess) this.mcp.establishConnection(result.serverId).catch((error) => {
993
+ console.error("[Agent handleMcpOAuthCallback] Background connection failed:", error);
994
+ });
995
+ return this.handleOAuthCallbackResponse(result, request);
996
+ }
997
+ /**
946
998
  * Handle OAuth callback response using MCPClientManager configuration
947
999
  * @param result OAuth callback result
948
1000
  * @param request The original request (needed for base URL)
@@ -951,10 +1003,21 @@ var Agent = class Agent extends Server {
951
1003
  handleOAuthCallbackResponse(result, request) {
952
1004
  const config = this.mcp.getOAuthCallbackConfig();
953
1005
  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);
1006
+ const baseOrigin = new URL(request.url).origin;
1007
+ if (config?.successRedirect && result.authSuccess) try {
1008
+ return Response.redirect(new URL(config.successRedirect, baseOrigin).href);
1009
+ } catch (e) {
1010
+ console.error("Invalid successRedirect URL:", config.successRedirect, e);
1011
+ return Response.redirect(baseOrigin);
1012
+ }
1013
+ if (config?.errorRedirect && !result.authSuccess) try {
1014
+ const errorUrl = `${config.errorRedirect}?error=${encodeURIComponent(result.authError || "Unknown error")}`;
1015
+ return Response.redirect(new URL(errorUrl, baseOrigin).href);
1016
+ } catch (e) {
1017
+ console.error("Invalid errorRedirect URL:", config.errorRedirect, e);
1018
+ return Response.redirect(baseOrigin);
1019
+ }
1020
+ return Response.redirect(baseOrigin);
958
1021
  }
959
1022
  };
960
1023
  const wrappedClasses = /* @__PURE__ */ new Set();
@@ -980,10 +1043,15 @@ async function routeAgentRequest(request, env, options) {
980
1043
  prefix: "agents",
981
1044
  ...options
982
1045
  });
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
- } });
1046
+ if (response && corsHeaders && request.headers.get("upgrade")?.toLowerCase() !== "websocket" && request.headers.get("Upgrade")?.toLowerCase() !== "websocket") {
1047
+ const newHeaders = new Headers(response.headers);
1048
+ for (const [key, value] of Object.entries(corsHeaders)) newHeaders.set(key, value);
1049
+ response = new Response(response.body, {
1050
+ status: response.status,
1051
+ statusText: response.statusText,
1052
+ headers: newHeaders
1053
+ });
1054
+ }
987
1055
  return response;
988
1056
  }
989
1057
  /**
@@ -1175,5 +1243,5 @@ var StreamingResponse = class {
1175
1243
  };
1176
1244
 
1177
1245
  //#endregion
1178
- export { Agent, StreamingResponse, callable, createAddressBasedEmailResolver, createCatchAllEmailResolver, createHeaderBasedEmailResolver, genericObservability, getAgentByName, getCurrentAgent, routeAgentEmail, routeAgentRequest, unstable_callable };
1179
- //# sourceMappingURL=src-COfG--3R.js.map
1246
+ 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 };
1247
+ //# sourceMappingURL=src-C1WWpbRo.js.map