@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,275 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerConversationTracker = exports.getTurnInput = void 0;
4
+ exports.applyCallModelInputFilter = applyCallModelInputFilter;
5
+ const errors_1 = require("../errors.js");
6
+ const context_1 = require("../tracing/context.js");
7
+ const items_1 = require("./items.js");
8
+ var items_2 = require("./items.js");
9
+ Object.defineProperty(exports, "getTurnInput", { enumerable: true, get: function () { return items_2.getTurnInput; } });
10
+ /**
11
+ * Applies the optional callModelInputFilter and returns the filtered input alongside the original
12
+ * items so downstream tracking and session persistence stay in sync with what the model saw.
13
+ */
14
+ async function applyCallModelInputFilter(agent, callModelInputFilter, context, inputItems, systemInstructions) {
15
+ const cloneInputItems = (items, map) => items.map((item) => {
16
+ const cloned = structuredClone(item);
17
+ if (map && cloned && typeof cloned === 'object') {
18
+ map.set(cloned, item);
19
+ }
20
+ return cloned;
21
+ });
22
+ // Record the relationship between the cloned array passed to filters and the original inputs.
23
+ const cloneMap = new WeakMap();
24
+ const originalPool = (0, items_1.buildAgentInputPool)(inputItems);
25
+ const fallbackOriginals = [];
26
+ // Track any original object inputs so filtered replacements can still mark them as delivered.
27
+ for (const item of inputItems) {
28
+ if (item && typeof item === 'object') {
29
+ fallbackOriginals.push(item);
30
+ }
31
+ }
32
+ const removeFromFallback = (candidate) => {
33
+ if (!candidate || typeof candidate !== 'object') {
34
+ return;
35
+ }
36
+ const index = fallbackOriginals.findIndex((original) => original === candidate);
37
+ if (index !== -1) {
38
+ fallbackOriginals.splice(index, 1);
39
+ }
40
+ };
41
+ const takeFallbackOriginal = () => {
42
+ const next = fallbackOriginals.shift();
43
+ if (next) {
44
+ (0, items_1.removeAgentInputFromPool)(originalPool, next);
45
+ }
46
+ return next;
47
+ };
48
+ // Always create a deep copy so downstream mutations inside filters cannot affect
49
+ // the cached turn state.
50
+ const clonedBaseInput = cloneInputItems(inputItems, cloneMap);
51
+ const base = {
52
+ input: clonedBaseInput,
53
+ instructions: systemInstructions,
54
+ };
55
+ if (!callModelInputFilter) {
56
+ return {
57
+ modelInput: base,
58
+ sourceItems: [...inputItems],
59
+ persistedItems: [],
60
+ filterApplied: false,
61
+ };
62
+ }
63
+ try {
64
+ const result = await callModelInputFilter({
65
+ modelData: base,
66
+ agent,
67
+ context: context.context,
68
+ });
69
+ if (!result || !Array.isArray(result.input)) {
70
+ throw new errors_1.UserError('callModelInputFilter must return a ModelInputData object with an input array.');
71
+ }
72
+ // Preserve a pointer to the original object backing each filtered clone so downstream
73
+ // trackers can keep their bookkeeping consistent even after redaction.
74
+ const sourceItems = result.input.map((item) => {
75
+ if (!item || typeof item !== 'object') {
76
+ return undefined;
77
+ }
78
+ const original = cloneMap.get(item);
79
+ if (original) {
80
+ removeFromFallback(original);
81
+ (0, items_1.removeAgentInputFromPool)(originalPool, original);
82
+ return original;
83
+ }
84
+ const key = (0, items_1.getAgentInputItemKey)(item);
85
+ const matchedByContent = (0, items_1.takeAgentInputFromPool)(originalPool, key);
86
+ if (matchedByContent) {
87
+ removeFromFallback(matchedByContent);
88
+ return matchedByContent;
89
+ }
90
+ const fallback = takeFallbackOriginal();
91
+ if (fallback) {
92
+ return fallback;
93
+ }
94
+ return undefined;
95
+ });
96
+ const clonedFilteredInput = cloneInputItems(result.input);
97
+ return {
98
+ modelInput: {
99
+ input: clonedFilteredInput,
100
+ instructions: typeof result.instructions === 'undefined'
101
+ ? systemInstructions
102
+ : result.instructions,
103
+ },
104
+ sourceItems,
105
+ persistedItems: clonedFilteredInput.map((item) => structuredClone(item)),
106
+ filterApplied: true,
107
+ };
108
+ }
109
+ catch (error) {
110
+ (0, context_1.addErrorToCurrentSpan)({
111
+ message: 'Error in callModelInputFilter',
112
+ data: { error: String(error) },
113
+ });
114
+ throw error;
115
+ }
116
+ }
117
+ /**
118
+ * Tracks which items have already been sent to or received from the Responses API when the caller
119
+ * supplies `conversationId`/`previousResponseId`. This ensures we only send the delta each turn.
120
+ */
121
+ class ServerConversationTracker {
122
+ conversationId;
123
+ previousResponseId;
124
+ // Using this flag because WeakSet does not provide a way to check its size.
125
+ sentInitialInput = false;
126
+ // The items already sent to the model; using WeakSet for memory efficiency.
127
+ sentItems = new WeakSet();
128
+ // The items received from the server; using WeakSet for memory efficiency.
129
+ serverItems = new WeakSet();
130
+ // Track initial input items that have not yet been sent so they can be retried on later turns.
131
+ remainingInitialInput = null;
132
+ constructor({ conversationId, previousResponseId, }) {
133
+ this.conversationId = conversationId ?? undefined;
134
+ this.previousResponseId = previousResponseId ?? undefined;
135
+ }
136
+ /**
137
+ * Pre-populates tracker caches from an existing RunState when resuming server-managed runs.
138
+ */
139
+ primeFromState({ originalInput, generatedItems, modelResponses, }) {
140
+ if (this.sentInitialInput) {
141
+ return;
142
+ }
143
+ const originalItems = (0, items_1.toAgentInputList)(originalInput);
144
+ const hasResponses = modelResponses.length > 0;
145
+ const serverItemKeys = new Set();
146
+ for (const response of modelResponses) {
147
+ for (const item of response.output) {
148
+ if (item && typeof item === 'object') {
149
+ this.serverItems.add(item);
150
+ serverItemKeys.add((0, items_1.getAgentInputItemKey)(item));
151
+ }
152
+ }
153
+ }
154
+ if (hasResponses) {
155
+ for (const item of originalItems) {
156
+ if (item && typeof item === 'object') {
157
+ this.sentItems.add(item);
158
+ }
159
+ }
160
+ this.sentInitialInput = true;
161
+ this.remainingInitialInput = null;
162
+ }
163
+ const latestResponse = modelResponses[modelResponses.length - 1];
164
+ if (!this.conversationId && latestResponse?.responseId) {
165
+ this.previousResponseId = latestResponse.responseId;
166
+ }
167
+ if (hasResponses) {
168
+ for (const item of generatedItems) {
169
+ const rawItem = item.rawItem;
170
+ if (!rawItem || typeof rawItem !== 'object') {
171
+ continue;
172
+ }
173
+ const rawItemKey = (0, items_1.getAgentInputItemKey)(rawItem);
174
+ if (this.serverItems.has(rawItem) || serverItemKeys.has(rawItemKey)) {
175
+ this.sentItems.add(rawItem);
176
+ }
177
+ }
178
+ }
179
+ }
180
+ /**
181
+ * Records the raw items returned by the server so future delta calculations skip them.
182
+ * Also captures the latest response identifier to chain follow-up calls when possible.
183
+ */
184
+ trackServerItems(modelResponse) {
185
+ if (!modelResponse) {
186
+ return;
187
+ }
188
+ for (const item of modelResponse.output) {
189
+ if (item && typeof item === 'object') {
190
+ this.serverItems.add(item);
191
+ }
192
+ }
193
+ if (!this.conversationId && modelResponse.responseId) {
194
+ this.previousResponseId = modelResponse.responseId;
195
+ }
196
+ }
197
+ /**
198
+ * Returns the minimum set of items that still need to be delivered to the server for the
199
+ * current turn. This includes the original turn inputs (until acknowledged) plus any
200
+ * newly generated items that have not yet been echoed back by the API.
201
+ */
202
+ prepareInput(originalInput, generatedItems) {
203
+ const inputItems = [];
204
+ if (!this.sentInitialInput) {
205
+ const initialItems = (0, items_1.toAgentInputList)(originalInput);
206
+ // Preserve the full initial payload so a filter can drop items without losing their originals.
207
+ inputItems.push(...initialItems);
208
+ this.remainingInitialInput = initialItems.filter((item) => Boolean(item) && typeof item === 'object');
209
+ this.sentInitialInput = true;
210
+ }
211
+ else if (this.remainingInitialInput &&
212
+ this.remainingInitialInput.length > 0) {
213
+ // Re-queue prior initial items until the tracker confirms they were delivered to the API.
214
+ inputItems.push(...this.remainingInitialInput);
215
+ }
216
+ for (const item of generatedItems) {
217
+ if (item.type === 'tool_approval_item') {
218
+ continue;
219
+ }
220
+ const rawItem = item.rawItem;
221
+ if (!rawItem || typeof rawItem !== 'object') {
222
+ continue;
223
+ }
224
+ if (this.sentItems.has(rawItem) || this.serverItems.has(rawItem)) {
225
+ continue;
226
+ }
227
+ inputItems.push(rawItem);
228
+ }
229
+ return inputItems;
230
+ }
231
+ /**
232
+ * Marks the provided originals as delivered so future turns do not resend them and any
233
+ * pending initial inputs can be dropped once the server acknowledges receipt.
234
+ */
235
+ markInputAsSent(items, options) {
236
+ const delivered = new Set();
237
+ const dropRemainingInitialInput = options?.filterApplied ?? false;
238
+ const markFilteredItemsAsSent = options?.filterApplied && Boolean(options.allTurnItems);
239
+ this.addDeliveredItems(delivered, items);
240
+ const allTurnItems = options?.allTurnItems;
241
+ if (markFilteredItemsAsSent && allTurnItems) {
242
+ this.addDeliveredItems(delivered, allTurnItems);
243
+ }
244
+ this.updateRemainingInitialInput(delivered, Boolean(dropRemainingInitialInput));
245
+ }
246
+ addDeliveredItems(delivered, items) {
247
+ for (const item of items) {
248
+ if (!item || typeof item !== 'object' || delivered.has(item)) {
249
+ continue;
250
+ }
251
+ // Some inputs may be repeated in the filtered list; only mark unique originals once.
252
+ delivered.add(item);
253
+ this.sentItems.add(item);
254
+ }
255
+ }
256
+ updateRemainingInitialInput(delivered, dropRemainingInitialInput) {
257
+ if (!this.remainingInitialInput ||
258
+ this.remainingInitialInput.length === 0 ||
259
+ delivered.size === 0) {
260
+ if (dropRemainingInitialInput && this.remainingInitialInput) {
261
+ this.remainingInitialInput = null;
262
+ }
263
+ return;
264
+ }
265
+ this.remainingInitialInput = this.remainingInitialInput.filter((item) => !delivered.has(item));
266
+ if (this.remainingInitialInput.length === 0) {
267
+ this.remainingInitialInput = null;
268
+ }
269
+ else if (dropRemainingInitialInput) {
270
+ this.remainingInitialInput = null;
271
+ }
272
+ }
273
+ }
274
+ exports.ServerConversationTracker = ServerConversationTracker;
275
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/runner/conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ import { UserError } from "../errors.mjs";
2
+ import { addErrorToCurrentSpan } from "../tracing/context.mjs";
3
+ import { buildAgentInputPool, getAgentInputItemKey, removeAgentInputFromPool, takeAgentInputFromPool, toAgentInputList, } from "./items.mjs";
4
+ export { getTurnInput } from "./items.mjs";
5
+ /**
6
+ * Applies the optional callModelInputFilter and returns the filtered input alongside the original
7
+ * items so downstream tracking and session persistence stay in sync with what the model saw.
8
+ */
9
+ export async function applyCallModelInputFilter(agent, callModelInputFilter, context, inputItems, systemInstructions) {
10
+ const cloneInputItems = (items, map) => items.map((item) => {
11
+ const cloned = structuredClone(item);
12
+ if (map && cloned && typeof cloned === 'object') {
13
+ map.set(cloned, item);
14
+ }
15
+ return cloned;
16
+ });
17
+ // Record the relationship between the cloned array passed to filters and the original inputs.
18
+ const cloneMap = new WeakMap();
19
+ const originalPool = buildAgentInputPool(inputItems);
20
+ const fallbackOriginals = [];
21
+ // Track any original object inputs so filtered replacements can still mark them as delivered.
22
+ for (const item of inputItems) {
23
+ if (item && typeof item === 'object') {
24
+ fallbackOriginals.push(item);
25
+ }
26
+ }
27
+ const removeFromFallback = (candidate) => {
28
+ if (!candidate || typeof candidate !== 'object') {
29
+ return;
30
+ }
31
+ const index = fallbackOriginals.findIndex((original) => original === candidate);
32
+ if (index !== -1) {
33
+ fallbackOriginals.splice(index, 1);
34
+ }
35
+ };
36
+ const takeFallbackOriginal = () => {
37
+ const next = fallbackOriginals.shift();
38
+ if (next) {
39
+ removeAgentInputFromPool(originalPool, next);
40
+ }
41
+ return next;
42
+ };
43
+ // Always create a deep copy so downstream mutations inside filters cannot affect
44
+ // the cached turn state.
45
+ const clonedBaseInput = cloneInputItems(inputItems, cloneMap);
46
+ const base = {
47
+ input: clonedBaseInput,
48
+ instructions: systemInstructions,
49
+ };
50
+ if (!callModelInputFilter) {
51
+ return {
52
+ modelInput: base,
53
+ sourceItems: [...inputItems],
54
+ persistedItems: [],
55
+ filterApplied: false,
56
+ };
57
+ }
58
+ try {
59
+ const result = await callModelInputFilter({
60
+ modelData: base,
61
+ agent,
62
+ context: context.context,
63
+ });
64
+ if (!result || !Array.isArray(result.input)) {
65
+ throw new UserError('callModelInputFilter must return a ModelInputData object with an input array.');
66
+ }
67
+ // Preserve a pointer to the original object backing each filtered clone so downstream
68
+ // trackers can keep their bookkeeping consistent even after redaction.
69
+ const sourceItems = result.input.map((item) => {
70
+ if (!item || typeof item !== 'object') {
71
+ return undefined;
72
+ }
73
+ const original = cloneMap.get(item);
74
+ if (original) {
75
+ removeFromFallback(original);
76
+ removeAgentInputFromPool(originalPool, original);
77
+ return original;
78
+ }
79
+ const key = getAgentInputItemKey(item);
80
+ const matchedByContent = takeAgentInputFromPool(originalPool, key);
81
+ if (matchedByContent) {
82
+ removeFromFallback(matchedByContent);
83
+ return matchedByContent;
84
+ }
85
+ const fallback = takeFallbackOriginal();
86
+ if (fallback) {
87
+ return fallback;
88
+ }
89
+ return undefined;
90
+ });
91
+ const clonedFilteredInput = cloneInputItems(result.input);
92
+ return {
93
+ modelInput: {
94
+ input: clonedFilteredInput,
95
+ instructions: typeof result.instructions === 'undefined'
96
+ ? systemInstructions
97
+ : result.instructions,
98
+ },
99
+ sourceItems,
100
+ persistedItems: clonedFilteredInput.map((item) => structuredClone(item)),
101
+ filterApplied: true,
102
+ };
103
+ }
104
+ catch (error) {
105
+ addErrorToCurrentSpan({
106
+ message: 'Error in callModelInputFilter',
107
+ data: { error: String(error) },
108
+ });
109
+ throw error;
110
+ }
111
+ }
112
+ /**
113
+ * Tracks which items have already been sent to or received from the Responses API when the caller
114
+ * supplies `conversationId`/`previousResponseId`. This ensures we only send the delta each turn.
115
+ */
116
+ export class ServerConversationTracker {
117
+ conversationId;
118
+ previousResponseId;
119
+ // Using this flag because WeakSet does not provide a way to check its size.
120
+ sentInitialInput = false;
121
+ // The items already sent to the model; using WeakSet for memory efficiency.
122
+ sentItems = new WeakSet();
123
+ // The items received from the server; using WeakSet for memory efficiency.
124
+ serverItems = new WeakSet();
125
+ // Track initial input items that have not yet been sent so they can be retried on later turns.
126
+ remainingInitialInput = null;
127
+ constructor({ conversationId, previousResponseId, }) {
128
+ this.conversationId = conversationId ?? undefined;
129
+ this.previousResponseId = previousResponseId ?? undefined;
130
+ }
131
+ /**
132
+ * Pre-populates tracker caches from an existing RunState when resuming server-managed runs.
133
+ */
134
+ primeFromState({ originalInput, generatedItems, modelResponses, }) {
135
+ if (this.sentInitialInput) {
136
+ return;
137
+ }
138
+ const originalItems = toAgentInputList(originalInput);
139
+ const hasResponses = modelResponses.length > 0;
140
+ const serverItemKeys = new Set();
141
+ for (const response of modelResponses) {
142
+ for (const item of response.output) {
143
+ if (item && typeof item === 'object') {
144
+ this.serverItems.add(item);
145
+ serverItemKeys.add(getAgentInputItemKey(item));
146
+ }
147
+ }
148
+ }
149
+ if (hasResponses) {
150
+ for (const item of originalItems) {
151
+ if (item && typeof item === 'object') {
152
+ this.sentItems.add(item);
153
+ }
154
+ }
155
+ this.sentInitialInput = true;
156
+ this.remainingInitialInput = null;
157
+ }
158
+ const latestResponse = modelResponses[modelResponses.length - 1];
159
+ if (!this.conversationId && latestResponse?.responseId) {
160
+ this.previousResponseId = latestResponse.responseId;
161
+ }
162
+ if (hasResponses) {
163
+ for (const item of generatedItems) {
164
+ const rawItem = item.rawItem;
165
+ if (!rawItem || typeof rawItem !== 'object') {
166
+ continue;
167
+ }
168
+ const rawItemKey = getAgentInputItemKey(rawItem);
169
+ if (this.serverItems.has(rawItem) || serverItemKeys.has(rawItemKey)) {
170
+ this.sentItems.add(rawItem);
171
+ }
172
+ }
173
+ }
174
+ }
175
+ /**
176
+ * Records the raw items returned by the server so future delta calculations skip them.
177
+ * Also captures the latest response identifier to chain follow-up calls when possible.
178
+ */
179
+ trackServerItems(modelResponse) {
180
+ if (!modelResponse) {
181
+ return;
182
+ }
183
+ for (const item of modelResponse.output) {
184
+ if (item && typeof item === 'object') {
185
+ this.serverItems.add(item);
186
+ }
187
+ }
188
+ if (!this.conversationId && modelResponse.responseId) {
189
+ this.previousResponseId = modelResponse.responseId;
190
+ }
191
+ }
192
+ /**
193
+ * Returns the minimum set of items that still need to be delivered to the server for the
194
+ * current turn. This includes the original turn inputs (until acknowledged) plus any
195
+ * newly generated items that have not yet been echoed back by the API.
196
+ */
197
+ prepareInput(originalInput, generatedItems) {
198
+ const inputItems = [];
199
+ if (!this.sentInitialInput) {
200
+ const initialItems = toAgentInputList(originalInput);
201
+ // Preserve the full initial payload so a filter can drop items without losing their originals.
202
+ inputItems.push(...initialItems);
203
+ this.remainingInitialInput = initialItems.filter((item) => Boolean(item) && typeof item === 'object');
204
+ this.sentInitialInput = true;
205
+ }
206
+ else if (this.remainingInitialInput &&
207
+ this.remainingInitialInput.length > 0) {
208
+ // Re-queue prior initial items until the tracker confirms they were delivered to the API.
209
+ inputItems.push(...this.remainingInitialInput);
210
+ }
211
+ for (const item of generatedItems) {
212
+ if (item.type === 'tool_approval_item') {
213
+ continue;
214
+ }
215
+ const rawItem = item.rawItem;
216
+ if (!rawItem || typeof rawItem !== 'object') {
217
+ continue;
218
+ }
219
+ if (this.sentItems.has(rawItem) || this.serverItems.has(rawItem)) {
220
+ continue;
221
+ }
222
+ inputItems.push(rawItem);
223
+ }
224
+ return inputItems;
225
+ }
226
+ /**
227
+ * Marks the provided originals as delivered so future turns do not resend them and any
228
+ * pending initial inputs can be dropped once the server acknowledges receipt.
229
+ */
230
+ markInputAsSent(items, options) {
231
+ const delivered = new Set();
232
+ const dropRemainingInitialInput = options?.filterApplied ?? false;
233
+ const markFilteredItemsAsSent = options?.filterApplied && Boolean(options.allTurnItems);
234
+ this.addDeliveredItems(delivered, items);
235
+ const allTurnItems = options?.allTurnItems;
236
+ if (markFilteredItemsAsSent && allTurnItems) {
237
+ this.addDeliveredItems(delivered, allTurnItems);
238
+ }
239
+ this.updateRemainingInitialInput(delivered, Boolean(dropRemainingInitialInput));
240
+ }
241
+ addDeliveredItems(delivered, items) {
242
+ for (const item of items) {
243
+ if (!item || typeof item !== 'object' || delivered.has(item)) {
244
+ continue;
245
+ }
246
+ // Some inputs may be repeated in the filtered list; only mark unique originals once.
247
+ delivered.add(item);
248
+ this.sentItems.add(item);
249
+ }
250
+ }
251
+ updateRemainingInitialInput(delivered, dropRemainingInitialInput) {
252
+ if (!this.remainingInitialInput ||
253
+ this.remainingInitialInput.length === 0 ||
254
+ delivered.size === 0) {
255
+ if (dropRemainingInitialInput && this.remainingInitialInput) {
256
+ this.remainingInitialInput = null;
257
+ }
258
+ return;
259
+ }
260
+ this.remainingInitialInput = this.remainingInitialInput.filter((item) => !delivered.has(item));
261
+ if (this.remainingInitialInput.length === 0) {
262
+ this.remainingInitialInput = null;
263
+ }
264
+ else if (dropRemainingInitialInput) {
265
+ this.remainingInitialInput = null;
266
+ }
267
+ }
268
+ }
269
+ //# sourceMappingURL=conversation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.mjs","sourceRoot":"","sources":["../../src/runner/conversation.ts"],"names":[],"mappings":"OACO,EAAE,SAAS,EAAE;OAKb,EAAE,qBAAqB,EAAE;OACzB,EACL,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB;OAEM,EAAE,YAAY,EAAE;AAkCvB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAuC,EACvC,oBAA2D,EAC3D,OAA6B,EAC7B,UAA4B,EAC5B,kBAAsC;IAEtC,MAAM,eAAe,GAAG,CACtB,KAAuB,EACvB,GAAqC,EACrC,EAAE,CACF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAmB,CAAC;QACvD,IAAI,GAAG,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEL,8FAA8F;IAC9F,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA0B,CAAC;IACvD,MAAM,YAAY,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAqB,EAAE,CAAC;IAC/C,8FAA8F;IAC9F,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,MAAM,kBAAkB,GAAG,CAAC,SAAqC,EAAE,EAAE;QACnE,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,CACvC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CACrC,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,GAA+B,EAAE;QAC5D,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,IAAI,EAAE,CAAC;YACT,wBAAwB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,iFAAiF;IACjF,yBAAyB;IACzB,MAAM,eAAe,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,kBAAkB;KACjC,CAAC;IACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC;YAC5B,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;YACxC,SAAS,EAAE,IAAI;YACf,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;SACQ,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,SAAS,CACjB,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,sFAAsF;QACtF,uEAAuE;QACvE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAc,CAAC,CAAC;YAC9C,IAAI,QAAQ,EAAE,CAAC;gBACb,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC7B,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAsB,CAAC,CAAC;YACzD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,gBAAgB,EAAE,CAAC;gBACrB,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;gBACrC,OAAO,gBAAgB,CAAC;YAC1B,CAAC;YACD,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO;YACL,UAAU,EAAE;gBACV,KAAK,EAAE,mBAAmB;gBAC1B,YAAY,EACV,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW;oBACxC,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,MAAM,CAAC,YAAY;aAC1B;YACD,WAAW;YACX,cAAc,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACxE,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qBAAqB,CAAC;YACpB,OAAO,EAAE,+BAA+B;YACxC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;SAC/B,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAC7B,cAAc,CAAU;IACxB,kBAAkB,CAAU;IAEnC,4EAA4E;IACpE,gBAAgB,GAAG,KAAK,CAAC;IACjC,4EAA4E;IACpE,SAAS,GAAG,IAAI,OAAO,EAAU,CAAC;IAC1C,2EAA2E;IACnE,WAAW,GAAG,IAAI,OAAO,EAAU,CAAC;IAC5C,+FAA+F;IACvF,qBAAqB,GAA4B,IAAI,CAAC;IAE9D,YAAY,EACV,cAAc,EACd,kBAAkB,GAInB;QACC,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,SAAS,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,IAAI,SAAS,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,EACb,aAAa,EACb,cAAc,EACd,cAAc,GAKf;QACC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAE/C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACnC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3B,cAAc,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAsB,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,cAAc,EAAE,UAAU,EAAE,CAAC;YACvD,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC,UAAU,CAAC;QACtD,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBACD,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAyB,CAAC,CAAC;gBACnE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,aAAwC;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACxC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YACrD,IAAI,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY,CACV,aAAwC,EACxC,cAAyB;QAEzB,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACrD,+FAA+F;YAC/F,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAC9C,CAAC,IAAI,EAA0B,EAAE,CAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,CAC5C,CAAC;YACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,IACL,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EACrC,CAAC;YACD,0FAA0F;YAC1F,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACvC,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjE,SAAS;YACX,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,OAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,KAAqC,EACrC,OAAsE;QAEtE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,MAAM,yBAAyB,GAAG,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;QAClE,MAAM,uBAAuB,GAC3B,OAAO,EAAE,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE1D,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;QAC3C,IAAI,uBAAuB,IAAI,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,2BAA2B,CAC9B,SAAS,EACT,OAAO,CAAC,yBAAyB,CAAC,CACnC,CAAC;IACJ,CAAC;IAEO,iBAAiB,CACvB,SAA8B,EAC9B,KAAqC;QAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,SAAS;YACX,CAAC;YACD,qFAAqF;YACrF,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,2BAA2B,CACjC,SAA8B,EAC9B,yBAAkC;QAElC,IACE,CAAC,IAAI,CAAC,qBAAqB;YAC3B,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC;YACvC,SAAS,CAAC,IAAI,KAAK,CAAC,EACpB,CAAC;YACD,IAAI,yBAAyB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC5D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACpC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAC5D,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAC/B,CAAC;QACF,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;aAAM,IAAI,yBAAyB,EAAE,CAAC;YACrC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { Agent, AgentOutputType } from '../agent';
2
+ import { InputGuardrailDefinition, InputGuardrailResult, OutputGuardrailDefinition, OutputGuardrailMetadata } from '../guardrail';
3
+ import { RunState } from '../runState';
4
+ export type GuardrailTracker = {
5
+ readonly pending: boolean;
6
+ readonly failed: boolean;
7
+ readonly error: unknown;
8
+ markPending: () => void;
9
+ setPromise: (promise?: Promise<InputGuardrailResult[]>) => void;
10
+ setError: (err: unknown) => void;
11
+ throwIfError: () => void;
12
+ awaitCompletion: (options?: {
13
+ suppressErrors?: boolean;
14
+ }) => Promise<void>;
15
+ };
16
+ export declare const createGuardrailTracker: () => GuardrailTracker;
17
+ export declare function buildInputGuardrailDefinitions<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>, runnerGuardrails: InputGuardrailDefinition[]): InputGuardrailDefinition[];
18
+ export declare function splitInputGuardrails(guardrails: InputGuardrailDefinition[]): {
19
+ blocking: InputGuardrailDefinition[];
20
+ parallel: InputGuardrailDefinition[];
21
+ };
22
+ export declare function runInputGuardrails<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>, guardrails: InputGuardrailDefinition[]): Promise<InputGuardrailResult[]>;
23
+ export declare function runOutputGuardrails<TContext, TOutput extends AgentOutputType, TAgent extends Agent<TContext, TOutput>>(state: RunState<TContext, TAgent>, runnerOutputGuardrails: OutputGuardrailDefinition<OutputGuardrailMetadata, AgentOutputType<unknown>>[], output: string): Promise<void>;