@openai/agents-core 0.3.6 → 0.3.8
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 +38 -1
- package/dist/errors.js.map +1 -1
- package/dist/errors.mjs +34 -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 +76 -30
- package/dist/shims/mcp-server/node.js.map +1 -1
- package/dist/shims/mcp-server/node.mjs +76 -30
- 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,63 @@
|
|
|
1
|
+
import { RunToolCallItem } from "../items.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Normalizes hosted MCP approval flows so streaming and non-streaming loops share identical
|
|
4
|
+
* behavior. Handles synchronous approvals, previously decided approvals, and pending approvals.
|
|
5
|
+
*/
|
|
6
|
+
export async function handleHostedMcpApprovals({ requests, agent, state, functionResults, appendIfNew, resolveApproval, }) {
|
|
7
|
+
const pendingApprovals = new Set();
|
|
8
|
+
const pendingApprovalIds = new Set();
|
|
9
|
+
for (const approvalRequest of requests) {
|
|
10
|
+
const rawItem = approvalRequest.requestItem.rawItem;
|
|
11
|
+
if (rawItem.type !== 'hosted_tool_call') {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
const providerData = rawItem.providerData;
|
|
15
|
+
if (!providerData) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const toolData = approvalRequest.mcpTool.providerData;
|
|
19
|
+
const approvalRequestId = rawItem.id ?? providerData.id;
|
|
20
|
+
if (toolData?.on_approval) {
|
|
21
|
+
const approvalResult = await toolData.on_approval(state._context, approvalRequest.requestItem);
|
|
22
|
+
const approvalResponseData = {
|
|
23
|
+
approve: approvalResult.approve,
|
|
24
|
+
approval_request_id: approvalRequestId ?? providerData.id,
|
|
25
|
+
reason: approvalResult.reason,
|
|
26
|
+
};
|
|
27
|
+
appendIfNew(new RunToolCallItem({
|
|
28
|
+
type: 'hosted_tool_call',
|
|
29
|
+
name: 'mcp_approval_response',
|
|
30
|
+
providerData: approvalResponseData,
|
|
31
|
+
}, agent));
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const approvalDecision = typeof resolveApproval === 'function'
|
|
35
|
+
? resolveApproval(rawItem)
|
|
36
|
+
: undefined;
|
|
37
|
+
if (typeof approvalDecision !== 'undefined' && approvalRequestId) {
|
|
38
|
+
const approvalResponseData = {
|
|
39
|
+
approve: approvalDecision,
|
|
40
|
+
approval_request_id: approvalRequestId,
|
|
41
|
+
reason: undefined,
|
|
42
|
+
};
|
|
43
|
+
appendIfNew(new RunToolCallItem({
|
|
44
|
+
type: 'hosted_tool_call',
|
|
45
|
+
name: 'mcp_approval_response',
|
|
46
|
+
providerData: approvalResponseData,
|
|
47
|
+
}, agent));
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
functionResults.push({
|
|
51
|
+
type: 'hosted_mcp_tool_approval',
|
|
52
|
+
tool: approvalRequest.mcpTool,
|
|
53
|
+
runItem: approvalRequest.requestItem,
|
|
54
|
+
});
|
|
55
|
+
appendIfNew(approvalRequest.requestItem);
|
|
56
|
+
pendingApprovals.add(approvalRequest.requestItem);
|
|
57
|
+
if (approvalRequestId) {
|
|
58
|
+
pendingApprovalIds.add(approvalRequestId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { pendingApprovals, pendingApprovalIds };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=mcpApprovals.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpApprovals.mjs","sourceRoot":"","sources":["../../src/runner/mcpApprovals.ts"],"names":[],"mappings":"OACO,EAAgC,eAAe,EAAE;AAyBxD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAW,EACvD,QAAQ,EACR,KAAK,EACL,KAAK,EACL,eAAe,EACf,WAAW,EACX,eAAe,GAC0B;IACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE7C,KAAK,MAAM,eAAe,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC;QACpD,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAEhB,CAAC;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,YAE5B,CAAC;QACd,MAAM,iBAAiB,GAAG,OAAO,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC;QAExD,IAAI,QAAQ,EAAE,WAAW,EAAE,CAAC;YAC1B,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,WAAW,CAC/C,KAAK,CAAC,QAAQ,EACd,eAAe,CAAC,WAAW,CAC5B,CAAC;YACF,MAAM,oBAAoB,GAA2C;gBACnE,OAAO,EAAE,cAAc,CAAC,OAAO;gBAC/B,mBAAmB,EAAE,iBAAiB,IAAI,YAAY,CAAC,EAAE;gBACzD,MAAM,EAAE,cAAc,CAAC,MAAM;aAC9B,CAAC;YACF,WAAW,CACT,IAAI,eAAe,CACjB;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,uBAAuB;gBAC7B,YAAY,EAAE,oBAAoB;aACnC,EACD,KAA+B,CAChC,CACF,CAAC;YACF,SAAS;QACX,CAAC;QAED,MAAM,gBAAgB,GACpB,OAAO,eAAe,KAAK,UAAU;YACnC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC;YAC1B,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,iBAAiB,EAAE,CAAC;YACjE,MAAM,oBAAoB,GAA2C;gBACnE,OAAO,EAAE,gBAAgB;gBACzB,mBAAmB,EAAE,iBAAiB;gBACtC,MAAM,EAAE,SAAS;aAClB,CAAC;YACF,WAAW,CACT,IAAI,eAAe,CACjB;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,uBAAuB;gBAC7B,YAAY,EAAE,oBAAoB;aACnC,EACD,KAA+B,CAChC,CACF,CAAC;YACF,SAAS;QACX,CAAC;QAED,eAAe,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,eAAe,CAAC,OAAO;YAC7B,OAAO,EAAE,eAAe,CAAC,WAAW;SACrC,CAAC,CAAC;QACH,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAEzC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,iBAAiB,EAAE,CAAC;YACtB,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Agent } from '../agent';
|
|
2
|
+
import { Handoff } from '../handoff';
|
|
3
|
+
import { ModelResponse } from '../model';
|
|
4
|
+
import { Tool } from '../tool';
|
|
5
|
+
import type { ProcessedResponse } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Walks a raw model response and classifies each item so the runner can schedule follow-up work.
|
|
8
|
+
* Returns both the serializable RunItems (for history/streaming) and the actionable tool metadata.
|
|
9
|
+
*/
|
|
10
|
+
export declare function processModelResponse<TContext>(modelResponse: ModelResponse, agent: Agent<any, any>, tools: Tool<TContext>[], handoffs: Handoff<any, any>[]): ProcessedResponse<TContext>;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processModelResponse = processModelResponse;
|
|
4
|
+
const errors_1 = require("../errors.js");
|
|
5
|
+
const items_1 = require("../items.js");
|
|
6
|
+
const context_1 = require("../tracing/context.js");
|
|
7
|
+
function ensureToolAvailable(tool, message, data) {
|
|
8
|
+
if (!tool) {
|
|
9
|
+
(0, context_1.addErrorToCurrentSpan)({
|
|
10
|
+
message,
|
|
11
|
+
data,
|
|
12
|
+
});
|
|
13
|
+
throw new errors_1.ModelBehaviorError(message);
|
|
14
|
+
}
|
|
15
|
+
return tool;
|
|
16
|
+
}
|
|
17
|
+
function handleToolCallAction({ output, tool, agent, errorMessage, errorData, items, toolsUsed, actions, buildAction, }) {
|
|
18
|
+
const resolvedTool = ensureToolAvailable(tool, errorMessage, errorData);
|
|
19
|
+
items.push(new items_1.RunToolCallItem(output, agent));
|
|
20
|
+
toolsUsed.push(resolvedTool.name);
|
|
21
|
+
actions.push(buildAction(resolvedTool));
|
|
22
|
+
}
|
|
23
|
+
function resolveFunctionOrHandoff(toolCall, handoffMap, functionMap, agent) {
|
|
24
|
+
const handoff = handoffMap.get(toolCall.name);
|
|
25
|
+
if (handoff) {
|
|
26
|
+
return { type: 'handoff', handoff };
|
|
27
|
+
}
|
|
28
|
+
const functionTool = functionMap.get(toolCall.name);
|
|
29
|
+
if (!functionTool) {
|
|
30
|
+
const message = `Tool ${toolCall.name} not found in agent ${agent.name}.`;
|
|
31
|
+
(0, context_1.addErrorToCurrentSpan)({
|
|
32
|
+
message,
|
|
33
|
+
data: {
|
|
34
|
+
tool_name: toolCall.name,
|
|
35
|
+
agent_name: agent.name,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
throw new errors_1.ModelBehaviorError(message);
|
|
39
|
+
}
|
|
40
|
+
return { type: 'function', tool: functionTool };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Walks a raw model response and classifies each item so the runner can schedule follow-up work.
|
|
44
|
+
* Returns both the serializable RunItems (for history/streaming) and the actionable tool metadata.
|
|
45
|
+
*/
|
|
46
|
+
function processModelResponse(modelResponse, agent, tools, handoffs) {
|
|
47
|
+
const items = [];
|
|
48
|
+
const runHandoffs = [];
|
|
49
|
+
const runFunctions = [];
|
|
50
|
+
const runComputerActions = [];
|
|
51
|
+
const runShellActions = [];
|
|
52
|
+
const runApplyPatchActions = [];
|
|
53
|
+
const runMCPApprovalRequests = [];
|
|
54
|
+
const toolsUsed = [];
|
|
55
|
+
const handoffMap = new Map(handoffs.map((h) => [h.toolName, h]));
|
|
56
|
+
// Resolve tools upfront so we can look up the concrete handler in O(1) while iterating outputs.
|
|
57
|
+
const functionMap = new Map(tools
|
|
58
|
+
.filter((t) => t.type === 'function')
|
|
59
|
+
.map((t) => [t.name, t]));
|
|
60
|
+
const computerTool = tools.find((t) => t.type === 'computer');
|
|
61
|
+
const shellTool = tools.find((t) => t.type === 'shell');
|
|
62
|
+
const applyPatchTool = tools.find((t) => t.type === 'apply_patch');
|
|
63
|
+
const mcpToolMap = new Map(tools
|
|
64
|
+
.filter((t) => t.type === 'hosted_tool' && t.providerData?.type === 'mcp')
|
|
65
|
+
.map((t) => t)
|
|
66
|
+
.map((t) => [t.providerData.server_label, t]));
|
|
67
|
+
for (const output of modelResponse.output) {
|
|
68
|
+
if (output.type === 'message') {
|
|
69
|
+
if (output.role === 'assistant') {
|
|
70
|
+
items.push(new items_1.RunMessageOutputItem(output, agent));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (output.type === 'hosted_tool_call') {
|
|
74
|
+
items.push(new items_1.RunToolCallItem(output, agent));
|
|
75
|
+
const toolName = output.name;
|
|
76
|
+
toolsUsed.push(toolName);
|
|
77
|
+
if (output.providerData?.type === 'mcp_approval_request' ||
|
|
78
|
+
output.name === 'mcp_approval_request') {
|
|
79
|
+
// Hosted remote MCP server's approval process
|
|
80
|
+
const providerData = output.providerData;
|
|
81
|
+
const mcpServerLabel = providerData.server_label;
|
|
82
|
+
const mcpServerTool = mcpToolMap.get(mcpServerLabel);
|
|
83
|
+
if (typeof mcpServerTool === 'undefined') {
|
|
84
|
+
const message = `MCP server (${mcpServerLabel}) not found in Agent (${agent.name})`;
|
|
85
|
+
(0, context_1.addErrorToCurrentSpan)({
|
|
86
|
+
message,
|
|
87
|
+
data: { mcp_server_label: mcpServerLabel },
|
|
88
|
+
});
|
|
89
|
+
throw new errors_1.ModelBehaviorError(message);
|
|
90
|
+
}
|
|
91
|
+
// Do this approval later:
|
|
92
|
+
// We support both onApproval callback (like the Python SDK does) and HITL patterns.
|
|
93
|
+
const approvalItem = new items_1.RunToolApprovalItem({
|
|
94
|
+
type: 'hosted_tool_call',
|
|
95
|
+
// We must use this name to align with the name sent from the servers
|
|
96
|
+
name: providerData.name,
|
|
97
|
+
id: providerData.id,
|
|
98
|
+
status: 'in_progress',
|
|
99
|
+
providerData,
|
|
100
|
+
}, agent);
|
|
101
|
+
runMCPApprovalRequests.push({
|
|
102
|
+
requestItem: approvalItem,
|
|
103
|
+
mcpTool: mcpServerTool,
|
|
104
|
+
});
|
|
105
|
+
if (!mcpServerTool.providerData.on_approval) {
|
|
106
|
+
// When onApproval function exists, it confirms the approval right after this.
|
|
107
|
+
// Thus, this approval item must be appended only for the next turn interruption patterns.
|
|
108
|
+
items.push(approvalItem);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (output.type === 'reasoning') {
|
|
113
|
+
items.push(new items_1.RunReasoningItem(output, agent));
|
|
114
|
+
}
|
|
115
|
+
else if (output.type === 'computer_call') {
|
|
116
|
+
handleToolCallAction({
|
|
117
|
+
output,
|
|
118
|
+
tool: computerTool,
|
|
119
|
+
agent,
|
|
120
|
+
errorMessage: 'Model produced computer action without a computer tool.',
|
|
121
|
+
errorData: { agent_name: agent.name },
|
|
122
|
+
items,
|
|
123
|
+
toolsUsed,
|
|
124
|
+
actions: runComputerActions,
|
|
125
|
+
buildAction: (resolvedTool) => ({
|
|
126
|
+
toolCall: output,
|
|
127
|
+
computer: resolvedTool,
|
|
128
|
+
}),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else if (output.type === 'shell_call') {
|
|
132
|
+
handleToolCallAction({
|
|
133
|
+
output,
|
|
134
|
+
tool: shellTool,
|
|
135
|
+
agent,
|
|
136
|
+
errorMessage: 'Model produced shell action without a shell tool.',
|
|
137
|
+
errorData: { agent_name: agent.name },
|
|
138
|
+
items,
|
|
139
|
+
toolsUsed,
|
|
140
|
+
actions: runShellActions,
|
|
141
|
+
buildAction: (resolvedTool) => ({
|
|
142
|
+
toolCall: output,
|
|
143
|
+
shell: resolvedTool,
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else if (output.type === 'apply_patch_call') {
|
|
148
|
+
handleToolCallAction({
|
|
149
|
+
output,
|
|
150
|
+
tool: applyPatchTool,
|
|
151
|
+
agent,
|
|
152
|
+
errorMessage: 'Model produced apply_patch action without an apply_patch tool.',
|
|
153
|
+
errorData: { agent_name: agent.name },
|
|
154
|
+
items,
|
|
155
|
+
toolsUsed,
|
|
156
|
+
actions: runApplyPatchActions,
|
|
157
|
+
buildAction: (resolvedTool) => ({
|
|
158
|
+
toolCall: output,
|
|
159
|
+
applyPatch: resolvedTool,
|
|
160
|
+
}),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/*
|
|
164
|
+
* Intentionally skip returning here so function_call processing can still
|
|
165
|
+
* run when output.type matches other tool call types.
|
|
166
|
+
*/
|
|
167
|
+
if (output.type !== 'function_call') {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
toolsUsed.push(output.name);
|
|
171
|
+
const resolved = resolveFunctionOrHandoff(output, handoffMap, functionMap, agent);
|
|
172
|
+
if (resolved.type === 'handoff') {
|
|
173
|
+
items.push(new items_1.RunHandoffCallItem(output, agent));
|
|
174
|
+
runHandoffs.push({
|
|
175
|
+
toolCall: output,
|
|
176
|
+
handoff: resolved.handoff,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
items.push(new items_1.RunToolCallItem(output, agent));
|
|
181
|
+
runFunctions.push({
|
|
182
|
+
toolCall: output,
|
|
183
|
+
tool: resolved.tool,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
newItems: items,
|
|
189
|
+
handoffs: runHandoffs,
|
|
190
|
+
functions: runFunctions,
|
|
191
|
+
computerActions: runComputerActions,
|
|
192
|
+
shellActions: runShellActions,
|
|
193
|
+
applyPatchActions: runApplyPatchActions,
|
|
194
|
+
mcpApprovalRequests: runMCPApprovalRequests,
|
|
195
|
+
toolsUsed: toolsUsed,
|
|
196
|
+
hasToolsOrApprovalsToRun() {
|
|
197
|
+
return (runHandoffs.length > 0 ||
|
|
198
|
+
runFunctions.length > 0 ||
|
|
199
|
+
runMCPApprovalRequests.length > 0 ||
|
|
200
|
+
runComputerActions.length > 0 ||
|
|
201
|
+
runShellActions.length > 0 ||
|
|
202
|
+
runApplyPatchActions.length > 0);
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=modelOutputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelOutputs.js","sourceRoot":"","sources":["../../src/runner/modelOutputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { ModelBehaviorError } from "../errors.mjs";
|
|
2
|
+
import { RunHandoffCallItem, RunMessageOutputItem, RunReasoningItem, RunToolApprovalItem, RunToolCallItem, } from "../items.mjs";
|
|
3
|
+
import { addErrorToCurrentSpan } from "../tracing/context.mjs";
|
|
4
|
+
function ensureToolAvailable(tool, message, data) {
|
|
5
|
+
if (!tool) {
|
|
6
|
+
addErrorToCurrentSpan({
|
|
7
|
+
message,
|
|
8
|
+
data,
|
|
9
|
+
});
|
|
10
|
+
throw new ModelBehaviorError(message);
|
|
11
|
+
}
|
|
12
|
+
return tool;
|
|
13
|
+
}
|
|
14
|
+
function handleToolCallAction({ output, tool, agent, errorMessage, errorData, items, toolsUsed, actions, buildAction, }) {
|
|
15
|
+
const resolvedTool = ensureToolAvailable(tool, errorMessage, errorData);
|
|
16
|
+
items.push(new RunToolCallItem(output, agent));
|
|
17
|
+
toolsUsed.push(resolvedTool.name);
|
|
18
|
+
actions.push(buildAction(resolvedTool));
|
|
19
|
+
}
|
|
20
|
+
function resolveFunctionOrHandoff(toolCall, handoffMap, functionMap, agent) {
|
|
21
|
+
const handoff = handoffMap.get(toolCall.name);
|
|
22
|
+
if (handoff) {
|
|
23
|
+
return { type: 'handoff', handoff };
|
|
24
|
+
}
|
|
25
|
+
const functionTool = functionMap.get(toolCall.name);
|
|
26
|
+
if (!functionTool) {
|
|
27
|
+
const message = `Tool ${toolCall.name} not found in agent ${agent.name}.`;
|
|
28
|
+
addErrorToCurrentSpan({
|
|
29
|
+
message,
|
|
30
|
+
data: {
|
|
31
|
+
tool_name: toolCall.name,
|
|
32
|
+
agent_name: agent.name,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
throw new ModelBehaviorError(message);
|
|
36
|
+
}
|
|
37
|
+
return { type: 'function', tool: functionTool };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Walks a raw model response and classifies each item so the runner can schedule follow-up work.
|
|
41
|
+
* Returns both the serializable RunItems (for history/streaming) and the actionable tool metadata.
|
|
42
|
+
*/
|
|
43
|
+
export function processModelResponse(modelResponse, agent, tools, handoffs) {
|
|
44
|
+
const items = [];
|
|
45
|
+
const runHandoffs = [];
|
|
46
|
+
const runFunctions = [];
|
|
47
|
+
const runComputerActions = [];
|
|
48
|
+
const runShellActions = [];
|
|
49
|
+
const runApplyPatchActions = [];
|
|
50
|
+
const runMCPApprovalRequests = [];
|
|
51
|
+
const toolsUsed = [];
|
|
52
|
+
const handoffMap = new Map(handoffs.map((h) => [h.toolName, h]));
|
|
53
|
+
// Resolve tools upfront so we can look up the concrete handler in O(1) while iterating outputs.
|
|
54
|
+
const functionMap = new Map(tools
|
|
55
|
+
.filter((t) => t.type === 'function')
|
|
56
|
+
.map((t) => [t.name, t]));
|
|
57
|
+
const computerTool = tools.find((t) => t.type === 'computer');
|
|
58
|
+
const shellTool = tools.find((t) => t.type === 'shell');
|
|
59
|
+
const applyPatchTool = tools.find((t) => t.type === 'apply_patch');
|
|
60
|
+
const mcpToolMap = new Map(tools
|
|
61
|
+
.filter((t) => t.type === 'hosted_tool' && t.providerData?.type === 'mcp')
|
|
62
|
+
.map((t) => t)
|
|
63
|
+
.map((t) => [t.providerData.server_label, t]));
|
|
64
|
+
for (const output of modelResponse.output) {
|
|
65
|
+
if (output.type === 'message') {
|
|
66
|
+
if (output.role === 'assistant') {
|
|
67
|
+
items.push(new RunMessageOutputItem(output, agent));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (output.type === 'hosted_tool_call') {
|
|
71
|
+
items.push(new RunToolCallItem(output, agent));
|
|
72
|
+
const toolName = output.name;
|
|
73
|
+
toolsUsed.push(toolName);
|
|
74
|
+
if (output.providerData?.type === 'mcp_approval_request' ||
|
|
75
|
+
output.name === 'mcp_approval_request') {
|
|
76
|
+
// Hosted remote MCP server's approval process
|
|
77
|
+
const providerData = output.providerData;
|
|
78
|
+
const mcpServerLabel = providerData.server_label;
|
|
79
|
+
const mcpServerTool = mcpToolMap.get(mcpServerLabel);
|
|
80
|
+
if (typeof mcpServerTool === 'undefined') {
|
|
81
|
+
const message = `MCP server (${mcpServerLabel}) not found in Agent (${agent.name})`;
|
|
82
|
+
addErrorToCurrentSpan({
|
|
83
|
+
message,
|
|
84
|
+
data: { mcp_server_label: mcpServerLabel },
|
|
85
|
+
});
|
|
86
|
+
throw new ModelBehaviorError(message);
|
|
87
|
+
}
|
|
88
|
+
// Do this approval later:
|
|
89
|
+
// We support both onApproval callback (like the Python SDK does) and HITL patterns.
|
|
90
|
+
const approvalItem = new RunToolApprovalItem({
|
|
91
|
+
type: 'hosted_tool_call',
|
|
92
|
+
// We must use this name to align with the name sent from the servers
|
|
93
|
+
name: providerData.name,
|
|
94
|
+
id: providerData.id,
|
|
95
|
+
status: 'in_progress',
|
|
96
|
+
providerData,
|
|
97
|
+
}, agent);
|
|
98
|
+
runMCPApprovalRequests.push({
|
|
99
|
+
requestItem: approvalItem,
|
|
100
|
+
mcpTool: mcpServerTool,
|
|
101
|
+
});
|
|
102
|
+
if (!mcpServerTool.providerData.on_approval) {
|
|
103
|
+
// When onApproval function exists, it confirms the approval right after this.
|
|
104
|
+
// Thus, this approval item must be appended only for the next turn interruption patterns.
|
|
105
|
+
items.push(approvalItem);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (output.type === 'reasoning') {
|
|
110
|
+
items.push(new RunReasoningItem(output, agent));
|
|
111
|
+
}
|
|
112
|
+
else if (output.type === 'computer_call') {
|
|
113
|
+
handleToolCallAction({
|
|
114
|
+
output,
|
|
115
|
+
tool: computerTool,
|
|
116
|
+
agent,
|
|
117
|
+
errorMessage: 'Model produced computer action without a computer tool.',
|
|
118
|
+
errorData: { agent_name: agent.name },
|
|
119
|
+
items,
|
|
120
|
+
toolsUsed,
|
|
121
|
+
actions: runComputerActions,
|
|
122
|
+
buildAction: (resolvedTool) => ({
|
|
123
|
+
toolCall: output,
|
|
124
|
+
computer: resolvedTool,
|
|
125
|
+
}),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else if (output.type === 'shell_call') {
|
|
129
|
+
handleToolCallAction({
|
|
130
|
+
output,
|
|
131
|
+
tool: shellTool,
|
|
132
|
+
agent,
|
|
133
|
+
errorMessage: 'Model produced shell action without a shell tool.',
|
|
134
|
+
errorData: { agent_name: agent.name },
|
|
135
|
+
items,
|
|
136
|
+
toolsUsed,
|
|
137
|
+
actions: runShellActions,
|
|
138
|
+
buildAction: (resolvedTool) => ({
|
|
139
|
+
toolCall: output,
|
|
140
|
+
shell: resolvedTool,
|
|
141
|
+
}),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else if (output.type === 'apply_patch_call') {
|
|
145
|
+
handleToolCallAction({
|
|
146
|
+
output,
|
|
147
|
+
tool: applyPatchTool,
|
|
148
|
+
agent,
|
|
149
|
+
errorMessage: 'Model produced apply_patch action without an apply_patch tool.',
|
|
150
|
+
errorData: { agent_name: agent.name },
|
|
151
|
+
items,
|
|
152
|
+
toolsUsed,
|
|
153
|
+
actions: runApplyPatchActions,
|
|
154
|
+
buildAction: (resolvedTool) => ({
|
|
155
|
+
toolCall: output,
|
|
156
|
+
applyPatch: resolvedTool,
|
|
157
|
+
}),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/*
|
|
161
|
+
* Intentionally skip returning here so function_call processing can still
|
|
162
|
+
* run when output.type matches other tool call types.
|
|
163
|
+
*/
|
|
164
|
+
if (output.type !== 'function_call') {
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
toolsUsed.push(output.name);
|
|
168
|
+
const resolved = resolveFunctionOrHandoff(output, handoffMap, functionMap, agent);
|
|
169
|
+
if (resolved.type === 'handoff') {
|
|
170
|
+
items.push(new RunHandoffCallItem(output, agent));
|
|
171
|
+
runHandoffs.push({
|
|
172
|
+
toolCall: output,
|
|
173
|
+
handoff: resolved.handoff,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
items.push(new RunToolCallItem(output, agent));
|
|
178
|
+
runFunctions.push({
|
|
179
|
+
toolCall: output,
|
|
180
|
+
tool: resolved.tool,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
newItems: items,
|
|
186
|
+
handoffs: runHandoffs,
|
|
187
|
+
functions: runFunctions,
|
|
188
|
+
computerActions: runComputerActions,
|
|
189
|
+
shellActions: runShellActions,
|
|
190
|
+
applyPatchActions: runApplyPatchActions,
|
|
191
|
+
mcpApprovalRequests: runMCPApprovalRequests,
|
|
192
|
+
toolsUsed: toolsUsed,
|
|
193
|
+
hasToolsOrApprovalsToRun() {
|
|
194
|
+
return (runHandoffs.length > 0 ||
|
|
195
|
+
runFunctions.length > 0 ||
|
|
196
|
+
runMCPApprovalRequests.length > 0 ||
|
|
197
|
+
runComputerActions.length > 0 ||
|
|
198
|
+
runShellActions.length > 0 ||
|
|
199
|
+
runApplyPatchActions.length > 0);
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=modelOutputs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelOutputs.mjs","sourceRoot":"","sources":["../../src/runner/modelOutputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Agent, AgentOutputType } from '../agent';
|
|
2
|
+
import { RunState } from '../runState';
|
|
3
|
+
import { AgentArtifacts } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Collects tools and handoffs for the current agent so model calls and tracing share the same
|
|
6
|
+
* snapshot of enabled capabilities.
|
|
7
|
+
*/
|
|
8
|
+
export declare function prepareAgentArtifacts<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>): Promise<AgentArtifacts<TContext>>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareAgentArtifacts = prepareAgentArtifacts;
|
|
4
|
+
const serialize_1 = require("../utils/serialize.js");
|
|
5
|
+
const tool_1 = require("../tool.js");
|
|
6
|
+
const tracing_1 = require("./tracing.js");
|
|
7
|
+
/**
|
|
8
|
+
* Collects tools and handoffs for the current agent so model calls and tracing share the same
|
|
9
|
+
* snapshot of enabled capabilities.
|
|
10
|
+
*/
|
|
11
|
+
async function prepareAgentArtifacts(state) {
|
|
12
|
+
const capabilities = await collectAgentCapabilities(state);
|
|
13
|
+
await warmUpComputerTools(capabilities.tools, state._context);
|
|
14
|
+
state.setCurrentAgentSpan((0, tracing_1.ensureAgentSpan)({
|
|
15
|
+
agent: state._currentAgent,
|
|
16
|
+
handoffs: capabilities.handoffs,
|
|
17
|
+
tools: capabilities.tools,
|
|
18
|
+
currentSpan: state._currentAgentSpan,
|
|
19
|
+
}));
|
|
20
|
+
return {
|
|
21
|
+
...capabilities,
|
|
22
|
+
serializedHandoffs: capabilities.handoffs.map((handoff) => (0, serialize_1.serializeHandoff)(handoff)),
|
|
23
|
+
serializedTools: capabilities.tools.map((tool) => (0, serialize_1.serializeTool)(tool)),
|
|
24
|
+
toolsExplicitlyProvided: state._currentAgent.hasExplicitToolConfig(),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async function collectAgentCapabilities(state) {
|
|
28
|
+
const handoffs = await state._currentAgent.getEnabledHandoffs(state._context);
|
|
29
|
+
const tools = (await state._currentAgent.getAllTools(state._context));
|
|
30
|
+
return { handoffs, tools };
|
|
31
|
+
}
|
|
32
|
+
async function warmUpComputerTools(tools, runContext) {
|
|
33
|
+
const computerTools = tools.filter((tool) => tool.type === 'computer');
|
|
34
|
+
if (computerTools.length === 0) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
await Promise.all(computerTools.map(async (tool) => {
|
|
38
|
+
await (0, tool_1.resolveComputer)({ tool, runContext });
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=modelPreparation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelPreparation.js","sourceRoot":"","sources":["../../src/runner/modelPreparation.ts"],"names":[],"mappings":";;AAYA,sDAuBC;AAlCD,qDAAqE;AAErE,qCAA8D;AAG9D,0CAA4C;AAE5C;;;GAGG;AACI,KAAK,UAAU,qBAAqB,CAGzC,KAAiC;IACjC,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,mBAAmB,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9D,KAAK,CAAC,mBAAmB,CACvB,IAAA,yBAAe,EAAC;QACd,KAAK,EAAE,KAAK,CAAC,aAAa;QAC1B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,WAAW,EAAE,KAAK,CAAC,iBAAiB;KACrC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,GAAG,YAAY;QACf,kBAAkB,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACxD,IAAA,4BAAgB,EAAC,OAAO,CAAC,CAC1B;QACD,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,yBAAa,EAAC,IAAI,CAAC,CAAC;QACtE,uBAAuB,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;KACrE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAA2D;IAK3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAClD,KAAK,CAAC,QAAQ,CACf,CAAqB,CAAC;IACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,KAAuB,EACvB,UAA4E;IAE5E,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CACF,CAAC;IAEnC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,IAAA,sBAAe,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { serializeHandoff, serializeTool } from "../utils/serialize.mjs";
|
|
2
|
+
import { resolveComputer } from "../tool.mjs";
|
|
3
|
+
import { ensureAgentSpan } from "./tracing.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Collects tools and handoffs for the current agent so model calls and tracing share the same
|
|
6
|
+
* snapshot of enabled capabilities.
|
|
7
|
+
*/
|
|
8
|
+
export async function prepareAgentArtifacts(state) {
|
|
9
|
+
const capabilities = await collectAgentCapabilities(state);
|
|
10
|
+
await warmUpComputerTools(capabilities.tools, state._context);
|
|
11
|
+
state.setCurrentAgentSpan(ensureAgentSpan({
|
|
12
|
+
agent: state._currentAgent,
|
|
13
|
+
handoffs: capabilities.handoffs,
|
|
14
|
+
tools: capabilities.tools,
|
|
15
|
+
currentSpan: state._currentAgentSpan,
|
|
16
|
+
}));
|
|
17
|
+
return {
|
|
18
|
+
...capabilities,
|
|
19
|
+
serializedHandoffs: capabilities.handoffs.map((handoff) => serializeHandoff(handoff)),
|
|
20
|
+
serializedTools: capabilities.tools.map((tool) => serializeTool(tool)),
|
|
21
|
+
toolsExplicitlyProvided: state._currentAgent.hasExplicitToolConfig(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function collectAgentCapabilities(state) {
|
|
25
|
+
const handoffs = await state._currentAgent.getEnabledHandoffs(state._context);
|
|
26
|
+
const tools = (await state._currentAgent.getAllTools(state._context));
|
|
27
|
+
return { handoffs, tools };
|
|
28
|
+
}
|
|
29
|
+
async function warmUpComputerTools(tools, runContext) {
|
|
30
|
+
const computerTools = tools.filter((tool) => tool.type === 'computer');
|
|
31
|
+
if (computerTools.length === 0) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
await Promise.all(computerTools.map(async (tool) => {
|
|
35
|
+
await resolveComputer({ tool, runContext });
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=modelPreparation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelPreparation.mjs","sourceRoot":"","sources":["../../src/runner/modelPreparation.ts"],"names":[],"mappings":"OACO,EAAE,gBAAgB,EAAE,aAAa,EAAE;OAEnC,EAAsB,eAAe,EAAE;OAGvC,EAAE,eAAe,EAAE;AAE1B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAGzC,KAAiC;IACjC,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,mBAAmB,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9D,KAAK,CAAC,mBAAmB,CACvB,eAAe,CAAC;QACd,KAAK,EAAE,KAAK,CAAC,aAAa;QAC1B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,WAAW,EAAE,KAAK,CAAC,iBAAiB;KACrC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,GAAG,YAAY;QACf,kBAAkB,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACxD,gBAAgB,CAAC,OAAO,CAAC,CAC1B;QACD,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtE,uBAAuB,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;KACrE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAA2D;IAK3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAClD,KAAK,CAAC,QAAQ,CACf,CAAqB,CAAC;IACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,KAAuB,EACvB,UAA4E;IAE5E,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CACF,CAAC;IAEnC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Agent } from '../agent';
|
|
2
|
+
import { Model, ModelSettings } from '../model';
|
|
3
|
+
import { AgentToolUseTracker } from './toolUseTracker';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves the effective model for the next turn by giving precedence to the agent-specific
|
|
6
|
+
* configuration when present, otherwise falling back to the runner-level default.
|
|
7
|
+
*/
|
|
8
|
+
export declare function selectModel(agentModel: string | Model, runConfigModel: string | Model | undefined): string | Model;
|
|
9
|
+
/**
|
|
10
|
+
* Resets the tool choice when the agent is configured to prefer a fresh tool selection after
|
|
11
|
+
* any tool usage. This prevents the provider from reusing stale tool hints across turns.
|
|
12
|
+
*/
|
|
13
|
+
export declare function maybeResetToolChoice(agent: Agent<any, any>, toolUseTracker: AgentToolUseTracker, modelSettings: ModelSettings): ModelSettings;
|
|
14
|
+
/**
|
|
15
|
+
* When the default model is a GPT-5 variant, agents may carry GPT-5-specific providerData
|
|
16
|
+
* (e.g., reasoning effort, text verbosity). If a run resolves to a non-GPT-5 model and the
|
|
17
|
+
* agent relied on the default model (i.e., no explicit model set), these GPT-5-only settings
|
|
18
|
+
* are incompatible and should be stripped to avoid runtime errors.
|
|
19
|
+
*/
|
|
20
|
+
export declare function adjustModelSettingsForNonGPT5RunnerModel(explictlyModelSet: boolean, agentModelSettings: ModelSettings, runnerModel: string | Model, modelSettings: ModelSettings, resolvedModelName?: string): ModelSettings;
|