{"version":3,"sources":["../src/tools/tool-builder/builder.ts","../src/utils.ts"],"names":["MastraBase","isVercelTool","isProviderDefinedTool","z","isZodObject","jsonSchema","standardSchemaToJSONSchema","toStandardSchema","schema","isStandardSchemaWithJSON","convertZodSchemaToAISDKSchema","executeWithContext","wrapMastra","RequestContext","ToolStream","createObservabilityContext","args","resumeData","validateToolInput","validateToolSuspendData","validateToolOutput","logger","getOrCreateSpan","EntityType","MastraError","OpenAIReasoningSchemaCompatLayer","OpenAISchemaCompatLayer","GoogleSchemaCompatLayer","AnthropicSchemaCompatLayer","DeepSeekSchemaCompatLayer","MetaSchemaCompatLayer","applyCompatLayer","createHash","Tool","jsonSchemaToZod","delay"],"mappings":"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","file":"chunk-6KVCJMJ2.cjs","sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { ProviderDefinedTool, ToolExecutionOptions } from '@internal/external-types';\nimport {\n  OpenAIReasoningSchemaCompatLayer,\n  OpenAISchemaCompatLayer,\n  GoogleSchemaCompatLayer,\n  AnthropicSchemaCompatLayer,\n  DeepSeekSchemaCompatLayer,\n  MetaSchemaCompatLayer,\n  applyCompatLayer,\n  convertZodSchemaToAISDKSchema,\n  jsonSchema,\n} from '@mastra/schema-compat';\nimport { z } from 'zod/v4';\nimport { MastraBase } from '../../base';\nimport { ErrorCategory, MastraError, ErrorDomain } from '../../error';\nimport type { Mastra } from '../../mastra';\nimport { SpanType, wrapMastra, EntityType, getOrCreateSpan, createObservabilityContext } from '../../observability';\nimport type { AnySpan } from '../../observability';\nimport { executeWithContext } from '../../observability/utils';\nimport { RequestContext } from '../../request-context';\nimport { isStandardSchemaWithJSON, toStandardSchema, standardSchemaToJSONSchema } from '../../schema';\nimport type { StandardSchemaWithJSON } from '../../schema';\nimport { isVercelTool, isProviderDefinedTool } from '../../tools/toolchecks';\nimport type { ToolOptions } from '../../utils';\nimport { safeStringify } from '../../utils';\nimport { isZodObject } from '../../utils/zod-utils';\n\nimport type { SuspendOptions } from '../../workflows';\nimport { ToolStream } from '../stream';\nimport type {\n  CoreTool,\n  McpMetadata,\n  MastraToolInvocationOptions,\n  ToolAction,\n  VercelTool,\n  VercelToolV5,\n} from '../types';\nimport { validateToolInput, validateToolOutput, validateToolSuspendData } from '../validation';\n\n/**\n * Types that can be converted to Mastra tools.\n * Includes provider-defined tools from external packages via ProviderDefinedTool.\n */\nexport type ToolToConvert = VercelTool | ToolAction<any, any, any> | VercelToolV5 | ProviderDefinedTool;\nexport type LogType = 'tool' | 'toolset' | 'client-tool';\n\ninterface LogOptions {\n  agentName?: string;\n  toolName: string;\n  type?: 'tool' | 'toolset' | 'client-tool';\n}\n\ninterface LogMessageOptions {\n  start: string;\n  error: string;\n  logData: Record<string, unknown>;\n}\n\nexport class CoreToolBuilder extends MastraBase {\n  private originalTool: ToolToConvert;\n  private options: ToolOptions;\n  private logType?: LogType;\n\n  constructor(input: {\n    originalTool: ToolToConvert;\n    options: ToolOptions;\n    logType?: LogType;\n    autoResumeSuspendedTools?: boolean;\n  }) {\n    super({ name: 'CoreToolBuilder' });\n    this.originalTool = input.originalTool;\n    this.options = input.options;\n    this.logType = input.logType;\n\n    if (\n      !isVercelTool(this.originalTool) &&\n      !isProviderDefinedTool(this.originalTool) &&\n      (input.autoResumeSuspendedTools ||\n        (this.originalTool as unknown as ToolAction<any, any>).id?.startsWith('agent-') ||\n        (this.originalTool as unknown as ToolAction<any, any>).id?.startsWith('workflow-'))\n    ) {\n      let schema = this.originalTool.inputSchema;\n      if (typeof schema === 'function') {\n        schema = schema();\n      }\n      if (!schema) {\n        schema = z.object({});\n      }\n\n      if (isZodObject(schema)) {\n        this.originalTool.inputSchema = schema.extend({\n          suspendedToolRunId: z.string().describe('The runId of the suspended tool').nullable().optional(),\n          resumeData: z\n            .any()\n            .describe('The resumeData object created from the resumeSchema of suspended tool')\n            .optional(),\n        });\n      } else {\n        // Non-Zod StandardSchemaWithJSON (e.g. JsonSchemaWrapper from JSONSchema7).\n        // Extract JSON Schema, add suspend/resume fields, re-wrap.\n        const jsonSchema = standardSchemaToJSONSchema(schema as any, { io: 'input' });\n        if (jsonSchema && typeof jsonSchema === 'object' && jsonSchema.type === 'object') {\n          jsonSchema.properties = {\n            ...jsonSchema.properties,\n            suspendedToolRunId: {\n              type: ['string', 'null'],\n              description: 'The runId of the suspended tool',\n            },\n            resumeData: {\n              description: 'The resumeData object created from the resumeSchema of suspended tool',\n            },\n          };\n          this.originalTool.inputSchema = toStandardSchema(jsonSchema) as any;\n        }\n      }\n    }\n  }\n\n  // Helper to get parameters based on tool type\n  private getParameters = () => {\n    if (isVercelTool(this.originalTool)) {\n      // Handle both 'parameters' (v4) and 'inputSchema' (v5) properties\n      // Also handle case where the schema is a function that returns a schema\n      let schema =\n        this.originalTool.parameters ??\n        ('inputSchema' in this.originalTool ? (this.originalTool as any).inputSchema : undefined) ??\n        z.object({});\n\n      // If schema is a function, call it to get the actual schema\n      if (typeof schema === 'function') {\n        schema = schema();\n      }\n\n      return schema;\n    }\n\n    // For Mastra tools, inputSchema might also be a function\n    let schema = this.originalTool.inputSchema;\n\n    if (isStandardSchemaWithJSON(schema)) {\n      return schema;\n    }\n\n    // If schema is a function, call it to get the actual schema\n    if (typeof schema === 'function') {\n      schema = schema();\n    }\n\n    return schema;\n  };\n\n  private getOutputSchema = () => {\n    if ('outputSchema' in this.originalTool) {\n      let schema = this.originalTool.outputSchema;\n\n      if (isStandardSchemaWithJSON(schema)) {\n        return schema;\n      }\n\n      // If schema is a function, call it to get the actual schema\n      if (typeof schema === 'function') {\n        schema = schema();\n      }\n\n      return schema;\n    }\n\n    return null;\n  };\n\n  private getResumeSchema = () => {\n    if ('resumeSchema' in this.originalTool) {\n      let schema = this.originalTool.resumeSchema;\n\n      // If schema is a function, call it to get the actual schema\n      if (typeof schema === 'function') {\n        schema = schema();\n      }\n\n      return schema;\n    }\n    return null;\n  };\n\n  private getSuspendSchema = () => {\n    if ('suspendSchema' in this.originalTool) {\n      let schema = this.originalTool.suspendSchema;\n\n      // If schema is a function, call it to get the actual schema\n      if (typeof schema === 'function') {\n        schema = schema();\n      }\n\n      return schema;\n    }\n    return null;\n  };\n\n  // For provider-defined tools, we need to include all required properties\n  // AI SDK v5 uses type: 'provider-defined', AI SDK v6 uses type: 'provider'\n  private buildProviderTool(tool: ToolToConvert): (CoreTool & { id: `${string}.${string}` }) | undefined {\n    if (\n      'type' in tool &&\n      (tool.type === 'provider-defined' || tool.type === 'provider') &&\n      'id' in tool &&\n      typeof tool.id === 'string' &&\n      tool.id.includes('.')\n    ) {\n      // Get schema directly from provider-defined tool (v4 uses parameters, v5 uses inputSchema)\n      let parameters: unknown =\n        'parameters' in tool ? tool.parameters : 'inputSchema' in tool ? (tool as any).inputSchema : undefined;\n\n      // If schema is a function, call it to get the actual schema\n      if (typeof parameters === 'function') {\n        parameters = parameters();\n      }\n\n      // Get output schema directly from provider-defined tool\n      let outputSchema: unknown = 'outputSchema' in tool ? (tool as any).outputSchema : undefined;\n\n      // If schema is a function, call it to get the actual schema\n      if (typeof outputSchema === 'function') {\n        outputSchema = outputSchema();\n      }\n\n      // Convert parameters to AI SDK Schema format\n      let processedParameters;\n      if (parameters !== undefined && parameters !== null) {\n        if (typeof parameters === 'object' && 'jsonSchema' in parameters) {\n          // Already in AI SDK Schema format\n          processedParameters = parameters;\n        } else if (isStandardSchemaWithJSON(parameters)) {\n          // StandardSchemaWithJSON - extract the JSON schema and wrap it\n          // Use input since parameters represent tool input\n          const jsonSchema = standardSchemaToJSONSchema(parameters, { io: 'input' });\n          processedParameters = { jsonSchema };\n        } else {\n          // Assume Zod schema - convert to AI SDK Schema\n          processedParameters = convertZodSchemaToAISDKSchema(parameters as any);\n        }\n      } else {\n        // No schema provided - create default empty object schema for AI SDK v1 compatibility\n        // OpenAI requires at minimum type: \"object\" even for tools without parameters\n        processedParameters = {\n          jsonSchema: {\n            type: 'object',\n            properties: {},\n            additionalProperties: false,\n          },\n        };\n      }\n\n      // Convert output schema to AI SDK Schema format if present\n      let processedOutputSchema;\n      if (outputSchema !== undefined && outputSchema !== null) {\n        if (typeof outputSchema === 'object' && 'jsonSchema' in outputSchema) {\n          // Already in AI SDK Schema format\n          processedOutputSchema = outputSchema;\n        } else if (isStandardSchemaWithJSON(outputSchema)) {\n          // StandardSchemaWithJSON - extract the JSON schema and wrap it\n          const jsonSchema = standardSchemaToJSONSchema(outputSchema);\n          processedOutputSchema = { jsonSchema };\n        } else {\n          // Assume Zod schema - convert to AI SDK Schema\n          processedOutputSchema = convertZodSchemaToAISDKSchema(outputSchema as any);\n        }\n      }\n\n      return {\n        ...(processedOutputSchema ? { outputSchema: processedOutputSchema } : {}),\n        type: 'provider-defined' as const,\n        id: tool.id as `${string}.${string}`,\n        // V5 SDK factories set a hardcoded `name` (e.g. \"web_search\" for\n        // anthropic.web_search_20250305). Preserve it so that when this tool\n        // is later used with a V6 provider, the bidirectional toolNameMapping\n        // resolves the correct model-facing name instead of the versioned ID.\n        ...('name' in tool && typeof tool.name === 'string' ? { name: tool.name } : {}),\n        args: ('args' in this.originalTool ? this.originalTool.args : {}) as Record<string, unknown>,\n        description: tool.description,\n        parameters: processedParameters,\n        execute: this.originalTool.execute\n          ? this.createExecute(\n              this.originalTool,\n              { ...this.options, description: this.originalTool.description },\n              this.logType,\n            )\n          : undefined,\n        toModelOutput: 'toModelOutput' in this.originalTool ? this.originalTool.toModelOutput : undefined,\n        inputExamples: 'inputExamples' in this.originalTool ? this.originalTool.inputExamples : undefined,\n      } as unknown as (CoreTool & { id: `${string}.${string}` }) | undefined;\n    }\n\n    return undefined;\n  }\n\n  private createLogMessageOptions({ agentName, toolName, type }: LogOptions): LogMessageOptions {\n    const toolType = type === 'toolset' ? 'toolset' : 'tool';\n    return {\n      start: `Executing ${toolType}`,\n      error: `Failed ${toolType} execution`,\n      logData: { agent: agentName, tool: toolName },\n    };\n  }\n\n  private createExecute(tool: ToolToConvert, options: ToolOptions, logType?: 'tool' | 'toolset' | 'client-tool') {\n    // don't add memory, mastra, or tracing context to logging (tracingContext may contain sensitive observability credentials)\n    const {\n      logger,\n      mastra: _mastra,\n      memory: _memory,\n      requestContext,\n      model,\n      tracingContext: _tracingContext,\n      tracingPolicy: _tracingPolicy,\n      ...rest\n    } = options;\n    const logModelObject = {\n      modelId: model?.modelId,\n      provider: model?.provider,\n      specificationVersion: model?.specificationVersion,\n    };\n\n    const { start, logData } = this.createLogMessageOptions({\n      agentName: options.agentName,\n      toolName: options.name,\n      type: logType,\n    });\n\n    // Extract MCP metadata once with proper typing to avoid repeated unsafe casts\n    const mcpMeta =\n      !isVercelTool(tool) && 'mcpMetadata' in tool ? (tool as { mcpMetadata?: McpMetadata }).mcpMetadata : undefined;\n\n    const execFunction = async (args: unknown, execOptions: MastraToolInvocationOptions, toolSpan?: AnySpan) => {\n      try {\n        let result;\n        let suspendData = null;\n\n        if (isVercelTool(tool)) {\n          // Handle Vercel tools (AI SDK tools)\n          result = await executeWithContext({\n            span: toolSpan,\n            fn: async () => tool?.execute?.(args, execOptions as ToolExecutionOptions),\n          });\n        } else {\n          // Handle Mastra tools - wrap mastra instance with tracing context for context propagation\n\n          /**\n           * MASTRA INSTANCE TYPES IN TOOL EXECUTION:\n           *\n           * Full Mastra & MastraPrimitives (has getAgent, getWorkflow, etc.):\n           * - Auto-generated workflow tools from agent.listWorkflows()\n           * - These get this.#mastra directly and can be wrapped\n           *\n           * MastraPrimitives only (limited interface):\n           * - Memory tools (from memory.listTools())\n           * - Assigned tools (agent.tools)\n           * - Toolset tools (from toolsets)\n           * - Client tools (passed as tools in generate/stream options)\n           * - These get mastraProxy and have limited functionality\n           *\n           * TODO: Consider providing full Mastra instance to more tool types for enhanced functionality\n           */\n          // Wrap mastra with tracing context - wrapMastra will handle whether it's a full instance or primitives\n          const wrappedMastra = options.mastra ? wrapMastra(options.mastra, { currentSpan: toolSpan }) : options.mastra;\n\n          const resumeSchema = this.getResumeSchema();\n          // Pass raw args as first parameter, context as second\n          // Properly structure context based on execution source\n          const baseContext = {\n            threadId: options.threadId,\n            resourceId: options.resourceId,\n            mastra: wrappedMastra,\n            memory: options.memory,\n            runId: options.runId,\n            requestContext: execOptions.requestContext ?? options.requestContext ?? new RequestContext(),\n            // Workspace for file operations and command execution\n            // Execution-time workspace (from prepareStep/processInputStep) takes precedence over build-time workspace\n            workspace: execOptions.workspace ?? options.workspace,\n            // Browser for web automation (lazily initialized on first use)\n            browser: options.browser,\n            writer: new ToolStream(\n              {\n                prefix: 'tool',\n                callId: execOptions.toolCallId,\n                name: options.name,\n                runId: options.runId!,\n              },\n              options.outputWriter || execOptions.outputWriter,\n            ),\n            ...createObservabilityContext({ currentSpan: toolSpan }),\n            abortSignal: execOptions.abortSignal,\n            suspend: (args: any, suspendOptions?: SuspendOptions) => {\n              suspendData = args;\n              const newSuspendOptions = {\n                ...(suspendOptions ?? {}),\n                resumeSchema:\n                  suspendOptions?.resumeSchema ??\n                  (resumeSchema\n                    ? JSON.stringify(standardSchemaToJSONSchema(toStandardSchema(resumeSchema), { io: 'input' }))\n                    : undefined),\n              };\n              return execOptions.suspend?.(args, newSuspendOptions);\n            },\n            resumeData: execOptions.resumeData,\n          };\n\n          // Check if this is agent execution\n          // Agent execution takes precedence over workflow execution because agents may\n          // use workflows internally for their agentic loop\n          // Note: AI SDK v4 doesn't pass toolCallId/messages, so we also check for agentName and threadId\n          const isAgentExecution =\n            (execOptions.toolCallId && execOptions.messages) ||\n            (options.agentName && options.threadId && !options.workflowId);\n\n          // Check if this is workflow execution (has workflow properties in options)\n          // Only consider it workflow execution if it's NOT agent execution\n          const isWorkflowExecution = !isAgentExecution && (options.workflow || options.workflowId);\n\n          let toolContext;\n          if (isAgentExecution) {\n            // Nest agent-specific properties under 'agent' key\n            // Do NOT include workflow context even if workflow properties exist\n            // (agents use workflows internally but tools should see agent context)\n            const { suspend, resumeData, threadId, resourceId, ...restBaseContext } = baseContext;\n            toolContext = {\n              ...restBaseContext,\n              agent: {\n                agentId: options.agentId || '',\n                toolCallId: execOptions.toolCallId || '',\n                messages: execOptions.messages || [],\n                suspend,\n                resumeData,\n                threadId,\n                resourceId,\n                outputWriter: execOptions.outputWriter,\n              },\n            };\n          } else if (isWorkflowExecution) {\n            // Nest workflow-specific properties under 'workflow' key\n            const { suspend, resumeData, ...restBaseContext } = baseContext;\n            toolContext = {\n              ...restBaseContext,\n              workflow: options.workflow || {\n                runId: options.runId,\n                workflowId: options.workflowId,\n                state: options.state,\n                setState: options.setState,\n                suspend,\n                resumeData,\n              },\n            };\n          } else if (execOptions.mcp) {\n            // MCP execution context\n            toolContext = {\n              ...baseContext,\n              mcp: execOptions.mcp,\n            };\n          } else {\n            // Direct execution or unknown context\n            toolContext = baseContext;\n          }\n\n          const resumeData = execOptions.resumeData;\n\n          if (resumeData) {\n            const resumeValidation = validateToolInput(resumeSchema, resumeData, options.name);\n            if (resumeValidation.error) {\n              logger?.warn(resumeValidation.error.message);\n              toolSpan?.end({ output: resumeValidation.error, attributes: { success: false } });\n              return resumeValidation.error as any;\n            }\n          }\n\n          result = await executeWithContext({ span: toolSpan, fn: async () => tool?.execute?.(args, toolContext) });\n        }\n\n        if (suspendData) {\n          const suspendSchema = this.getSuspendSchema();\n          const suspendValidation = validateToolSuspendData(suspendSchema, suspendData, options.name);\n          if (suspendValidation.error) {\n            logger?.warn(suspendValidation.error.message);\n            toolSpan?.end({ output: suspendValidation.error, attributes: { success: false } });\n            return suspendValidation.error as any;\n          }\n        }\n\n        // Skip validation if suspend was called without a result\n        const shouldSkipValidation = typeof result === 'undefined' && !!suspendData;\n        if (shouldSkipValidation) {\n          toolSpan?.end({ output: result, attributes: { success: true } });\n          return result;\n        }\n\n        // Validate output for Vercel/AI SDK tools which don't have built-in validation\n        // Mastra tools handle their own validation in Tool.execute() which properly\n        // applies Zod transforms (e.g., .transform(), .pipe()) to the output\n        if (isVercelTool(tool)) {\n          const outputSchema = this.getOutputSchema();\n          const outputValidation = validateToolOutput(outputSchema, result, options.name, false);\n          if (outputValidation.error) {\n            logger?.warn(outputValidation.error.message);\n            toolSpan?.end({ output: outputValidation.error, attributes: { success: false } });\n            return outputValidation.error;\n          }\n          result = outputValidation.data;\n        }\n\n        // Return result (validated for Vercel tools, already validated for Mastra tools)\n        toolSpan?.end({ output: result, attributes: { success: true } });\n        return result;\n      } catch (error) {\n        toolSpan?.error({ error: error as Error, attributes: { success: false } });\n        throw error;\n      }\n    };\n\n    return async (args: unknown, execOptions?: MastraToolInvocationOptions) => {\n      let logger = options.logger || this.logger;\n\n      // Create tool span early so validation failures are always observable.\n      // Prefer execution-time tracingContext (passed at runtime for VNext methods)\n      // Fall back to build-time context for Legacy methods (AI SDK v4 doesn't support passing custom options)\n      const tracingContext = execOptions?.tracingContext || options.tracingContext;\n      const toolRequestContext = execOptions?.requestContext ?? options.requestContext;\n      const toolSpan = getOrCreateSpan({\n        type: mcpMeta ? SpanType.MCP_TOOL_CALL : SpanType.TOOL_CALL,\n        name: mcpMeta ? `mcp_tool: '${options.name}' on '${mcpMeta.serverName}'` : `tool: '${options.name}'`,\n        input: args,\n        entityType: EntityType.TOOL,\n        entityId: options.name,\n        entityName: options.name,\n        attributes: mcpMeta\n          ? {\n              mcpServer: mcpMeta.serverName,\n              serverVersion: mcpMeta.serverVersion,\n              toolDescription: options.description,\n            }\n          : {\n              toolDescription: options.description,\n              toolType: logType || 'tool',\n            },\n        tracingPolicy: options.tracingPolicy,\n        tracingContext: tracingContext,\n        requestContext: toolRequestContext,\n        mastra: options.mastra && 'observability' in options.mastra ? (options.mastra as Mastra) : undefined,\n      });\n\n      try {\n        logger.debug(start, { ...logData, ...rest, model: logModelObject, args });\n\n        // Validate input parameters if schema exists\n        // Use the processed schema for validation if available, otherwise fall back to original\n        const parameters = this.getParameters();\n        const { data, error } = validateToolInput(parameters, args, options.name);\n        //suspendedToolRunId is only required when resumeData is provided\n        const suspendedToolRunIdErrToIgnore =\n          error?.message?.includes('suspendedToolRunId: Required') && !(args as Record<string, unknown>)?.resumeData;\n        if (error && !suspendedToolRunIdErrToIgnore) {\n          logger.warn('Tool input validation failed', { ...logData, validationError: error.message });\n          toolSpan?.end({ output: error, attributes: { success: false } });\n          return error;\n        }\n        // Use validated/transformed data\n        args = data;\n\n        // there is a small delay in stream output so we add an immediate to ensure the stream is ready\n        return await new Promise((resolve, reject) => {\n          setImmediate(async () => {\n            try {\n              const result = await execFunction(args, execOptions!, toolSpan);\n              resolve(result);\n            } catch (err) {\n              reject(err);\n            }\n          });\n        });\n      } catch (err) {\n        const mastraError = new MastraError(\n          {\n            id: 'TOOL_EXECUTION_FAILED',\n            domain: ErrorDomain.TOOL,\n            category: ErrorCategory.USER,\n            details: {\n              errorMessage: String(err),\n              argsJson: safeStringify(args),\n              model: model?.modelId ?? '',\n            },\n          },\n          err,\n        );\n        toolSpan?.error({ error: mastraError, attributes: { success: false } });\n        logger.trackException(mastraError, { ...logData, ...rest, model: logModelObject, args });\n        throw mastraError;\n      }\n    };\n  }\n\n  buildV5() {\n    const builtTool = this.build();\n\n    if (!builtTool.parameters) {\n      throw new Error('Tool parameters are required');\n    }\n\n    const base = {\n      ...builtTool,\n      inputSchema: builtTool.parameters,\n      onInputStart: 'onInputStart' in this.originalTool ? this.originalTool.onInputStart : undefined,\n      onInputDelta: 'onInputDelta' in this.originalTool ? this.originalTool.onInputDelta : undefined,\n      onInputAvailable: 'onInputAvailable' in this.originalTool ? this.originalTool.onInputAvailable : undefined,\n      onOutput: 'onOutput' in this.originalTool ? this.originalTool.onOutput : undefined,\n    };\n\n    // For provider-defined tools, exclude execute and add name as per v5 spec\n    if (builtTool.type === 'provider-defined') {\n      const { execute, parameters, ...rest } = base;\n      // Prefer the preserved provider name (e.g. \"web_search\" from V5 SDK\n      // factories) over the ID-derived name (e.g. \"web_search_20250305\").\n      const name =\n        ('name' in builtTool && typeof builtTool.name === 'string' ? builtTool.name : null) ||\n        builtTool.id.split('.')[1] ||\n        builtTool.id;\n      return {\n        ...rest,\n        type: builtTool.type,\n        id: builtTool.id,\n        name,\n        args: builtTool.args,\n      } as VercelToolV5;\n    }\n\n    return base as VercelToolV5;\n  }\n\n  build(): CoreTool {\n    const providerTool = this.buildProviderTool(this.originalTool);\n    if (providerTool) {\n      return providerTool;\n    }\n    const model = this.options.model;\n\n    const schemaCompatLayers = [];\n\n    if (model) {\n      // Respect the model's own capability flag; do not disable it based solely on specificationVersion.\n      const supportsStructuredOutputs =\n        'supportsStructuredOutputs' in model ? (model.supportsStructuredOutputs ?? false) : false;\n\n      const modelInfo = {\n        modelId: model.modelId,\n        supportsStructuredOutputs,\n        provider: model.provider,\n      };\n\n      schemaCompatLayers.push(\n        new OpenAIReasoningSchemaCompatLayer(modelInfo),\n        new OpenAISchemaCompatLayer(modelInfo),\n        new GoogleSchemaCompatLayer(modelInfo),\n        new AnthropicSchemaCompatLayer(modelInfo),\n        new DeepSeekSchemaCompatLayer(modelInfo),\n        new MetaSchemaCompatLayer(modelInfo),\n      );\n    }\n\n    const originalSchema = this.getParameters();\n    let processedInputSchema: Schema | undefined;\n\n    if (originalSchema) {\n      if (isStandardSchemaWithJSON(originalSchema)) {\n        // Find the first applicable compatibility layer\n        const applicableLayer = schemaCompatLayers.find(layer => layer.shouldApply());\n\n        let schemaToUse: StandardSchemaWithJSON;\n        if (applicableLayer) {\n          schemaToUse = applicableLayer.processToCompatSchema(originalSchema as any);\n        } else {\n          schemaToUse = toStandardSchema(originalSchema);\n        }\n\n        processedInputSchema = jsonSchema(\n          standardSchemaToJSONSchema(schemaToUse, {\n            io: 'input',\n          }),\n          {\n            validate: (value: unknown) => {\n              const result = schemaToUse['~standard'].validate(value);\n              // standard-schema validate may return a Promise\n              if (result instanceof Promise) {\n                return result.then(r => {\n                  if ('issues' in r && r.issues) {\n                    return {\n                      success: false as const,\n                      error: new Error(r.issues.map((i: any) => i.message).join(', ')),\n                    };\n                  }\n                  return { success: true as const, value: (r as { value: unknown }).value };\n                });\n              }\n              // standard-schema returns { value } on success or { issues } on failure,\n              // but AI SDK expects { success: boolean, value/error }\n              if ('issues' in result && result.issues) {\n                return {\n                  success: false as const,\n                  error: new Error(result.issues.map((i: any) => i.message).join(', ')),\n                };\n              }\n              return { success: true as const, value: (result as { value: unknown }).value };\n            },\n          },\n        );\n      } else {\n        processedInputSchema = applyCompatLayer({\n          schema: originalSchema,\n          compatLayers: schemaCompatLayers,\n          mode: 'aiSdkSchema',\n        });\n      }\n    }\n\n    const outputSchema = this.getOutputSchema();\n    let processedOutputSchema;\n\n    if (outputSchema) {\n      if (isStandardSchemaWithJSON(outputSchema)) {\n        processedOutputSchema = standardSchemaToJSONSchema(outputSchema, { io: 'output' });\n      } else {\n        processedOutputSchema = applyCompatLayer({\n          schema: outputSchema,\n          compatLayers: [],\n          mode: 'aiSdkSchema',\n        });\n      }\n    }\n\n    // Map AI SDK's needsApproval to our requireApproval\n    // needsApproval can be boolean or a function that takes input and returns boolean\n    let requireApproval = this.options.requireApproval;\n    let needsApprovalFn: ((input: any) => boolean | Promise<boolean>) | undefined;\n\n    if (isVercelTool(this.originalTool) && 'needsApproval' in this.originalTool) {\n      const needsApproval = (this.originalTool as any).needsApproval;\n      if (typeof needsApproval === 'boolean') {\n        requireApproval = needsApproval;\n      } else if (typeof needsApproval === 'function') {\n        // Store the function to evaluate it per-call\n        needsApprovalFn = needsApproval;\n        // Set requireApproval to true so the tool-call-step knows to check the function\n        requireApproval = true;\n      }\n    }\n\n    const definition = {\n      type: 'function' as const,\n      description: this.originalTool.description,\n      requireApproval,\n      needsApprovalFn,\n      hasSuspendSchema: !!this.getSuspendSchema(),\n      execute: this.originalTool.execute\n        ? this.createExecute(\n            this.originalTool,\n            { ...this.options, description: this.originalTool.description },\n            this.logType,\n          )\n        : undefined,\n    };\n\n    return {\n      ...definition,\n      id: 'id' in this.originalTool ? this.originalTool.id : undefined,\n      parameters: processedInputSchema ?? z.object({}),\n      outputSchema: processedOutputSchema,\n      strict: 'strict' in this.originalTool ? this.originalTool.strict : undefined,\n      providerOptions: 'providerOptions' in this.originalTool ? this.originalTool.providerOptions : undefined,\n      mcp: 'mcp' in this.originalTool ? this.originalTool.mcp : undefined,\n      toModelOutput: 'toModelOutput' in this.originalTool ? this.originalTool.toModelOutput : undefined,\n      inputExamples: 'inputExamples' in this.originalTool ? this.originalTool.inputExamples : undefined,\n      onInputStart: 'onInputStart' in this.originalTool ? this.originalTool.onInputStart : undefined,\n      onInputDelta: 'onInputDelta' in this.originalTool ? this.originalTool.onInputDelta : undefined,\n      onInputAvailable: 'onInputAvailable' in this.originalTool ? this.originalTool.onInputAvailable : undefined,\n      onOutput: 'onOutput' in this.originalTool ? this.originalTool.onOutput : undefined,\n    } as unknown as CoreTool;\n  }\n}\n","import { createHash } from 'node:crypto';\nimport type { CoreMessage } from '@internal/ai-sdk-v4';\nimport { jsonSchemaToZod } from '@mastra/schema-compat/json-to-zod';\nimport { z } from 'zod/v4';\nimport type { MastraPrimitives } from './action';\nimport type { ToolsInput } from './agent';\nimport type { MastraBrowser } from './browser/browser';\nimport { ErrorCategory, ErrorDomain, MastraError } from './error';\nimport type { MastraLanguageModel, MastraLegacyLanguageModel } from './llm/model/shared.types';\nimport type { IMastraLogger } from './logger';\nimport type { Mastra } from './mastra';\nimport type { AiMessageType, MastraMemory } from './memory';\nimport type { ObservabilityContext, TracingPolicy } from './observability';\nimport type { RequestContext } from './request-context';\nimport type { CoreTool, VercelTool, VercelToolV5 } from './tools';\nimport { Tool } from './tools/tool';\nimport { CoreToolBuilder } from './tools/tool-builder/builder';\nimport type { ToolToConvert } from './tools/tool-builder/builder';\nimport { isVercelTool } from './tools/toolchecks';\nimport type { OutputWriter } from './workflows/types';\nimport type { Workspace } from './workspace/workspace';\n\n// Re-export Zod utilities for external use (isZodType is defined locally below)\nexport { getZodTypeName, getZodDef, isZodArray, isZodObject } from './utils/zod-utils';\n\nexport const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n/**\n * Safely JSON-stringifies a value, replacing circular references with \"[Circular]\".\n * Uses a stack-based approach so shared (non-circular) references are preserved.\n */\nexport function safeStringify(value: unknown, space?: string | number): string {\n  const stack: unknown[] = [];\n  return JSON.stringify(\n    value,\n    function (this: unknown, _key: string, val: unknown) {\n      if (typeof val === 'bigint') return val.toString();\n      if (val !== null && typeof val === 'object') {\n        // Trim the stack: pop entries that are no longer ancestors of the current path.\n        // `this` is the parent object containing the current key.\n        while (stack.length > 0 && stack[stack.length - 1] !== this) {\n          stack.pop();\n        }\n        if (stack.includes(val)) return '[Circular]';\n        stack.push(val);\n      }\n      return val;\n    },\n    space,\n  );\n}\n\n/**\n * Returns a JSON-serializable copy of a value by stripping circular references.\n * If the value is already serializable, returns it unchanged (no cloning overhead).\n */\nexport function ensureSerializable(value: unknown): unknown {\n  if (value === null || typeof value !== 'object') return value;\n\n  try {\n    JSON.stringify(value);\n    return value;\n  } catch {\n    return JSON.parse(safeStringify(value));\n  }\n}\n\n/**\n * Checks if a value is a plain object (not an array, function, Date, RegExp, etc.)\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (value === null || typeof value !== 'object') return false;\n  const proto = Object.getPrototypeOf(value);\n  return proto === Object.prototype || proto === null;\n}\n\n/**\n * Deep merges two objects, recursively merging nested plain objects.\n * Arrays, functions, and other non-plain objects are replaced (not merged).\n */\nexport function deepMerge<T extends object = object>(target: T, source: Partial<T>): T {\n  const output = { ...target };\n\n  if (!source) return output;\n\n  Object.keys(source).forEach(key => {\n    const targetValue = (output as Record<string, unknown>)[key];\n    const sourceValue = (source as Record<string, unknown>)[key];\n\n    // Only deep merge if both values are plain objects\n    if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n      (output as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n    } else if (sourceValue !== undefined) {\n      // For arrays, functions, primitives, and other non-plain objects: replace\n      (output as Record<string, unknown>)[key] = sourceValue;\n    }\n  });\n\n  return output;\n}\n\n/**\n * Deep equality comparison for comparing two values.\n * Handles primitives, arrays, objects, and Date instances.\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n  // Handle identical references and primitives\n  if (a === b) return true;\n\n  // Handle null/undefined\n  if (a == null || b == null) return a === b;\n\n  // Handle different types\n  if (typeof a !== typeof b) return false;\n\n  // Handle arrays\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    return a.every((item, index) => deepEqual(item, b[index]));\n  }\n\n  // Handle dates (must check before generic objects since Date is also an object)\n  if (a instanceof Date && b instanceof Date) {\n    return a.getTime() === b.getTime();\n  }\n\n  // Handle objects (after Date check to avoid treating Dates as plain objects)\n  if (typeof a === 'object' && typeof b === 'object') {\n    const aObj = a as Record<string, unknown>;\n    const bObj = b as Record<string, unknown>;\n    const aKeys = Object.keys(aObj);\n    const bKeys = Object.keys(bObj);\n\n    if (aKeys.length !== bKeys.length) return false;\n\n    // Verify that bObj has the same keys as aObj before comparing values\n    return aKeys.every(key => Object.prototype.hasOwnProperty.call(bObj, key) && deepEqual(aObj[key], bObj[key]));\n  }\n\n  return false;\n}\n\n/**\n * Generate an empty object from a JSON Schema definition.\n * Accepts both a JSON string and a pre-parsed object.\n * Recursively initializes nested object properties and respects default values.\n */\nexport function generateEmptyFromSchema(schema: string | Record<string, unknown>): Record<string, unknown> {\n  try {\n    const parsedSchema = typeof schema === 'string' ? JSON.parse(schema) : schema;\n    if (!parsedSchema || parsedSchema.type !== 'object' || !parsedSchema.properties) return {};\n    const obj: Record<string, unknown> = {};\n    for (const [key, prop] of Object.entries<Record<string, unknown>>(\n      parsedSchema.properties as Record<string, Record<string, unknown>>,\n    )) {\n      if (prop.default !== undefined) {\n        obj[key] =\n          typeof prop.default === 'object' && prop.default !== null\n            ? JSON.parse(JSON.stringify(prop.default))\n            : prop.default;\n      } else if (prop.type === 'object' && prop.properties) {\n        obj[key] = generateEmptyFromSchema(prop);\n      } else if (prop.type === 'object') {\n        obj[key] = {};\n      } else if (prop.type === 'string') {\n        obj[key] = '';\n      } else if (prop.type === 'array') {\n        obj[key] = [];\n      } else if (prop.type === 'number' || prop.type === 'integer') {\n        obj[key] = 0;\n      } else if (prop.type === 'boolean') {\n        obj[key] = false;\n      } else {\n        obj[key] = null;\n      }\n    }\n    return obj;\n  } catch {\n    return {};\n  }\n}\n\nexport interface TagMaskOptions {\n  /** Called when masking begins */\n  onStart?: () => void;\n  /** Called when masking ends */\n  onEnd?: () => void;\n  /** Called for each chunk that is masked */\n  onMask?: (chunk: string) => void;\n}\n\n/**\n * Transforms a stream by masking content between XML tags.\n * @param stream Input stream to transform\n * @param tag Tag name to mask between (e.g. for <foo>...</foo>, use 'foo')\n * @param options Optional configuration for masking behavior\n */\nexport async function* maskStreamTags(\n  stream: AsyncIterable<string>,\n  tag: string,\n  options: TagMaskOptions = {},\n): AsyncIterable<string> {\n  const { onStart, onEnd, onMask } = options;\n  const openTag = `<${tag}>`;\n  const closeTag = `</${tag}>`;\n\n  let buffer = '';\n  let fullContent = '';\n  let isMasking = false;\n  let isBuffering = false;\n\n  // used for checking in chunks that include tags or partial tags + some other non-tag text\n  // eg: \"o <tag_name\" or \"name> w\", can trim before-start to get \"<tag_name\" or after-end to get \"name>\"\n  const trimOutsideDelimiter = (text: string, delimiter: string, trim: 'before-start' | 'after-end') => {\n    if (!text.includes(delimiter)) {\n      return text;\n    }\n\n    const parts = text.split(delimiter);\n\n    if (trim === `before-start`) {\n      return `${delimiter}${parts[1]}`;\n    }\n\n    return `${parts[0]}${delimiter}`;\n  };\n\n  // Helper to check if text starts with pattern (ignoring whitespace)\n  // When checking partial tags: startsWith(buffer, openTag) checks if buffer could be start of tag\n  // When checking full tags: startsWith(chunk, openTag) checks if chunk starts with full tag\n  const startsWith = (text: string, pattern: string) => {\n    // check start of opening tag\n    if (pattern.includes(openTag.substring(0, 3))) {\n      // our pattern for checking the start is always based on xml-like tags\n      // if the pattern looks like our opening tag and the pattern also includes\n      // some other chunked text before it, we just wanted to check the xml part of the pattern\n      pattern = trimOutsideDelimiter(pattern, `<`, `before-start`);\n    }\n\n    return text.trim().startsWith(pattern.trim());\n  };\n\n  for await (const chunk of stream) {\n    fullContent += chunk;\n\n    if (isBuffering) buffer += chunk;\n\n    const chunkHasTag = startsWith(chunk, openTag);\n    const bufferHasTag = !chunkHasTag && isBuffering && startsWith(openTag, buffer);\n\n    let toYieldBeforeMaskedStartTag = ``;\n    // Check if we should start masking chunks\n    if (!isMasking && (chunkHasTag || bufferHasTag)) {\n      isMasking = true;\n      isBuffering = false;\n\n      // check if the buffered text includes text before the start tag. ex \"o <tag_name\", \"o\" should be yielded and not masked\n      const taggedTextToMask = trimOutsideDelimiter(buffer, `<`, `before-start`);\n      if (taggedTextToMask !== buffer.trim()) {\n        toYieldBeforeMaskedStartTag = buffer.replace(taggedTextToMask, ``);\n      }\n\n      buffer = '';\n      onStart?.();\n    }\n\n    // Check if we should start buffering (looks like part of the opening tag but it's not the full <tag> yet eg <ta - could be <table> but we don't know yet)\n    if (!isMasking && !isBuffering && startsWith(openTag, chunk) && chunk.trim() !== '') {\n      isBuffering = true;\n      buffer += chunk;\n      continue;\n    }\n\n    // We're buffering, need to check again if our buffer has deviated from the opening <tag> eg <tag2>\n    if (isBuffering && buffer && !startsWith(openTag, buffer)) {\n      yield buffer;\n      buffer = '';\n      isBuffering = false;\n      continue;\n    }\n\n    // Check if we should stop masking chunks (since the content includes the closing </tag>)\n    if (isMasking && fullContent.includes(closeTag)) {\n      onMask?.(chunk);\n      onEnd?.();\n      isMasking = false;\n      const lastFullContent = fullContent;\n      fullContent = ``; // reset to handle streams with multiple full tags that have text inbetween\n\n      // check to see if we have a partial chunk outside the close tag. if we do we need to yield it so it isn't swallowed with the masked text\n      const textUntilEndTag = trimOutsideDelimiter(lastFullContent, closeTag, 'after-end');\n      if (textUntilEndTag !== lastFullContent) {\n        yield lastFullContent.replace(textUntilEndTag, ``);\n      }\n\n      continue;\n    }\n\n    // We're currently masking chunks inside a <tag>\n    if (isMasking) {\n      onMask?.(chunk);\n      // in the case that there was a chunk that included a tag to mask and some other text, ex \"o <tag_name\" we need to still yield the\n      // text before the tag (\"o \") so it's not swallowed with the masked text\n      if (toYieldBeforeMaskedStartTag) {\n        yield toYieldBeforeMaskedStartTag;\n      }\n      continue;\n    }\n\n    // default yield the chunk\n    yield chunk;\n  }\n}\n\n/**\n * Resolve serialized zod output - This function takes the string output ot the `jsonSchemaToZod` function\n * and instantiates the zod object correctly.\n *\n * @param schema - serialized zod object\n * @returns resolved zod object\n */\nexport function resolveSerializedZodOutput(schema: string): z.ZodType {\n  // Creates and immediately executes a new function that takes 'z' as a parameter\n  // The function body is a string that returns the serialized zod schema\n  // When executed with the 'z' parameter, it reconstructs the zod schema in the current context\n  return Function('z', `\"use strict\";return (${schema});`)(z);\n}\n\nexport interface ToolOptions extends Partial<ObservabilityContext> {\n  name: string;\n  runId?: string;\n  threadId?: string;\n  resourceId?: string;\n  logger?: IMastraLogger;\n  description?: string;\n  mastra?: (Mastra & MastraPrimitives) | MastraPrimitives;\n  requestContext: RequestContext;\n  tracingPolicy?: TracingPolicy;\n  memory?: MastraMemory;\n  agentName?: string;\n  agentId?: string;\n  model?: MastraLanguageModel | MastraLegacyLanguageModel;\n  /**\n   * Optional async writer used to stream tool output chunks back to the caller. Tools should treat this as fire-and-forget I/O.\n   */\n  outputWriter?: OutputWriter;\n  requireApproval?: boolean;\n  // Workflow-specific properties\n  workflow?: any;\n  workflowId?: string;\n  state?: any;\n  setState?: (state: any) => void;\n  /**\n   * Workspace available for tool execution. When provided, tools can access\n   * workspace.filesystem and workspace.sandbox for file operations and command execution.\n   */\n  workspace?: Workspace;\n  /**\n   * Browser available for tool execution. When provided, tools can access\n   * browser capabilities for web automation, screenshots, and data extraction.\n   */\n  browser?: MastraBrowser;\n}\n\n/**\n * Checks if a value is a Zod type\n * @param value - The value to check\n * @returns True if the value is a Zod type, false otherwise\n */\nexport function isZodType(value: unknown): value is z.ZodType {\n  // Check if it's a Zod schema by looking for common Zod properties and methods\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    '_def' in value &&\n    'parse' in value &&\n    typeof (value as any).parse === 'function' &&\n    'safeParse' in value &&\n    typeof (value as any).safeParse === 'function'\n  );\n}\n\n// Helper function to create a deterministic hash\nfunction createDeterministicId(input: string): string {\n  return createHash('sha256').update(input).digest('hex').slice(0, 8); // Take first 8 characters for a shorter but still unique ID\n}\n\n/**\n * Sets the properties for a Vercel Tool, including an ID and inputSchema\n * @param tool - The tool to set the properties for\n * @returns The tool with the properties set\n */\nfunction setVercelToolProperties(tool: VercelTool) {\n  // Check if the tool already has inputSchema (v5 format)\n  // If it does, use it directly (it might be a function)\n  // Otherwise, convert the parameters to inputSchema\n  const inputSchema = 'inputSchema' in tool ? tool.inputSchema : convertVercelToolParameters(tool);\n\n  const toolId = !('id' in tool)\n    ? tool.description\n      ? `tool-${createDeterministicId(tool.description)}`\n      : `tool-${Math.random().toString(36).substring(2, 9)}`\n    : tool.id;\n\n  return {\n    ...tool,\n    id: toolId,\n    inputSchema,\n  };\n}\n\n/**\n * Ensures a tool has an ID and inputSchema by generating one if not present\n * @param tool - The tool to ensure has an ID and inputSchema\n * @returns The tool with an ID and inputSchema\n */\nexport function ensureToolProperties(tools: ToolsInput): ToolsInput {\n  const toolsWithProperties = Object.keys(tools).reduce<ToolsInput>((acc, key) => {\n    const tool = tools?.[key];\n    if (tool) {\n      // Check if the tool is a plain function (not a Tool instance or Vercel tool)\n      // This catches the common mistake of passing a tool factory function instead of the tool itself\n      // We need to cast to unknown first since ToolsInput doesn't include functions in its type,\n      // but users can still pass functions at runtime which causes silent failures\n      if (typeof tool === 'function' && !((tool as unknown) instanceof Tool) && !isVercelTool(tool)) {\n        throw new MastraError({\n          id: 'TOOL_INVALID_FORMAT',\n          domain: ErrorDomain.TOOL,\n          category: ErrorCategory.USER,\n          text: `Tool \"${key}\" is not a valid tool format. Tools must be created using createTool() or be a valid Vercel AI SDK tool. Received a function.`,\n        });\n      }\n\n      if (isVercelTool(tool)) {\n        acc[key] = setVercelToolProperties(tool) as VercelTool;\n      } else {\n        acc[key] = tool;\n      }\n    }\n    return acc;\n  }, {});\n\n  return toolsWithProperties;\n}\n\nfunction convertVercelToolParameters(tool: VercelTool): z.ZodType {\n  // If the tool is a Vercel Tool, check if the parameters are already a zod object\n  // If not, convert the parameters to a zod object using jsonSchemaToZod\n  // Handle case where parameters (or inputSchema in v5) is a function that returns a schema\n  let schema = tool.parameters ?? z.object({});\n\n  // If schema is a function, call it to get the actual schema\n  if (typeof schema === 'function') {\n    schema = schema();\n  }\n\n  return isZodType(schema) ? schema : resolveSerializedZodOutput(jsonSchemaToZod(schema));\n}\n\n/**\n * Converts a Vercel Tool or Mastra Tool into a CoreTool format\n * @param originalTool - The tool to convert (either VercelTool or ToolAction)\n * @param options - Tool options including Mastra-specific settings\n * @param logType - Type of tool to log (tool or toolset)\n * @returns A CoreTool that can be used by the system\n */\nexport function makeCoreTool(\n  originalTool: ToolToConvert,\n  options: ToolOptions,\n  logType?: 'tool' | 'toolset' | 'client-tool',\n  autoResumeSuspendedTools?: boolean,\n): CoreTool {\n  return new CoreToolBuilder({ originalTool, options, logType, autoResumeSuspendedTools }).build();\n}\n\nexport function makeCoreToolV5(\n  originalTool: ToolToConvert,\n  options: ToolOptions,\n  logType?: 'tool' | 'toolset' | 'client-tool',\n  autoResumeSuspendedTools?: boolean,\n): VercelToolV5 {\n  return new CoreToolBuilder({ originalTool, options, logType, autoResumeSuspendedTools }).buildV5();\n}\n\n/**\n * Creates a proxy for a Mastra instance to handle deprecated properties\n * @param mastra - The Mastra instance to proxy\n * @param logger - The logger to use for warnings\n * @returns A proxy for the Mastra instance\n */\nexport function createMastraProxy({ mastra, logger }: { mastra: Mastra; logger: IMastraLogger }) {\n  return new Proxy(mastra, {\n    get(target, prop) {\n      const hasProp = Reflect.has(target, prop);\n\n      if (hasProp) {\n        const value = Reflect.get(target, prop);\n        const isFunction = typeof value === 'function';\n        if (isFunction) {\n          return value.bind(target);\n        }\n        return value;\n      }\n\n      if (prop === 'logger') {\n        logger.warn(\"Please use 'getLogger' instead, logger is deprecated\");\n        return Reflect.apply(target.getLogger, target, []);\n      }\n\n      if (prop === 'storage') {\n        logger.warn(\"Please use 'getStorage' instead, storage is deprecated\");\n        return Reflect.get(target, 'storage');\n      }\n\n      if (prop === 'agents') {\n        logger.warn(\"Please use 'listAgents' instead, agents is deprecated\");\n        return Reflect.apply(target.listAgents, target, []);\n      }\n\n      if (prop === 'tts') {\n        logger.warn(\"Please use 'getTTS' instead, tts is deprecated\");\n        return Reflect.apply(target.getTTS, target, []);\n      }\n\n      if (prop === 'vectors') {\n        logger.warn(\"Please use 'getVectors' instead, vectors is deprecated\");\n        return Reflect.apply(target.getVectors, target, []);\n      }\n\n      if (prop === 'memory') {\n        logger.warn(\"Please use 'getMemory' instead, memory is deprecated\");\n        return Reflect.get(target, 'memory');\n      }\n\n      return Reflect.get(target, prop);\n    },\n  });\n}\n\nexport function checkEvalStorageFields(traceObject: any, logger?: IMastraLogger) {\n  const missingFields = [];\n  if (!traceObject.input) missingFields.push('input');\n  if (!traceObject.output) missingFields.push('output');\n  if (!traceObject.agentName) missingFields.push('agent_name');\n  if (!traceObject.metricName) missingFields.push('metric_name');\n  if (!traceObject.instructions) missingFields.push('instructions');\n  if (!traceObject.globalRunId) missingFields.push('global_run_id');\n  if (!traceObject.runId) missingFields.push('run_id');\n\n  if (missingFields.length > 0) {\n    if (logger) {\n      logger.warn('Skipping evaluation storage due to missing required fields', {\n        missingFields,\n        runId: traceObject.runId,\n        agentName: traceObject.agentName,\n      });\n    } else {\n      console.warn('Skipping evaluation storage due to missing required fields', {\n        missingFields,\n        runId: traceObject.runId,\n        agentName: traceObject.agentName,\n      });\n    }\n    return false;\n  }\n\n  return true;\n}\n\n// lifted from https://github.com/vercel/ai/blob/main/packages/ai/core/prompt/detect-prompt-type.ts#L27\nfunction detectSingleMessageCharacteristics(\n  message: any,\n): 'has-ui-specific-parts' | 'has-core-specific-parts' | 'message' | 'other' {\n  if (\n    typeof message === 'object' &&\n    message !== null &&\n    (message.role === 'function' || // UI-only role\n      message.role === 'data' || // UI-only role\n      'toolInvocations' in message || // UI-specific field\n      'parts' in message || // UI-specific field\n      'experimental_attachments' in message)\n  ) {\n    return 'has-ui-specific-parts';\n  } else if (\n    typeof message === 'object' &&\n    message !== null &&\n    'content' in message &&\n    (Array.isArray(message.content) || // Core messages can have array content\n      'experimental_providerMetadata' in message ||\n      'providerOptions' in message)\n  ) {\n    return 'has-core-specific-parts';\n  } else if (\n    typeof message === 'object' &&\n    message !== null &&\n    'role' in message &&\n    'content' in message &&\n    typeof message.content === 'string' &&\n    ['system', 'user', 'assistant', 'tool'].includes(message.role)\n  ) {\n    return 'message';\n  } else {\n    return 'other';\n  }\n}\n\nexport function isUiMessage(message: CoreMessage | AiMessageType): message is AiMessageType {\n  return detectSingleMessageCharacteristics(message) === `has-ui-specific-parts`;\n}\nexport function isCoreMessage(message: CoreMessage | AiMessageType): message is CoreMessage {\n  return [`has-core-specific-parts`, `message`].includes(detectSingleMessageCharacteristics(message));\n}\n\n/** Represents a validated SQL identifier (e.g., table or column name). */\ntype SqlIdentifier = string & { __brand: 'SqlIdentifier' };\n/** Represents a validated dot-separated SQL field key. */\ntype FieldKey = string & { __brand: 'FieldKey' };\n\nconst SQL_IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\n/**\n * Parses and returns a valid SQL identifier (such as a table or column name).\n * The identifier must:\n *   - Start with a letter (a-z, A-Z) or underscore (_)\n *   - Contain only letters, numbers, or underscores\n *   - Be at most 63 characters long\n *\n * @param name - The identifier string to parse.\n * @param kind - Optional label for error messages (e.g., 'table name').\n * @returns The validated identifier as a branded type.\n * @throws {Error} If the identifier does not conform to SQL naming rules.\n *\n * @example\n * const id = parseSqlIdentifier('my_table'); // Ok\n * parseSqlIdentifier('123table'); // Throws error\n */\nexport function parseSqlIdentifier(name: string, kind = 'identifier'): SqlIdentifier {\n  if (!SQL_IDENTIFIER_PATTERN.test(name) || name.length > 63) {\n    throw new Error(\n      `Invalid ${kind}: ${name}. Must start with a letter or underscore, contain only letters, numbers, or underscores, and be at most 63 characters long.`,\n    );\n  }\n  return name as SqlIdentifier;\n}\n\n/**\n * Parses and returns a valid dot-separated SQL field key (e.g., 'user.profile.name').\n * Each segment must:\n *   - Start with a letter (a-z, A-Z) or underscore (_)\n *   - Contain only letters, numbers, or underscores\n *   - Be at most 63 characters long\n *\n * @param key - The dot-separated field key string to parse.\n * @returns The validated field key as a branded type.\n * @throws {Error} If any segment of the key is invalid.\n *\n * @example\n * const key = parseFieldKey('user_profile.name'); // Ok\n * parseFieldKey('user..name'); // Throws error\n * parseFieldKey('user.123name'); // Throws error\n */\nexport function parseFieldKey(key: string): FieldKey {\n  if (!key) throw new Error('Field key cannot be empty');\n  const segments = key.split('.');\n  for (const segment of segments) {\n    if (!SQL_IDENTIFIER_PATTERN.test(segment) || segment.length > 63) {\n      throw new Error(`Invalid field key segment: ${segment} in ${key}`);\n    }\n  }\n  return key as FieldKey;\n}\n\n/**\n * Performs a fetch request with automatic retries using exponential backoff\n * @param url The URL to fetch from\n * @param options Standard fetch options\n * @param maxRetries Maximum number of retry attempts\n * @param validateResponse Optional function to validate the response beyond HTTP status\n * @returns The fetch Response if successful\n */\nexport async function fetchWithRetry(\n  url: string,\n  options: RequestInit = {},\n  maxRetries: number = 3,\n): Promise<Response> {\n  let retryCount = 0;\n  let lastError: Error | null = null;\n\n  while (retryCount < maxRetries) {\n    try {\n      const response = await fetch(url, options);\n\n      if (!response.ok) {\n        throw new Error(`Request failed with status: ${response.status} ${response.statusText}`);\n      }\n\n      return response;\n    } catch (error) {\n      lastError = error instanceof Error ? error : new Error(String(error));\n      retryCount++;\n\n      if (retryCount >= maxRetries) {\n        break;\n      }\n\n      const delay = Math.min(1000 * Math.pow(2, retryCount), 10000);\n      await new Promise(resolve => setTimeout(resolve, delay));\n    }\n  }\n\n  throw lastError || new Error('Request failed after multiple retry attempts');\n}\n\n/**\n * Removes specific keys from an object.\n * @param obj - The original object\n * @param keysToOmit - Keys to exclude from the returned object\n * @returns A new object with the specified keys removed\n */\nexport function omitKeys<T extends Record<string, any>>(obj: T, keysToOmit: string[]): Partial<T> {\n  return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToOmit.includes(key))) as Partial<T>;\n}\n\n/**\n * Selectively extracts specific fields from an object using dot notation.\n * Does not error if fields don't exist - simply omits them from the result.\n * @param obj - The source object to extract fields from\n * @param fields - Array of field paths (supports dot notation like 'output.text')\n * @returns New object containing only the specified fields\n */\nexport function selectFields(obj: any, fields: string[]): any {\n  if (!obj || typeof obj !== 'object') {\n    return obj;\n  }\n\n  const result: any = {};\n\n  for (const field of fields) {\n    const value = getNestedValue(obj, field);\n    if (value !== undefined) {\n      setNestedValue(result, field, value);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Gets a nested value from an object using dot notation\n * @param obj - Source object\n * @param path - Dot notation path (e.g., 'output.text')\n * @returns The value at the path, or undefined if not found\n */\nexport function getNestedValue(obj: any, path: string): any {\n  return path.split('.').reduce((current, key) => {\n    return current && typeof current === 'object' ? current[key] : undefined;\n  }, obj);\n}\n\n/**\n * Sets a nested value in an object using dot notation\n * @param obj - Target object\n * @param path - Dot notation path (e.g., 'output.text')\n * @param value - Value to set\n */\nexport function setNestedValue(obj: any, path: string, value: any): void {\n  const keys = path.split('.');\n  const lastKey = keys.pop();\n  if (!lastKey) {\n    return;\n  }\n\n  const target = keys.reduce((current, key) => {\n    if (!current[key] || typeof current[key] !== 'object') {\n      current[key] = {};\n    }\n    return current[key];\n  }, obj);\n\n  target[lastKey] = value;\n}\n\nexport const removeUndefinedValues = (obj: Record<string, any>) => {\n  return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== undefined));\n};\n"]}