@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,531 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nextStepSchema = void 0;
4
+ exports.resolveInterruptedTurn = resolveInterruptedTurn;
5
+ exports.resolveTurnAfterModelResponse = resolveTurnAfterModelResponse;
6
+ const zod_1 = require("zod");
7
+ const errors_1 = require("../errors.js");
8
+ const items_1 = require("../items.js");
9
+ const messages_1 = require("../utils/messages.js");
10
+ const tools_1 = require("../utils/tools.js");
11
+ const safeExecute_1 = require("../utils/safeExecute.js");
12
+ const context_1 = require("../tracing/context.js");
13
+ const steps_1 = require("./steps.js");
14
+ Object.defineProperty(exports, "nextStepSchema", { enumerable: true, get: function () { return steps_1.nextStepSchema; } });
15
+ const toolExecution_1 = require("./toolExecution.js");
16
+ const mcpApprovals_1 = require("./mcpApprovals.js");
17
+ const APPROVAL_ITEM_TYPES = [
18
+ 'function_call',
19
+ 'hosted_tool_call',
20
+ 'shell_call',
21
+ 'apply_patch_call',
22
+ ];
23
+ function isHostedMcpApprovalItem(item) {
24
+ return (item.rawItem.type === 'hosted_tool_call' &&
25
+ item.rawItem.providerData?.type === 'mcp_approval_request');
26
+ }
27
+ function resolveApprovalState(item, state) {
28
+ if (isHostedMcpApprovalItem(item)) {
29
+ return 'pending';
30
+ }
31
+ const rawItem = item.rawItem;
32
+ const toolName = item.toolName ??
33
+ ('name' in rawItem && typeof rawItem.name === 'string'
34
+ ? rawItem.name
35
+ : undefined);
36
+ const callId = 'callId' in rawItem && typeof rawItem.callId === 'string'
37
+ ? rawItem.callId
38
+ : 'id' in rawItem && typeof rawItem.id === 'string'
39
+ ? rawItem.id
40
+ : undefined;
41
+ if (!toolName || !callId) {
42
+ return 'pending';
43
+ }
44
+ const approval = state._context.isToolApproved({ toolName, callId });
45
+ if (approval === true) {
46
+ return 'approved';
47
+ }
48
+ if (approval === false) {
49
+ return 'rejected';
50
+ }
51
+ return 'pending';
52
+ }
53
+ function isApprovalItemLike(value) {
54
+ if (!value || typeof value !== 'object') {
55
+ return false;
56
+ }
57
+ if (!('rawItem' in value)) {
58
+ return false;
59
+ }
60
+ const rawItem = value.rawItem;
61
+ if (!rawItem || typeof rawItem !== 'object') {
62
+ return false;
63
+ }
64
+ const itemType = rawItem.type;
65
+ return APPROVAL_ITEM_TYPES.includes(itemType);
66
+ }
67
+ function getApprovalIdentity(approval) {
68
+ const rawItem = approval.rawItem;
69
+ if (!rawItem) {
70
+ return undefined;
71
+ }
72
+ if (rawItem.type === 'function_call' && rawItem.callId) {
73
+ return `function_call:${rawItem.callId}`;
74
+ }
75
+ if ('callId' in rawItem && rawItem.callId) {
76
+ return `${rawItem.type}:${rawItem.callId}`;
77
+ }
78
+ const id = 'id' in rawItem ? rawItem.id : undefined;
79
+ if (id) {
80
+ return `${rawItem.type}:${id}`;
81
+ }
82
+ const providerData = typeof rawItem.providerData === 'object' && rawItem.providerData
83
+ ? rawItem.providerData
84
+ : undefined;
85
+ if (providerData?.id) {
86
+ return `${rawItem.type}:provider:${providerData.id}`;
87
+ }
88
+ const agentName = 'agent' in approval && approval.agent ? approval.agent.name : '';
89
+ try {
90
+ return `${agentName}:${rawItem.type}:${JSON.stringify(rawItem)}`;
91
+ }
92
+ catch {
93
+ return `${agentName}:${rawItem.type}`;
94
+ }
95
+ }
96
+ function buildAppendContext(existingItems) {
97
+ const seenItems = new Set(existingItems);
98
+ const seenApprovalIdentities = new Set();
99
+ for (const item of existingItems) {
100
+ if (item instanceof items_1.RunToolApprovalItem) {
101
+ const identity = getApprovalIdentity(item);
102
+ if (identity) {
103
+ seenApprovalIdentities.add(identity);
104
+ }
105
+ }
106
+ }
107
+ return { seenItems, seenApprovalIdentities };
108
+ }
109
+ function appendRunItemIfNew(item, target, context) {
110
+ if (context.seenItems.has(item)) {
111
+ return;
112
+ }
113
+ if (item instanceof items_1.RunToolApprovalItem) {
114
+ const identity = getApprovalIdentity(item);
115
+ if (identity) {
116
+ if (context.seenApprovalIdentities.has(identity)) {
117
+ return;
118
+ }
119
+ context.seenApprovalIdentities.add(identity);
120
+ }
121
+ }
122
+ context.seenItems.add(item);
123
+ target.push(item);
124
+ }
125
+ function buildApprovedCallIdSet(items, type) {
126
+ const callIds = new Set();
127
+ for (const item of items) {
128
+ if (!(item instanceof items_1.RunToolApprovalItem)) {
129
+ continue;
130
+ }
131
+ const rawItem = item.rawItem;
132
+ if (!rawItem || rawItem.type !== type) {
133
+ continue;
134
+ }
135
+ if ('callId' in rawItem && rawItem.callId) {
136
+ callIds.add(rawItem.callId);
137
+ }
138
+ else if ('id' in rawItem && rawItem.id) {
139
+ callIds.add(rawItem.id);
140
+ }
141
+ }
142
+ return callIds;
143
+ }
144
+ function collectCompletedCallIds(items, type) {
145
+ const completed = new Set();
146
+ for (const item of items) {
147
+ const rawItem = item.rawItem;
148
+ if (!rawItem || typeof rawItem !== 'object') {
149
+ continue;
150
+ }
151
+ if (rawItem.type !== type) {
152
+ continue;
153
+ }
154
+ const callId = rawItem.callId;
155
+ if (typeof callId === 'string') {
156
+ completed.add(callId);
157
+ }
158
+ }
159
+ return completed;
160
+ }
161
+ function filterActionsByApproval(preStepItems, actions, type) {
162
+ const allowedCallIds = buildApprovedCallIdSet(preStepItems, type);
163
+ if (allowedCallIds.size === 0) {
164
+ return [];
165
+ }
166
+ return actions.filter((action) => typeof action.toolCall.callId === 'string' &&
167
+ allowedCallIds.has(action.toolCall.callId));
168
+ }
169
+ function filterPendingActions(actions, options) {
170
+ return actions.filter((action) => {
171
+ const callId = action.toolCall.callId;
172
+ const hasCallId = typeof callId === 'string';
173
+ if (options.allowedCallIds && options.allowedCallIds.size > 0) {
174
+ if (!hasCallId || !options.allowedCallIds.has(callId)) {
175
+ return false;
176
+ }
177
+ }
178
+ if (hasCallId && options.completedCallIds.has(callId)) {
179
+ return false;
180
+ }
181
+ return true;
182
+ });
183
+ }
184
+ function truncateForDeveloper(message, maxLength = 160) {
185
+ const trimmed = message.trim();
186
+ if (!trimmed) {
187
+ return 'Schema validation failed.';
188
+ }
189
+ if (trimmed.length <= maxLength) {
190
+ return trimmed;
191
+ }
192
+ return `${trimmed.slice(0, maxLength - 3)}...`;
193
+ }
194
+ function formatFinalOutputTypeError(error) {
195
+ // Surface structured output validation hints without echoing potentially large or sensitive payloads.
196
+ try {
197
+ if (error instanceof zod_1.z.ZodError) {
198
+ const issue = error.issues[0];
199
+ if (issue) {
200
+ const issuePathParts = Array.isArray(issue.path) ? issue.path : [];
201
+ const issuePath = issuePathParts.length > 0
202
+ ? issuePathParts.map((part) => String(part)).join('.')
203
+ : '(root)';
204
+ const message = truncateForDeveloper(issue.message ?? '');
205
+ return `Invalid output type: final assistant output failed schema validation at "${issuePath}" (${message}).`;
206
+ }
207
+ return 'Invalid output type: final assistant output failed schema validation.';
208
+ }
209
+ if (error instanceof Error && error.message) {
210
+ return `Invalid output type: ${truncateForDeveloper(error.message)}`;
211
+ }
212
+ }
213
+ catch {
214
+ // Swallow formatting errors so we can return a generic message below.
215
+ }
216
+ return 'Invalid output type: final assistant output did not match the expected schema.';
217
+ }
218
+ /**
219
+ * @internal
220
+ * Continues a turn that was previously interrupted waiting for tool approval. Executes the now
221
+ * approved tools and returns the resulting step transition.
222
+ */
223
+ async function resolveInterruptedTurn(agent, originalInput, originalPreStepItems, newResponse, processedResponse, runner, state) {
224
+ // call_ids for function tools
225
+ const functionCallIds = originalPreStepItems
226
+ .filter((item) => item instanceof items_1.RunToolApprovalItem &&
227
+ 'callId' in item.rawItem &&
228
+ item.rawItem.type === 'function_call')
229
+ .map((item) => item.rawItem.callId);
230
+ const completedFunctionCallIds = collectCompletedCallIds(originalPreStepItems, 'function_call_result');
231
+ const completedShellCallIds = collectCompletedCallIds(originalPreStepItems, 'shell_call_output');
232
+ const completedApplyPatchCallIds = collectCompletedCallIds(originalPreStepItems, 'apply_patch_call_output');
233
+ // We already persisted the turn once when the approval interrupt was raised, so the
234
+ // counter reflects the approval items as "flushed". When we resume the same turn we need
235
+ // to rewind it so the eventual tool output for this call is still written to the session.
236
+ const pendingApprovalItems = state
237
+ .getInterruptions()
238
+ .filter(isApprovalItemLike);
239
+ const pendingApprovalIdentities = new Set();
240
+ for (const approval of pendingApprovalItems) {
241
+ if (!(approval instanceof items_1.RunToolApprovalItem)) {
242
+ continue;
243
+ }
244
+ if (isHostedMcpApprovalItem(approval)) {
245
+ continue;
246
+ }
247
+ const rawItem = approval.rawItem;
248
+ if (rawItem.type === 'function_call' &&
249
+ rawItem.callId &&
250
+ completedFunctionCallIds.has(rawItem.callId)) {
251
+ continue;
252
+ }
253
+ if (rawItem.type === 'shell_call' &&
254
+ rawItem.callId &&
255
+ completedShellCallIds.has(rawItem.callId)) {
256
+ continue;
257
+ }
258
+ if (rawItem.type === 'apply_patch_call' &&
259
+ rawItem.callId &&
260
+ completedApplyPatchCallIds.has(rawItem.callId)) {
261
+ continue;
262
+ }
263
+ const identity = getApprovalIdentity(approval);
264
+ if (identity) {
265
+ if (resolveApprovalState(approval, state) === 'pending') {
266
+ pendingApprovalIdentities.add(identity);
267
+ }
268
+ }
269
+ }
270
+ // Run function tools that require approval after they get their approval results
271
+ const functionToolRuns = processedResponse.functions.filter((run) => {
272
+ const callId = run.toolCall.callId;
273
+ if (!functionCallIds.includes(callId)) {
274
+ return false;
275
+ }
276
+ return !completedFunctionCallIds.has(callId);
277
+ });
278
+ const shellRuns = filterPendingActions(filterActionsByApproval(originalPreStepItems, processedResponse.shellActions, 'shell_call'), {
279
+ completedCallIds: completedShellCallIds,
280
+ });
281
+ const pendingComputerActions = filterPendingActions(processedResponse.computerActions, {
282
+ completedCallIds: collectCompletedCallIds(originalPreStepItems, 'computer_call_result'),
283
+ });
284
+ const applyPatchRuns = filterPendingActions(filterActionsByApproval(originalPreStepItems, processedResponse.applyPatchActions, 'apply_patch_call'), {
285
+ completedCallIds: completedApplyPatchCallIds,
286
+ });
287
+ const functionResults = await (0, toolExecution_1.executeFunctionToolCalls)(agent, functionToolRuns, runner, state);
288
+ // There is no built-in HITL approval surface for computer tools today, so every pending action
289
+ // is executed immediately when the turn resumes.
290
+ const computerResults = pendingComputerActions.length > 0
291
+ ? await (0, toolExecution_1.executeComputerActions)(agent, pendingComputerActions, runner, state._context)
292
+ : [];
293
+ const shellResults = shellRuns.length > 0
294
+ ? await (0, toolExecution_1.executeShellActions)(agent, shellRuns, runner, state._context)
295
+ : [];
296
+ const applyPatchResults = applyPatchRuns.length > 0
297
+ ? await (0, toolExecution_1.executeApplyPatchOperations)(agent, applyPatchRuns, runner, state._context)
298
+ : [];
299
+ const newItems = [];
300
+ const appendContext = buildAppendContext(originalPreStepItems);
301
+ const appendIfNew = (item) => appendRunItemIfNew(item, newItems, appendContext);
302
+ for (const result of functionResults) {
303
+ appendIfNew(result.runItem);
304
+ }
305
+ for (const result of computerResults) {
306
+ appendIfNew(result);
307
+ }
308
+ for (const result of shellResults) {
309
+ appendIfNew(result);
310
+ }
311
+ for (const result of applyPatchResults) {
312
+ appendIfNew(result);
313
+ }
314
+ const additionalInterruptions = (0, toolExecution_1.collectInterruptions)([], [...shellResults, ...applyPatchResults]);
315
+ const hostedMcpApprovals = await (0, mcpApprovals_1.handleHostedMcpApprovals)({
316
+ requests: processedResponse.mcpApprovalRequests,
317
+ agent,
318
+ state,
319
+ functionResults,
320
+ appendIfNew,
321
+ resolveApproval: (rawItem) => {
322
+ const providerData = rawItem.providerData;
323
+ const approvalRequestId = rawItem.id ?? providerData?.id;
324
+ if (!approvalRequestId) {
325
+ return undefined;
326
+ }
327
+ return state._context.isToolApproved({
328
+ toolName: rawItem.name,
329
+ callId: approvalRequestId,
330
+ });
331
+ },
332
+ });
333
+ // Server-managed conversations rely on preStepItems to re-surface pending approvals.
334
+ // Keep unresolved hosted MCP approvals in place so HITL flows still have something to approve next turn.
335
+ // Drop resolved approval placeholders so they are not replayed on the next turn, but keep
336
+ // pending approvals in place to signal the outstanding work to the UI and session store.
337
+ const preStepItems = originalPreStepItems.filter((item) => {
338
+ if (!(item instanceof items_1.RunToolApprovalItem)) {
339
+ return true;
340
+ }
341
+ if (isHostedMcpApprovalItem(item)) {
342
+ if (hostedMcpApprovals.pendingApprovals.has(item)) {
343
+ return true;
344
+ }
345
+ const approvalRequestId = item.rawItem.id ??
346
+ item.rawItem.providerData?.id;
347
+ if (approvalRequestId) {
348
+ return hostedMcpApprovals.pendingApprovalIds.has(approvalRequestId);
349
+ }
350
+ return false;
351
+ }
352
+ // Preserve all other approval items so resumptions can continue to reference the
353
+ // original approval requests (e.g., function/shell/apply_patch) ONLY while they are still pending.
354
+ const identity = getApprovalIdentity(item);
355
+ if (!identity) {
356
+ return true;
357
+ }
358
+ return pendingApprovalIdentities.has(identity);
359
+ });
360
+ const keptApprovalItems = new Set();
361
+ for (const item of preStepItems) {
362
+ if (item instanceof items_1.RunToolApprovalItem) {
363
+ keptApprovalItems.add(item);
364
+ }
365
+ }
366
+ let removedApprovalCount = 0;
367
+ for (const item of originalPreStepItems) {
368
+ if (item instanceof items_1.RunToolApprovalItem && !keptApprovalItems.has(item)) {
369
+ removedApprovalCount++;
370
+ }
371
+ }
372
+ if (removedApprovalCount > 0) {
373
+ // Persisting the approval request already advanced the counter once, so undo the increment
374
+ // to make sure we write the final tool output back to the session when the turn resumes.
375
+ state.rewindTurnPersistence(removedApprovalCount);
376
+ }
377
+ const completedStep = await maybeCompleteTurnFromToolResults({
378
+ agent,
379
+ runner,
380
+ state,
381
+ functionResults,
382
+ originalInput,
383
+ newResponse,
384
+ preStepItems,
385
+ newItems,
386
+ additionalInterruptions,
387
+ });
388
+ if (completedStep) {
389
+ return completedStep;
390
+ }
391
+ // we only ran new tools and side effects. We need to run the rest of the agent
392
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, { type: 'next_step_run_again' });
393
+ }
394
+ /**
395
+ * @internal
396
+ * Executes every follow-up action the model requested (function tools, computer actions, MCP flows),
397
+ * appends their outputs to the run history, and determines the next step for the agent loop.
398
+ */
399
+ async function resolveTurnAfterModelResponse(agent, originalInput, originalPreStepItems, newResponse, processedResponse, runner, state) {
400
+ // Reuse the same array reference so we can compare object identity when deciding whether to
401
+ // append new items, ensuring we never double-stream existing RunItems.
402
+ const preStepItems = originalPreStepItems;
403
+ const newItems = [];
404
+ const appendContext = buildAppendContext(originalPreStepItems);
405
+ const appendIfNew = (item) => appendRunItemIfNew(item, newItems, appendContext);
406
+ for (const item of processedResponse.newItems) {
407
+ appendIfNew(item);
408
+ }
409
+ // Run function tools and computer actions in parallel; neither depends on the other's side effects.
410
+ const [functionResults, computerResults, shellResults, applyPatchResults] = await Promise.all([
411
+ (0, toolExecution_1.executeFunctionToolCalls)(agent, processedResponse.functions, runner, state),
412
+ (0, toolExecution_1.executeComputerActions)(agent, processedResponse.computerActions, runner, state._context),
413
+ (0, toolExecution_1.executeShellActions)(agent, processedResponse.shellActions, runner, state._context),
414
+ (0, toolExecution_1.executeApplyPatchOperations)(agent, processedResponse.applyPatchActions, runner, state._context),
415
+ ]);
416
+ for (const result of functionResults) {
417
+ appendIfNew(result.runItem);
418
+ }
419
+ for (const item of computerResults) {
420
+ appendIfNew(item);
421
+ }
422
+ for (const item of shellResults) {
423
+ appendIfNew(item);
424
+ }
425
+ for (const item of applyPatchResults) {
426
+ appendIfNew(item);
427
+ }
428
+ const additionalInterruptions = (0, toolExecution_1.collectInterruptions)([], [...shellResults, ...applyPatchResults]);
429
+ if (processedResponse.mcpApprovalRequests.length > 0) {
430
+ await (0, mcpApprovals_1.handleHostedMcpApprovals)({
431
+ requests: processedResponse.mcpApprovalRequests,
432
+ agent,
433
+ state,
434
+ functionResults,
435
+ appendIfNew,
436
+ resolveApproval: (rawItem) => {
437
+ const providerData = rawItem.providerData;
438
+ const approvalRequestId = rawItem.id ?? providerData?.id;
439
+ if (!approvalRequestId) {
440
+ return undefined;
441
+ }
442
+ return state._context.isToolApproved({
443
+ toolName: rawItem.name,
444
+ callId: approvalRequestId,
445
+ });
446
+ },
447
+ });
448
+ }
449
+ // process handoffs
450
+ if (processedResponse.handoffs.length > 0) {
451
+ return await (0, toolExecution_1.executeHandoffCalls)(agent, originalInput, preStepItems, newItems, newResponse, processedResponse.handoffs, runner, state._context);
452
+ }
453
+ const completedStep = await maybeCompleteTurnFromToolResults({
454
+ agent,
455
+ runner,
456
+ state,
457
+ functionResults,
458
+ originalInput,
459
+ newResponse,
460
+ preStepItems,
461
+ newItems,
462
+ additionalInterruptions,
463
+ });
464
+ if (completedStep) {
465
+ return completedStep;
466
+ }
467
+ // If the model issued any tool calls or handoffs in this turn,
468
+ // we must NOT treat any assistant message in the same turn as the final output.
469
+ // We should run the loop again so the model can see the tool results and respond.
470
+ if (processedResponse.hasToolsOrApprovalsToRun()) {
471
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, { type: 'next_step_run_again' });
472
+ }
473
+ // No tool calls/actions in this turn; safe to consider a plain assistant message as final.
474
+ const messageItems = newItems.filter((item) => item instanceof items_1.RunMessageOutputItem);
475
+ // we will use the last content output as the final output
476
+ const potentialFinalOutput = messageItems.length > 0
477
+ ? (0, messages_1.getLastTextFromOutputMessage)(messageItems[messageItems.length - 1].rawItem)
478
+ : undefined;
479
+ // if there is no output we just run again
480
+ if (typeof potentialFinalOutput === 'undefined') {
481
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, { type: 'next_step_run_again' });
482
+ }
483
+ // Keep looping if any tool output placeholders still require an approval follow-up.
484
+ const hasPendingToolsOrApprovals = functionResults.some((result) => result.runItem instanceof items_1.RunToolApprovalItem) || additionalInterruptions.length > 0;
485
+ if (!hasPendingToolsOrApprovals) {
486
+ if (agent.outputType === 'text') {
487
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, {
488
+ type: 'next_step_final_output',
489
+ output: potentialFinalOutput,
490
+ });
491
+ }
492
+ if (agent.outputType !== 'text' && potentialFinalOutput) {
493
+ // Structured output schema => always leads to a final output if we have text.
494
+ const { parser } = (0, tools_1.getSchemaAndParserFromInputType)(agent.outputType, 'final_output');
495
+ const [error] = await (0, safeExecute_1.safeExecute)(() => parser(potentialFinalOutput));
496
+ if (error) {
497
+ const outputErrorMessage = formatFinalOutputTypeError(error);
498
+ (0, context_1.addErrorToCurrentSpan)({
499
+ message: outputErrorMessage,
500
+ data: {
501
+ error: String(error),
502
+ },
503
+ });
504
+ throw new errors_1.ModelBehaviorError(outputErrorMessage);
505
+ }
506
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, { type: 'next_step_final_output', output: potentialFinalOutput });
507
+ }
508
+ }
509
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, { type: 'next_step_run_again' });
510
+ }
511
+ // Consolidates the logic that determines whether tool results yielded a final answer,
512
+ // triggered an interruption, or require the agent loop to continue running.
513
+ async function maybeCompleteTurnFromToolResults({ agent, runner: _runner, state, functionResults, originalInput, newResponse, preStepItems, newItems, additionalInterruptions = [], }) {
514
+ const toolOutcome = await (0, toolExecution_1.checkForFinalOutputFromTools)(agent, functionResults, state, additionalInterruptions);
515
+ if (toolOutcome.isFinalOutput) {
516
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, {
517
+ type: 'next_step_final_output',
518
+ output: toolOutcome.finalOutput,
519
+ });
520
+ }
521
+ if (toolOutcome.isInterrupted) {
522
+ return new steps_1.SingleStepResult(originalInput, newResponse, preStepItems, newItems, {
523
+ type: 'next_step_interruption',
524
+ data: {
525
+ interruptions: toolOutcome.interruptions,
526
+ },
527
+ });
528
+ }
529
+ return null;
530
+ }
531
+ //# sourceMappingURL=turnResolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnResolution.js","sourceRoot":"","sources":["../../src/runner/turnResolution.ts"],"names":[],"mappings":"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"}