@mastra/core 1.18.1-alpha.1 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/dist/agent/agent-legacy.d.ts +3 -1
- package/dist/agent/agent-legacy.d.ts.map +1 -1
- package/dist/agent/agent.d.ts +3 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +8 -8
- package/dist/agent/index.js +1 -1
- package/dist/{chunk-AV4YSAZL.cjs → chunk-2OYWVA6F.cjs} +17 -2
- package/dist/chunk-2OYWVA6F.cjs.map +1 -0
- package/dist/{chunk-6VRSFFQ4.cjs → chunk-4TUILCMR.cjs} +6 -6
- package/dist/{chunk-6VRSFFQ4.cjs.map → chunk-4TUILCMR.cjs.map} +1 -1
- package/dist/{chunk-AJZQPWAV.js → chunk-AJKSDWYG.js} +41 -30
- package/dist/chunk-AJKSDWYG.js.map +1 -0
- package/dist/{chunk-JTJCFEIY.js → chunk-CDBYRAGD.js} +8 -8
- package/dist/{chunk-JTJCFEIY.js.map → chunk-CDBYRAGD.js.map} +1 -1
- package/dist/{chunk-LVZKPNQO.cjs → chunk-DXVPNFCK.cjs} +52 -52
- package/dist/{chunk-LVZKPNQO.cjs.map → chunk-DXVPNFCK.cjs.map} +1 -1
- package/dist/{chunk-VEP4CV7E.cjs → chunk-E2SMTTP6.cjs} +15 -15
- package/dist/{chunk-VEP4CV7E.cjs.map → chunk-E2SMTTP6.cjs.map} +1 -1
- package/dist/{chunk-FA4PTEBK.js → chunk-EWPUWV33.js} +18 -3
- package/dist/chunk-EWPUWV33.js.map +1 -0
- package/dist/{chunk-EXDBQKH4.cjs → chunk-FTUA42MM.cjs} +15 -15
- package/dist/{chunk-EXDBQKH4.cjs.map → chunk-FTUA42MM.cjs.map} +1 -1
- package/dist/{chunk-5ANYSU2W.cjs → chunk-GNA52EF4.cjs} +9 -9
- package/dist/{chunk-5ANYSU2W.cjs.map → chunk-GNA52EF4.cjs.map} +1 -1
- package/dist/{chunk-WLNT3YJ7.cjs → chunk-IBLDKFND.cjs} +97 -86
- package/dist/chunk-IBLDKFND.cjs.map +1 -0
- package/dist/{chunk-QADPCUBX.cjs → chunk-J7BYONJB.cjs} +82 -82
- package/dist/{chunk-QADPCUBX.cjs.map → chunk-J7BYONJB.cjs.map} +1 -1
- package/dist/{chunk-6R5PT6ZP.cjs → chunk-JDKHHTWK.cjs} +5 -5
- package/dist/{chunk-6R5PT6ZP.cjs.map → chunk-JDKHHTWK.cjs.map} +1 -1
- package/dist/{chunk-7V3UNILV.js → chunk-KIOHHOOC.js} +4 -4
- package/dist/{chunk-7V3UNILV.js.map → chunk-KIOHHOOC.js.map} +1 -1
- package/dist/{chunk-XNBGNCVV.cjs → chunk-L2FL7HMV.cjs} +25 -25
- package/dist/{chunk-XNBGNCVV.cjs.map → chunk-L2FL7HMV.cjs.map} +1 -1
- package/dist/{chunk-YMPV2RMB.cjs → chunk-LU4HKXIC.cjs} +7 -7
- package/dist/{chunk-YMPV2RMB.cjs.map → chunk-LU4HKXIC.cjs.map} +1 -1
- package/dist/{chunk-X4Q4KB6C.js → chunk-OZHBY6NY.js} +3 -3
- package/dist/{chunk-X4Q4KB6C.js.map → chunk-OZHBY6NY.js.map} +1 -1
- package/dist/{chunk-OLHODPXN.js → chunk-PPCEPCG7.js} +3 -3
- package/dist/{chunk-OLHODPXN.js.map → chunk-PPCEPCG7.js.map} +1 -1
- package/dist/{chunk-VMBWVH4B.js → chunk-QIOD3LOP.js} +3 -3
- package/dist/{chunk-VMBWVH4B.js.map → chunk-QIOD3LOP.js.map} +1 -1
- package/dist/{chunk-QNNFMCSE.js → chunk-QQGCWWC2.js} +3 -3
- package/dist/{chunk-QNNFMCSE.js.map → chunk-QQGCWWC2.js.map} +1 -1
- package/dist/{chunk-2W7R236U.cjs → chunk-RD7E2WA7.cjs} +3 -3
- package/dist/chunk-RD7E2WA7.cjs.map +1 -0
- package/dist/{chunk-7IE4K74P.js → chunk-RY3AKSKG.js} +4 -4
- package/dist/{chunk-7IE4K74P.js.map → chunk-RY3AKSKG.js.map} +1 -1
- package/dist/{chunk-EAJDF6UV.js → chunk-SVIEJH5H.js} +3 -3
- package/dist/{chunk-EAJDF6UV.js.map → chunk-SVIEJH5H.js.map} +1 -1
- package/dist/{chunk-L2GYXPJJ.cjs → chunk-TFLZDAHL.cjs} +9 -9
- package/dist/{chunk-L2GYXPJJ.cjs.map → chunk-TFLZDAHL.cjs.map} +1 -1
- package/dist/{chunk-XDZOEUNU.cjs → chunk-VOH5J5MP.cjs} +7 -113
- package/dist/chunk-VOH5J5MP.cjs.map +1 -0
- package/dist/{chunk-PB3KXPNE.js → chunk-W45M6VA3.js} +7 -7
- package/dist/{chunk-PB3KXPNE.js.map → chunk-W45M6VA3.js.map} +1 -1
- package/dist/{chunk-HQCBFWL2.js → chunk-W4BUQXYD.js} +6 -112
- package/dist/chunk-W4BUQXYD.js.map +1 -0
- package/dist/{chunk-BZ2MSXOF.js → chunk-WRQKWAUF.js} +3 -3
- package/dist/chunk-WRQKWAUF.js.map +1 -0
- package/dist/{chunk-YCT2YQDL.cjs → chunk-XCRE3OQ7.cjs} +6 -6
- package/dist/{chunk-YCT2YQDL.cjs.map → chunk-XCRE3OQ7.cjs.map} +1 -1
- package/dist/{chunk-OTJAMDX5.js → chunk-Y3E5NIVT.js} +3 -3
- package/dist/{chunk-OTJAMDX5.js.map → chunk-Y3E5NIVT.js.map} +1 -1
- package/dist/{chunk-WMF4CWAL.cjs → chunk-Z2BK46LA.cjs} +185 -185
- package/dist/{chunk-WMF4CWAL.cjs.map → chunk-Z2BK46LA.cjs.map} +1 -1
- package/dist/{chunk-RF4TETYQ.js → chunk-ZT7OF2I7.js} +5 -5
- package/dist/{chunk-RF4TETYQ.js.map → chunk-ZT7OF2I7.js.map} +1 -1
- package/dist/{chunk-UJX2TJIF.js → chunk-ZVY5Q62R.js} +3 -3
- package/dist/{chunk-UJX2TJIF.js.map → chunk-ZVY5Q62R.js.map} +1 -1
- package/dist/datasets/index.cjs +17 -17
- package/dist/datasets/index.js +2 -2
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +232 -232
- package/dist/evals/index.cjs +5 -5
- package/dist/evals/index.js +2 -2
- package/dist/evals/scoreTraces/index.cjs +3 -3
- package/dist/evals/scoreTraces/index.js +1 -1
- package/dist/harness/index.cjs +19 -19
- package/dist/harness/index.js +8 -8
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/integration/index.cjs +2 -2
- package/dist/integration/index.js +1 -1
- package/dist/llm/index.cjs +16 -16
- package/dist/llm/index.js +5 -5
- package/dist/llm/model/provider-types.generated.d.ts +1 -50
- package/dist/loop/index.cjs +14 -14
- package/dist/loop/index.js +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +14 -14
- package/dist/memory/index.js +1 -1
- package/dist/models-dev-A6EVOC4O.cjs +12 -0
- package/dist/{models-dev-WD6XLSFC.cjs.map → models-dev-A6EVOC4O.cjs.map} +1 -1
- package/dist/models-dev-WEHUZMGE.js +3 -0
- package/dist/{models-dev-XG4KIUFT.js.map → models-dev-WEHUZMGE.js.map} +1 -1
- package/dist/netlify-EA3ULGDW.js +3 -0
- package/dist/{netlify-NDOVF45T.js.map → netlify-EA3ULGDW.js.map} +1 -1
- package/dist/netlify-PJUR573K.cjs +12 -0
- package/dist/{netlify-FMBBUFKT.cjs.map → netlify-PJUR573K.cjs.map} +1 -1
- package/dist/processor-provider/index.cjs +10 -10
- package/dist/processor-provider/index.js +1 -1
- package/dist/processors/index.cjs +44 -44
- package/dist/processors/index.js +1 -1
- package/dist/provider-registry-HLGSEIJ7.cjs +40 -0
- package/dist/{provider-registry-VUG7E4SG.cjs.map → provider-registry-HLGSEIJ7.cjs.map} +1 -1
- package/dist/provider-registry-XDYB4MNV.js +3 -0
- package/dist/{provider-registry-KHXFOGCK.js.map → provider-registry-XDYB4MNV.js.map} +1 -1
- package/dist/provider-registry.json +2 -108
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.js +1 -1
- package/dist/storage/index.cjs +74 -74
- package/dist/storage/index.js +1 -1
- package/dist/stream/index.cjs +8 -8
- package/dist/stream/index.js +1 -1
- package/dist/test-utils/llm-mock.cjs +4 -4
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tool-loop-agent/index.cjs +4 -4
- package/dist/tool-loop-agent/index.js +1 -1
- package/dist/tools/index.cjs +8 -8
- package/dist/tools/index.js +1 -1
- package/dist/tools/is-vercel-tool.cjs +2 -2
- package/dist/tools/is-vercel-tool.js +1 -1
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/utils.cjs +25 -25
- package/dist/utils.js +1 -1
- package/dist/vector/index.cjs +7 -7
- package/dist/vector/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/index.cjs +24 -24
- package/dist/workflows/index.js +1 -1
- package/dist/workspace/index.cjs +68 -68
- package/dist/workspace/index.js +1 -1
- package/package.json +9 -9
- package/src/llm/model/provider-types.generated.d.ts +1 -50
- package/dist/chunk-2W7R236U.cjs.map +0 -1
- package/dist/chunk-AJZQPWAV.js.map +0 -1
- package/dist/chunk-AV4YSAZL.cjs.map +0 -1
- package/dist/chunk-BZ2MSXOF.js.map +0 -1
- package/dist/chunk-FA4PTEBK.js.map +0 -1
- package/dist/chunk-HQCBFWL2.js.map +0 -1
- package/dist/chunk-WLNT3YJ7.cjs.map +0 -1
- package/dist/chunk-XDZOEUNU.cjs.map +0 -1
- package/dist/models-dev-WD6XLSFC.cjs +0 -12
- package/dist/models-dev-XG4KIUFT.js +0 -3
- package/dist/netlify-FMBBUFKT.cjs +0 -12
- package/dist/netlify-NDOVF45T.js +0 -3
- package/dist/provider-registry-KHXFOGCK.js +0 -3
- package/dist/provider-registry-VUG7E4SG.cjs +0 -40
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":["resumeData"],"mappings":"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","file":"chunk-EWPUWV33.js","sourcesContent":["import type { RequestContext } from '../request-context';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '../schema';\nimport type { PublicSchema, StandardSchemaWithJSON, StandardSchemaIssue } from '../schema';\nimport { getZodTypeName, isZodArray, isZodObject, unwrapZodType } from '../utils/zod-utils';\n\n/**\n * Safely validates data against a Standard Schema.\n * Catches internal Zod errors (like undefined union options) and provides better error messages.\n *\n * @param schema The Standard Schema to validate against\n * @param data The data to validate\n * @returns The validation result or throws with a descriptive error\n */\nfunction safeValidate<T>(\n schema: StandardSchemaWithJSON<T>,\n data: unknown,\n): { value: T } | { issues: readonly StandardSchemaIssue[] } {\n try {\n const result = schema['~standard'].validate(data);\n if (result instanceof Promise) {\n throw new Error('Your schema is async, which is not supported. Please use a sync schema.');\n }\n return result as { value: T } | { issues: readonly StandardSchemaIssue[] };\n } catch (err) {\n // Catch Zod internal errors like \"Cannot read properties of undefined (reading 'run')\"\n // This happens when a union schema has undefined options\n if (err instanceof TypeError && err.message.includes('Cannot read properties of undefined')) {\n throw new Error(\n `Schema validation failed due to an invalid schema definition. ` +\n `This often happens when a union schema (z.union or z.or) has undefined options. ` +\n `Please check that all schema options are properly defined. Original error: ${err.message}`,\n );\n }\n throw err;\n }\n}\n\n/**\n * Formatted validation errors structure.\n * Contains `errors` array for messages at this level, and `fields` for nested field errors.\n */\nexport type FormattedValidationErrors<T = unknown> = {\n errors: string[];\n fields: T extends object ? { [K in keyof T]?: FormattedValidationErrors<T[K]> } : unknown;\n};\n\nexport interface ValidationError<T = unknown> {\n error: true;\n message: string;\n validationErrors: FormattedValidationErrors<T>;\n}\n\nexport function isValidationError(value: unknown): value is ValidationError {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'error' in value &&\n value.error === true &&\n 'validationErrors' in value\n );\n}\n\n/**\n * Extracts a string key from a path segment (handles both PropertyKey and PathSegment objects).\n */\nfunction getPathKey(segment: PropertyKey | { key: PropertyKey }): string {\n if (typeof segment === 'object' && segment !== null && 'key' in segment) {\n return String(segment.key);\n }\n return String(segment);\n}\n\n/**\n * Creates an empty FormattedValidationErrors object.\n */\nfunction createEmptyErrors(): { errors: string[]; fields: Record<string, unknown> } {\n return { errors: [], fields: {} };\n}\n\n/**\n * Builds a formatted errors object from standard schema validation issues.\n *\n * @param issues Array of validation issues from standard schema validation\n * @returns Formatted errors object with nested structure based on paths\n */\nfunction buildFormattedErrors<T>(issues: readonly StandardSchemaIssue[]): FormattedValidationErrors<T> {\n const result = createEmptyErrors();\n\n for (const issue of issues) {\n if (!issue.path || issue.path.length === 0) {\n // Root-level error\n result.errors.push(issue.message);\n } else {\n // Nested error - build path through fields\n let current = result;\n for (let i = 0; i < issue.path.length; i++) {\n const key = getPathKey(issue.path[i]!);\n if (i === issue.path.length - 1) {\n // Last segment - add the error message\n if (!current.fields[key]) {\n current.fields[key] = createEmptyErrors();\n }\n (current.fields[key] as { errors: string[]; fields: Record<string, unknown> }).errors.push(issue.message);\n } else {\n // Intermediate segment - ensure object exists\n if (!current.fields[key]) {\n current.fields[key] = createEmptyErrors();\n }\n current = current.fields[key] as { errors: string[]; fields: Record<string, unknown> };\n }\n }\n }\n }\n\n return result as FormattedValidationErrors<T>;\n}\n\n/**\n * Safely truncates data for error messages to avoid exposing sensitive information.\n * @param data The data to truncate\n * @param maxLength Maximum length of the truncated string (default: 200)\n * @returns Truncated string representation\n */\nfunction truncateForLogging(data: unknown, maxLength: number = 200): string {\n try {\n const stringified = JSON.stringify(data, null, 2);\n if (stringified.length <= maxLength) {\n return stringified;\n }\n return stringified.slice(0, maxLength) + '... (truncated)';\n } catch {\n return '[Unable to serialize data]';\n }\n}\n\n/**\n * Validates raw suspend data against a schema.\n *\n * @param schema The schema to validate against\n * @param suspendData The raw suspend data to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateToolSuspendData<T = unknown>(\n schema: StandardSchemaWithJSON<T> | undefined,\n suspendData: unknown,\n toolId?: string,\n): { data: T; error?: undefined } | { data?: undefined; error: ValidationError<T> } {\n // If no schema, or schema is not a Standard Schema, return suspend data as-is\n if (!schema || !('~standard' in schema)) {\n return { data: suspendData as T };\n }\n\n // Validate the input using standard schema interface\n const validation = safeValidate(schema, suspendData);\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Validation failed, return error\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool suspension data validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${truncateForLogging(suspendData)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { error };\n}\n\n/**\n * Normalizes undefined/null input to an appropriate default value based on schema type.\n * This handles LLMs (Claude Sonnet 4.5, Gemini 2.4, etc.) that send undefined/null\n * instead of {} or [] when all parameters are optional.\n *\n * @param schema The Zod schema to check\n * @param input The input to normalize\n * @returns The normalized input (original value, {}, or [])\n */\nfunction normalizeNullishInput(schema: StandardSchemaWithJSON<any>, input: unknown): unknown {\n if (typeof input !== 'undefined' && input !== null) {\n return input;\n }\n\n const jsonSchema = standardSchemaToJSONSchema(schema, { io: 'input' });\n\n // Check if schema is an array type (using typeName to avoid dual-package hazard)\n if (jsonSchema.type === 'array') {\n return [];\n }\n\n // Check if schema is an object type (using typeName to avoid dual-package hazard)\n if (jsonSchema.type === 'object') {\n return {};\n }\n\n // For other schema types, return the original input and let Zod validate\n return input;\n}\n\n/**\n * Checks if a value is a plain object (created by {} or new Object()).\n * This excludes class instances, built-in objects like Date/Map/URL, etc.\n *\n * @param value The value to check\n * @returns true if the value is a plain object\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Recursively converts undefined values to null in an object.\n * This is needed for OpenAI compat layers which convert .optional() to .nullable()\n * for strict mode compliance. When fields are omitted (undefined), we convert them\n * to null so the schema validation passes, and the transform then converts null back\n * to undefined. (GitHub #11457)\n *\n * Only recurses into plain objects to preserve class instances and built-in objects\n * like Date, Map, URL, etc. (GitHub #11502)\n *\n * @param input The input to process\n * @returns The processed input with undefined values converted to null\n */\nfunction convertUndefinedToNull(input: unknown): unknown {\n if (input === undefined) {\n return null;\n }\n\n if (input === null || typeof input !== 'object') {\n return input;\n }\n\n if (Array.isArray(input)) {\n return input.map(convertUndefinedToNull);\n }\n\n // Only recurse into plain objects - preserve class instances, built-in objects\n // (Date, Map, Set, URL, etc.) and any other non-plain objects\n if (!isPlainObject(input)) {\n return input;\n }\n\n // It's a plain object - recursively process all properties\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = convertUndefinedToNull(value);\n }\n return result;\n}\n\n/**\n * Recursively strips null/undefined values from object properties.\n * This handles LLMs (e.g. Gemini) that send null for .optional() fields,\n * where Zod expects undefined, not null. By stripping nullish values,\n * we let Zod treat them as \"not provided\" which matches .optional() semantics.\n * (GitHub #12362)\n *\n * @param input The input to process\n * @returns The processed input with null/undefined values stripped from objects\n */\nfunction stripNullishValues(input: unknown): unknown {\n // Top-level null/undefined becomes undefined\n if (input === null || input === undefined) {\n return undefined;\n }\n\n if (typeof input !== 'object') {\n return input;\n }\n\n if (Array.isArray(input)) {\n // For arrays, recursively process elements but keep nulls in arrays\n // (array elements with null may be intentional)\n return input.map(item => (item === null ? null : stripNullishValues(item)));\n }\n\n // Only recurse into plain objects - preserve class instances, built-in objects\n if (!isPlainObject(input)) {\n return input;\n }\n\n // It's a plain object - recursively process all properties, omitting null/undefined values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n if (value === null || value === undefined) {\n // Omit null/undefined values - equivalent to \"not provided\" for optional fields\n continue;\n }\n result[key] = stripNullishValues(value);\n }\n return result;\n}\n\n/**\n * Strip null/undefined values only at specific paths that caused validation errors.\n * Preserves null for .nullable() fields that are valid.\n */\nfunction stripNullishValuesAtPaths(input: unknown, paths: Set<string>, currentPath = ''): unknown {\n if (input === null || input === undefined) {\n return paths.has(currentPath) ? undefined : input;\n }\n\n if (typeof input !== 'object') {\n return input;\n }\n\n if (Array.isArray(input)) {\n return input.map((item, i) =>\n stripNullishValuesAtPaths(item, paths, currentPath ? `${currentPath}.${i}` : String(i)),\n );\n }\n\n if (!isPlainObject(input)) {\n return input;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n const fieldPath = currentPath ? `${currentPath}.${key}` : key;\n if ((value === null || value === undefined) && paths.has(fieldPath)) {\n // Only omit null/undefined for fields that caused validation errors\n continue;\n }\n result[key] = stripNullishValuesAtPaths(value, paths, fieldPath);\n }\n return result;\n}\n\n/**\n * Gets the value at a path in a nested object, using the same path segment format\n * as Standard Schema validation issues.\n *\n * @param obj The object to traverse\n * @param pathSegments Array of path segments from a validation issue\n * @returns The value at the path, or a sentinel symbol if the path doesn't exist\n */\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND');\nfunction getValueAtPath(obj: unknown, pathSegments: ReadonlyArray<PropertyKey | { key: PropertyKey }>): unknown {\n let current: unknown = obj;\n for (const segment of pathSegments) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return PATH_NOT_FOUND;\n }\n const key =\n typeof segment === 'object' && segment !== null && 'key' in segment ? String(segment.key) : String(segment);\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n/**\n * Coerces stringified JSON values in object properties when the schema expects\n * an array or object but the LLM returned a JSON string.\n *\n * Some LLMs (e.g., GLM4.7) return stringified JSON for array/object parameters:\n * { \"args\": \"[\\\"parse_excel.py\\\"]\" }\n * instead of:\n * { \"args\": [\"parse_excel.py\"] }\n *\n * This function walks the top-level properties of a plain object and attempts\n * to JSON.parse string values when the schema expects a non-string type.\n * (GitHub #12757)\n *\n * @param schema The Zod schema to check field types against\n * @param input The input to process\n * @returns The input with stringified JSON values coerced, or the original input\n */\nfunction coerceStringifiedJsonValues(schema: StandardSchemaWithJSON<unknown>, input: unknown): unknown {\n // Only process plain objects with object schemas\n if (!isPlainObject(input)) {\n return input;\n }\n\n const unwrapped = unwrapZodType(schema as any);\n if (!isZodObject(unwrapped)) {\n return input;\n }\n\n const shape = (unwrapped as any).shape;\n if (!shape || typeof shape !== 'object') {\n return input;\n }\n\n let changed = false;\n const result: Record<string, unknown> = { ...input };\n\n for (const [key, value] of Object.entries(input)) {\n if (typeof value !== 'string') {\n continue;\n }\n\n const fieldSchema = shape[key];\n if (!fieldSchema) {\n continue;\n }\n\n // Unwrap the field schema to find the base type\n const baseFieldSchema = unwrapZodType(fieldSchema);\n\n // Only attempt coercion if the schema expects a non-string type\n // and the string looks like it could be JSON (starts with [ or {)\n if (getZodTypeName(baseFieldSchema) === 'ZodString') {\n continue;\n }\n\n const trimmed = value.trim();\n if (\n (isZodArray(baseFieldSchema) && trimmed.startsWith('[')) ||\n (isZodObject(baseFieldSchema) && trimmed.startsWith('{'))\n ) {\n try {\n const parsed = JSON.parse(value);\n if (\n (isZodArray(baseFieldSchema) && Array.isArray(parsed)) ||\n (isZodObject(baseFieldSchema) && isPlainObject(parsed))\n ) {\n result[key] = parsed;\n changed = true;\n }\n } catch {\n // Not valid JSON, leave as-is\n }\n }\n }\n\n return changed ? result : input;\n}\n\n/**\n * Validates raw input data against a schema.\n *\n * @param schema The schema to validate against (or undefined to skip validation)\n * @param input The raw input data to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateToolInput<T = unknown>(\n schema: StandardSchemaWithJSON<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T; error?: undefined } | { data?: undefined; error: ValidationError<T> } {\n // If no schema, or schema is not a Standard Schema (e.g. plain JSON Schema from Vercel tools),\n // return input as-is. Only validate when we have a proper Standard Schema with ~standard.validate.\n if (!schema || !('~standard' in schema)) {\n return { data: input as T };\n }\n\n // Validation pipeline:\n //\n // 1. normalizeNullishInput: Convert top-level null/undefined to {} or [] based on schema type.\n // Handles LLMs that send undefined instead of {} or [] for all-optional parameters.\n //\n // 2. convertUndefinedToNull: Convert undefined values to null in object properties.\n // Needed for OpenAI compat layers that convert .optional() to .nullable() for\n // strict mode compliance. The schema's transform converts null back to undefined.\n // (GitHub #11457)\n //\n // 3. First validation attempt with null values preserved. This handles .nullable()\n // schemas correctly (where null is a valid value).\n //\n // 4. If validation fails, retry with stringified JSON values coerced to their\n // proper types. Some LLMs (e.g. GLM4.7) return JSON arrays/objects as strings.\n // (GitHub #12757)\n //\n // 5. If validation still fails, retry with null values stripped from object properties.\n // This handles LLMs (e.g. Gemini) that send null for .optional() fields, where\n // Zod expects undefined, not null. (GitHub #12362)\n\n // Step 1: Normalize top-level null/undefined to appropriate default\n let normalizedInput = normalizeNullishInput(schema, input);\n\n // Step 2: Convert undefined values to null recursively (GitHub #11457)\n normalizedInput = convertUndefinedToNull(normalizedInput);\n\n // Step 3: Validate the normalized input\n const validation = safeValidate(schema, normalizedInput);\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Step 4: Retry with stringified JSON values coerced (GitHub #12757)\n // LLMs like GLM4.7 send stringified JSON for array/object parameters, e.g.\n // { \"args\": \"[\\\"file.py\\\"]\" } instead of { \"args\": [\"file.py\"] }.\n const coercedInput = coerceStringifiedJsonValues(schema, normalizedInput);\n if (coercedInput !== normalizedInput) {\n const coercedValidation = safeValidate(schema, coercedInput);\n if ('value' in coercedValidation) {\n return { data: coercedValidation.value };\n }\n }\n\n // Step 5: Retry with null values stripped only for failing fields (GitHub #12362)\n // LLMs like Gemini send null for optional fields, but Zod's .optional() only\n // accepts undefined, not null. We only strip nulls for fields that caused\n // validation errors, preserving null for .nullable() schemas that need it.\n //\n // We detect null-related failures by checking the actual value at the failing\n // path rather than relying on error message string matching (GitHub #14476).\n // This ensures we catch null values regardless of the validator's error message\n // format (e.g., \"must be string\", \"must be object\", etc.).\n const failingNullPaths = new Set(\n validation.issues\n .filter(issue => {\n if (!issue.path || issue.path.length === 0) return false;\n const value = getValueAtPath(normalizedInput, issue.path);\n return value === null || value === undefined;\n })\n .map(issue => issue.path?.map(p => (typeof p === 'object' && 'key' in p ? String(p.key) : String(p))).join('.'))\n .filter((p): p is string => !!p),\n );\n const strippedInput =\n failingNullPaths.size > 0 ? stripNullishValuesAtPaths(input, failingNullPaths) : stripNullishValues(input);\n const normalizedStripped = normalizeNullishInput(schema, strippedInput);\n const retryValidation = safeValidate(schema, normalizedStripped);\n\n if ('value' in retryValidation) {\n return { data: retryValidation.value };\n }\n\n // Step 6: Retry with common prompt alias normalization (GitHub #14154)\n // LLMs (especially Claude Sonnet via custom gateways) sometimes drift from\n // using \"prompt\" to \"query\", \"message\", or \"input\" after repeated sub-agent\n // tool calls in the same thread. Coerce these aliases to \"prompt\" and retry.\n // Only applies when the schema actually declares a \"prompt\" field.\n const promptJsonSchema = standardSchemaToJSONSchema(schema, { io: 'input' });\n const schemaExpectsPrompt =\n promptJsonSchema.type === 'object' &&\n promptJsonSchema.properties != null &&\n 'prompt' in promptJsonSchema.properties;\n\n if (\n schemaExpectsPrompt &&\n normalizedInput != null &&\n typeof normalizedInput === 'object' &&\n !Array.isArray(normalizedInput)\n ) {\n const obj = normalizedInput as Record<string, unknown>;\n if (obj.prompt == null) {\n const alias = [obj.query, obj.message, obj.input].find((v): v is string => typeof v === 'string');\n if (alias !== undefined) {\n const coercedPromptInput = { ...obj, prompt: alias };\n const coercedPromptValidation = safeValidate(schema, coercedPromptInput);\n if ('value' in coercedPromptValidation) {\n return { data: coercedPromptValidation.value };\n }\n }\n }\n }\n\n // All attempts failed - return the original (non-stripped) error since it's\n // more informative about what the schema actually expects\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool input validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${truncateForLogging(input)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { error };\n}\n\n/**\n * Validates tool output data against a schema.\n *\n * @param schema The schema to validate against\n * @param output The output data to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateToolOutput<T = unknown>(\n schema: StandardSchemaWithJSON<T> | undefined,\n output: unknown,\n toolId?: string,\n suspendCalled?: boolean,\n): { data: T; error?: undefined } | { data?: undefined; error: ValidationError<T> } {\n // If no schema, not a Standard Schema, or suspend was called, return output as-is\n if (!schema || !('~standard' in schema) || suspendCalled) {\n return { data: output as T };\n }\n\n // Validate the output using standard schema interface\n const validation = safeValidate(schema, output);\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Validation failed, return error\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool output validation failed${toolId ? ` for ${toolId}` : ''}. The tool returned invalid output:\\n${errorMessages}\\n\\nReturned output: ${truncateForLogging(output)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { error };\n}\n\n/**\n * Keys that are considered sensitive and should be redacted in error messages.\n */\nconst SENSITIVE_KEYS = ['password', 'secret', 'token', 'apiKey', 'api_key', 'auth', 'credential'];\n\n/**\n * Redacts sensitive keys from an object for safe logging.\n * @param obj The object to redact\n * @returns A new object with sensitive values replaced with '[REDACTED]'\n */\nfunction redactSensitiveKeys(obj: unknown): unknown {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(redactSensitiveKeys);\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (SENSITIVE_KEYS.some(sensitive => key.toLowerCase().includes(sensitive.toLowerCase()))) {\n result[key] = '[REDACTED]';\n } else if (typeof value === 'object' && value !== null) {\n result[key] = redactSensitiveKeys(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Validates request context data against a schema.\n * This is used to validate the request context before tool execution.\n *\n * @param schema The schema to validate against (PublicSchema which accepts Zod, JSONSchema, etc.)\n * @param requestContext The request context to validate\n * @param identifier Optional identifier (tool/step ID) for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateRequestContext<T = any>(\n schema: PublicSchema<T> | undefined,\n requestContext: RequestContext | undefined,\n identifier?: string,\n): { data: T | Record<string, any>; error?: ValidationError<T> } {\n // If no schema, return request context values as-is\n if (!schema) {\n return { data: (requestContext?.all ?? {}) as T };\n }\n\n // Get the values from request context\n const contextValues = requestContext?.all ?? {};\n\n // Convert PublicSchema to StandardSchemaWithJSON for validation\n const standardSchema = toStandardSchema(schema);\n\n // Validate using standard schema interface\n const validation = standardSchema['~standard'].validate(contextValues);\n\n if (validation instanceof Promise) {\n throw new Error('Your schema is async, which is not supported. Please use a sync schema.');\n }\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Validation failed, return error\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n // Redact sensitive keys before including in error message\n const redactedContext = redactSensitiveKeys(contextValues);\n\n const error: ValidationError<T> = {\n error: true,\n message: `Request context validation failed${identifier ? ` for ${identifier}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided request context: ${truncateForLogging(redactedContext)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { data: contextValues as T, error };\n}\n","import type { Mastra } from '../mastra';\nimport { RequestContext } from '../request-context';\nimport { toStandardSchema } from '../schema';\nimport type { PublicSchema, StandardSchemaWithJSON, InferPublicSchema } from '../schema';\nimport type { SuspendOptions } from '../workflows';\nimport type { McpMetadata, MCPToolProperties, ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput, validateToolOutput, validateToolSuspendData, validateRequestContext } from './validation';\n\n/**\n * Marker to identify Mastra tools even when `instanceof` fails.\n * This can happen in environments like Vite SSR where the same module\n * may be loaded multiple times, creating different class instances.\n * Uses Symbol.for() so the same symbol is shared across module copies.\n * Follows the naming convention: <org>.<product>.<category>.<className>\n */\nexport const MASTRA_TOOL_MARKER = Symbol.for('mastra.core.tool.Tool');\n\n/**\n * A type-safe tool that agents and workflows can call to perform specific actions.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n *\n * @example Basic tool with validation\n * ```typescript\n * const weatherTool = createTool({\n * id: 'get-weather',\n * description: 'Get weather for a location',\n * inputSchema: z.object({\n * location: z.string(),\n * units: z.enum(['celsius', 'fahrenheit']).optional()\n * }),\n * execute: async (inputData) => {\n * return await fetchWeather(inputData.location, inputData.units);\n * }\n * });\n * ```\n *\n * @example Tool requiring approval\n * ```typescript\n * const deleteFileTool = createTool({\n * id: 'delete-file',\n * description: 'Delete a file',\n * requireApproval: true,\n * inputSchema: z.object({ filepath: z.string() }),\n * execute: async (inputData) => {\n * await fs.unlink(inputData.filepath);\n * return { deleted: true };\n * }\n * });\n * ```\n *\n * @example Tool with Mastra integration\n * ```typescript\n * const saveTool = createTool({\n * id: 'save-data',\n * description: 'Save data to storage',\n * inputSchema: z.object({ key: z.string(), value: z.any() }),\n * execute: async (inputData, context) => {\n * const storage = context?.mastra?.getStorage();\n * await storage?.set(inputData.key, inputData.value);\n * return { saved: true };\n * }\n * });\n * ```\n */\nexport class Tool<\n TSchemaIn = unknown,\n TSchemaOut = unknown,\n TSuspendSchema = unknown,\n TResumeSchema = unknown,\n TContext extends ToolExecutionContext<TSuspendSchema, TResumeSchema, any> = ToolExecutionContext<\n TSuspendSchema,\n TResumeSchema\n >,\n TId extends string = string,\n TRequestContext extends Record<string, any> | unknown = unknown,\n> implements ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext, TId, TRequestContext> {\n /** Unique identifier for the tool */\n id: TId;\n\n /** Description of what the tool does */\n description: string;\n\n /** Schema for validating input parameters */\n inputSchema?: StandardSchemaWithJSON<TSchemaIn>;\n\n /** Schema for validating output structure */\n outputSchema?: StandardSchemaWithJSON<TSchemaOut>;\n\n /** Schema for suspend operation data */\n suspendSchema?: StandardSchemaWithJSON<TSuspendSchema>;\n\n /** Schema for resume operation data */\n resumeSchema?: StandardSchemaWithJSON<TResumeSchema>;\n\n /**\n * Schema for validating request context values.\n * When provided, the request context will be validated against this schema before tool execution.\n */\n requestContextSchema?: PublicSchema<TRequestContext>;\n\n /**\n * Tool execution function\n * @param inputData - The raw, validated input data\n * @param context - Optional execution context with metadata\n * @returns Promise resolving to tool output or a ValidationError if input validation fails\n */\n execute?: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext, TId, TRequestContext>['execute'];\n\n /** Parent Mastra instance for accessing shared resources */\n mastra?: Mastra;\n\n /**\n * Whether the tool requires explicit user approval before execution\n * @example\n * ```typescript\n * // For destructive operations\n * requireApproval: true\n * ```\n */\n requireApproval?: boolean;\n\n /**\n * Provider-specific options passed to the model when this tool is used.\n * Keys are provider names (e.g., 'anthropic', 'openai'), values are provider-specific configs.\n * @example\n * ```typescript\n * providerOptions: {\n * anthropic: {\n * cacheControl: { type: 'ephemeral' }\n * }\n * }\n * ```\n */\n providerOptions?: Record<string, Record<string, unknown>>;\n\n /**\n * Optional function to transform the tool's raw output before sending it to the model.\n * The raw result is still available for application logic; only the model sees the transformed version.\n */\n toModelOutput?: (output: TSchemaOut) => unknown;\n\n /**\n * Optional MCP-specific properties including annotations and metadata.\n * Only relevant when the tool is being used in an MCP context.\n * @example\n * ```typescript\n * mcp: {\n * annotations: {\n * title: 'Weather Lookup',\n * readOnlyHint: true,\n * destructiveHint: false\n * },\n * _meta: {\n * version: '1.0.0',\n * author: 'team@example.com'\n * }\n * }\n * ```\n */\n mcp?: MCPToolProperties;\n\n onInputStart?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onInputStart'];\n onInputDelta?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onInputDelta'];\n onInputAvailable?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onInputAvailable'];\n onOutput?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onOutput'];\n\n /**\n * Examples of valid tool inputs passed through to the AI SDK.\n */\n inputExamples?: Array<{ input: Record<string, unknown> }>;\n\n /**\n * Metadata identifying this tool as originating from an MCP server.\n * Set automatically by the MCP client when creating tools.\n */\n mcpMetadata?: McpMetadata;\n\n /**\n * Creates a new Tool instance with input validation wrapper.\n *\n * @param opts - Tool configuration and execute function\n * @example\n * ```typescript\n * const tool = new Tool({\n * id: 'my-tool',\n * description: 'Does something useful',\n * inputSchema: z.object({ name: z.string() }),\n * execute: async (inputData) => ({ greeting: `Hello ${inputData.name}` })\n * });\n * ```\n */\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext, TId, TRequestContext>) {\n (this as any)[MASTRA_TOOL_MARKER] = true;\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema ? toStandardSchema(opts.inputSchema) : undefined;\n this.outputSchema = opts.outputSchema ? toStandardSchema(opts.outputSchema) : undefined;\n this.suspendSchema = opts.suspendSchema ? toStandardSchema(opts.suspendSchema) : undefined;\n this.resumeSchema = opts.resumeSchema ? toStandardSchema(opts.resumeSchema) : undefined;\n this.requestContextSchema = opts.requestContextSchema;\n this.mastra = opts.mastra;\n this.requireApproval = opts.requireApproval || false;\n this.providerOptions = opts.providerOptions;\n this.toModelOutput = opts.toModelOutput;\n this.inputExamples = opts.inputExamples;\n this.mcp = opts.mcp;\n this.mcpMetadata = opts.mcpMetadata;\n this.onInputStart = opts.onInputStart;\n this.onInputDelta = opts.onInputDelta;\n this.onInputAvailable = opts.onInputAvailable;\n this.onOutput = opts.onOutput;\n\n // Tools receive two parameters:\n // 1. input - The raw, validated input data\n // 2. context - Execution metadata (mastra, suspend, etc.)\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (inputData: TSchemaIn, context?: any) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, inputData, this.id);\n if (error) {\n return error;\n }\n\n // Validate request context if schema exists\n const { error: requestContextError } = validateRequestContext(\n this.requestContextSchema,\n context?.requestContext,\n this.id,\n );\n if (requestContextError) {\n return requestContextError as any;\n }\n\n let suspendData = null;\n\n const baseContext = context\n ? {\n ...context,\n ...(context.suspend\n ? {\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n return context.suspend?.(args, suspendOptions);\n },\n }\n : {}),\n }\n : {};\n\n // Organize context based on execution source\n let organizedContext = baseContext;\n if (!context) {\n // No context provided - create a minimal context with requestContext\n organizedContext = {\n requestContext: new RequestContext(),\n mastra: undefined,\n };\n } else {\n // Check if this is agent execution (has toolCallId and messages)\n const isAgentExecution = baseContext.toolCallId && baseContext.messages;\n\n // Check if this is workflow execution (has workflow properties)\n // Agent execution takes precedence - don't treat as workflow if it's an agent call\n const isWorkflowExecution = !isAgentExecution && (baseContext.workflow || baseContext.workflowId);\n\n if (isAgentExecution && !baseContext.agent) {\n // Reorganize agent context - nest agent-specific properties under 'agent' key\n const {\n agentId,\n toolCallId,\n messages,\n suspend,\n resumeData,\n threadId,\n resourceId,\n writableStream,\n ...rest\n } = baseContext;\n organizedContext = {\n ...rest,\n agent: {\n agentId: agentId || '',\n toolCallId,\n messages,\n suspend,\n resumeData,\n threadId,\n resourceId,\n writableStream,\n },\n // Ensure requestContext is always present\n requestContext: rest.requestContext || new RequestContext(),\n };\n } else if (isWorkflowExecution && !baseContext.workflow) {\n // Reorganize workflow context - nest workflow-specific properties under 'workflow' key\n const { workflowId, runId, state, setState, suspend, resumeData, ...rest } = baseContext;\n organizedContext = {\n ...rest,\n workflow: {\n workflowId,\n runId,\n state,\n setState,\n suspend,\n resumeData,\n },\n // Ensure requestContext is always present\n requestContext: rest.requestContext || new RequestContext(),\n };\n } else {\n // Ensure requestContext is always present even for direct execution\n organizedContext = {\n ...baseContext,\n agent: baseContext.agent\n ? {\n ...baseContext.agent,\n agentId: baseContext.agent.agentId ?? '',\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n return baseContext.agent?.suspend?.(args, suspendOptions);\n },\n }\n : baseContext.agent,\n workflow: baseContext.workflow\n ? {\n ...baseContext.workflow,\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n return baseContext.workflow?.suspend?.(args, suspendOptions);\n },\n }\n : baseContext.workflow,\n requestContext: baseContext.requestContext || new RequestContext(),\n };\n }\n }\n\n const resumeData =\n organizedContext.agent?.resumeData ?? organizedContext.workflow?.resumeData ?? organizedContext?.resumeData;\n\n if (resumeData) {\n const resumeValidation = validateToolInput(this.resumeSchema, resumeData, this.id);\n if (resumeValidation.error) {\n return resumeValidation.error as any;\n }\n }\n\n // Call the original execute with validated input and organized context\n const output = await originalExecute(data as any, organizedContext);\n\n if (suspendData) {\n const suspendValidation = validateToolSuspendData(this.suspendSchema, suspendData, this.id);\n if (suspendValidation.error) {\n return suspendValidation.error as any;\n }\n }\n\n const skiptOutputValidation = !!(typeof output === 'undefined' && suspendData);\n\n // Validate output if schema exists\n const outputValidation = validateToolOutput(this.outputSchema, output, this.id, skiptOutputValidation);\n\n if (outputValidation.error) {\n return outputValidation.error as any;\n }\n\n return outputValidation.data;\n };\n }\n }\n}\n\n/**\n * Creates a type-safe tool with automatic input validation.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n * @template TExecute - Execute function type\n *\n * @param opts - Tool configuration including schemas and execute function\n * @returns Type-safe Tool instance with conditional typing based on schemas\n *\n * @example Simple tool\n * ```typescript\n * const greetTool = createTool({\n * id: 'greet',\n * description: 'Say hello',\n * execute: async () => ({ message: 'Hello!' })\n * });\n * ```\n *\n * @example Tool with input validation\n * ```typescript\n * const calculateTool = createTool({\n * id: 'calculate',\n * description: 'Perform calculations',\n * inputSchema: z.object({\n * operation: z.enum(['add', 'subtract']),\n * a: z.number(),\n * b: z.number()\n * }),\n * execute: async (inputData) => {\n * const result = inputData.operation === 'add'\n * ? inputData.a + inputData.b\n * : inputData.a - inputData.b;\n * return { result };\n * }\n * });\n * ```\n *\n * @example Tool with output schema\n * ```typescript\n * const userTool = createTool({\n * id: 'get-user',\n * description: 'Get user data',\n * inputSchema: z.object({ userId: z.string() }),\n * outputSchema: z.object({\n * id: z.string(),\n * name: z.string(),\n * email: z.string()\n * }),\n * execute: async (inputData) => {\n * return await fetchUser(inputData.userId);\n * }\n * });\n * ```\n *\n * @example Tool with external API\n * ```typescript\n * const weatherTool = createTool({\n * id: 'weather',\n * description: 'Get weather data',\n * inputSchema: z.object({\n * city: z.string(),\n * units: z.enum(['metric', 'imperial']).default('metric')\n * }),\n * execute: async (inputData) => {\n * const response = await fetch(\n * `https://api.weather.com/v1/weather?q=${inputData.city}&units=${inputData.units}`\n * );\n * return response.json();\n * }\n * });\n * ```\n */\ntype SchemaLike = PublicSchema<any> | undefined;\ntype InferSchema<T extends SchemaLike> = T extends PublicSchema<any> ? InferPublicSchema<T> : unknown;\n\ntype CreateToolOpts<\n TId extends string,\n TInputSchema extends SchemaLike,\n TOutputSchema extends SchemaLike,\n TSuspendSchema extends SchemaLike,\n TResumeSchema extends SchemaLike,\n TRequestContext,\n TContext extends ToolExecutionContext<InferSchema<TSuspendSchema>, InferSchema<TResumeSchema>, TRequestContext>,\n> = Omit<\n ToolAction<\n InferSchema<TInputSchema>,\n InferSchema<TOutputSchema>,\n InferSchema<TSuspendSchema>,\n InferSchema<TResumeSchema>,\n TContext,\n TId,\n TRequestContext\n >,\n 'inputSchema' | 'outputSchema' | 'suspendSchema' | 'resumeSchema'\n> & {\n inputSchema?: TInputSchema;\n outputSchema?: TOutputSchema;\n suspendSchema?: TSuspendSchema;\n resumeSchema?: TResumeSchema;\n};\nexport function createTool<\n TId extends string = string,\n TInputSchema extends SchemaLike = undefined,\n TOutputSchema extends SchemaLike = undefined,\n TSuspendSchema extends SchemaLike = undefined,\n TResumeSchema extends SchemaLike = undefined,\n TRequestContext extends Record<string, any> | unknown = unknown,\n TContext extends ToolExecutionContext<InferSchema<TSuspendSchema>, InferSchema<TResumeSchema>, TRequestContext> =\n ToolExecutionContext<InferSchema<TSuspendSchema>, InferSchema<TResumeSchema>, TRequestContext>,\n>(\n opts: CreateToolOpts<TId, TInputSchema, TOutputSchema, TSuspendSchema, TResumeSchema, TRequestContext, TContext>,\n): Tool<\n InferSchema<TInputSchema>,\n InferSchema<TOutputSchema>,\n InferSchema<TSuspendSchema>,\n InferSchema<TResumeSchema>,\n TContext,\n TId,\n TRequestContext\n> {\n return new Tool(opts);\n}\n","import { Tool, MASTRA_TOOL_MARKER } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Mastra Tool, using both instanceof and marker.\n * The marker fallback handles environments like Vite SSR where the same\n * module may be loaded multiple times, causing instanceof to fail.\n */\nexport function isMastraTool(tool: unknown): boolean {\n return tool instanceof Tool || (typeof tool === 'object' && tool !== null && MASTRA_TOOL_MARKER in tool);\n}\n\n/**\n * Checks if a tool is a Vercel Tool (AI SDK tool)\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Mastra's Tool class\n // AI SDK tools must have an execute function and either:\n // - 'parameters' (v4) or 'inputSchema' (v5/v6)\n // This prevents plain objects with inputSchema (like client tools) from being treated as VercelTools\n return !!(\n tool &&\n !isMastraTool(tool) &&\n ('parameters' in tool || ('execute' in tool && typeof tool.execute === 'function' && 'inputSchema' in tool))\n );\n}\n\ntype ProviderTool = {\n type: 'provider-defined' | 'provider';\n id: string;\n args?: Record<string, unknown>;\n inputSchema?: unknown;\n outputSchema?: unknown;\n requestContextSchema?: unknown;\n};\n\n/**\n * Checks if a tool is a provider-defined tool from the AI SDK.\n * Provider tools (like google.tools.googleSearch(), openai.tools.webSearch()) have:\n * - type: \"provider-defined\" (AI SDK v5) or \"provider\" (AI SDK v6)\n * - id: in format 'provider.tool_name' (e.g., 'google.google_search')\n *\n * These tools have a lazy `inputSchema` function that returns an AI SDK Schema\n * (not a Zod schema), so they require special handling during serialization.\n */\nexport function isProviderDefinedTool(tool: unknown): tool is ProviderTool {\n if (typeof tool !== 'object' || tool === null) return false;\n const t = tool as Record<string, unknown>;\n const isProviderType = t.type === 'provider-defined' || t.type === 'provider';\n return isProviderType && typeof t.id === 'string';\n}\n\n/**\n * Alias for callers that prefer the shorter provider-tool terminology.\n */\nexport const isProviderTool = isProviderDefinedTool;\n\n/**\n * Extracts the model-facing tool name from a provider tool id.\n * e.g. 'openai.web_search' -> 'web_search'\n */\nexport function getProviderToolName(providerId: string): string {\n return providerId.split('.').slice(1).join('.');\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
3
|
+
var chunkDXVPNFCK_cjs = require('./chunk-DXVPNFCK.cjs');
|
|
4
|
+
var chunkLU4HKXIC_cjs = require('./chunk-LU4HKXIC.cjs');
|
|
5
|
+
var chunkXCRE3OQ7_cjs = require('./chunk-XCRE3OQ7.cjs');
|
|
6
|
+
var chunkJDKHHTWK_cjs = require('./chunk-JDKHHTWK.cjs');
|
|
7
|
+
var chunkIBLDKFND_cjs = require('./chunk-IBLDKFND.cjs');
|
|
8
8
|
var chunkMR7ZWBL6_cjs = require('./chunk-MR7ZWBL6.cjs');
|
|
9
9
|
var chunk6BJ7XHRH_cjs = require('./chunk-6BJ7XHRH.cjs');
|
|
10
10
|
var chunk2VD5OGOT_cjs = require('./chunk-2VD5OGOT.cjs');
|
|
@@ -67,7 +67,7 @@ var Mastra = class {
|
|
|
67
67
|
}
|
|
68
68
|
get datasets() {
|
|
69
69
|
if (!this.#datasets) {
|
|
70
|
-
this.#datasets = new
|
|
70
|
+
this.#datasets = new chunkXCRE3OQ7_cjs.DatasetsManager(this);
|
|
71
71
|
}
|
|
72
72
|
return this.#datasets;
|
|
73
73
|
}
|
|
@@ -243,7 +243,7 @@ var Mastra = class {
|
|
|
243
243
|
this.#events[topic] = config?.events?.[topic] ?? [];
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
|
-
const workflowEventProcessor = new
|
|
246
|
+
const workflowEventProcessor = new chunkDXVPNFCK_cjs.WorkflowEventProcessor({ mastra: this });
|
|
247
247
|
const workflowEventCb = async (event, cb) => {
|
|
248
248
|
try {
|
|
249
249
|
await workflowEventProcessor.process(event, cb);
|
|
@@ -271,7 +271,7 @@ var Mastra = class {
|
|
|
271
271
|
this.#idGenerator = config?.idGenerator;
|
|
272
272
|
let storage = config?.storage;
|
|
273
273
|
if (storage) {
|
|
274
|
-
storage =
|
|
274
|
+
storage = chunkIBLDKFND_cjs.augmentWithInit(storage);
|
|
275
275
|
}
|
|
276
276
|
if (config?.observability) {
|
|
277
277
|
if (typeof config.observability.getDefaultInstance === "function") {
|
|
@@ -374,7 +374,7 @@ var Mastra = class {
|
|
|
374
374
|
if (config?.server) {
|
|
375
375
|
this.#server = config.server;
|
|
376
376
|
}
|
|
377
|
-
chunkMR7ZWBL6_cjs.registerHook("onScorerRun" /* ON_SCORER_RUN */,
|
|
377
|
+
chunkMR7ZWBL6_cjs.registerHook("onScorerRun" /* ON_SCORER_RUN */, chunkJDKHHTWK_cjs.createOnScorerHook(this));
|
|
378
378
|
this.#observability.setMastraContext({ mastra: this });
|
|
379
379
|
this.setLogger({ logger });
|
|
380
380
|
}
|
|
@@ -499,8 +499,8 @@ var Mastra = class {
|
|
|
499
499
|
throw createUndefinedPrimitiveError("agent", agent, key);
|
|
500
500
|
}
|
|
501
501
|
let mastraAgent;
|
|
502
|
-
if (
|
|
503
|
-
mastraAgent =
|
|
502
|
+
if (chunkLU4HKXIC_cjs.isToolLoopAgentLike(agent)) {
|
|
503
|
+
mastraAgent = chunkLU4HKXIC_cjs.toolLoopAgentToMastraAgent(agent, { fallbackName: key });
|
|
504
504
|
} else {
|
|
505
505
|
mastraAgent = agent;
|
|
506
506
|
}
|
|
@@ -1844,7 +1844,7 @@ var Mastra = class {
|
|
|
1844
1844
|
* ```
|
|
1845
1845
|
*/
|
|
1846
1846
|
setStorage(storage) {
|
|
1847
|
-
this.#storage =
|
|
1847
|
+
this.#storage = chunkIBLDKFND_cjs.augmentWithInit(storage);
|
|
1848
1848
|
}
|
|
1849
1849
|
setLogger({ logger }) {
|
|
1850
1850
|
this.#logger = logger;
|
|
@@ -2537,7 +2537,7 @@ var Mastra = class {
|
|
|
2537
2537
|
if (process.env.MASTRA_DEV !== "true" && process.env.MASTRA_DEV !== "1") {
|
|
2538
2538
|
return;
|
|
2539
2539
|
}
|
|
2540
|
-
import('./provider-registry-
|
|
2540
|
+
import('./provider-registry-HLGSEIJ7.cjs').then(async ({ GatewayRegistry }) => {
|
|
2541
2541
|
const registry = GatewayRegistry.getInstance();
|
|
2542
2542
|
const customGateways = Object.values(this.#gateways || {});
|
|
2543
2543
|
registry.registerCustomGateways(customGateways);
|
|
@@ -2591,5 +2591,5 @@ var Mastra = class {
|
|
|
2591
2591
|
};
|
|
2592
2592
|
|
|
2593
2593
|
exports.Mastra = Mastra;
|
|
2594
|
-
//# sourceMappingURL=chunk-
|
|
2595
|
-
//# sourceMappingURL=chunk-
|
|
2594
|
+
//# sourceMappingURL=chunk-FTUA42MM.cjs.map
|
|
2595
|
+
//# sourceMappingURL=chunk-FTUA42MM.cjs.map
|