@mastra/core
Version:
95 lines (94 loc) • 3.21 kB
JavaScript
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