@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.
- package/dist/errors.d.ts +40 -0
- package/dist/errors.js +39 -1
- package/dist/errors.js.map +1 -1
- package/dist/errors.mjs +35 -0
- package/dist/errors.mjs.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -1
- package/dist/index.mjs.map +1 -1
- package/dist/metadata.js +2 -2
- package/dist/metadata.mjs +2 -2
- package/dist/result.d.ts +17 -0
- package/dist/result.js +71 -24
- package/dist/result.js.map +1 -1
- package/dist/result.mjs +69 -22
- package/dist/result.mjs.map +1 -1
- package/dist/run.d.ts +14 -47
- package/dist/run.js +421 -994
- package/dist/run.js.map +1 -1
- package/dist/run.mjs +405 -978
- package/dist/run.mjs.map +1 -1
- package/dist/runState.d.ts +1286 -172
- package/dist/runState.js +146 -16
- package/dist/runState.js.map +1 -1
- package/dist/runState.mjs +142 -12
- package/dist/runState.mjs.map +1 -1
- package/dist/runner/constants.d.ts +1 -0
- package/dist/runner/constants.js +6 -0
- package/dist/runner/constants.js.map +1 -0
- package/dist/runner/constants.mjs +3 -0
- package/dist/runner/constants.mjs.map +1 -0
- package/dist/runner/conversation.d.ts +85 -0
- package/dist/runner/conversation.js +275 -0
- package/dist/runner/conversation.js.map +1 -0
- package/dist/runner/conversation.mjs +269 -0
- package/dist/runner/conversation.mjs.map +1 -0
- package/dist/runner/guardrails.d.ts +23 -0
- package/dist/runner/guardrails.js +174 -0
- package/dist/runner/guardrails.js.map +1 -0
- package/dist/runner/guardrails.mjs +166 -0
- package/dist/runner/guardrails.mjs.map +1 -0
- package/dist/runner/items.d.ts +18 -0
- package/dist/runner/items.js +89 -0
- package/dist/runner/items.js.map +1 -0
- package/dist/runner/items.mjs +79 -0
- package/dist/runner/items.mjs.map +1 -0
- package/dist/runner/mcpApprovals.d.ts +25 -0
- package/dist/runner/mcpApprovals.js +66 -0
- package/dist/runner/mcpApprovals.js.map +1 -0
- package/dist/runner/mcpApprovals.mjs +63 -0
- package/dist/runner/mcpApprovals.mjs.map +1 -0
- package/dist/runner/modelOutputs.d.ts +10 -0
- package/dist/runner/modelOutputs.js +206 -0
- package/dist/runner/modelOutputs.js.map +1 -0
- package/dist/runner/modelOutputs.mjs +203 -0
- package/dist/runner/modelOutputs.mjs.map +1 -0
- package/dist/runner/modelPreparation.d.ts +8 -0
- package/dist/runner/modelPreparation.js +41 -0
- package/dist/runner/modelPreparation.js.map +1 -0
- package/dist/runner/modelPreparation.mjs +38 -0
- package/dist/runner/modelPreparation.mjs.map +1 -0
- package/dist/runner/modelSettings.d.ts +20 -0
- package/dist/runner/modelSettings.js +97 -0
- package/dist/runner/modelSettings.js.map +1 -0
- package/dist/runner/modelSettings.mjs +92 -0
- package/dist/runner/modelSettings.mjs.map +1 -0
- package/dist/runner/runLoop.d.ts +32 -0
- package/dist/runner/runLoop.js +62 -0
- package/dist/runner/runLoop.js.map +1 -0
- package/dist/runner/runLoop.mjs +57 -0
- package/dist/runner/runLoop.mjs.map +1 -0
- package/dist/runner/sessionPersistence.d.ts +26 -0
- package/dist/runner/sessionPersistence.js +441 -0
- package/dist/runner/sessionPersistence.js.map +1 -0
- package/dist/runner/sessionPersistence.mjs +431 -0
- package/dist/runner/sessionPersistence.mjs.map +1 -0
- package/dist/runner/steps.d.ts +48 -0
- package/dist/runner/steps.js +40 -0
- package/dist/runner/steps.js.map +1 -0
- package/dist/runner/steps.mjs +36 -0
- package/dist/runner/steps.mjs.map +1 -0
- package/dist/runner/streaming.d.ts +9 -0
- package/dist/runner/streaming.js +74 -0
- package/dist/runner/streaming.js.map +1 -0
- package/dist/runner/streaming.mjs +65 -0
- package/dist/runner/streaming.mjs.map +1 -0
- package/dist/runner/toolExecution.d.ts +15 -0
- package/dist/runner/toolExecution.js +997 -0
- package/dist/runner/toolExecution.js.map +1 -0
- package/dist/runner/toolExecution.mjs +984 -0
- package/dist/runner/toolExecution.mjs.map +1 -0
- package/dist/runner/toolUseTracker.d.ts +9 -0
- package/dist/runner/toolUseTracker.js +34 -0
- package/dist/runner/toolUseTracker.js.map +1 -0
- package/dist/runner/toolUseTracker.mjs +30 -0
- package/dist/runner/toolUseTracker.mjs.map +1 -0
- package/dist/runner/tracing.d.ts +23 -0
- package/dist/runner/tracing.js +45 -0
- package/dist/runner/tracing.js.map +1 -0
- package/dist/runner/tracing.mjs +41 -0
- package/dist/runner/tracing.mjs.map +1 -0
- package/dist/runner/turnPreparation.d.ts +30 -0
- package/dist/runner/turnPreparation.js +80 -0
- package/dist/runner/turnPreparation.js.map +1 -0
- package/dist/runner/turnPreparation.mjs +74 -0
- package/dist/runner/turnPreparation.mjs.map +1 -0
- package/dist/runner/turnResolution.d.ts +3 -0
- package/dist/runner/turnResolution.js +531 -0
- package/dist/runner/turnResolution.js.map +1 -0
- package/dist/runner/turnResolution.mjs +526 -0
- package/dist/runner/turnResolution.mjs.map +1 -0
- package/dist/runner/types.d.ts +66 -0
- package/dist/runner/types.js +3 -0
- package/dist/runner/types.js.map +1 -0
- package/dist/runner/types.mjs +2 -0
- package/dist/runner/types.mjs.map +1 -0
- package/dist/shims/mcp-server/node.js +51 -6
- package/dist/shims/mcp-server/node.js.map +1 -1
- package/dist/shims/mcp-server/node.mjs +51 -6
- package/dist/shims/mcp-server/node.mjs.map +1 -1
- package/dist/tool.d.ts +28 -2
- package/dist/tool.js +7 -1
- package/dist/tool.js.map +1 -1
- package/dist/tool.mjs +8 -2
- package/dist/tool.mjs.map +1 -1
- package/dist/toolGuardrail.d.ts +101 -0
- package/dist/toolGuardrail.js +58 -0
- package/dist/toolGuardrail.js.map +1 -0
- package/dist/toolGuardrail.mjs +51 -0
- package/dist/toolGuardrail.mjs.map +1 -0
- package/dist/tracing/config.d.ts +3 -0
- package/dist/tracing/config.js +3 -0
- package/dist/tracing/config.js.map +1 -0
- package/dist/tracing/config.mjs +2 -0
- package/dist/tracing/config.mjs.map +1 -0
- package/dist/tracing/context.d.ts +2 -0
- package/dist/tracing/context.js +95 -24
- package/dist/tracing/context.js.map +1 -1
- package/dist/tracing/context.mjs +95 -24
- package/dist/tracing/context.mjs.map +1 -1
- package/dist/tracing/createSpans.d.ts +11 -11
- package/dist/tracing/index.d.ts +2 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/index.mjs.map +1 -1
- package/dist/tracing/provider.js +54 -4
- package/dist/tracing/provider.js.map +1 -1
- package/dist/tracing/provider.mjs +54 -4
- package/dist/tracing/provider.mjs.map +1 -1
- package/dist/tracing/spans.d.ts +2 -0
- package/dist/tracing/spans.js +6 -0
- package/dist/tracing/spans.js.map +1 -1
- package/dist/tracing/spans.mjs +6 -0
- package/dist/tracing/spans.mjs.map +1 -1
- package/dist/tracing/traces.d.ts +11 -1
- package/dist/tracing/traces.js +15 -2
- package/dist/tracing/traces.js.map +1 -1
- package/dist/tracing/traces.mjs +15 -2
- package/dist/tracing/traces.mjs.map +1 -1
- package/dist/types/protocol.d.ts +11 -0
- package/dist/types/protocol.js +1 -0
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/protocol.mjs +1 -0
- package/dist/types/protocol.mjs.map +1 -1
- package/dist/utils/binary.d.ts +6 -0
- package/dist/utils/binary.js +53 -0
- package/dist/utils/binary.js.map +1 -0
- package/dist/utils/binary.mjs +49 -0
- package/dist/utils/binary.mjs.map +1 -0
- package/dist/utils/toolGuardrails.d.ts +24 -0
- package/dist/utils/toolGuardrails.js +58 -0
- package/dist/utils/toolGuardrails.js.map +1 -0
- package/dist/utils/toolGuardrails.mjs +54 -0
- package/dist/utils/toolGuardrails.mjs.map +1 -0
- package/package.json +4 -3
- package/dist/runImplementation.d.ts +0 -161
- package/dist/runImplementation.js +0 -2054
- package/dist/runImplementation.js.map +0 -1
- package/dist/runImplementation.mjs +0 -2028
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tracing/config.ts"],"names":[],"mappings":""}
|
|
@@ -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.
|
package/dist/tracing/context.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
18
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
232
|
+
const currentContext = getActiveContext();
|
|
162
233
|
if (!currentContext) {
|
|
163
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing/context.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
7
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
221
|
+
const currentContext = getActiveContext();
|
|
151
222
|
if (!currentContext) {
|
|
152
|
-
|
|
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":"OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B;OAEvD,EAAE,sBAAsB,EAAE;OAE1B,EAAE,iBAAiB,EAAE;
|
|
1
|
+
{"version":3,"file":"context.mjs","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"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"}
|