UNPKG

agents

Version:

A home for your AI agents

60 lines (59 loc) 2.38 kB
import { __DO_NOT_USE_WILL_BREAK__agentContext } from "./internal_context.js"; import { tool } from "ai"; //#region src/agent-tools.ts function currentAgentToolRunner() { const agent = __DO_NOT_USE_WILL_BREAK__agentContext.getStore()?.agent; if (agent === null || typeof agent !== "object" || typeof agent.runAgentTool !== "function") throw new Error("agentTool() can only run inside an Agent turn. Use it from getTools() on an Agent subclass."); return agent; } function failure(status, error, retryable, extra) { return { ok: false, status, error, retryable, ...extra?.reason !== void 0 ? { reason: extra.reason } : {}, ...extra?.childStillRunning !== void 0 ? { childStillRunning: extra.childStillRunning } : {} }; } /** * Create an AI SDK tool that dispatches a chat-capable sub-agent through * `Agent.runAgentTool`. */ function agentTool(cls, options) { return tool({ description: options.description, inputSchema: options.inputSchema, execute: async (input, executeOptions) => { const display = options.displayName || options.icon || options.display ? { ...options.display, ...options.displayName ? { name: options.displayName } : {}, ...options.icon ? { icon: options.icon } : {} } : void 0; const runId = executeOptions?.toolCallId ? `agent-tool:${executeOptions.toolCallId}` : void 0; const result = await currentAgentToolRunner().runAgentTool(cls, { input, runId, parentToolCallId: executeOptions?.toolCallId, signal: executeOptions?.abortSignal, display }); if (result.status === "completed") { if (options.outputSchema) { if (result.output === void 0) return failure("error", "agent tool completed without structured output required by outputSchema", false); return options.outputSchema.parse(result.output); } return result.summary ?? ""; } if (result.status === "aborted") return failure("aborted", result.error ?? "agent tool run was cancelled", false); if (result.status === "interrupted") return failure("interrupted", result.error ?? "agent tool run was interrupted before it finished; it can be retried", true, { reason: result.reason, childStillRunning: result.childStillRunning }); return failure("error", result.error ?? "agent tool run failed", false); } }); } //#endregion export { agentTool }; //# sourceMappingURL=agent-tools.js.map