@openai/agents-core 0.4.1 → 0.4.2

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 (47) hide show
  1. package/dist/agent.d.ts +5 -4
  2. package/dist/agent.js +22 -3
  3. package/dist/agent.js.map +1 -1
  4. package/dist/agent.mjs +22 -3
  5. package/dist/agent.mjs.map +1 -1
  6. package/dist/index.d.ts +2 -1
  7. package/dist/index.js +5 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +1 -0
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/mcpServers.d.ts +55 -0
  12. package/dist/mcpServers.js +472 -0
  13. package/dist/mcpServers.js.map +1 -0
  14. package/dist/mcpServers.mjs +467 -0
  15. package/dist/mcpServers.mjs.map +1 -0
  16. package/dist/metadata.js +2 -2
  17. package/dist/metadata.mjs +2 -2
  18. package/dist/result.d.ts +5 -0
  19. package/dist/result.js +7 -0
  20. package/dist/result.js.map +1 -1
  21. package/dist/result.mjs +7 -0
  22. package/dist/result.mjs.map +1 -1
  23. package/dist/run.d.ts +16 -9
  24. package/dist/run.js +55 -0
  25. package/dist/run.js.map +1 -1
  26. package/dist/run.mjs +56 -1
  27. package/dist/run.mjs.map +1 -1
  28. package/dist/runState.d.ts +10 -0
  29. package/dist/runState.js +11 -0
  30. package/dist/runState.js.map +1 -1
  31. package/dist/runState.mjs +11 -0
  32. package/dist/runState.mjs.map +1 -1
  33. package/dist/runner/errorHandlers.d.ts +57 -0
  34. package/dist/runner/errorHandlers.js +65 -0
  35. package/dist/runner/errorHandlers.js.map +1 -0
  36. package/dist/runner/errorHandlers.mjs +61 -0
  37. package/dist/runner/errorHandlers.mjs.map +1 -0
  38. package/dist/runner/runLoop.js +4 -0
  39. package/dist/runner/runLoop.js.map +1 -1
  40. package/dist/runner/runLoop.mjs +4 -0
  41. package/dist/runner/runLoop.mjs.map +1 -1
  42. package/dist/runner/tracing.d.ts +14 -1
  43. package/dist/runner/tracing.js +43 -0
  44. package/dist/runner/tracing.js.map +1 -1
  45. package/dist/runner/tracing.mjs +42 -0
  46. package/dist/runner/tracing.mjs.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPServers = void 0;
4
+ exports.connectMcpServers = connectMcpServers;
5
+ const logger_1 = require("./logger.js");
6
+ const DEFAULT_CONNECT_TIMEOUT_MS = 10_000;
7
+ const DEFAULT_CLOSE_TIMEOUT_MS = 10_000;
8
+ const logger = (0, logger_1.getLogger)('openai-agents:mcp-servers');
9
+ class ServerWorker {
10
+ server;
11
+ connectTimeoutMs;
12
+ closeTimeoutMs;
13
+ queue = [];
14
+ draining = false;
15
+ done = false;
16
+ closing = null;
17
+ closeResult = null;
18
+ constructor(server, connectTimeoutMs, closeTimeoutMs) {
19
+ this.server = server;
20
+ this.connectTimeoutMs = connectTimeoutMs;
21
+ this.closeTimeoutMs = closeTimeoutMs;
22
+ }
23
+ get isDone() {
24
+ return this.done;
25
+ }
26
+ connect() {
27
+ return this.submit('connect', this.connectTimeoutMs);
28
+ }
29
+ close() {
30
+ return this.submit('close', this.closeTimeoutMs);
31
+ }
32
+ submit(action, timeoutMs) {
33
+ if (this.done) {
34
+ return Promise.reject(createClosedError(this.server));
35
+ }
36
+ if (this.closeResult || this.closing) {
37
+ if (action === 'close' && this.closeResult) {
38
+ return this.closeResult;
39
+ }
40
+ return Promise.reject(createClosingError(this.server));
41
+ }
42
+ let resolveCommand;
43
+ let rejectCommand;
44
+ const promise = new Promise((resolve, reject) => {
45
+ resolveCommand = resolve;
46
+ rejectCommand = reject;
47
+ });
48
+ const command = {
49
+ action,
50
+ timeoutMs,
51
+ resolve: resolveCommand,
52
+ reject: rejectCommand,
53
+ };
54
+ if (action === 'close') {
55
+ this.closeResult = promise;
56
+ }
57
+ this.queue.push(command);
58
+ void this.drain();
59
+ return promise;
60
+ }
61
+ async drain() {
62
+ if (this.draining) {
63
+ return;
64
+ }
65
+ this.draining = true;
66
+ while (this.queue.length > 0) {
67
+ const command = this.queue.shift();
68
+ if (!command) {
69
+ continue;
70
+ }
71
+ const shouldExit = command.action === 'close';
72
+ let closeError = null;
73
+ try {
74
+ if (command.action === 'connect') {
75
+ await runWithTimeout(() => this.server.connect(), command.timeoutMs, createTimeoutError('connect', this.server, command.timeoutMs));
76
+ }
77
+ else {
78
+ const closeTask = this.server.close();
79
+ this.closing = closeTask
80
+ .then(() => undefined, () => undefined)
81
+ .finally(() => {
82
+ this.closing = null;
83
+ });
84
+ await runWithTimeoutTask(closeTask, command.timeoutMs, createTimeoutError('close', this.server, command.timeoutMs));
85
+ }
86
+ command.resolve();
87
+ }
88
+ catch (error) {
89
+ const err = toError(error);
90
+ command.reject(err);
91
+ if (shouldExit) {
92
+ closeError = err;
93
+ }
94
+ }
95
+ if (shouldExit) {
96
+ const pendingError = closeError ?? createClosedError(this.server);
97
+ while (this.queue.length > 0) {
98
+ const pending = this.queue.shift();
99
+ if (pending) {
100
+ pending.reject(pendingError);
101
+ }
102
+ }
103
+ this.closeResult = null;
104
+ if (!closeError) {
105
+ this.done = true;
106
+ }
107
+ break;
108
+ }
109
+ }
110
+ this.draining = false;
111
+ }
112
+ }
113
+ /**
114
+ * Manages MCP server lifecycle and exposes only connected servers.
115
+ */
116
+ class MCPServers {
117
+ allServers;
118
+ activeServers;
119
+ failedServers = [];
120
+ failedServerSet = new Set();
121
+ errorsByServer = new Map();
122
+ suppressedAbortFailures = new Set();
123
+ workers = new Map();
124
+ connectTimeoutMs;
125
+ closeTimeoutMs;
126
+ dropFailed;
127
+ strict;
128
+ suppressAbortError;
129
+ connectInParallel;
130
+ static {
131
+ const asyncDispose = Symbol.asyncDispose;
132
+ if (asyncDispose) {
133
+ Object.defineProperty(this.prototype, asyncDispose, {
134
+ value: function () {
135
+ return this.close();
136
+ },
137
+ configurable: true,
138
+ });
139
+ }
140
+ }
141
+ constructor(servers, options) {
142
+ this.allServers = [...servers];
143
+ this.activeServers = [...servers];
144
+ this.connectTimeoutMs =
145
+ options?.connectTimeoutMs === undefined
146
+ ? DEFAULT_CONNECT_TIMEOUT_MS
147
+ : options.connectTimeoutMs;
148
+ this.closeTimeoutMs =
149
+ options?.closeTimeoutMs === undefined
150
+ ? DEFAULT_CLOSE_TIMEOUT_MS
151
+ : options.closeTimeoutMs;
152
+ this.dropFailed = options?.dropFailed ?? true;
153
+ this.strict = options?.strict ?? false;
154
+ this.suppressAbortError = options?.suppressAbortError ?? true;
155
+ this.connectInParallel = options?.connectInParallel ?? false;
156
+ }
157
+ static async open(servers, options) {
158
+ const session = new MCPServers(servers, options);
159
+ logger.debug(`Opening MCPServers with ${session.allServers.length} server(s).`);
160
+ await session.connectAll();
161
+ return session;
162
+ }
163
+ get all() {
164
+ return [...this.allServers];
165
+ }
166
+ get active() {
167
+ return [...this.activeServers];
168
+ }
169
+ get failed() {
170
+ return [...this.failedServers];
171
+ }
172
+ get errors() {
173
+ return new Map(this.errorsByServer);
174
+ }
175
+ async reconnect(options = {}) {
176
+ const failedOnly = options.failedOnly ?? true;
177
+ let serversToRetry;
178
+ if (failedOnly) {
179
+ serversToRetry = uniqueServers(this.failedServers);
180
+ }
181
+ else {
182
+ serversToRetry = [...this.allServers];
183
+ this.failedServers = [];
184
+ this.failedServerSet = new Set();
185
+ this.errorsByServer = new Map();
186
+ this.suppressedAbortFailures = new Set();
187
+ }
188
+ logger.debug(`Reconnecting MCP servers (failedOnly=${failedOnly}) with ${serversToRetry.length} target(s).`);
189
+ if (this.connectInParallel) {
190
+ await this.connectAllParallel(serversToRetry);
191
+ }
192
+ else {
193
+ for (const server of serversToRetry) {
194
+ await this.attemptConnect(server);
195
+ }
196
+ }
197
+ this.refreshActiveServers();
198
+ return this.active;
199
+ }
200
+ async close() {
201
+ await this.closeAll();
202
+ }
203
+ async connectAll() {
204
+ this.failedServers = [];
205
+ this.failedServerSet = new Set();
206
+ this.errorsByServer = new Map();
207
+ this.suppressedAbortFailures = new Set();
208
+ const serversToConnect = [...this.allServers];
209
+ let connectedServers = [];
210
+ logger.debug(`Connecting ${serversToConnect.length} MCP server(s).`);
211
+ try {
212
+ if (this.connectInParallel) {
213
+ await this.connectAllParallel(serversToConnect);
214
+ }
215
+ else {
216
+ for (const server of serversToConnect) {
217
+ await this.attemptConnect(server);
218
+ if (!this.failedServerSet.has(server)) {
219
+ connectedServers.push(server);
220
+ }
221
+ }
222
+ }
223
+ }
224
+ catch (error) {
225
+ if (this.connectInParallel) {
226
+ connectedServers = serversToConnect.filter((server) => !this.failedServerSet.has(server));
227
+ }
228
+ const serversToCleanup = uniqueServers([
229
+ ...connectedServers,
230
+ ...this.failedServers,
231
+ ]);
232
+ await this.closeServers(serversToCleanup);
233
+ this.activeServers = [];
234
+ throw error;
235
+ }
236
+ this.refreshActiveServers();
237
+ return this.active;
238
+ }
239
+ async closeAll() {
240
+ for (const server of [...this.allServers].reverse()) {
241
+ await this.closeServer(server);
242
+ }
243
+ }
244
+ async attemptConnect(server) {
245
+ const raiseOnError = this.strict;
246
+ try {
247
+ logger.debug(`Connecting MCP server '${server.name}'.`);
248
+ await this.runConnect(server);
249
+ logger.debug(`Connected MCP server '${server.name}'.`);
250
+ if (this.failedServerSet.has(server)) {
251
+ this.removeFailedServer(server);
252
+ this.errorsByServer.delete(server);
253
+ }
254
+ }
255
+ catch (error) {
256
+ const err = toError(error);
257
+ if (isAbortError(err)) {
258
+ this.recordFailure(server, err, 'connect');
259
+ if (!this.suppressAbortError) {
260
+ this.suppressedAbortFailures.delete(server);
261
+ throw err;
262
+ }
263
+ this.suppressedAbortFailures.add(server);
264
+ return;
265
+ }
266
+ this.suppressedAbortFailures.delete(server);
267
+ this.recordFailure(server, err, 'connect');
268
+ if (raiseOnError) {
269
+ throw err;
270
+ }
271
+ }
272
+ }
273
+ refreshActiveServers() {
274
+ if (this.dropFailed) {
275
+ const failed = new Set(this.failedServerSet);
276
+ this.activeServers = this.allServers.filter((server) => !failed.has(server));
277
+ }
278
+ else {
279
+ this.activeServers = [...this.allServers];
280
+ }
281
+ logger.debug(`Active MCP servers: ${this.activeServers.length}; failed: ${this.failedServers.length}.`);
282
+ }
283
+ recordFailure(server, error, phase) {
284
+ logger.error(`Failed to ${phase} MCP server '${server.name}':`, error);
285
+ if (!this.failedServerSet.has(server)) {
286
+ this.failedServers.push(server);
287
+ this.failedServerSet.add(server);
288
+ }
289
+ this.errorsByServer.set(server, error);
290
+ }
291
+ async runConnect(server) {
292
+ if (this.connectInParallel) {
293
+ const worker = this.getWorker(server);
294
+ await worker.connect();
295
+ return;
296
+ }
297
+ await runWithTimeout(() => server.connect(), this.connectTimeoutMs, createTimeoutError('connect', server, this.connectTimeoutMs));
298
+ }
299
+ async closeServer(server) {
300
+ try {
301
+ logger.debug(`Closing MCP server '${server.name}'.`);
302
+ await this.runClose(server);
303
+ logger.debug(`Closed MCP server '${server.name}'.`);
304
+ }
305
+ catch (error) {
306
+ const err = toError(error);
307
+ if (isAbortError(err)) {
308
+ if (!this.suppressAbortError) {
309
+ throw err;
310
+ }
311
+ logger.debug(`Close cancelled for MCP server '${server.name}': ${err}`);
312
+ this.errorsByServer.set(server, err);
313
+ return;
314
+ }
315
+ logger.error(`Failed to close MCP server '${server.name}':`, err);
316
+ this.errorsByServer.set(server, err);
317
+ }
318
+ }
319
+ async runClose(server) {
320
+ if (this.connectInParallel && this.workers.has(server)) {
321
+ const worker = this.workers.get(server);
322
+ if (worker) {
323
+ await worker.close();
324
+ if (worker.isDone) {
325
+ this.workers.delete(server);
326
+ }
327
+ return;
328
+ }
329
+ }
330
+ await runWithTimeout(() => server.close(), this.closeTimeoutMs, createTimeoutError('close', server, this.closeTimeoutMs));
331
+ }
332
+ async closeServers(servers) {
333
+ for (const server of [...servers].reverse()) {
334
+ await this.closeServer(server);
335
+ }
336
+ }
337
+ async connectAllParallel(servers) {
338
+ const results = await Promise.allSettled(servers.map((server) => this.attemptConnect(server)));
339
+ const rejection = results.find((result) => result.status === 'rejected');
340
+ if (rejection) {
341
+ throw rejection.reason;
342
+ }
343
+ if (this.strict && this.failedServers.length > 0) {
344
+ const firstFailure = this.failedServers.find((server) => !this.suppressedAbortFailures.has(server));
345
+ if (firstFailure) {
346
+ const error = this.errorsByServer.get(firstFailure);
347
+ if (error) {
348
+ throw error;
349
+ }
350
+ throw new Error(`Failed to connect MCP server '${firstFailure.name}'.`);
351
+ }
352
+ }
353
+ }
354
+ getWorker(server) {
355
+ const worker = this.workers.get(server);
356
+ if (!worker || worker.isDone) {
357
+ const next = new ServerWorker(server, this.connectTimeoutMs, this.closeTimeoutMs);
358
+ this.workers.set(server, next);
359
+ return next;
360
+ }
361
+ return worker;
362
+ }
363
+ removeFailedServer(server) {
364
+ if (this.failedServerSet.has(server)) {
365
+ this.failedServerSet.delete(server);
366
+ }
367
+ this.suppressedAbortFailures.delete(server);
368
+ this.failedServers = this.failedServers.filter((failedServer) => failedServer !== server);
369
+ }
370
+ }
371
+ exports.MCPServers = MCPServers;
372
+ /**
373
+ * Connect to multiple MCP servers and return a managed MCPServers instance.
374
+ */
375
+ async function connectMcpServers(servers, options) {
376
+ return MCPServers.open(servers, options);
377
+ }
378
+ function createTimeoutError(action, server, timeoutMs) {
379
+ if (timeoutMs === null) {
380
+ return new Error(`MCP server ${action} timed out.`);
381
+ }
382
+ const error = new Error(`MCP server ${action} timed out after ${timeoutMs}ms for '${server.name}'.`);
383
+ error.name = 'TimeoutError';
384
+ return error;
385
+ }
386
+ function createClosedError(server) {
387
+ const error = new Error(`MCP server '${server.name}' is closed.`);
388
+ error.name = 'ClosedError';
389
+ return error;
390
+ }
391
+ function createClosingError(server) {
392
+ const error = new Error(`MCP server '${server.name}' is closing.`);
393
+ error.name = 'ClosingError';
394
+ return error;
395
+ }
396
+ async function runWithTimeout(fn, timeoutMs, timeoutError) {
397
+ if (timeoutMs === null) {
398
+ await fn();
399
+ return;
400
+ }
401
+ let timer;
402
+ let timedOut = false;
403
+ const task = fn();
404
+ const timeoutPromise = new Promise((_, reject) => {
405
+ timer = setTimeout(() => {
406
+ timedOut = true;
407
+ reject(timeoutError);
408
+ }, timeoutMs);
409
+ });
410
+ try {
411
+ await Promise.race([task, timeoutPromise]);
412
+ }
413
+ finally {
414
+ if (timer) {
415
+ clearTimeout(timer);
416
+ }
417
+ if (timedOut) {
418
+ task.catch(() => undefined);
419
+ }
420
+ }
421
+ }
422
+ async function runWithTimeoutTask(task, timeoutMs, timeoutError) {
423
+ if (timeoutMs === null) {
424
+ await task;
425
+ return;
426
+ }
427
+ let timer;
428
+ let timedOut = false;
429
+ const timeoutPromise = new Promise((_, reject) => {
430
+ timer = setTimeout(() => {
431
+ timedOut = true;
432
+ reject(timeoutError);
433
+ }, timeoutMs);
434
+ });
435
+ try {
436
+ await Promise.race([task, timeoutPromise]);
437
+ }
438
+ finally {
439
+ if (timer) {
440
+ clearTimeout(timer);
441
+ }
442
+ if (timedOut) {
443
+ task.catch(() => undefined);
444
+ }
445
+ }
446
+ }
447
+ function toError(error) {
448
+ if (error instanceof Error) {
449
+ return error;
450
+ }
451
+ return new Error(String(error));
452
+ }
453
+ function isAbortError(error) {
454
+ const code = error.code;
455
+ return (error.name === 'AbortError' ||
456
+ error.name === 'CanceledError' ||
457
+ error.name === 'CancelledError' ||
458
+ code === 'ABORT_ERR' ||
459
+ code === 'ERR_ABORTED');
460
+ }
461
+ function uniqueServers(servers) {
462
+ const seen = new Set();
463
+ const unique = [];
464
+ for (const server of servers) {
465
+ if (!seen.has(server)) {
466
+ seen.add(server);
467
+ unique.push(server);
468
+ }
469
+ }
470
+ return unique;
471
+ }
472
+ //# sourceMappingURL=mcpServers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpServers.js","sourceRoot":"","sources":["../src/mcpServers.ts"],"names":[],"mappings":"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"}