UNPKG

@mastra/core

Version:
95 lines (94 loc) 3.21 kB
const require_tool = require("./tool-d85xHVkl.cjs"); //#region src/tools/toolchecks.ts /** * Checks if a tool is a Mastra Tool, using both instanceof and marker. * The marker fallback handles environments like Vite SSR where the same * module may be loaded multiple times, causing instanceof to fail. */ function isMastraTool(tool) { return tool instanceof require_tool.Tool || typeof tool === "object" && tool !== null && require_tool.MASTRA_TOOL_MARKER in tool; } /** * Checks if a tool is a Vercel Tool (AI SDK tool) * @param tool - The tool to check * @returns True if the tool is a Vercel Tool, false otherwise */ function isVercelTool(tool) { return !!(tool && !isMastraTool(tool) && ("parameters" in tool || "execute" in tool && typeof tool.execute === "function" && "inputSchema" in tool)); } /** * Checks if a tool is a provider-defined tool from the AI SDK. * Provider tools (like google.tools.googleSearch(), openai.tools.webSearch()) have: * - type: "provider-defined" (AI SDK v5) or "provider" (AI SDK v6) * - id: in format 'provider.tool_name' (e.g., 'google.google_search') * * These tools have a lazy `inputSchema` function that returns an AI SDK Schema * (not a Zod schema), so they require special handling during serialization. */ function isProviderDefinedTool(tool) { if (typeof tool !== "object" || tool === null) return false; const t = tool; return (t.type === "provider-defined" || t.type === "provider") && typeof t.id === "string"; } /** * Alias for callers that prefer the shorter provider-tool terminology. */ const isProviderTool = isProviderDefinedTool; /** * Extracts the model-facing tool name from a provider tool id. * e.g. 'openai.web_search' -> 'web_search' */ function getProviderToolName(providerId) { return providerId.split(".").slice(1).join("."); } /** * Reads a per-tool {@link NeedsApprovalFn} attached to a tool instance, if present. * * Runtime tool maps are loosely typed (AI SDK `ToolSet` shape plus Mastra extras), so the * `needsApprovalFn` decided by {@link CoreToolBuilder} / the MCP client is read off an * arbitrary tool-like value. This helper centralizes that access with a typed result so the * runtime never has to reach through `any` for it. */ function getNeedsApprovalFn(tool) { if (typeof tool !== "object" || tool === null) return void 0; const fn = tool.needsApprovalFn; return typeof fn === "function" ? fn : void 0; } //#endregion Object.defineProperty(exports, "getNeedsApprovalFn", { enumerable: true, get: function() { return getNeedsApprovalFn; } }); Object.defineProperty(exports, "getProviderToolName", { enumerable: true, get: function() { return getProviderToolName; } }); Object.defineProperty(exports, "isMastraTool", { enumerable: true, get: function() { return isMastraTool; } }); Object.defineProperty(exports, "isProviderDefinedTool", { enumerable: true, get: function() { return isProviderDefinedTool; } }); Object.defineProperty(exports, "isProviderTool", { enumerable: true, get: function() { return isProviderTool; } }); Object.defineProperty(exports, "isVercelTool", { enumerable: true, get: function() { return isVercelTool; } }); //# sourceMappingURL=toolchecks-Rfz17G5p.cjs.map