agents
Version:
A home for your AI agents
60 lines (59 loc) • 2.38 kB
JavaScript
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