@openai/agents-core 0.3.7 → 0.3.9

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 (180) hide show
  1. package/dist/errors.d.ts +40 -0
  2. package/dist/errors.js +39 -1
  3. package/dist/errors.js.map +1 -1
  4. package/dist/errors.mjs +35 -0
  5. package/dist/errors.mjs.map +1 -1
  6. package/dist/index.d.ts +6 -2
  7. package/dist/index.js +13 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +3 -1
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/metadata.js +2 -2
  12. package/dist/metadata.mjs +2 -2
  13. package/dist/result.d.ts +17 -0
  14. package/dist/result.js +71 -24
  15. package/dist/result.js.map +1 -1
  16. package/dist/result.mjs +69 -22
  17. package/dist/result.mjs.map +1 -1
  18. package/dist/run.d.ts +14 -47
  19. package/dist/run.js +421 -994
  20. package/dist/run.js.map +1 -1
  21. package/dist/run.mjs +405 -978
  22. package/dist/run.mjs.map +1 -1
  23. package/dist/runState.d.ts +1286 -172
  24. package/dist/runState.js +146 -16
  25. package/dist/runState.js.map +1 -1
  26. package/dist/runState.mjs +142 -12
  27. package/dist/runState.mjs.map +1 -1
  28. package/dist/runner/constants.d.ts +1 -0
  29. package/dist/runner/constants.js +6 -0
  30. package/dist/runner/constants.js.map +1 -0
  31. package/dist/runner/constants.mjs +3 -0
  32. package/dist/runner/constants.mjs.map +1 -0
  33. package/dist/runner/conversation.d.ts +85 -0
  34. package/dist/runner/conversation.js +275 -0
  35. package/dist/runner/conversation.js.map +1 -0
  36. package/dist/runner/conversation.mjs +269 -0
  37. package/dist/runner/conversation.mjs.map +1 -0
  38. package/dist/runner/guardrails.d.ts +23 -0
  39. package/dist/runner/guardrails.js +174 -0
  40. package/dist/runner/guardrails.js.map +1 -0
  41. package/dist/runner/guardrails.mjs +166 -0
  42. package/dist/runner/guardrails.mjs.map +1 -0
  43. package/dist/runner/items.d.ts +18 -0
  44. package/dist/runner/items.js +89 -0
  45. package/dist/runner/items.js.map +1 -0
  46. package/dist/runner/items.mjs +79 -0
  47. package/dist/runner/items.mjs.map +1 -0
  48. package/dist/runner/mcpApprovals.d.ts +25 -0
  49. package/dist/runner/mcpApprovals.js +66 -0
  50. package/dist/runner/mcpApprovals.js.map +1 -0
  51. package/dist/runner/mcpApprovals.mjs +63 -0
  52. package/dist/runner/mcpApprovals.mjs.map +1 -0
  53. package/dist/runner/modelOutputs.d.ts +10 -0
  54. package/dist/runner/modelOutputs.js +206 -0
  55. package/dist/runner/modelOutputs.js.map +1 -0
  56. package/dist/runner/modelOutputs.mjs +203 -0
  57. package/dist/runner/modelOutputs.mjs.map +1 -0
  58. package/dist/runner/modelPreparation.d.ts +8 -0
  59. package/dist/runner/modelPreparation.js +41 -0
  60. package/dist/runner/modelPreparation.js.map +1 -0
  61. package/dist/runner/modelPreparation.mjs +38 -0
  62. package/dist/runner/modelPreparation.mjs.map +1 -0
  63. package/dist/runner/modelSettings.d.ts +20 -0
  64. package/dist/runner/modelSettings.js +97 -0
  65. package/dist/runner/modelSettings.js.map +1 -0
  66. package/dist/runner/modelSettings.mjs +92 -0
  67. package/dist/runner/modelSettings.mjs.map +1 -0
  68. package/dist/runner/runLoop.d.ts +32 -0
  69. package/dist/runner/runLoop.js +62 -0
  70. package/dist/runner/runLoop.js.map +1 -0
  71. package/dist/runner/runLoop.mjs +57 -0
  72. package/dist/runner/runLoop.mjs.map +1 -0
  73. package/dist/runner/sessionPersistence.d.ts +26 -0
  74. package/dist/runner/sessionPersistence.js +441 -0
  75. package/dist/runner/sessionPersistence.js.map +1 -0
  76. package/dist/runner/sessionPersistence.mjs +431 -0
  77. package/dist/runner/sessionPersistence.mjs.map +1 -0
  78. package/dist/runner/steps.d.ts +48 -0
  79. package/dist/runner/steps.js +40 -0
  80. package/dist/runner/steps.js.map +1 -0
  81. package/dist/runner/steps.mjs +36 -0
  82. package/dist/runner/steps.mjs.map +1 -0
  83. package/dist/runner/streaming.d.ts +9 -0
  84. package/dist/runner/streaming.js +74 -0
  85. package/dist/runner/streaming.js.map +1 -0
  86. package/dist/runner/streaming.mjs +65 -0
  87. package/dist/runner/streaming.mjs.map +1 -0
  88. package/dist/runner/toolExecution.d.ts +15 -0
  89. package/dist/runner/toolExecution.js +997 -0
  90. package/dist/runner/toolExecution.js.map +1 -0
  91. package/dist/runner/toolExecution.mjs +984 -0
  92. package/dist/runner/toolExecution.mjs.map +1 -0
  93. package/dist/runner/toolUseTracker.d.ts +9 -0
  94. package/dist/runner/toolUseTracker.js +34 -0
  95. package/dist/runner/toolUseTracker.js.map +1 -0
  96. package/dist/runner/toolUseTracker.mjs +30 -0
  97. package/dist/runner/toolUseTracker.mjs.map +1 -0
  98. package/dist/runner/tracing.d.ts +23 -0
  99. package/dist/runner/tracing.js +45 -0
  100. package/dist/runner/tracing.js.map +1 -0
  101. package/dist/runner/tracing.mjs +41 -0
  102. package/dist/runner/tracing.mjs.map +1 -0
  103. package/dist/runner/turnPreparation.d.ts +30 -0
  104. package/dist/runner/turnPreparation.js +80 -0
  105. package/dist/runner/turnPreparation.js.map +1 -0
  106. package/dist/runner/turnPreparation.mjs +74 -0
  107. package/dist/runner/turnPreparation.mjs.map +1 -0
  108. package/dist/runner/turnResolution.d.ts +3 -0
  109. package/dist/runner/turnResolution.js +531 -0
  110. package/dist/runner/turnResolution.js.map +1 -0
  111. package/dist/runner/turnResolution.mjs +526 -0
  112. package/dist/runner/turnResolution.mjs.map +1 -0
  113. package/dist/runner/types.d.ts +66 -0
  114. package/dist/runner/types.js +3 -0
  115. package/dist/runner/types.js.map +1 -0
  116. package/dist/runner/types.mjs +2 -0
  117. package/dist/runner/types.mjs.map +1 -0
  118. package/dist/shims/mcp-server/node.js +51 -6
  119. package/dist/shims/mcp-server/node.js.map +1 -1
  120. package/dist/shims/mcp-server/node.mjs +51 -6
  121. package/dist/shims/mcp-server/node.mjs.map +1 -1
  122. package/dist/tool.d.ts +28 -2
  123. package/dist/tool.js +7 -1
  124. package/dist/tool.js.map +1 -1
  125. package/dist/tool.mjs +8 -2
  126. package/dist/tool.mjs.map +1 -1
  127. package/dist/toolGuardrail.d.ts +101 -0
  128. package/dist/toolGuardrail.js +58 -0
  129. package/dist/toolGuardrail.js.map +1 -0
  130. package/dist/toolGuardrail.mjs +51 -0
  131. package/dist/toolGuardrail.mjs.map +1 -0
  132. package/dist/tracing/config.d.ts +3 -0
  133. package/dist/tracing/config.js +3 -0
  134. package/dist/tracing/config.js.map +1 -0
  135. package/dist/tracing/config.mjs +2 -0
  136. package/dist/tracing/config.mjs.map +1 -0
  137. package/dist/tracing/context.d.ts +2 -0
  138. package/dist/tracing/context.js +95 -24
  139. package/dist/tracing/context.js.map +1 -1
  140. package/dist/tracing/context.mjs +95 -24
  141. package/dist/tracing/context.mjs.map +1 -1
  142. package/dist/tracing/createSpans.d.ts +11 -11
  143. package/dist/tracing/index.d.ts +2 -0
  144. package/dist/tracing/index.js.map +1 -1
  145. package/dist/tracing/index.mjs.map +1 -1
  146. package/dist/tracing/provider.js +54 -4
  147. package/dist/tracing/provider.js.map +1 -1
  148. package/dist/tracing/provider.mjs +54 -4
  149. package/dist/tracing/provider.mjs.map +1 -1
  150. package/dist/tracing/spans.d.ts +2 -0
  151. package/dist/tracing/spans.js +6 -0
  152. package/dist/tracing/spans.js.map +1 -1
  153. package/dist/tracing/spans.mjs +6 -0
  154. package/dist/tracing/spans.mjs.map +1 -1
  155. package/dist/tracing/traces.d.ts +11 -1
  156. package/dist/tracing/traces.js +15 -2
  157. package/dist/tracing/traces.js.map +1 -1
  158. package/dist/tracing/traces.mjs +15 -2
  159. package/dist/tracing/traces.mjs.map +1 -1
  160. package/dist/types/protocol.d.ts +11 -0
  161. package/dist/types/protocol.js +1 -0
  162. package/dist/types/protocol.js.map +1 -1
  163. package/dist/types/protocol.mjs +1 -0
  164. package/dist/types/protocol.mjs.map +1 -1
  165. package/dist/utils/binary.d.ts +6 -0
  166. package/dist/utils/binary.js +53 -0
  167. package/dist/utils/binary.js.map +1 -0
  168. package/dist/utils/binary.mjs +49 -0
  169. package/dist/utils/binary.mjs.map +1 -0
  170. package/dist/utils/toolGuardrails.d.ts +24 -0
  171. package/dist/utils/toolGuardrails.js +58 -0
  172. package/dist/utils/toolGuardrails.js.map +1 -0
  173. package/dist/utils/toolGuardrails.mjs +54 -0
  174. package/dist/utils/toolGuardrails.mjs.map +1 -0
  175. package/package.json +4 -3
  176. package/dist/runImplementation.d.ts +0 -161
  177. package/dist/runImplementation.js +0 -2054
  178. package/dist/runImplementation.js.map +0 -1
  179. package/dist/runImplementation.mjs +0 -2028
  180. package/dist/runImplementation.mjs.map +0 -1
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolGuardrailFunctionOutputFactory = void 0;
4
+ exports.defineToolInputGuardrail = defineToolInputGuardrail;
5
+ exports.defineToolOutputGuardrail = defineToolOutputGuardrail;
6
+ exports.resolveToolInputGuardrails = resolveToolInputGuardrails;
7
+ exports.resolveToolOutputGuardrails = resolveToolOutputGuardrails;
8
+ function defineToolInputGuardrail(args) {
9
+ return {
10
+ type: 'tool_input',
11
+ name: args.name,
12
+ run: args.run,
13
+ };
14
+ }
15
+ function defineToolOutputGuardrail(args) {
16
+ return {
17
+ type: 'tool_output',
18
+ name: args.name,
19
+ run: args.run,
20
+ };
21
+ }
22
+ exports.ToolGuardrailFunctionOutputFactory = {
23
+ allow(outputInfo) {
24
+ return {
25
+ behavior: { type: 'allow' },
26
+ outputInfo,
27
+ };
28
+ },
29
+ rejectContent(message, outputInfo) {
30
+ return {
31
+ behavior: { type: 'rejectContent', message },
32
+ outputInfo,
33
+ };
34
+ },
35
+ throwException(outputInfo) {
36
+ return {
37
+ behavior: { type: 'throwException' },
38
+ outputInfo,
39
+ };
40
+ },
41
+ };
42
+ function resolveToolInputGuardrails(guardrails) {
43
+ if (!guardrails) {
44
+ return [];
45
+ }
46
+ return guardrails.map((gr) => 'type' in gr && gr.type === 'tool_input'
47
+ ? gr
48
+ : defineToolInputGuardrail(gr));
49
+ }
50
+ function resolveToolOutputGuardrails(guardrails) {
51
+ if (!guardrails) {
52
+ return [];
53
+ }
54
+ return guardrails.map((gr) => 'type' in gr && gr.type === 'tool_output'
55
+ ? gr
56
+ : defineToolOutputGuardrail(gr));
57
+ }
58
+ //# sourceMappingURL=toolGuardrail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolGuardrail.js","sourceRoot":"","sources":["../src/toolGuardrail.ts"],"names":[],"mappings":";;;AA4FA,4DASC;AAED,8DASC;AAwCD,gEAWC;AAED,kEAWC;AApFD,SAAgB,wBAAwB,CAA4B,IAGnE;IACC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC;AAED,SAAgB,yBAAyB,CAA4B,IAGpE;IACC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC;AAEY,QAAA,kCAAkC,GAAG;IAChD,KAAK,CAAC,UAAgB;QACpB,OAAO;YACL,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,UAAU;SACX,CAAC;IACJ,CAAC;IACD,aAAa,CACX,OAAe,EACf,UAAgB;QAEhB,OAAO;YACL,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE;YAC5C,UAAU;SACX,CAAC;IACJ,CAAC;IACD,cAAc,CAAC,UAAgB;QAC7B,OAAO;YACL,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACpC,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC;AAgBF,SAAgB,0BAA0B,CACxC,UAA+C;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC3B,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY;QACtC,CAAC,CAAE,EAA6C;QAChD,CAAC,CAAC,wBAAwB,CAAC,EAAgC,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,UAAgD;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC3B,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa;QACvC,CAAC,CAAE,EAA8C;QACjD,CAAC,CAAC,yBAAyB,CAAC,EAAgC,CAAC,CAChE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ export function defineToolInputGuardrail(args) {
2
+ return {
3
+ type: 'tool_input',
4
+ name: args.name,
5
+ run: args.run,
6
+ };
7
+ }
8
+ export function defineToolOutputGuardrail(args) {
9
+ return {
10
+ type: 'tool_output',
11
+ name: args.name,
12
+ run: args.run,
13
+ };
14
+ }
15
+ export const ToolGuardrailFunctionOutputFactory = {
16
+ allow(outputInfo) {
17
+ return {
18
+ behavior: { type: 'allow' },
19
+ outputInfo,
20
+ };
21
+ },
22
+ rejectContent(message, outputInfo) {
23
+ return {
24
+ behavior: { type: 'rejectContent', message },
25
+ outputInfo,
26
+ };
27
+ },
28
+ throwException(outputInfo) {
29
+ return {
30
+ behavior: { type: 'throwException' },
31
+ outputInfo,
32
+ };
33
+ },
34
+ };
35
+ export function resolveToolInputGuardrails(guardrails) {
36
+ if (!guardrails) {
37
+ return [];
38
+ }
39
+ return guardrails.map((gr) => 'type' in gr && gr.type === 'tool_input'
40
+ ? gr
41
+ : defineToolInputGuardrail(gr));
42
+ }
43
+ export function resolveToolOutputGuardrails(guardrails) {
44
+ if (!guardrails) {
45
+ return [];
46
+ }
47
+ return guardrails.map((gr) => 'type' in gr && gr.type === 'tool_output'
48
+ ? gr
49
+ : defineToolOutputGuardrail(gr));
50
+ }
51
+ //# sourceMappingURL=toolGuardrail.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolGuardrail.mjs","sourceRoot":"","sources":["../src/toolGuardrail.ts"],"names":[],"mappings":"AA4FA,MAAM,UAAU,wBAAwB,CAA4B,IAGnE;IACC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAA4B,IAGpE;IACC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,KAAK,CAAC,UAAgB;QACpB,OAAO;YACL,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,UAAU;SACX,CAAC;IACJ,CAAC;IACD,aAAa,CACX,OAAe,EACf,UAAgB;QAEhB,OAAO;YACL,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE;YAC5C,UAAU;SACX,CAAC;IACJ,CAAC;IACD,cAAc,CAAC,UAAgB;QAC7B,OAAO;YACL,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACpC,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC;AAgBF,MAAM,UAAU,0BAA0B,CACxC,UAA+C;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC3B,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY;QACtC,CAAC,CAAE,EAA6C;QAChD,CAAC,CAAC,wBAAwB,CAAC,EAAgC,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,UAAgD;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC3B,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa;QACvC,CAAC,CAAE,EAA8C;QACjD,CAAC,CAAC,yBAAyB,CAAC,EAAgC,CAAC,CAChE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type TracingConfig = {
2
+ apiKey?: string;
3
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tracing/config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.mjs","sourceRoot":"","sources":["../../src/tracing/config.ts"],"names":[],"mappings":""}
@@ -4,6 +4,7 @@ type ContextState = {
4
4
  trace?: Trace;
5
5
  span?: Span<any>;
6
6
  previousSpan?: Span<any>;
7
+ active: boolean;
7
8
  };
8
9
  /**
9
10
  * This function will get the current trace from the execution context.
@@ -58,6 +59,7 @@ export declare function cloneCurrentContext(context: ContextState): {
58
59
  trace: Trace | undefined;
59
60
  span: Span<any> | undefined;
60
61
  previousSpan: Span<any> | undefined;
62
+ active: boolean;
61
63
  };
62
64
  /**
63
65
  * This function will run the given function with a new span context.
@@ -12,10 +12,39 @@ exports.withNewSpanContext = withNewSpanContext;
12
12
  const _shims_1 = require("@openai/agents-core/_shims");
13
13
  const provider_1 = require("./provider.js");
14
14
  const result_1 = require("../result.js");
15
- let _contextAsyncLocalStorage;
15
+ const ALS_SYMBOL = Symbol.for('openai.agents.core.asyncLocalStorage');
16
+ let localFallbackAls;
17
+ // Global symbols ensure that if multiple copies of agents-core are loaded
18
+ // (e.g., via different npm resolution paths or bundlers), they all share the
19
+ // same AsyncLocalStorage instance. This prevents losing trace/span state when a
20
+ // downstream package pulls in a duplicate copy.
16
21
  function getContextAsyncLocalStorage() {
17
- _contextAsyncLocalStorage ??= new _shims_1.AsyncLocalStorage();
18
- return _contextAsyncLocalStorage;
22
+ try {
23
+ const globalScope = globalThis;
24
+ const globalALS = globalScope[ALS_SYMBOL];
25
+ if (globalALS) {
26
+ return globalALS;
27
+ }
28
+ const newALS = new _shims_1.AsyncLocalStorage();
29
+ globalScope[ALS_SYMBOL] = newALS;
30
+ return newALS;
31
+ }
32
+ catch {
33
+ // As a defensive fallback (e.g., if globalThis is locked down or ALS
34
+ // construction throws in a constrained runtime), keep a module-local ALS so
35
+ // tracing still functions instead of crashing callers.
36
+ if (!localFallbackAls) {
37
+ localFallbackAls = new _shims_1.AsyncLocalStorage();
38
+ }
39
+ return localFallbackAls;
40
+ }
41
+ }
42
+ function getActiveContext() {
43
+ const store = getContextAsyncLocalStorage().getStore();
44
+ if (store?.active === true) {
45
+ return store;
46
+ }
47
+ return undefined;
19
48
  }
20
49
  /**
21
50
  * This function will get the current trace from the execution context.
@@ -23,7 +52,7 @@ function getContextAsyncLocalStorage() {
23
52
  * @returns The current trace or null if there is no trace.
24
53
  */
25
54
  function getCurrentTrace() {
26
- const currentTrace = getContextAsyncLocalStorage().getStore();
55
+ const currentTrace = getActiveContext();
27
56
  if (currentTrace?.trace) {
28
57
  return currentTrace.trace;
29
58
  }
@@ -35,7 +64,7 @@ function getCurrentTrace() {
35
64
  * @returns The current span or null if there is no span.
36
65
  */
37
66
  function getCurrentSpan() {
38
- const currentSpan = getContextAsyncLocalStorage().getStore();
67
+ const currentSpan = getActiveContext();
39
68
  if (currentSpan?.span) {
40
69
  return currentSpan.span;
41
70
  }
@@ -47,25 +76,57 @@ function getCurrentSpan() {
47
76
  *
48
77
  * The functions below should be the only way that this context gets interfaced with.
49
78
  */
50
- function _wrapFunctionWithTraceLifecycle(fn) {
79
+ function _wrapFunctionWithTraceLifecycle(fn, currentContext, previousAlsStore) {
51
80
  return async () => {
52
81
  const trace = getCurrentTrace();
53
82
  if (!trace) {
54
83
  throw new Error('No trace found');
55
84
  }
56
- await trace.start();
57
- const result = await fn(trace);
58
- // If result is a StreamedRunResult, defer trace end until stream loop completes
59
- if (result instanceof result_1.StreamedRunResult) {
60
- const streamLoopPromise = result._getStreamLoopPromise();
61
- if (streamLoopPromise) {
62
- streamLoopPromise.finally(() => trace.end());
63
- return result;
85
+ let cleanupDeferred = false;
86
+ let started = false;
87
+ const cleanupContext = () => {
88
+ currentContext.active = false;
89
+ currentContext.trace = undefined;
90
+ currentContext.span = undefined;
91
+ currentContext.previousSpan = undefined;
92
+ getContextAsyncLocalStorage().enterWith(previousAlsStore);
93
+ };
94
+ try {
95
+ await trace.start();
96
+ started = true;
97
+ const result = await fn(trace);
98
+ // If result is a StreamedRunResult, defer trace end until stream loop completes
99
+ if (result instanceof result_1.StreamedRunResult) {
100
+ const streamLoopPromise = result._getStreamLoopPromise();
101
+ if (streamLoopPromise) {
102
+ cleanupDeferred = true;
103
+ streamLoopPromise.finally(async () => {
104
+ try {
105
+ if (started) {
106
+ await trace.end();
107
+ }
108
+ }
109
+ finally {
110
+ cleanupContext();
111
+ }
112
+ });
113
+ return result;
114
+ }
115
+ }
116
+ // For non-streaming results, end trace synchronously
117
+ if (started) {
118
+ await trace.end();
119
+ }
120
+ return result;
121
+ }
122
+ finally {
123
+ // If cleanup was deferred to the streaming loop, keep the context marked
124
+ // active so concurrent traces do not clear it prematurely. Otherwise,
125
+ // mark inactive and restore now.
126
+ if (!cleanupDeferred) {
127
+ cleanupContext();
64
128
  }
65
129
  }
66
- // For non-streaming results, end trace synchronously
67
- await trace.end();
68
- return result;
69
130
  };
70
131
  }
71
132
  /**
@@ -82,7 +143,12 @@ async function withTrace(trace, fn, options = {}) {
82
143
  name: trace,
83
144
  })
84
145
  : trace;
85
- return getContextAsyncLocalStorage().run({ trace: newTrace }, _wrapFunctionWithTraceLifecycle(fn));
146
+ const context = {
147
+ trace: newTrace,
148
+ active: true,
149
+ };
150
+ const previousAlsStore = getContextAsyncLocalStorage().getStore();
151
+ return getContextAsyncLocalStorage().run(context, _wrapFunctionWithTraceLifecycle(fn, context, previousAlsStore));
86
152
  }
87
153
  /**
88
154
  * This function will check if there is an existing active trace in the execution context. If there
@@ -95,11 +161,15 @@ async function withTrace(trace, fn, options = {}) {
95
161
  async function getOrCreateTrace(fn, options = {}) {
96
162
  const currentTrace = getCurrentTrace();
97
163
  if (currentTrace) {
98
- // if this execution context already has a trace instance in it we just continue
99
164
  return await fn();
100
165
  }
101
166
  const newTrace = (0, provider_1.getGlobalTraceProvider)().createTrace(options);
102
- return getContextAsyncLocalStorage().run({ trace: newTrace }, _wrapFunctionWithTraceLifecycle(fn));
167
+ const newContext = {
168
+ trace: newTrace,
169
+ active: true,
170
+ };
171
+ const previousAlsStore = getContextAsyncLocalStorage().getStore();
172
+ return getContextAsyncLocalStorage().run(newContext, _wrapFunctionWithTraceLifecycle(fn, newContext, previousAlsStore));
103
173
  }
104
174
  /**
105
175
  * This function will set the current span in the execution context.
@@ -107,7 +177,7 @@ async function getOrCreateTrace(fn, options = {}) {
107
177
  * @param span - The span to set as the current span.
108
178
  */
109
179
  function setCurrentSpan(span) {
110
- const context = getContextAsyncLocalStorage().getStore();
180
+ const context = getActiveContext();
111
181
  if (!context) {
112
182
  throw new Error('No existing trace found');
113
183
  }
@@ -120,7 +190,7 @@ function setCurrentSpan(span) {
120
190
  getContextAsyncLocalStorage().enterWith(context);
121
191
  }
122
192
  function resetCurrentSpan() {
123
- const context = getContextAsyncLocalStorage().getStore();
193
+ const context = getActiveContext();
124
194
  if (context) {
125
195
  context.span = context.previousSpan;
126
196
  context.previousSpan = context.previousSpan?.previousSpan;
@@ -150,6 +220,7 @@ function cloneCurrentContext(context) {
150
220
  trace: context.trace?.clone(),
151
221
  span: context.span?.clone(),
152
222
  previousSpan: context.previousSpan?.clone(),
223
+ active: context.active,
153
224
  };
154
225
  }
155
226
  /**
@@ -158,9 +229,9 @@ function cloneCurrentContext(context) {
158
229
  * @param fn - The function to run with the new span context.
159
230
  */
160
231
  function withNewSpanContext(fn) {
161
- const currentContext = getContextAsyncLocalStorage().getStore();
232
+ const currentContext = getActiveContext();
162
233
  if (!currentContext) {
163
- throw new Error('No existing trace found');
234
+ return fn();
164
235
  }
165
236
  const copyOfContext = cloneCurrentContext(currentContext);
166
237
  return getContextAsyncLocalStorage().run(copyOfContext, fn);
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,39 @@
1
1
  import { AsyncLocalStorage } from '@openai/agents-core/_shims';
2
2
  import { getGlobalTraceProvider } from "./provider.mjs";
3
3
  import { StreamedRunResult } from "../result.mjs";
4
- let _contextAsyncLocalStorage;
4
+ const ALS_SYMBOL = Symbol.for('openai.agents.core.asyncLocalStorage');
5
+ let localFallbackAls;
6
+ // Global symbols ensure that if multiple copies of agents-core are loaded
7
+ // (e.g., via different npm resolution paths or bundlers), they all share the
8
+ // same AsyncLocalStorage instance. This prevents losing trace/span state when a
9
+ // downstream package pulls in a duplicate copy.
5
10
  function getContextAsyncLocalStorage() {
6
- _contextAsyncLocalStorage ??= new AsyncLocalStorage();
7
- return _contextAsyncLocalStorage;
11
+ try {
12
+ const globalScope = globalThis;
13
+ const globalALS = globalScope[ALS_SYMBOL];
14
+ if (globalALS) {
15
+ return globalALS;
16
+ }
17
+ const newALS = new AsyncLocalStorage();
18
+ globalScope[ALS_SYMBOL] = newALS;
19
+ return newALS;
20
+ }
21
+ catch {
22
+ // As a defensive fallback (e.g., if globalThis is locked down or ALS
23
+ // construction throws in a constrained runtime), keep a module-local ALS so
24
+ // tracing still functions instead of crashing callers.
25
+ if (!localFallbackAls) {
26
+ localFallbackAls = new AsyncLocalStorage();
27
+ }
28
+ return localFallbackAls;
29
+ }
30
+ }
31
+ function getActiveContext() {
32
+ const store = getContextAsyncLocalStorage().getStore();
33
+ if (store?.active === true) {
34
+ return store;
35
+ }
36
+ return undefined;
8
37
  }
9
38
  /**
10
39
  * This function will get the current trace from the execution context.
@@ -12,7 +41,7 @@ function getContextAsyncLocalStorage() {
12
41
  * @returns The current trace or null if there is no trace.
13
42
  */
14
43
  export function getCurrentTrace() {
15
- const currentTrace = getContextAsyncLocalStorage().getStore();
44
+ const currentTrace = getActiveContext();
16
45
  if (currentTrace?.trace) {
17
46
  return currentTrace.trace;
18
47
  }
@@ -24,7 +53,7 @@ export function getCurrentTrace() {
24
53
  * @returns The current span or null if there is no span.
25
54
  */
26
55
  export function getCurrentSpan() {
27
- const currentSpan = getContextAsyncLocalStorage().getStore();
56
+ const currentSpan = getActiveContext();
28
57
  if (currentSpan?.span) {
29
58
  return currentSpan.span;
30
59
  }
@@ -36,25 +65,57 @@ export function getCurrentSpan() {
36
65
  *
37
66
  * The functions below should be the only way that this context gets interfaced with.
38
67
  */
39
- function _wrapFunctionWithTraceLifecycle(fn) {
68
+ function _wrapFunctionWithTraceLifecycle(fn, currentContext, previousAlsStore) {
40
69
  return async () => {
41
70
  const trace = getCurrentTrace();
42
71
  if (!trace) {
43
72
  throw new Error('No trace found');
44
73
  }
45
- await trace.start();
46
- const result = await fn(trace);
47
- // If result is a StreamedRunResult, defer trace end until stream loop completes
48
- if (result instanceof StreamedRunResult) {
49
- const streamLoopPromise = result._getStreamLoopPromise();
50
- if (streamLoopPromise) {
51
- streamLoopPromise.finally(() => trace.end());
52
- return result;
74
+ let cleanupDeferred = false;
75
+ let started = false;
76
+ const cleanupContext = () => {
77
+ currentContext.active = false;
78
+ currentContext.trace = undefined;
79
+ currentContext.span = undefined;
80
+ currentContext.previousSpan = undefined;
81
+ getContextAsyncLocalStorage().enterWith(previousAlsStore);
82
+ };
83
+ try {
84
+ await trace.start();
85
+ started = true;
86
+ const result = await fn(trace);
87
+ // If result is a StreamedRunResult, defer trace end until stream loop completes
88
+ if (result instanceof StreamedRunResult) {
89
+ const streamLoopPromise = result._getStreamLoopPromise();
90
+ if (streamLoopPromise) {
91
+ cleanupDeferred = true;
92
+ streamLoopPromise.finally(async () => {
93
+ try {
94
+ if (started) {
95
+ await trace.end();
96
+ }
97
+ }
98
+ finally {
99
+ cleanupContext();
100
+ }
101
+ });
102
+ return result;
103
+ }
104
+ }
105
+ // For non-streaming results, end trace synchronously
106
+ if (started) {
107
+ await trace.end();
108
+ }
109
+ return result;
110
+ }
111
+ finally {
112
+ // If cleanup was deferred to the streaming loop, keep the context marked
113
+ // active so concurrent traces do not clear it prematurely. Otherwise,
114
+ // mark inactive and restore now.
115
+ if (!cleanupDeferred) {
116
+ cleanupContext();
53
117
  }
54
118
  }
55
- // For non-streaming results, end trace synchronously
56
- await trace.end();
57
- return result;
58
119
  };
59
120
  }
60
121
  /**
@@ -71,7 +132,12 @@ export async function withTrace(trace, fn, options = {}) {
71
132
  name: trace,
72
133
  })
73
134
  : trace;
74
- return getContextAsyncLocalStorage().run({ trace: newTrace }, _wrapFunctionWithTraceLifecycle(fn));
135
+ const context = {
136
+ trace: newTrace,
137
+ active: true,
138
+ };
139
+ const previousAlsStore = getContextAsyncLocalStorage().getStore();
140
+ return getContextAsyncLocalStorage().run(context, _wrapFunctionWithTraceLifecycle(fn, context, previousAlsStore));
75
141
  }
76
142
  /**
77
143
  * This function will check if there is an existing active trace in the execution context. If there
@@ -84,11 +150,15 @@ export async function withTrace(trace, fn, options = {}) {
84
150
  export async function getOrCreateTrace(fn, options = {}) {
85
151
  const currentTrace = getCurrentTrace();
86
152
  if (currentTrace) {
87
- // if this execution context already has a trace instance in it we just continue
88
153
  return await fn();
89
154
  }
90
155
  const newTrace = getGlobalTraceProvider().createTrace(options);
91
- return getContextAsyncLocalStorage().run({ trace: newTrace }, _wrapFunctionWithTraceLifecycle(fn));
156
+ const newContext = {
157
+ trace: newTrace,
158
+ active: true,
159
+ };
160
+ const previousAlsStore = getContextAsyncLocalStorage().getStore();
161
+ return getContextAsyncLocalStorage().run(newContext, _wrapFunctionWithTraceLifecycle(fn, newContext, previousAlsStore));
92
162
  }
93
163
  /**
94
164
  * This function will set the current span in the execution context.
@@ -96,7 +166,7 @@ export async function getOrCreateTrace(fn, options = {}) {
96
166
  * @param span - The span to set as the current span.
97
167
  */
98
168
  export function setCurrentSpan(span) {
99
- const context = getContextAsyncLocalStorage().getStore();
169
+ const context = getActiveContext();
100
170
  if (!context) {
101
171
  throw new Error('No existing trace found');
102
172
  }
@@ -109,7 +179,7 @@ export function setCurrentSpan(span) {
109
179
  getContextAsyncLocalStorage().enterWith(context);
110
180
  }
111
181
  export function resetCurrentSpan() {
112
- const context = getContextAsyncLocalStorage().getStore();
182
+ const context = getActiveContext();
113
183
  if (context) {
114
184
  context.span = context.previousSpan;
115
185
  context.previousSpan = context.previousSpan?.previousSpan;
@@ -139,6 +209,7 @@ export function cloneCurrentContext(context) {
139
209
  trace: context.trace?.clone(),
140
210
  span: context.span?.clone(),
141
211
  previousSpan: context.previousSpan?.clone(),
212
+ active: context.active,
142
213
  };
143
214
  }
144
215
  /**
@@ -147,9 +218,9 @@ export function cloneCurrentContext(context) {
147
218
  * @param fn - The function to run with the new span context.
148
219
  */
149
220
  export function withNewSpanContext(fn) {
150
- const currentContext = getContextAsyncLocalStorage().getStore();
221
+ const currentContext = getActiveContext();
151
222
  if (!currentContext) {
152
- throw new Error('No existing trace found');
223
+ return fn();
153
224
  }
154
225
  const copyOfContext = cloneCurrentContext(currentContext);
155
226
  return getContextAsyncLocalStorage().run(copyOfContext, fn);
@@ -1 +1 @@
1
- {"version":3,"file":"context.mjs","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.mjs","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"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"}