@openai/agents-core
Version:
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.
66 lines • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleHostedMcpApprovals = handleHostedMcpApprovals;
const items_1 = require("../items.js");
/**
* Normalizes hosted MCP approval flows so streaming and non-streaming loops share identical
* behavior. Handles synchronous approvals, previously decided approvals, and pending approvals.
*/
async function handleHostedMcpApprovals({ requests, agent, state, functionResults, appendIfNew, resolveApproval, }) {
const pendingApprovals = new Set();
const pendingApprovalIds = new Set();
for (const approvalRequest of requests) {
const rawItem = approvalRequest.requestItem.rawItem;
if (rawItem.type !== 'hosted_tool_call') {
continue;
}
const providerData = rawItem.providerData;
if (!providerData) {
continue;
}
const toolData = approvalRequest.mcpTool.providerData;
const approvalRequestId = rawItem.id ?? providerData.id;
if (toolData?.on_approval) {
const approvalResult = await toolData.on_approval(state._context, approvalRequest.requestItem);
const approvalResponseData = {
approve: approvalResult.approve,
approval_request_id: approvalRequestId ?? providerData.id,
reason: approvalResult.reason,
};
appendIfNew(new items_1.RunToolCallItem({
type: 'hosted_tool_call',
name: 'mcp_approval_response',
providerData: approvalResponseData,
}, agent));
continue;
}
const approvalDecision = typeof resolveApproval === 'function'
? resolveApproval(rawItem)
: undefined;
if (typeof approvalDecision !== 'undefined' && approvalRequestId) {
const approvalResponseData = {
approve: approvalDecision,
approval_request_id: approvalRequestId,
reason: undefined,
};
appendIfNew(new items_1.RunToolCallItem({
type: 'hosted_tool_call',
name: 'mcp_approval_response',
providerData: approvalResponseData,
}, agent));
continue;
}
functionResults.push({
type: 'hosted_mcp_tool_approval',
tool: approvalRequest.mcpTool,
runItem: approvalRequest.requestItem,
});
appendIfNew(approvalRequest.requestItem);
pendingApprovals.add(approvalRequest.requestItem);
if (approvalRequestId) {
pendingApprovalIds.add(approvalRequestId);
}
}
return { pendingApprovals, pendingApprovalIds };
}
//# sourceMappingURL=mcpApprovals.js.map