{"version":3,"sources":["../src/stream/aisdk/v5/compat/delayed-promise.ts","../src/stream/aisdk/v5/compat/consume-stream.ts","../src/stream/base/input.ts","../src/stream/base/schema.ts","../src/stream/base/output-format-handlers.ts","../src/stream/base/output.ts","../src/agent/trip-wire.ts","../src/agent/utils.ts","../src/processors/is-processor-workflow.ts","../src/processors/span-payload.ts","../src/processors/stream-reprocess.ts","../src/processors/trailing-assistant-guard.ts","../src/processors/runner.ts"],"names":["MastraBase","attachModelStreamTransport","readModelStreamTransport","isStandardSchemaWithJSON","standardSchemaToJSONSchema","applyCompatLayer","AnthropicSchemaCompatLayer","isZodType","MastraError","ErrorDomain","ErrorCategory","parsePartialJson","isDeepEqualData","toStandardSchema","TransformStream","EventEmitter","getRootExportSpan","resolveObservabilityContext","coreContentToString","error","getErrorFromUnknown","ReadableStream","randomUUID","EntityType","messagesAreEqual","createSignal","parseMemoryRequestContext","getStateSignalsMetadata","resolveStateSignalHistory","applyStateSignal","createObservabilityContext","MessageList","state","currentSystemMessages","result","resolveModelConfig"],"mappings":"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","file":"chunk-JB3TRRZV.cjs","sourcesContent":["/**\n * Delayed promise. It is only constructed once the value is accessed.\n * This is useful to avoid unhandled promise rejections when the promise is created\n * but not accessed.\n */\nexport class DelayedPromise<T> {\n  public status: { type: 'pending' } | { type: 'resolved'; value: T } | { type: 'rejected'; error: unknown } = {\n    type: 'pending',\n  };\n  private _promise: Promise<T> | undefined;\n  private _resolve: undefined | ((value: T) => void) = undefined;\n  private _reject: undefined | ((error: unknown) => void) = undefined;\n\n  get promise(): Promise<T> {\n    if (this._promise) {\n      return this._promise;\n    }\n\n    this._promise = new Promise<T>((resolve, reject) => {\n      if (this.status.type === 'resolved') {\n        resolve(this.status.value);\n      } else if (this.status.type === 'rejected') {\n        reject(this.status.error);\n      }\n\n      this._resolve = resolve;\n      this._reject = reject;\n    });\n\n    return this._promise;\n  }\n\n  resolve(value: T): void {\n    this.status = { type: 'resolved', value };\n\n    if (this._promise) {\n      this._resolve?.(value);\n    }\n  }\n\n  reject(error: unknown): void {\n    this.status = { type: 'rejected', error };\n\n    if (this._promise) {\n      this._reject?.(error);\n    }\n  }\n}\n","import type { IMastraLogger } from '../../../../logger';\n\nexport type ConsumeStreamOptions = {\n  onError?: (error: unknown) => void;\n  logger?: IMastraLogger;\n};\n\nexport async function consumeStream({\n  stream,\n  onError,\n  logger,\n}: {\n  stream: ReadableStream;\n  onError?: (error: unknown) => void;\n  logger?: IMastraLogger;\n}): Promise<void> {\n  const reader = stream.getReader();\n  try {\n    while (true) {\n      const { done } = await reader.read();\n      if (done) break;\n    }\n  } catch (error) {\n    logger?.error('consumeStream error', error);\n    onError?.(error);\n  } finally {\n    reader.releaseLock();\n  }\n}\n","import type { LanguageModelV2StreamPart } from '@ai-sdk/provider-v5';\nimport { MastraBase } from '../../base';\nimport { attachModelStreamTransport, readModelStreamTransport } from '../types';\nimport type { ChunkType, CreateStream, OnResult } from '../types';\n\n/**\n * Safely enqueue a chunk into a ReadableStreamDefaultController.\n * Returns true if the enqueue succeeded, false if the controller was already closed/errored.\n *\n * Prefer this over checking desiredSize before enqueue, because desiredSize === 0\n * indicates backpressure (queue full, stream still open) — not closure.\n * Guarding on desiredSize would silently drop chunks under normal backpressure.\n */\nexport function safeEnqueue<T>(controller: ReadableStreamDefaultController<T>, chunk: T): boolean {\n  try {\n    controller.enqueue(chunk);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Safely close a ReadableStreamDefaultController.\n * Returns true if the close succeeded, false if the controller was already closed/errored.\n */\nexport function safeClose(controller: ReadableStreamDefaultController<any>): boolean {\n  try {\n    controller.close();\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Safely signal an error on a ReadableStreamDefaultController.\n * Returns true if the error succeeded, false if the controller was already closed/errored.\n */\nexport function safeError(controller: ReadableStreamDefaultController<any>, error: unknown): boolean {\n  try {\n    controller.error(error);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport abstract class MastraModelInput extends MastraBase {\n  abstract transform({\n    runId,\n    stream,\n    controller,\n  }: {\n    runId: string;\n    stream: ReadableStream<LanguageModelV2StreamPart | Record<string, unknown>>;\n    controller: ReadableStreamDefaultController<ChunkType>;\n  }): Promise<void>;\n\n  initialize({ runId, createStream, onResult }: { createStream: CreateStream; runId: string; onResult: OnResult }) {\n    const self = this;\n\n    let outputStream: ReadableStream<ChunkType>;\n    outputStream = new ReadableStream<ChunkType>({\n      async start(controller) {\n        try {\n          const stream = await createStream();\n          attachModelStreamTransport(outputStream, readModelStreamTransport(stream));\n\n          const initialChunks = onResult({\n            warnings: stream.warnings,\n            request: stream.request,\n            rawResponse: stream.rawResponse || stream.response || {},\n          });\n          if (initialChunks) {\n            for (const chunk of Array.isArray(initialChunks) ? initialChunks : [initialChunks]) {\n              controller.enqueue(chunk);\n            }\n          }\n\n          await self.transform({\n            runId,\n            stream: stream.stream,\n            controller,\n          });\n\n          safeClose(controller);\n        } catch (error) {\n          safeError(controller, error);\n        }\n      },\n    });\n\n    return outputStream;\n  }\n}\n","import type { JSONSchema7, Schema } from '@internal/ai-sdk-v5';\nimport { AnthropicSchemaCompatLayer, applyCompatLayer } from '@mastra/schema-compat';\nimport type { z as z3 } from 'zod/v3';\nimport type { z as z4 } from 'zod/v4';\nimport type { PublicSchema, StandardSchemaWithJSON } from '../../schema';\nimport { isStandardSchemaWithJSON, standardSchemaToJSONSchema } from '../../schema';\n\nexport type PartialSchemaOutput<OUTPUT = undefined> = OUTPUT extends undefined ? undefined : Partial<OUTPUT>;\n\n/**\n * @deprecated Use StandardSchemaWithJSON from '../../schema' instead\n */\nexport type OutputSchema<OBJECT = any> =\n  | z4.ZodType<OBJECT, any>\n  | z3.Schema<OBJECT, z3.ZodTypeDef, any>\n  | Schema<OBJECT>\n  | JSONSchema7\n  | undefined;\n\n/**\n * @deprecated Use StandardSchemaWithJSON from '../../schema' instead\n * Legacy type for schema validation.\n */\nexport type SchemaWithValidation<T = any> = z4.ZodType<T, any> | z3.Schema<T, z3.ZodTypeDef, any>;\n\n/**\n * @deprecated Use InferPublicSchema or InferStandardSchemaOutput from '../../schema' instead\n * Infer the output type from a schema\n */\nexport type InferSchemaOutput<T> =\n  T extends z4.ZodType<infer O, any>\n    ? O\n    : T extends z3.Schema<infer O, z3.ZodTypeDef, any>\n      ? O\n      : T extends Schema<infer O>\n        ? O\n        : unknown;\n\n/**\n * @deprecated Use PublicSchema from '../../schema' instead\n */\nexport type InferZodLikeSchema<T> =\n  T extends z4.ZodType<infer O, any> ? O : T extends z3.Schema<infer O, z3.ZodTypeDef, any> ? O : unknown;\n\nexport type ZodLikePartialSchema<T = any> =\n  | (z4.core.$ZodType<Partial<T>, any> & {\n      safeParse(value: unknown): { success: boolean; data?: Partial<T>; error?: any };\n    })\n  | (z3.ZodType<Partial<T>, z3.ZodTypeDef, any> & {\n      safeParse(value: unknown): { success: boolean; data?: Partial<T>; error?: any };\n    });\n\nexport function asJsonSchema(schema: StandardSchemaWithJSON | undefined): JSONSchema7 | undefined {\n  if (!schema) {\n    return undefined;\n  }\n\n  // Handle StandardSchemaWithJSON\n  if (isStandardSchemaWithJSON(schema)) {\n    // Use 'input' IO mode to get the schema BEFORE transforms are applied\n    // This is critical for OpenAI compat transforms that add .transform()\n    // which can't be properly represented in JSON Schema\n    //\n    // Use 'draft-07' target for maximum compatibility with LLM providers\n    const jsonSchema = standardSchemaToJSONSchema(schema, { io: 'input', target: 'draft-07' });\n\n    return jsonSchema;\n  }\n\n  return schema;\n}\n\ntype SchemaModelInfo = {\n  provider: string;\n  modelId: string;\n  supportsStructuredOutputs: boolean;\n};\n\nexport function getTransformedSchema<OUTPUT = undefined>(\n  schema?: StandardSchemaWithJSON<OUTPUT>,\n  options?: { model?: SchemaModelInfo },\n) {\n  if (!schema) {\n    return undefined;\n  }\n\n  const jsonSchema = options?.model\n    ? (applyCompatLayer({\n        schema: schema as PublicSchema<OUTPUT>,\n        compatLayers: [new AnthropicSchemaCompatLayer(options.model)],\n        mode: 'jsonSchema',\n      }) as JSONSchema7)\n    : asJsonSchema(schema);\n\n  if (!jsonSchema) {\n    return undefined;\n  }\n\n  const { $schema, ...itemSchema } = jsonSchema;\n  if (itemSchema.type === 'array') {\n    const innerElement = itemSchema.items;\n    const arrayOutputSchema: JSONSchema7 = {\n      $schema: $schema,\n      type: 'object',\n      properties: {\n        elements: { type: 'array', items: innerElement },\n      },\n      required: ['elements'],\n      additionalProperties: false,\n    };\n\n    return {\n      jsonSchema: arrayOutputSchema,\n      outputFormat: 'array',\n    };\n  }\n\n  // Handle enum schemas - wrap in object like AI SDK does\n  if (itemSchema.enum && Array.isArray(itemSchema.enum)) {\n    const enumOutputSchema: JSONSchema7 = {\n      $schema: $schema,\n      type: 'object',\n      properties: {\n        result: { type: itemSchema.type || 'string', enum: itemSchema.enum },\n      },\n      required: ['result'],\n      additionalProperties: false,\n    };\n\n    return {\n      jsonSchema: enumOutputSchema,\n      outputFormat: 'enum',\n    };\n  }\n\n  return {\n    jsonSchema: jsonSchema,\n    outputFormat: jsonSchema.type, // 'object'\n  };\n}\n\nexport function getResponseFormat(\n  schema?: StandardSchemaWithJSON,\n  options?: { model?: SchemaModelInfo },\n):\n  | {\n      type: 'text';\n    }\n  | {\n      type: 'json';\n      /**\n       * JSON schema that the generated output should conform to.\n       */\n      schema?: JSONSchema7;\n    } {\n  if (schema) {\n    const transformedSchema = getTransformedSchema(schema, options);\n    return {\n      type: 'json',\n      schema: transformedSchema?.jsonSchema,\n    };\n  }\n\n  // response format 'text' for everything else\n  return {\n    type: 'text',\n  };\n}\n","import { TransformStream } from 'node:stream/web';\nimport { isDeepEqualData, parsePartialJson } from '@internal/ai-sdk-v5';\nimport { isZodType } from '@mastra/schema-compat';\nimport type { StructuredOutputOptions } from '../../agent/types';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../error';\nimport type { IMastraLogger } from '../../logger';\nimport type { ZodType, PublicSchema, StandardSchemaWithJSON } from '../../schema';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '../../schema';\nimport type { ValidationResult } from '../aisdk/v5/compat';\nimport { ChunkFrom } from '../types';\nimport type { ChunkType } from '../types';\nimport { getTransformedSchema } from './schema';\nimport type { ZodLikePartialSchema } from './schema';\n\ntype StreamTransformerStructuredOutput<OUTPUT> = Omit<StructuredOutputOptions<OUTPUT>, 'schema'> & {\n  schema: PublicSchema<OUTPUT>;\n};\n\n/**\n * Escapes unescaped newlines, carriage returns, and tabs within JSON string values.\n *\n * LLMs often output actual newline characters inside JSON strings instead of properly\n * escaped \\n sequences, which breaks JSON parsing. This function fixes that by:\n * 1. Tracking whether we're inside a JSON string (after an unescaped quote)\n * 2. Replacing literal newlines/tabs with their escape sequences only inside strings\n * 3. Preserving already-escaped sequences like \\\\n\n *\n * @param text - Raw JSON text that may contain unescaped control characters in strings\n * @returns JSON text with control characters properly escaped inside string values\n */\nexport function escapeUnescapedControlCharsInJsonStrings(text: string): string {\n  let result = '';\n  let inString = false;\n  let i = 0;\n\n  while (i < text.length) {\n    const char = text[i];\n\n    // Check for escape sequences\n    if (char === '\\\\' && i + 1 < text.length) {\n      // This is an escape sequence - pass through both characters\n      result += char + text[i + 1];\n      i += 2;\n      continue;\n    }\n\n    // Track string boundaries (unescaped quotes)\n    if (char === '\"') {\n      inString = !inString;\n      result += char;\n      i++;\n      continue;\n    }\n\n    // If inside a string, escape control characters\n    if (inString) {\n      if (char === '\\n') {\n        result += '\\\\n';\n        i++;\n        continue;\n      }\n      if (char === '\\r') {\n        result += '\\\\r';\n        i++;\n        continue;\n      }\n      if (char === '\\t') {\n        result += '\\\\t';\n        i++;\n        continue;\n      }\n    }\n\n    result += char;\n    i++;\n  }\n\n  return result;\n}\n\ninterface ProcessPartialChunkParams {\n  /** Text accumulated from streaming so far */\n  accumulatedText: string;\n  /** Previously parsed object from last emission */\n  previousObject: unknown;\n  /** Previous processing result (handler-specific state) */\n  previousResult?: unknown;\n}\n\ninterface ProcessPartialChunkResult {\n  /** Whether a new value should be emitted */\n  shouldEmit: boolean;\n  /** The value to emit if shouldEmit is true */\n  emitValue?: unknown;\n  /** New previous result state for next iteration */\n  newPreviousResult?: unknown;\n}\n\ntype ValidateAndTransformFinalResult<OUTPUT = undefined> =\n  | {\n      /** Whether validation succeeded */\n      success: true;\n      /**\n       * The validated and transformed value if successful\n       */\n      value: OUTPUT;\n    }\n  | {\n      /** Whether validation succeeded */\n      success: false;\n      /**\n       * Error if validation failed\n       */\n      error: Error;\n    };\n\n/**\n * Base class for all output format handlers.\n * Each handler implements format-specific logic for processing partial chunks\n * and validating final results.\n */\nabstract class BaseFormatHandler<OUTPUT = undefined> {\n  abstract readonly type: 'object' | 'array' | 'enum';\n  /**\n   * The original user-provided schema (Zod, JSON Schema, or AI SDK Schema).\n   */\n  readonly schema: StandardSchemaWithJSON<OUTPUT> | undefined;\n  /**\n   * Validate partial chunks as they are streamed. @planned\n   */\n  readonly validatePartialChunks: boolean = false;\n  readonly partialSchema?: ZodLikePartialSchema<OUTPUT> | undefined;\n\n  constructor(schema?: StandardSchemaWithJSON<OUTPUT>, options: { validatePartialChunks?: boolean } = {}) {\n    this.schema = schema;\n\n    if (\n      options.validatePartialChunks &&\n      this.isZodSchema(schema) &&\n      'partial' in schema &&\n      typeof schema.partial === 'function'\n    ) {\n      this.partialSchema = schema.partial() as ZodLikePartialSchema<OUTPUT>;\n      this.validatePartialChunks = true;\n    }\n  }\n\n  /**\n   * Checks if the original schema is a Zod schema with safeParse method.\n   */\n  protected isZodSchema(schema: unknown): schema is ZodType {\n    return isZodType(schema);\n  }\n\n  /**\n   * Validates a value against the schema using StandardSchemaWithJSON's validate method.\n   */\n  protected async validateValue(value: unknown): Promise<ValidationResult<OUTPUT>> {\n    if (!this.schema) {\n      return {\n        success: true,\n        value: value as OUTPUT,\n      };\n    }\n\n    if (this.isZodSchema(this.schema)) {\n      // Use Standard Schema for consistent error message format + safeParse for ZodError cause\n      try {\n        const ssResult = await this.schema['~standard'].validate(value);\n\n        if (!ssResult.issues) {\n          return {\n            success: true,\n            value: ssResult.value as OUTPUT,\n          };\n        }\n\n        // Format error message from Standard Schema issues\n        const errorMessages = ssResult.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n        // Also use safeParse to get ZodError as cause (for backward compatibility with tests)\n        const zodResult = this.schema.safeParse(value);\n        const zodError = !zodResult.success ? zodResult.error : undefined;\n\n        return {\n          success: false,\n          error: new MastraError(\n            {\n              domain: ErrorDomain.AGENT,\n              category: ErrorCategory.SYSTEM,\n              id: 'STRUCTURED_OUTPUT_SCHEMA_VALIDATION_FAILED',\n              text: `Structured output validation failed: ${errorMessages}`,\n              details: {\n                value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n              },\n            },\n            zodError,\n          ),\n        };\n      } catch (error) {\n        return {\n          success: false,\n          error: error instanceof Error ? error : new Error('Zod validation failed', { cause: error }),\n        };\n      }\n    }\n\n    // For non-Zod StandardSchemaWithJSON schemas (JSON Schema, AI SDK Schema, ArkType, etc.)\n    // All schemas are wrapped via toStandardSchema() before reaching here,\n    // so we can use ~standard.validate() uniformly.\n    try {\n      const ssResult = await this.schema['~standard'].validate(value);\n\n      if (!ssResult.issues) {\n        return {\n          success: true,\n          value: ssResult.value as OUTPUT,\n        };\n      }\n\n      const errorMessages = ssResult.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n      return {\n        success: false,\n        error: new MastraError({\n          domain: ErrorDomain.AGENT,\n          category: ErrorCategory.SYSTEM,\n          id: 'STRUCTURED_OUTPUT_SCHEMA_VALIDATION_FAILED',\n          text: `Structured output validation failed: ${errorMessages}`,\n          details: {\n            value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n          },\n        }),\n      };\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error : new Error('Validation failed', { cause: error }),\n      };\n    }\n  }\n\n  /**\n   * Processes a partial chunk of accumulated text and determines if a new value should be emitted.\n   * @param params - Processing parameters\n   * @param params.accumulatedText - Text accumulated from streaming so far\n   * @param params.previousObject - Previously parsed object from last emission\n   * @param params.previousResult - Previous processing result (handler-specific state)\n   * @returns Promise resolving to processing result with emission decision\n   */\n  abstract processPartialChunk(params: ProcessPartialChunkParams): Promise<ProcessPartialChunkResult>;\n\n  /**\n   * Validates and transforms the final parsed value when streaming completes.\n   * @param finalValue - The final parsed value to validate\n   * @returns Promise resolving to validation result\n   */\n  abstract validateAndTransformFinal(finalValue: string): Promise<ValidateAndTransformFinalResult<OUTPUT>>;\n\n  /**\n   * Preprocesses accumulated text to handle LLMs that wrap JSON in code blocks\n   * and fix common JSON formatting issues like unescaped newlines in strings.\n   * Extracts content from the first complete valid ```json...``` code block or removes opening ```json prefix if no complete code block is found (streaming chunks).\n   * @param accumulatedText - Raw accumulated text from streaming\n   * @returns Processed text ready for JSON parsing\n   */\n  protected preprocessText(accumulatedText: string): string {\n    let processedText = accumulatedText;\n\n    // Some LLMs (e.g., LMStudio with jsonPromptInjection) wrap JSON in special tokens\n    // Format: '<|channel|>final <|constrain|>JSON<|message|>{\"key\":\"value\"}'\n    if (processedText.includes('<|message|>')) {\n      const match = processedText.match(/<\\|message\\|>([\\s\\S]+)$/);\n      if (match && match[1]) {\n        processedText = match[1];\n      }\n    }\n\n    // Some LLMs wrap the entire JSON response in a ```json code block.\n    // Only unwrap when the accumulated text itself starts with that fence so\n    // embedded examples inside valid JSON string values are preserved.\n    const trimmedStart = processedText.trimStart();\n    if (/^```json\\b/.test(trimmedStart)) {\n      const match = trimmedStart.match(/^```json\\s*\\n?([\\s\\S]*?)\\n?\\s*```\\s*$/);\n      if (match && match[1]) {\n        // Complete code block found - use content between tags\n        processedText = match[1].trim();\n      } else {\n        // No complete code block yet - just remove the opening ```json prefix\n        processedText = trimmedStart.replace(/^```json\\s*\\n?/, '');\n      }\n    }\n\n    // LLMs often output actual newlines/tabs inside JSON strings instead of\n    // properly escaped \\n sequences. Fix this before parsing.\n    processedText = escapeUnescapedControlCharsInJsonStrings(processedText);\n\n    return processedText;\n  }\n}\n\n/**\n * Handles object format streaming. Emits parsed objects when they change during streaming.\n * This is the simplest format - objects are parsed and emitted directly without wrapping.\n */\nclass ObjectFormatHandler<OUTPUT = undefined> extends BaseFormatHandler<OUTPUT> {\n  readonly type = 'object' as const;\n\n  async processPartialChunk({\n    accumulatedText,\n    previousObject,\n  }: ProcessPartialChunkParams): Promise<ProcessPartialChunkResult> {\n    const processedAccumulatedText = this.preprocessText(accumulatedText);\n    const { value: currentObjectJson, state } = await parsePartialJson(processedAccumulatedText);\n\n    // TODO: test partial object chunk validation with schema.partial()\n    if (this.validatePartialChunks && this.partialSchema) {\n      const result = this.partialSchema?.safeParse(currentObjectJson);\n      if (result.success && result.data && result.data !== undefined && !isDeepEqualData(previousObject, result.data)) {\n        return {\n          shouldEmit: true,\n          emitValue: result.data,\n          newPreviousResult: result.data,\n        };\n      }\n      /**\n       * TODO: emit error chunk if partial validation fails?\n       * maybe we need to either not emit the object chunk,\n       * emit our error chunk, or wait until final parse to emit the error chunk?\n       */\n      return { shouldEmit: false };\n    }\n\n    if (\n      currentObjectJson !== undefined &&\n      currentObjectJson !== null &&\n      typeof currentObjectJson === 'object' &&\n      !isDeepEqualData(previousObject, currentObjectJson) // avoid emitting duplicates\n    ) {\n      return {\n        shouldEmit: ['successful-parse', 'repaired-parse'].includes(state),\n        emitValue: currentObjectJson,\n        newPreviousResult: currentObjectJson,\n      };\n    }\n    return { shouldEmit: false };\n  }\n\n  async validateAndTransformFinal(finalRawValue: string): Promise<ValidateAndTransformFinalResult<OUTPUT>> {\n    if (!finalRawValue) {\n      return {\n        success: false,\n        error: new Error('No object generated: could not parse the response.'),\n      };\n    }\n    const rawValue = this.preprocessText(finalRawValue);\n    const { value } = await parsePartialJson(rawValue);\n\n    return this.validateValue(value);\n  }\n}\n\n/**\n * Handles array format streaming. Arrays are wrapped in {elements: [...]} objects by the LLM\n * for better generation reliability. This handler unwraps them and filters incomplete elements.\n * Emits progressive array states as elements are completed.\n */\nclass ArrayFormatHandler<OUTPUT = undefined> extends BaseFormatHandler<OUTPUT> {\n  readonly type = 'array' as const;\n  /** Previously filtered array to track changes */\n  private textPreviousFilteredArray: unknown[] = [];\n  /** Whether we've emitted the initial empty array */\n  private hasEmittedInitialArray = false;\n\n  async processPartialChunk({\n    accumulatedText,\n    previousObject,\n  }: ProcessPartialChunkParams): Promise<ProcessPartialChunkResult> {\n    const processedAccumulatedText = this.preprocessText(accumulatedText);\n    const { value: currentObjectJson, state: parseState } = await parsePartialJson(processedAccumulatedText);\n    // TODO: parse/validate partial array elements, emit error chunk if validation fails\n    // using this.partialSchema / this.validatePartialChunks\n    if (currentObjectJson !== undefined && !isDeepEqualData(previousObject, currentObjectJson)) {\n      // For arrays, extract and filter elements\n      const rawElements =\n        currentObjectJson &&\n        typeof currentObjectJson === 'object' &&\n        'elements' in currentObjectJson &&\n        Array.isArray(currentObjectJson.elements)\n          ? currentObjectJson.elements\n          : [];\n      const filteredElements: Partial<OUTPUT>[] = [];\n\n      // Filter out incomplete elements (like empty objects {})\n      for (let i = 0; i < rawElements.length; i++) {\n        const element = rawElements[i];\n\n        // Skip the last element if it's incomplete (unless this is the final parse)\n        if (i === rawElements.length - 1 && parseState !== 'successful-parse') {\n          // Only include the last element if it has meaningful content\n          if (element && typeof element === 'object' && Object.keys(element).length > 0) {\n            filteredElements.push(element as Partial<OUTPUT>);\n          }\n        } else {\n          // Include all non-last elements that have content\n          if (element && typeof element === 'object' && Object.keys(element).length > 0) {\n            filteredElements.push(element as Partial<OUTPUT>);\n          }\n        }\n      }\n\n      // Emit initial empty array if this is the first time we see any JSON structure\n      if (!this.hasEmittedInitialArray) {\n        this.hasEmittedInitialArray = true;\n        if (filteredElements.length === 0) {\n          this.textPreviousFilteredArray = [];\n          return {\n            shouldEmit: true,\n            emitValue: [] as unknown as Partial<OUTPUT>,\n            newPreviousResult: currentObjectJson as Partial<OUTPUT>,\n          };\n        }\n      }\n\n      // Only emit if the filtered array has actually changed\n      if (!isDeepEqualData(this.textPreviousFilteredArray, filteredElements)) {\n        this.textPreviousFilteredArray = [...filteredElements];\n        return {\n          shouldEmit: true,\n          emitValue: filteredElements as unknown as Partial<OUTPUT>,\n          newPreviousResult: currentObjectJson as Partial<OUTPUT>,\n        };\n      }\n    }\n\n    return { shouldEmit: false };\n  }\n\n  async validateAndTransformFinal(_finalValue: string): Promise<ValidateAndTransformFinalResult<OUTPUT>> {\n    const resultValue = this.textPreviousFilteredArray;\n\n    if (!resultValue) {\n      return {\n        success: false,\n        error: new Error('No object generated: could not parse the response.'),\n      };\n    }\n\n    return this.validateValue(resultValue);\n  }\n}\n\n/**\n * Handles enum format streaming. Enums are wrapped in {result: \"\"} objects by the LLM\n * for better generation reliability. This handler unwraps them and provides partial matching.\n * Emits progressive enum states as they are completed.\n * Validates the final result against the user-provided schema.\n */\nclass EnumFormatHandler<OUTPUT = undefined> extends BaseFormatHandler<OUTPUT> {\n  readonly type = 'enum' as const;\n  /** Previously emitted enum result to avoid duplicate emissions */\n  private textPreviousEnumResult?: string;\n\n  /**\n   * Finds the best matching enum value for a partial result string.\n   * If multiple values match, returns the partial string. If only one matches, returns that value.\n   * @param partialResult - Partial enum string from streaming\n   * @returns Best matching enum value or undefined if no matches\n   */\n  private findBestEnumMatch(partialResult: string): string | undefined {\n    if (!this.schema) {\n      return undefined;\n    }\n\n    // Get enum values from the schema using StandardSchemaWithJSON's jsonSchema conversion\n    const outputJsonSchema = standardSchemaToJSONSchema(this.schema);\n    const enumValues = outputJsonSchema?.enum;\n\n    if (!enumValues) {\n      return undefined;\n    }\n\n    const possibleEnumValues = enumValues\n      .filter((value: unknown): value is string => typeof value === 'string')\n      .filter((enumValue: string) => enumValue.startsWith(partialResult));\n\n    if (possibleEnumValues.length === 0) {\n      return undefined;\n    }\n\n    // Emit the most specific result - if there's exactly one match, use it; otherwise use partial\n    const firstMatch = possibleEnumValues[0];\n    return possibleEnumValues.length === 1 && firstMatch !== undefined ? firstMatch : partialResult;\n  }\n\n  async processPartialChunk({\n    accumulatedText,\n    previousObject,\n  }: ProcessPartialChunkParams): Promise<ProcessPartialChunkResult> {\n    const processedAccumulatedText = this.preprocessText(accumulatedText);\n    const { value: currentObjectJson } = await parsePartialJson(processedAccumulatedText);\n    if (\n      currentObjectJson !== undefined &&\n      currentObjectJson !== null &&\n      typeof currentObjectJson === 'object' &&\n      !Array.isArray(currentObjectJson) &&\n      'result' in currentObjectJson &&\n      typeof currentObjectJson.result === 'string' &&\n      !isDeepEqualData(previousObject, currentObjectJson)\n    ) {\n      const partialResult = currentObjectJson.result as string;\n      const bestMatch = this.findBestEnumMatch(partialResult);\n\n      // Only emit if we have valid partial matches and the result isn't empty\n      if (partialResult.length > 0 && bestMatch && bestMatch !== this.textPreviousEnumResult) {\n        this.textPreviousEnumResult = bestMatch;\n        return {\n          shouldEmit: true,\n          emitValue: bestMatch,\n          newPreviousResult: currentObjectJson,\n        };\n      }\n    }\n\n    return { shouldEmit: false };\n  }\n\n  async validateAndTransformFinal(rawFinalValue: string): Promise<ValidateAndTransformFinalResult<OUTPUT>> {\n    const processedValue = this.preprocessText(rawFinalValue);\n    const { value } = await parsePartialJson(processedValue);\n    if (!(typeof value === 'object' && value !== null && 'result' in value)) {\n      return {\n        success: false,\n        error: new Error('Invalid enum format: expected object with result property'),\n      };\n    }\n    const finalValue = value as { result: OUTPUT };\n\n    // For enums, check the wrapped format and unwrap\n    if (!finalValue || typeof finalValue !== 'object' || typeof finalValue.result !== 'string') {\n      return {\n        success: false,\n        error: new Error('Invalid enum format: expected object with result property'),\n      };\n    }\n\n    // Validate the unwrapped enum value\n    return this.validateValue(finalValue.result);\n  }\n}\n\n/**\n * Factory function to create the appropriate output format handler based on schema.\n * Analyzes the transformed schema format and returns the corresponding handler instance.\n * @param schema - Original user-provided schema (e.g., Zod schema from agent.stream({output: z.object({})}))\n * @param transformedSchema - Wrapped/transformed schema used for LLM generation (arrays wrapped in {elements: []}, enums in {result: \"\"})\n * @returns Handler instance for the detected format type\n */\nfunction createOutputHandler<OUTPUT = undefined>({ schema }: { schema?: PublicSchema<OUTPUT> }) {\n  // Direct transformer callers can pass any PublicSchema; normalize it before\n  // selecting the format-specific handler.\n  const normalizedSchema = schema ? toStandardSchema(schema) : undefined;\n\n  const transformedSchema = getTransformedSchema(normalizedSchema);\n  switch (transformedSchema?.outputFormat) {\n    case 'array':\n      return new ArrayFormatHandler(normalizedSchema);\n    case 'enum':\n      return new EnumFormatHandler(normalizedSchema);\n    case 'object':\n    default:\n      return new ObjectFormatHandler(normalizedSchema);\n  }\n}\n\n/**\n * Transforms raw text-delta chunks into structured object chunks for JSON mode streaming.\n *\n * For JSON response formats, this transformer:\n * - Accumulates text deltas and parses them as partial JSON\n * - Emits 'object' chunks when the parsed structure changes\n * - For arrays: filters incomplete elements and unwraps from {elements: [...]} wrapper\n * - For objects: emits the parsed object directly\n * - For enums: unwraps from {result: \"\"} wrapper and provides partial matching\n * - Always passes through original chunks for downstream processing\n */\nexport function createObjectStreamTransformer<OUTPUT = undefined>({\n  structuredOutput,\n  logger,\n}: {\n  structuredOutput?: StreamTransformerStructuredOutput<OUTPUT>;\n  logger?: IMastraLogger;\n}) {\n  const handler = createOutputHandler<OUTPUT>({ schema: structuredOutput?.schema });\n\n  let accumulatedText = '';\n  let previousObject: unknown = undefined;\n  let currentRunId: string | undefined;\n  let finalResult: ValidateAndTransformFinalResult<OUTPUT> | undefined;\n\n  return new TransformStream<ChunkType<OUTPUT>, ChunkType<OUTPUT>>({\n    async transform(chunk, controller) {\n      if (chunk.runId) {\n        // save runId to use in error chunks\n        currentRunId = chunk.runId;\n      }\n\n      if (chunk.type === 'text-delta' && typeof chunk.payload?.text === 'string') {\n        accumulatedText += chunk.payload.text;\n\n        const result = await handler.processPartialChunk({\n          accumulatedText,\n          previousObject,\n        });\n\n        if (result.shouldEmit) {\n          previousObject = result.newPreviousResult ?? previousObject;\n          const chunkData = {\n            from: chunk.from,\n            runId: chunk.runId,\n            type: 'object',\n            object: result.emitValue as Partial<OUTPUT>, // TODO: handle partial runtime type validation of json chunks\n          };\n\n          controller.enqueue(chunkData as ChunkType<OUTPUT>);\n        }\n      }\n\n      // Validate and resolve object when text generation completes\n      if (chunk.type === 'text-end') {\n        controller.enqueue(chunk);\n\n        if (accumulatedText?.trim() && !finalResult) {\n          finalResult = await handler.validateAndTransformFinal(accumulatedText);\n          if (finalResult.success) {\n            controller.enqueue({\n              from: ChunkFrom.AGENT,\n              runId: currentRunId ?? '',\n              type: 'object-result',\n              object: finalResult.value,\n            });\n          }\n        }\n        return;\n      }\n\n      // Always pass through the original chunk for downstream processing\n      controller.enqueue(chunk);\n    },\n\n    async flush(controller) {\n      if (finalResult && !finalResult.success) {\n        handleValidationError(finalResult.error, controller);\n      }\n      // Safety net: If text-end was never emitted, validate now as fallback\n      // This handles edge cases where providers might not emit text-end\n      if (accumulatedText?.trim() && !finalResult) {\n        finalResult = await handler.validateAndTransformFinal(accumulatedText);\n        if (finalResult.success) {\n          controller.enqueue({\n            from: ChunkFrom.AGENT,\n            runId: currentRunId ?? '',\n            type: 'object-result',\n            object: finalResult.value,\n          });\n        } else {\n          handleValidationError(finalResult.error, controller);\n        }\n      }\n    },\n  });\n\n  /**\n   * Handle validation errors based on error strategy\n   */\n  function handleValidationError(error: Error, controller: TransformStreamDefaultController<ChunkType<OUTPUT>>) {\n    if (structuredOutput?.errorStrategy === 'warn') {\n      logger?.warn(error.message);\n    } else if (structuredOutput?.errorStrategy === 'fallback') {\n      controller.enqueue({\n        from: ChunkFrom.AGENT,\n        runId: currentRunId ?? '',\n        type: 'object-result',\n        object: structuredOutput.fallbackValue as OUTPUT,\n      });\n    } else {\n      controller.enqueue({\n        from: ChunkFrom.AGENT,\n        runId: currentRunId ?? '',\n        type: 'error',\n        payload: {\n          error,\n        },\n      });\n    }\n  }\n}\n\n/**\n * Transforms object chunks into JSON text chunks for streaming.\n *\n * This transformer:\n * - For arrays: emits opening bracket, new elements, and closing bracket\n * - For objects/no-schema: emits the object as JSON\n */\nexport function createJsonTextStreamTransformer<OUTPUT = undefined>(schema?: StandardSchemaWithJSON<OUTPUT>) {\n  let previousArrayLength = 0;\n  let hasStartedArray = false;\n  let chunkCount = 0;\n  const outputSchema = getTransformedSchema(schema);\n\n  return new TransformStream<ChunkType<OUTPUT>, string>({\n    transform(chunk, controller) {\n      if (chunk.type !== 'object' || !chunk.object) {\n        return;\n      }\n\n      if (outputSchema?.outputFormat === 'array' && Array.isArray(chunk.object)) {\n        chunkCount++;\n\n        // If this is the first chunk, decide between complete vs incremental streaming\n        if (chunkCount === 1) {\n          // If the first chunk already has multiple elements or is complete,\n          // emit as single JSON string\n          if (chunk.object.length > 0) {\n            controller.enqueue(JSON.stringify(chunk.object));\n            previousArrayLength = chunk.object.length;\n            hasStartedArray = true;\n            return;\n          }\n        }\n\n        // Incremental streaming mode (multiple chunks)\n        if (!hasStartedArray) {\n          controller.enqueue('[');\n          hasStartedArray = true;\n        }\n\n        // Emit new elements that were added\n        for (let i = previousArrayLength; i < chunk.object.length; i++) {\n          const elementJson = JSON.stringify(chunk.object[i]);\n          if (i > 0) {\n            controller.enqueue(',' + elementJson);\n          } else {\n            controller.enqueue(elementJson);\n          }\n        }\n        previousArrayLength = chunk.object.length;\n      } else {\n        // For non-array objects, just emit as JSON\n        controller.enqueue(JSON.stringify(chunk.object));\n      }\n    },\n    flush(controller) {\n      // Close the array when the stream ends (only for incremental streaming)\n      if (hasStartedArray && outputSchema?.outputFormat === 'array' && chunkCount > 1) {\n        controller.enqueue(']');\n      }\n    },\n  });\n}\n","import { EventEmitter } from 'node:events';\nimport { ReadableStream, TransformStream } from 'node:stream/web';\nimport { coreContentToString } from '../../agent/message-list';\nimport type { MessageList, MastraDBMessage } from '../../agent/message-list';\nimport { TripWire } from '../../agent/trip-wire';\nimport { MastraBase } from '../../base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../error';\nimport { getErrorFromUnknown } from '../../error/utils.js';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../../evals';\nimport { getRootExportSpan, resolveObservabilityContext } from '../../observability';\nimport type { OutputResult } from '../../processors';\n// Inlined to avoid importing structured-output.ts which pulls in the agent\n// barrel and creates an ESM init-time cycle.\nconst STRUCTURED_OUTPUT_PROCESSOR_NAME = 'structured-output';\nimport { ProcessorState, ProcessorRunner } from '../../processors/runner';\nimport type { WorkflowRunStatus } from '../../workflows';\nimport { DelayedPromise, consumeStream } from '../aisdk/v5/compat';\nimport type { ConsumeStreamOptions } from '../aisdk/v5/compat';\nimport type {\n  ChunkType,\n  LanguageModelUsage,\n  LLMStepResult,\n  MastraModelOutputOptions,\n  MastraOnFinishCallbackArgs,\n  ProviderMetadata,\n  StreamTransport,\n  StepTripwireData,\n  ToolCallChunk,\n} from '../types';\nimport { safeClose, safeEnqueue } from './input';\nimport { createJsonTextStreamTransformer, createObjectStreamTransformer } from './output-format-handlers';\nimport { getTransformedSchema } from './schema';\n\n/**\n * Helper function to create a destructurable version of MastraModelOutput.\n * This wraps the output to ensure properties maintain their context when destructured.\n */\nexport function createDestructurableOutput<OUTPUT = undefined>(\n  output: MastraModelOutput<OUTPUT>,\n): MastraModelOutput<OUTPUT> {\n  return new Proxy(output, {\n    get(target, prop, _receiver) {\n      // Use target as receiver to preserve private member access\n      const originalValue = Reflect.get(target, prop, target);\n\n      // For methods, return bound version\n      if (typeof originalValue === 'function') {\n        return originalValue.bind(target);\n      }\n\n      // For everything else (including getters), return as-is\n      return originalValue;\n    },\n  }) as MastraModelOutput<OUTPUT>;\n}\n\ntype PromiseResults<OUTPUT = undefined> = Pick<\n  LLMStepResult<OUTPUT>,\n  | 'text'\n  | 'reasoning'\n  | 'sources'\n  | 'files'\n  | 'toolCalls'\n  | 'toolResults'\n  | 'content'\n  | 'usage'\n  | 'warnings'\n  | 'providerMetadata'\n  | 'response'\n  | 'request'\n> & {\n  suspendPayload: any;\n  resumeSchema: any;\n  object: OUTPUT;\n  reasoningText: string | undefined;\n  totalUsage: LLMStepResult<OUTPUT>['usage'];\n  steps: LLMStepResult<OUTPUT>[];\n  finishReason: LLMStepResult<OUTPUT>['finishReason'];\n};\n\ntype DelayedPromises<OUTPUT = undefined> = {\n  [K in keyof PromiseResults<OUTPUT>]: DelayedPromise<PromiseResults<OUTPUT>[K]>;\n};\n\n/**\n * The complete output returned by `getFullOutput()`.\n */\nexport type FullOutput<OUTPUT = undefined> = {\n  /** The text output from all steps, excluding rejected responses */\n  text: string;\n  /** Token usage for the last step */\n  usage: PromiseResults<OUTPUT>['usage'];\n  /** All LLM steps executed during the stream */\n  steps: LLMStepResult<OUTPUT>[];\n  /** The reason the stream finished */\n  finishReason: PromiseResults<OUTPUT>['finishReason'];\n  /** Any warnings from the model */\n  warnings: PromiseResults<OUTPUT>['warnings'];\n  /** Provider-specific metadata */\n  providerMetadata: PromiseResults<OUTPUT>['providerMetadata'];\n  /** The request that was sent to model */\n  request: PromiseResults<OUTPUT>['request'];\n  /** Reasoning details from the model */\n  reasoning: PromiseResults<OUTPUT>['reasoning'];\n  /** Combined reasoning text */\n  reasoningText: string | undefined;\n  /** Tool calls made during execution */\n  toolCalls: PromiseResults<OUTPUT>['toolCalls'];\n  /** Results from tool executions */\n  toolResults: PromiseResults<OUTPUT>['toolResults'];\n  /** Sources referenced by model */\n  sources: PromiseResults<OUTPUT>['sources'];\n  /** Files generated by the model */\n  files: PromiseResults<OUTPUT>['files'];\n  /** Response metadata from the model */\n  response: PromiseResults<OUTPUT>['response'];\n  /** Total token usage across all steps */\n  totalUsage: PromiseResults<OUTPUT>['totalUsage'];\n  /** The structured object output (when using structured output) */\n  object: OUTPUT;\n  /** Error if the stream failed */\n  error: Error | undefined;\n  /** Tripwire data if content was blocked */\n  tripwire: StepTripwireData | undefined;\n  /** Scoring data for evals (when returnScorerData is enabled) */\n  scoringData?: {\n    input: Omit<ScorerRunInputForAgent, 'runId'>;\n    output: ScorerRunOutputForAgent;\n  };\n  /** Trace ID for this execution. */\n  traceId: string | undefined;\n  /** Root span ID for this execution, identifying the top-level span in the trace. */\n  spanId: string | undefined;\n  /** Run ID for this execution */\n  runId: string | undefined;\n  /** Payload for resuming suspended tool calls */\n  suspendPayload: any;\n  /** Resume schema of suspended step if available */\n  resumeSchema?: any;\n  /** All messages from this execution (input + memory history + response) */\n  messages: MastraDBMessage[];\n  /** Only messages loaded from memory (conversation history) */\n  rememberedMessages: MastraDBMessage[];\n};\n\nexport class MastraModelOutput<OUTPUT = undefined> extends MastraBase {\n  #status: WorkflowRunStatus = 'running';\n  #error: Error | undefined;\n  #baseStream: ReadableStream<ChunkType<OUTPUT>>;\n  #bufferedChunks: ChunkType<OUTPUT>[] = [];\n  #streamFinished = false;\n  #finishCallbackSent = false;\n  #emitter = new EventEmitter();\n  #bufferedSteps: LLMStepResult<OUTPUT>[] = [];\n  #bufferedReasoningDetails: Record<string, LLMStepResult<OUTPUT>['reasoning'][number]> = {};\n  #bufferedByStep: LLMStepResult<OUTPUT> = {\n    text: '',\n    reasoning: [],\n    sources: [],\n    files: [],\n    toolCalls: [],\n    toolResults: [],\n    dynamicToolCalls: [],\n    dynamicToolResults: [],\n    staticToolCalls: [],\n    staticToolResults: [],\n    content: [],\n    usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n    warnings: [],\n    request: {},\n    response: {\n      id: '',\n      timestamp: new Date(),\n      modelId: '',\n      messages: [],\n      uiMessages: [],\n    },\n    reasoningText: '',\n    providerMetadata: undefined,\n    finishReason: undefined,\n  };\n  #bufferedText: LLMStepResult<OUTPUT>['text'][] = [];\n  #bufferedObject: OUTPUT | undefined;\n  #bufferedTextChunks: Record<string, LLMStepResult<OUTPUT>['text'][]> = {};\n  #bufferedSources: LLMStepResult<OUTPUT>['sources'] = [];\n  #bufferedReasoning: LLMStepResult<OUTPUT>['reasoning'] = [];\n  #bufferedFiles: LLMStepResult<OUTPUT>['files'] = [];\n  #toolCallArgsDeltas: Record<string, LLMStepResult<OUTPUT>['text'][]> = {};\n  #toolCallDeltaIdNameMap: Record<string, string> = {};\n  #toolCallStreamingMeta: Record<\n    string,\n    {\n      toolName: string;\n      providerExecuted?: boolean;\n      providerMetadata?: ProviderMetadata;\n      dynamic?: boolean;\n      observability?: ToolCallChunk['payload']['observability'];\n    }\n  > = {};\n  #toolCalls: LLMStepResult<OUTPUT>['toolCalls'] = [];\n  #toolResults: LLMStepResult<OUTPUT>['toolResults'] = [];\n  #warnings: LLMStepResult<OUTPUT>['warnings'] = [];\n  #finishReason: LLMStepResult<OUTPUT>['finishReason'] = undefined;\n  #request: LLMStepResult<OUTPUT>['request'] = {};\n  #usageCount: LLMStepResult<OUTPUT>['usage'] = {\n    inputTokens: undefined,\n    outputTokens: undefined,\n    totalTokens: undefined,\n  };\n  #tripwire: StepTripwireData | undefined = undefined;\n  #transportRef: MastraModelOutputOptions<OUTPUT>['transportRef'] | undefined;\n  #transportClosed = false;\n\n  #delayedPromises: DelayedPromises<OUTPUT> = {\n    suspendPayload: new DelayedPromise<PromiseResults<OUTPUT>['suspendPayload']>(),\n    resumeSchema: new DelayedPromise<PromiseResults<OUTPUT>['resumeSchema']>(),\n    object: new DelayedPromise<PromiseResults<OUTPUT>['object']>(),\n    finishReason: new DelayedPromise<PromiseResults<OUTPUT>['finishReason']>(),\n    usage: new DelayedPromise<PromiseResults<OUTPUT>['usage']>(),\n    warnings: new DelayedPromise<PromiseResults<OUTPUT>['warnings']>(),\n    providerMetadata: new DelayedPromise<PromiseResults<OUTPUT>['providerMetadata']>(),\n    response: new DelayedPromise<PromiseResults<OUTPUT>['response']>(),\n    request: new DelayedPromise<PromiseResults<OUTPUT>['request']>(),\n    text: new DelayedPromise<PromiseResults<OUTPUT>['text']>(),\n    reasoning: new DelayedPromise<PromiseResults<OUTPUT>['reasoning']>(),\n    reasoningText: new DelayedPromise<string | undefined>(),\n    sources: new DelayedPromise<PromiseResults<OUTPUT>['sources']>(),\n    files: new DelayedPromise<PromiseResults<OUTPUT>['files']>(),\n    toolCalls: new DelayedPromise<PromiseResults<OUTPUT>['toolCalls']>(),\n    toolResults: new DelayedPromise<PromiseResults<OUTPUT>['toolResults']>(),\n    steps: new DelayedPromise<PromiseResults<OUTPUT>['steps']>(),\n    totalUsage: new DelayedPromise<PromiseResults<OUTPUT>['usage']>(),\n    content: new DelayedPromise<PromiseResults<OUTPUT>['content']>(),\n  };\n\n  #consumptionStarted = false;\n  #returnScorerData = false;\n  #structuredOutputMode: 'direct' | 'processor' | undefined = undefined;\n\n  #model: {\n    modelId: string | undefined;\n    provider: string | undefined;\n    version: 'v2' | 'v3';\n  };\n\n  /**\n   * Unique identifier for this execution run.\n   */\n  public runId: string;\n  #options: MastraModelOutputOptions<OUTPUT>;\n  /**\n   * The processor runner for this stream.\n   */\n  public processorRunner?: ProcessorRunner;\n  /**\n   * The message list for this stream.\n   */\n  public messageList: MessageList;\n  /**\n   * Trace ID for this execution.\n   */\n  public traceId?: string;\n  /**\n   * Root span ID for this execution, identifying the top-level span in the trace.\n   */\n  public spanId?: string;\n  public messageId: string;\n\n  constructor({\n    model: _model,\n    stream,\n    messageList,\n    options,\n    messageId,\n    initialState,\n  }: {\n    model: {\n      modelId: string | undefined;\n      provider: string | undefined;\n      version: 'v2' | 'v3';\n    };\n    stream: ReadableStream<ChunkType<OUTPUT>>;\n    messageList: MessageList;\n    options: MastraModelOutputOptions<OUTPUT>;\n    messageId: string;\n    initialState?: any;\n  }) {\n    super({ component: 'LLM', name: 'MastraModelOutput' });\n    this.#options = options;\n    this.#transportRef = options.transportRef;\n    this.#returnScorerData = !!options.returnScorerData;\n    this.runId = options.runId;\n    const resultSpan = getRootExportSpan(options.tracingContext?.currentSpan);\n    this.traceId = resultSpan?.externalTraceId;\n    this.spanId = resultSpan?.id;\n\n    this.#model = _model;\n\n    this.messageId = messageId;\n\n    // Determine structured output mode:\n    // - 'direct': LLM generates JSON directly (no model provided), object transformers run in this stream\n    // - 'processor': StructuredOutputProcessor uses internal agent with provided model\n    // - undefined: No structured output\n    if (options.structuredOutput?.schema) {\n      this.#structuredOutputMode = options.structuredOutput.model ? 'processor' : 'direct';\n    }\n\n    // Create processor runner if outputProcessors are provided\n    if (options.outputProcessors?.length) {\n      this.processorRunner = new ProcessorRunner({\n        inputProcessors: [],\n        outputProcessors: options.outputProcessors,\n        logger: this.logger,\n        agentName: 'MastraModelOutput',\n        processorStates: options.processorStates,\n      });\n    }\n\n    this.messageList = messageList;\n\n    const self = this;\n\n    // Apply output processors if they exist\n    let processedStream = stream;\n    const processorRunner = this.processorRunner;\n    if (processorRunner && options.isLLMExecutionStep) {\n      // Use shared processor states if provided, otherwise create new ones\n      const processorStates = (options.processorStates || new Map<string, ProcessorState>()) as Map<\n        string,\n        ProcessorState<OUTPUT>\n      >;\n\n      processedStream = stream.pipeThrough(\n        new TransformStream<ChunkType<OUTPUT>, ChunkType<OUTPUT>>({\n          async transform(chunk, controller) {\n            // Filter out intermediate finish chunks with 'tool-calls' reason\n            // These are internal signals that shouldn't reach output processors\n\n            if (chunk.type === 'finish' && chunk.payload?.stepResult?.reason === 'tool-calls') {\n              controller.enqueue(chunk);\n              return;\n            } else {\n              /**\n               * Add/update base stream controller to structured output processor state\n               * so it can be used to enqueue chunks into the main stream from the structuring agent stream.\n               * Need to update controller on each new LLM execution step since each step has its own TransformStream.\n               */\n              if (!processorStates.has(STRUCTURED_OUTPUT_PROCESSOR_NAME)) {\n                const processorIndex = processorRunner.outputProcessors.findIndex(\n                  p => p.id === STRUCTURED_OUTPUT_PROCESSOR_NAME,\n                );\n                // Only create the state if the processor actually exists in the list\n                if (processorIndex !== -1) {\n                  const structuredOutputProcessor = processorRunner.outputProcessors[processorIndex];\n                  const structuredOutputProcessorState = new ProcessorState<OUTPUT>({\n                    processorName: structuredOutputProcessor?.name ?? STRUCTURED_OUTPUT_PROCESSOR_NAME,\n                    tracingContext: options.tracingContext,\n                    processorIndex,\n                    createSpan: true,\n                  });\n                  structuredOutputProcessorState.customState = { controller };\n                  processorStates.set(STRUCTURED_OUTPUT_PROCESSOR_NAME, structuredOutputProcessorState);\n                }\n              } else {\n                // Update controller for new LLM execution step\n                const structuredOutputProcessorState = processorStates.get(STRUCTURED_OUTPUT_PROCESSOR_NAME);\n                if (structuredOutputProcessorState) {\n                  structuredOutputProcessorState.customState.controller = controller;\n                }\n              }\n\n              // Create a ProcessorStreamWriter from the controller so processOutputStream can emit custom chunks\n              const streamWriter = {\n                custom: async (data: { type: string }) => controller.enqueue(data as ChunkType<OUTPUT>),\n              };\n\n              const {\n                part: processed,\n                blocked,\n                reason,\n                tripwireOptions,\n                processorId,\n              } = await processorRunner.processPart(\n                chunk,\n                processorStates,\n                resolveObservabilityContext(options),\n                options.requestContext,\n                self.messageList,\n                0,\n                streamWriter,\n              );\n              const enqueueTripwire = (r?: string, opts?: { retry?: boolean; metadata?: unknown }, pid?: string) => {\n                controller.enqueue({\n                  type: 'tripwire',\n                  payload: {\n                    reason: r || 'Output processor blocked content',\n                    retry: opts?.retry,\n                    metadata: opts?.metadata,\n                    processorId: pid,\n                  },\n                } as ChunkType<OUTPUT>);\n              };\n\n              if (blocked) {\n                // Emit a tripwire chunk so downstream knows about the abort\n                enqueueTripwire(reason, tripwireOptions, processorId);\n                return;\n              }\n              if (processed) {\n                controller.enqueue(processed as ChunkType<OUTPUT>);\n              }\n\n              // Emit any parts a processor stashed for reprocessing (e.g. the\n              // non-text part that triggered a BatchPartsProcessor flush),\n              // pushing each back through the whole chain for downstream\n              // processing.\n              const reprocessed = await processorRunner.drainReprocessParts(\n                processorStates,\n                resolveObservabilityContext(options),\n                options.requestContext,\n                self.messageList,\n                0,\n                streamWriter,\n              );\n              for (const r of reprocessed) {\n                if (r.blocked) {\n                  enqueueTripwire(r.reason, r.tripwireOptions, r.processorId);\n                  return;\n                }\n                if (r.part != null) {\n                  controller.enqueue(r.part as ChunkType<OUTPUT>);\n                }\n              }\n            }\n          },\n        }),\n      );\n    }\n\n    // Only apply object transformer in 'direct' mode (LLM generates JSON directly)\n    // In 'processor' mode, the StructuredOutputProcessor handles object transformation\n    if (self.#structuredOutputMode === 'direct' && self.#options.isLLMExecutionStep) {\n      processedStream = processedStream.pipeThrough(\n        createObjectStreamTransformer({\n          structuredOutput: self.#options.structuredOutput,\n          logger: self.logger,\n        }),\n      );\n    }\n\n    this.#baseStream = processedStream.pipeThrough(\n      new TransformStream<ChunkType<OUTPUT>, ChunkType<OUTPUT>>({\n        transform: async (chunk, controller) => {\n          switch (chunk.type) {\n            case 'tool-call-suspended':\n            case 'tool-call-approval':\n              self.#status = 'suspended';\n              self.#delayedPromises.suspendPayload.resolve(chunk.payload);\n              self.#delayedPromises.resumeSchema.resolve(chunk.payload.resumeSchema);\n              if (!self.#finishCallbackSent) {\n                self.#finishCallbackSent = true;\n                await options?.onFinish?.(self.#createSuspendedOnFinishPayload(chunk));\n              }\n              break;\n            case 'abort':\n              self.#status = 'canceled';\n              if (!self.#finishCallbackSent) {\n                self.#finishCallbackSent = true;\n                await options?.onFinish?.(self.#createAbortedOnFinishPayload());\n              }\n              self.#closeTransportIfNeeded();\n              break;\n            case 'raw':\n              if (!self.#options.includeRawChunks) {\n                return;\n              }\n              break;\n            case 'object-result':\n              self.#bufferedObject = chunk.object;\n              // Only resolve if not already rejected by validation error\n              if (self.#delayedPromises.object.status.type === 'pending') {\n                self.#delayedPromises.object.resolve(chunk.object);\n              }\n              break;\n            case 'source':\n              self.#bufferedSources.push(chunk);\n              self.#bufferedByStep.sources.push(chunk);\n              break;\n            case 'text-delta':\n              self.#bufferedText.push(chunk.payload.text);\n              self.#bufferedByStep.text += chunk.payload.text;\n              if (chunk.payload.id) {\n                const ary = self.#bufferedTextChunks[chunk.payload.id] ?? [];\n                ary.push(chunk.payload.text);\n                self.#bufferedTextChunks[chunk.payload.id] = ary;\n              }\n              break;\n            case 'tool-call-input-streaming-start':\n              self.#toolCallDeltaIdNameMap[chunk.payload.toolCallId] = chunk.payload.toolName;\n              self.#toolCallStreamingMeta[chunk.payload.toolCallId] = {\n                toolName: chunk.payload.toolName,\n                providerExecuted: chunk.payload.providerExecuted,\n                providerMetadata: chunk.payload.providerMetadata,\n                dynamic: chunk.payload.dynamic,\n                ...(chunk.payload.observability ? { observability: chunk.payload.observability } : {}),\n              };\n              break;\n            case 'tool-call-input-streaming-end': {\n              const toolCallId = chunk.payload.toolCallId;\n              const meta = self.#toolCallStreamingMeta[toolCallId];\n              const deltaParts = self.#toolCallArgsDeltas[toolCallId];\n              let args: Record<string, unknown> = {};\n              if (deltaParts?.length) {\n                try {\n                  const merged = deltaParts.join('');\n                  args = typeof merged === 'string' && merged.length > 0 ? JSON.parse(merged) : {};\n                } catch {\n                  args = {};\n                }\n              }\n              delete self.#toolCallStreamingMeta[toolCallId];\n              delete self.#toolCallArgsDeltas[toolCallId];\n              delete self.#toolCallDeltaIdNameMap[toolCallId];\n              if (meta) {\n                const synthetic: ToolCallChunk = {\n                  type: 'tool-call',\n                  runId: chunk.runId,\n                  from: chunk.from,\n                  payload: {\n                    toolCallId,\n                    toolName: meta.toolName,\n                    args,\n                    providerExecuted: meta.providerExecuted,\n                    providerMetadata: meta.providerMetadata,\n                    dynamic: meta.dynamic,\n                    ...(meta.observability ? { observability: meta.observability } : {}),\n                  },\n                };\n                self.#toolCalls.push(synthetic);\n                self.#bufferedByStep.toolCalls.push(synthetic);\n                // Emit streaming-end then synthetic so studio receives tool-input-end then tool-input-available before tool-output-available\n                self.#emitChunk(chunk);\n                controller.enqueue(chunk);\n                self.#emitChunk(synthetic);\n                controller.enqueue(synthetic);\n                return;\n              }\n              break;\n            }\n            case 'tool-call-delta':\n              if (!self.#toolCallArgsDeltas[chunk.payload.toolCallId]) {\n                self.#toolCallArgsDeltas[chunk.payload.toolCallId] = [];\n              }\n              self.#toolCallArgsDeltas?.[chunk.payload.toolCallId]?.push(chunk.payload.argsTextDelta);\n              // mutate chunk to add toolname, we need it later to look up tools by their name\n              chunk.payload.toolName ||= self.#toolCallDeltaIdNameMap[chunk.payload.toolCallId];\n              break;\n            case 'file':\n              self.#bufferedFiles.push(chunk);\n              self.#bufferedByStep.files.push(chunk);\n              break;\n            case 'reasoning-start':\n              self.#bufferedReasoningDetails[chunk.payload.id] = {\n                type: 'reasoning',\n                runId: chunk.runId,\n                from: chunk.from,\n                payload: {\n                  id: chunk.payload.id,\n                  providerMetadata: chunk.payload.providerMetadata,\n                  text: '',\n                },\n              };\n              break;\n            case 'reasoning-delta': {\n              self.#bufferedReasoning.push({\n                type: 'reasoning',\n                runId: chunk.runId,\n                from: chunk.from,\n                payload: chunk.payload,\n              });\n              self.#bufferedByStep.reasoning.push({\n                type: 'reasoning',\n                runId: chunk.runId,\n                from: chunk.from,\n                payload: chunk.payload,\n              });\n\n              const bufferedReasoning = self.#bufferedReasoningDetails[chunk.payload.id];\n              if (bufferedReasoning) {\n                bufferedReasoning.payload.text += chunk.payload.text;\n                if (chunk.payload.providerMetadata) {\n                  bufferedReasoning.payload.providerMetadata = chunk.payload.providerMetadata;\n                }\n              }\n              break;\n            }\n\n            case 'reasoning-end': {\n              const bufferedReasoning = self.#bufferedReasoningDetails[chunk.payload.id];\n              if (chunk.payload.providerMetadata && bufferedReasoning) {\n                bufferedReasoning.payload.providerMetadata = chunk.payload.providerMetadata;\n              }\n              break;\n            }\n            case 'tool-call': {\n              // Skip if a synthetic tool-call was already created from tool-call-input-streaming-end\n              const existingSynthetic = self.#toolCalls.find(tc => tc.payload.toolCallId === chunk.payload.toolCallId);\n              // In some providers (e.g. Anthropic PTC), args are only present in the final tool-call event.\n              // Synthetic tool-calls built from streaming deltas may have empty args,\n              // so we merge them here if missing.\n              if (existingSynthetic) {\n                // FIX: merge args if synthetic is empty\n                if (chunk.payload.args && Object.keys(existingSynthetic.payload.args || {}).length === 0) {\n                  existingSynthetic.payload.args = chunk.payload.args;\n                }\n\n                // existing logic\n                if (chunk.payload.providerMetadata && !existingSynthetic.payload.providerMetadata) {\n                  existingSynthetic.payload.providerMetadata = chunk.payload.providerMetadata;\n                }\n                if (chunk.payload.dynamic != null && existingSynthetic.payload.dynamic == null) {\n                  existingSynthetic.payload.dynamic = chunk.payload.dynamic;\n                }\n                if (chunk.payload.observability && !existingSynthetic.payload.observability) {\n                  existingSynthetic.payload.observability = chunk.payload.observability;\n                }\n                return;\n              }\n              self.#toolCalls.push(chunk);\n              self.#bufferedByStep.toolCalls.push(chunk);\n              const toolCallPayload = chunk.payload;\n              // @ts-expect-error TODO: What does this mean??? Why is there a nested output, what is the type supposed to be\n              if (toolCallPayload?.output?.from === 'AGENT' && toolCallPayload?.output?.type === 'finish') {\n                // @ts-expect-error TODO: What does this mean??? Why is there a nested output, what is the type supposed to be\n                const finishPayload = toolCallPayload.output.payload;\n                if (finishPayload?.usage) {\n                  self.updateUsageCount(finishPayload.usage);\n                }\n              }\n              break;\n            }\n            case 'tool-result':\n              self.#toolResults.push(chunk);\n              self.#bufferedByStep.toolResults.push(chunk);\n              break;\n            case 'step-finish': {\n              self.updateUsageCount(chunk.payload.output.usage);\n              // chunk.payload.totalUsage = self.totalUsage;\n              self.#warnings = chunk.payload.stepResult.warnings || [];\n\n              if (chunk.payload.metadata.request) {\n                self.#request = chunk.payload.metadata.request;\n              }\n\n              const { providerMetadata, request, ...otherMetadata } = chunk.payload.metadata;\n\n              // Check if this step has tripwire data (from DefaultStepResult in llm-execution-step)\n              // The current step is the last one in the steps array (MastraStepResult with tripwire field)\n              const payloadSteps = chunk.payload.output?.steps || [];\n              const currentPayloadStep = payloadSteps[payloadSteps.length - 1];\n              const stepTripwire = currentPayloadStep?.tripwire;\n\n              // If step has tripwire, text should be empty (rejected response)\n              const stepText = stepTripwire ? '' : self.#bufferedByStep.text;\n\n              const stepResult: LLMStepResult<OUTPUT> = {\n                stepType: self.#bufferedSteps.length === 0 ? 'initial' : 'tool-result',\n                sources: self.#bufferedByStep.sources,\n                files: self.#bufferedByStep.files,\n                toolCalls: self.#bufferedByStep.toolCalls,\n                toolResults: self.#bufferedByStep.toolResults,\n\n                content: messageList.get.response.aiV5.modelContent(-1),\n                text: stepText,\n                // Include tripwire data if present\n                tripwire: stepTripwire,\n                reasoningText: self.#bufferedReasoning.map(reasoningPart => reasoningPart.payload.text).join(''),\n                reasoning: Object.values(self.#bufferedReasoningDetails),\n                get staticToolCalls() {\n                  return self.#bufferedByStep.toolCalls.filter(\n                    part => part.type === 'tool-call' && part.payload?.dynamic === false,\n                  );\n                },\n                get dynamicToolCalls() {\n                  return self.#bufferedByStep.toolCalls.filter(\n                    part => part.type === 'tool-call' && part.payload?.dynamic === true,\n                  );\n                },\n                get staticToolResults() {\n                  return self.#bufferedByStep.toolResults.filter(\n                    part => part.type === 'tool-result' && part.payload?.dynamic === false,\n                  );\n                },\n                get dynamicToolResults() {\n                  return self.#bufferedByStep.toolResults.filter(\n                    part => part.type === 'tool-result' && part.payload?.dynamic === true,\n                  );\n                },\n                finishReason: chunk.payload.stepResult.reason,\n                usage: chunk.payload.output.usage,\n                warnings: self.#warnings,\n                request: request || {},\n                response: {\n                  id: chunk.payload.id || '',\n                  timestamp: (chunk.payload.metadata?.timestamp as Date) || new Date(),\n                  ...otherMetadata,\n                  modelId:\n                    (chunk.payload.metadata?.modelId as string) || (chunk.payload.metadata?.model as string) || '',\n                  messages: chunk.payload.messages?.nonUser || [],\n                  dbMessages: self.messageList.get.response.db(),\n                  // We have to cast this until messageList can take generics also and type metadata, it was too\n                  // complicated to do this in this PR, it will require a much bigger change.\n                  uiMessages: messageList.get.response.aiV5.ui() as LLMStepResult<OUTPUT>['response']['uiMessages'],\n                },\n                providerMetadata: providerMetadata ?? chunk.payload.providerMetadata,\n              };\n\n              await options?.onStepFinish?.({\n                ...(self.#model.modelId && self.#model.provider && self.#model.version ? { model: self.#model } : {}),\n                ...stepResult,\n              });\n\n              self.#bufferedSteps.push(stepResult);\n\n              self.#bufferedByStep = {\n                text: '',\n                reasoning: [],\n                sources: [],\n                files: [],\n                toolCalls: [],\n                toolResults: [],\n                dynamicToolCalls: [],\n                dynamicToolResults: [],\n                staticToolCalls: [],\n                staticToolResults: [],\n                content: [],\n                usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n                warnings: [],\n                request: {},\n                response: {\n                  id: '',\n                  timestamp: new Date(),\n                  modelId: '',\n                  messages: [],\n                  uiMessages: [],\n                },\n                reasoningText: '',\n                providerMetadata: undefined,\n                finishReason: undefined,\n              };\n\n              break;\n            }\n            case 'tripwire':\n              // Handle tripwire chunks from processors\n              self.#tripwire = {\n                reason: chunk.payload?.reason || 'Content blocked',\n                retry: chunk.payload?.retry,\n                metadata: chunk.payload?.metadata,\n                processorId: chunk.payload?.processorId,\n              };\n              self.#finishReason = 'other';\n              // Mark stream as finished for EventEmitter\n              self.#streamFinished = true;\n\n              // Resolve all delayed promises before terminating\n              self.resolvePromises({\n                text: self.#bufferedText.join(''),\n                finishReason: 'other',\n                object: undefined,\n                usage: self.#usageCount,\n                warnings: self.#warnings,\n                providerMetadata: undefined,\n                response: {\n                  dbMessages: self.messageList.get.response.db(),\n                },\n                request: {},\n                reasoning: [],\n                reasoningText: undefined,\n                sources: [],\n                files: [],\n                toolCalls: [],\n                toolResults: [],\n                steps: self.#bufferedSteps,\n                totalUsage: self.#usageCount,\n                content: [],\n                suspendPayload: undefined, // Tripwire doesn't suspend, so resolve to undefined\n                resumeSchema: undefined,\n              });\n\n              self.#closeTransportIfNeeded();\n\n              // Emit the tripwire chunk for listeners\n              self.#emitChunk(chunk);\n              // Pass the tripwire chunk through\n              controller.enqueue(chunk);\n              // Emit finish event for EventEmitter streams (since flush won't be called on terminate)\n              self.#emitter.emit('finish');\n              // Terminate the stream\n              controller.terminate();\n              return;\n            case 'finish':\n              self.#status = 'success';\n              if (chunk.payload.stepResult.reason) {\n                self.#finishReason = chunk.payload.stepResult.reason;\n              }\n\n              // We can preserve finish metadata from whichever shape the upstream SDK emitted,\n              // but we cannot reconstruct providerMetadata if the provider omitted it entirely.\n              const finalProviderMetadata = chunk.payload.metadata?.providerMetadata ?? chunk.payload.providerMetadata;\n\n              // Check if this is a tripwire case - set tripwire data\n              // This can happen when max retries is exceeded or a processor triggers a tripwire\n              if ((chunk.payload.stepResult.reason as string) === 'tripwire') {\n                // Try to get the tripwire data from the last step (MastraStepResult)\n                const outputSteps = chunk.payload.output?.steps;\n                const lastStep = outputSteps?.[outputSteps?.length - 1];\n                const stepTripwire = lastStep?.tripwire;\n                self.#tripwire = {\n                  reason: stepTripwire?.reason || 'Processor tripwire triggered',\n                  retry: stepTripwire?.retry,\n                  metadata: stepTripwire?.metadata,\n                  processorId: stepTripwire?.processorId,\n                };\n              }\n\n              // Add structured output to the latest assistant message metadata\n              if (self.#bufferedObject !== undefined) {\n                const responseMessages = messageList.get.response.db();\n                const lastAssistantMessage = [...responseMessages].reverse().find(m => m.role === 'assistant');\n                if (lastAssistantMessage) {\n                  if (!lastAssistantMessage.content.metadata) {\n                    lastAssistantMessage.content.metadata = {};\n                  }\n                  lastAssistantMessage.content.metadata.structuredOutput = self.#bufferedObject;\n                }\n              }\n\n              let response: LLMStepResult<OUTPUT>['response'] = {};\n              if (chunk.payload.metadata) {\n                const { providerMetadata, request, ...otherMetadata } = chunk.payload.metadata;\n\n                response = {\n                  ...otherMetadata,\n                  messages: messageList.get.response.aiV5.model(),\n                  uiMessages: messageList.get.response.aiV5.ui() as LLMStepResult<OUTPUT>['response']['uiMessages'],\n                };\n              }\n\n              this.populateUsageCount(chunk.payload.output.usage as Record<string, number>);\n\n              chunk.payload.output.usage = {\n                inputTokens: self.#usageCount.inputTokens ?? 0,\n                outputTokens: self.#usageCount.outputTokens ?? 0,\n                totalTokens: self.#usageCount.totalTokens ?? 0,\n                ...(self.#usageCount.reasoningTokens !== undefined && {\n                  reasoningTokens: self.#usageCount.reasoningTokens,\n                }),\n                ...(self.#usageCount.cachedInputTokens !== undefined && {\n                  cachedInputTokens: self.#usageCount.cachedInputTokens,\n                }),\n                ...(self.#usageCount.cacheCreationInputTokens !== undefined && {\n                  cacheCreationInputTokens: self.#usageCount.cacheCreationInputTokens,\n                }),\n                ...(self.#usageCount.raw !== undefined && {\n                  raw: self.#usageCount.raw,\n                }),\n              };\n\n              try {\n                if (self.processorRunner && !self.#options.isLLMExecutionStep) {\n                  // Run output processors when NOT in LLM execution step context\n                  // (i.e., when this is the final MastraModelOutput for the agent)\n\n                  // Capture original text before processing for comparison\n                  const lastStep = self.#bufferedSteps[self.#bufferedSteps.length - 1];\n                  const originalText = lastStep?.text || '';\n\n                  // Create a writer from the controller so processOutputResult can emit custom chunks.\n                  // Must use both #emitChunk (for fullStream/EventEmitter consumers) and\n                  // controller.enqueue (for raw stream consumers) to ensure visibility.\n                  const outputResultWriter = {\n                    custom: async (data: { type: string }) => {\n                      self.#emitChunk(data as ChunkType<OUTPUT>);\n                      controller.enqueue(data as ChunkType<OUTPUT>);\n                    },\n                  };\n\n                  const outputResult: OutputResult = {\n                    text: self.#bufferedText.join(''),\n                    usage: chunk.payload.output.usage as LanguageModelUsage,\n                    finishReason: self.#finishReason || 'unknown',\n                    steps: [...self.#bufferedSteps] as LLMStepResult[],\n                  };\n\n                  self.messageList = await self.processorRunner.runOutputProcessors(\n                    self.messageList,\n                    resolveObservabilityContext(options),\n                    self.#options.requestContext,\n                    0,\n                    outputResultWriter,\n                    outputResult,\n                  );\n\n                  // Get text from the latest response message (the last assistant message)\n                  const responseMessages = self.messageList.get.response.aiV4.core();\n                  const lastResponseMessage = responseMessages[responseMessages.length - 1];\n                  const outputText = lastResponseMessage ? coreContentToString(lastResponseMessage.content) : '';\n\n                  // Only update the last step's text if output processors actually modified it\n                  // This preserves text from retry scenarios where step.text is already correct\n                  if (lastStep && outputText && outputText !== originalText) {\n                    lastStep.text = outputText;\n                  }\n\n                  // Use the processed text if available, otherwise keep original\n                  this.resolvePromises({\n                    text: outputText || originalText,\n                    finishReason: self.#finishReason,\n                  });\n\n                  // Update response with processed messages after output processors have run\n                  if (chunk.payload.metadata) {\n                    const { providerMetadata, request, ...otherMetadata } = chunk.payload.metadata;\n                    response = {\n                      ...otherMetadata,\n                      messages: messageList.get.response.aiV5.model(),\n                      uiMessages: messageList.get.response.aiV5.ui() as LLMStepResult<OUTPUT>['response']['uiMessages'],\n                    };\n                  }\n\n                  // Cast needed because chunk.payload.response is typed with default OUTPUT=undefined\n                  (chunk.payload as { response?: LLMStepResult<OUTPUT>['response'] }).response = response;\n                } else if (!self.#options.isLLMExecutionStep) {\n                  // No processor runner, not in LLM execution step - resolve with buffered text\n                  this.resolvePromises({\n                    text: self.#bufferedText.join(''),\n                    finishReason: self.#finishReason,\n                  });\n                }\n                // If isLLMExecutionStep is true, don't resolve text here - let the outer MastraModelOutput handle it\n              } catch (error) {\n                if (error instanceof TripWire) {\n                  self.#tripwire = {\n                    reason: error.message,\n                    retry: error.options?.retry,\n                    metadata: error.options?.metadata,\n                    processorId: error.processorId,\n                  };\n                  self.resolvePromises({\n                    finishReason: 'other',\n                    text: '',\n                  });\n                } else {\n                  self.#error = getErrorFromUnknown(error, {\n                    fallbackMessage: 'Unknown error in stream',\n                  });\n                  self.resolvePromises({\n                    finishReason: 'error',\n                    text: '',\n                  });\n                }\n                if (self.#delayedPromises.object.status.type !== 'resolved') {\n                  self.#delayedPromises.object.resolve(undefined as OUTPUT);\n                }\n              }\n\n              const reasoningText =\n                self.#bufferedReasoning.length > 0\n                  ? self.#bufferedReasoning.map(reasoningPart => reasoningPart.payload.text).join('')\n                  : undefined;\n\n              const baseFinishStep = self.#bufferedSteps[self.#bufferedSteps.length - 1];\n              if (\n                baseFinishStep &&\n                baseFinishStep.providerMetadata === undefined &&\n                finalProviderMetadata !== undefined\n              ) {\n                baseFinishStep.providerMetadata = finalProviderMetadata;\n              }\n\n              // Resolve all delayed promises with final values\n              this.resolvePromises({\n                usage: self.#usageCount,\n                warnings: self.#warnings,\n                providerMetadata: finalProviderMetadata,\n                response: { ...response, dbMessages: self.messageList.get.response.db() },\n                request: self.#request || {},\n                reasoningText,\n                reasoning: Object.values(self.#bufferedReasoningDetails || {}),\n                sources: self.#bufferedSources,\n                files: self.#bufferedFiles,\n                toolCalls: self.#toolCalls,\n                toolResults: self.#toolResults,\n                steps: self.#bufferedSteps,\n                totalUsage: self.#getTotalUsage(),\n                content: messageList.get.response.aiV5.stepContent(),\n                suspendPayload: undefined,\n                resumeSchema: undefined,\n              });\n\n              if (baseFinishStep) {\n                const onFinishPayload: MastraOnFinishCallbackArgs<OUTPUT> = {\n                  // StepResult properties from baseFinishStep\n                  providerMetadata: baseFinishStep.providerMetadata ?? finalProviderMetadata,\n                  text: self.#bufferedText.join(''),\n                  warnings: baseFinishStep.warnings ?? [],\n                  finishReason: chunk.payload.stepResult.reason,\n                  content: messageList.get.response.aiV5.stepContent(),\n                  request: await self.request,\n                  error: self.error,\n                  reasoning: await self.reasoning,\n                  reasoningText: await self.reasoningText,\n                  sources: await self.sources,\n                  files: await self.files,\n                  steps: self.#bufferedSteps,\n                  response: {\n                    ...(await self.response),\n                    ...baseFinishStep.response,\n                    messages: messageList.get.response.aiV5.model(),\n                    dbMessages: self.messageList.get.response.db(),\n                  },\n                  usage: chunk.payload.output.usage,\n                  totalUsage: self.#getTotalUsage(),\n                  toolCalls: await self.toolCalls,\n                  toolResults: await self.toolResults,\n                  staticToolCalls: (await self.toolCalls).filter(toolCall => toolCall?.payload?.dynamic === false),\n                  staticToolResults: (await self.toolResults).filter(\n                    toolResult => toolResult?.payload?.dynamic === false,\n                  ),\n                  dynamicToolCalls: (await self.toolCalls).filter(toolCall => toolCall?.payload?.dynamic === true),\n                  dynamicToolResults: (await self.toolResults).filter(\n                    toolResult => toolResult?.payload?.dynamic === true,\n                  ),\n                  // Custom properties (not part of standard callback)\n                  ...(self.#model.modelId && self.#model.provider && self.#model.version ? { model: self.#model } : {}),\n                  object:\n                    self.#delayedPromises.object.status.type === 'rejected'\n                      ? undefined\n                      : self.#delayedPromises.object.status.type === 'resolved'\n                        ? self.#delayedPromises.object.status.value\n                        : self.#structuredOutputMode === 'direct' && baseFinishStep.text\n                          ? (() => {\n                              try {\n                                return JSON.parse(baseFinishStep.text);\n                              } catch {\n                                return undefined;\n                              }\n                            })()\n                          : undefined,\n                };\n\n                if (!self.#finishCallbackSent) {\n                  self.#finishCallbackSent = true;\n                  await options?.onFinish?.(onFinishPayload);\n                }\n              }\n\n              self.#closeTransportIfNeeded();\n              break;\n\n            case 'error':\n              const error = getErrorFromUnknown(chunk.payload.error, {\n                fallbackMessage: 'Unknown error chunk in stream',\n              });\n              self.#error = error;\n              self.#status = 'failed';\n              self.#streamFinished = true; // Mark stream as finished for EventEmitter\n\n              Object.values(self.#delayedPromises).forEach(promise => {\n                if (promise.status.type === 'pending') {\n                  promise.reject(self.#error);\n                }\n              });\n\n              self.#closeTransportIfNeeded();\n              break;\n          }\n          self.#emitChunk(chunk);\n          controller.enqueue(chunk);\n        },\n        flush: () => {\n          if (self.#delayedPromises.object.status.type === 'pending') {\n            // always resolve pending object promise as undefined if still hanging in flush and hasn't been rejected by validation error\n            self.#delayedPromises.object.resolve(undefined as OUTPUT);\n          }\n\n          // If stream ends in suspended state (e.g., tool-call-approval), resolve promises with partial results\n          // This allows consumers to access data that was produced before the suspension\n          if (self.#status === 'suspended') {\n            const reasoningText =\n              self.#bufferedReasoning.length > 0\n                ? self.#bufferedReasoning.map(reasoningPart => reasoningPart.payload.text).join('')\n                : undefined;\n\n            self.resolvePromises({\n              toolResults: self.#toolResults,\n              toolCalls: self.#toolCalls,\n              text: self.#bufferedText.join(''),\n              reasoning: Object.values(self.#bufferedReasoningDetails || {}),\n              reasoningText,\n              sources: self.#bufferedSources,\n              files: self.#bufferedFiles,\n              steps: self.#bufferedSteps,\n              usage: self.#usageCount,\n              totalUsage: self.#getTotalUsage(),\n              warnings: self.#warnings,\n              finishReason: 'suspended',\n              content: self.messageList.get.response.aiV5.stepContent(),\n              object: undefined,\n              request: self.#request,\n              response: {\n                dbMessages: self.messageList.get.response.db(),\n              },\n              providerMetadata: undefined,\n            });\n          }\n\n          // If stream ends without proper finish/error chunks, reject unresolved promises\n          // This must be in the final transformer flush to ensure\n          // all of the delayed promises had a chance to resolve or reject already\n          // Avoids promises hanging forever\n          Object.entries(self.#delayedPromises).forEach(([key, promise]) => {\n            if (promise.status.type === 'pending') {\n              promise.reject(new Error(`promise '${key}' was not resolved or rejected when stream finished`));\n            }\n          });\n\n          self.#closeTransportIfNeeded();\n\n          // Emit finish event for EventEmitter streams\n          self.#streamFinished = true;\n          self.#emitter.emit('finish');\n        },\n      }),\n    );\n\n    if (initialState) {\n      this.deserializeState(initialState);\n    }\n  }\n\n  private resolvePromise<KEY extends keyof PromiseResults<OUTPUT>>(key: KEY, value: PromiseResults<OUTPUT>[KEY]) {\n    if (!(key in this.#delayedPromises)) {\n      throw new MastraError({\n        id: 'MASTRA_MODEL_OUTPUT_INVALID_PROMISE_KEY',\n        domain: ErrorDomain.LLM,\n        category: ErrorCategory.SYSTEM,\n        text: `Attempted to resolve invalid promise key '${key}' with value '${typeof value === 'object' ? JSON.stringify(value, null, 2) : value}'`,\n      });\n    }\n    this.#delayedPromises[key].resolve(value);\n  }\n\n  private resolvePromises(data: Partial<PromiseResults<OUTPUT>>) {\n    for (const keyString in data) {\n      const key = keyString as keyof PromiseResults<OUTPUT>;\n      this.resolvePromise(key, data[key]);\n    }\n  }\n\n  #closeTransportIfNeeded() {\n    const transport = this.#transportRef?.current as StreamTransport | undefined;\n    if (!transport || !transport.closeOnFinish || this.#transportClosed) {\n      return;\n    }\n\n    this.#transportClosed = true;\n    try {\n      transport.close();\n    } catch {\n      // best-effort close\n    }\n  }\n\n  #getDelayedPromise<T>(promise: DelayedPromise<T>): Promise<T> {\n    if (!this.#consumptionStarted) {\n      void this.consumeStream();\n    }\n    return promise.promise;\n  }\n\n  /**\n   * Resolves to the complete text response after streaming completes.\n   */\n  get text() {\n    return this.#getDelayedPromise(this.#delayedPromises.text);\n  }\n\n  /**\n   * Resolves to reasoning parts array for models that support reasoning.\n   */\n  get reasoning() {\n    return this.#getDelayedPromise(this.#delayedPromises.reasoning);\n  }\n\n  /**\n   * Resolves to complete reasoning text for models that support reasoning.\n   */\n  get reasoningText() {\n    return this.#getDelayedPromise(this.#delayedPromises.reasoningText);\n  }\n\n  get sources() {\n    return this.#getDelayedPromise(this.#delayedPromises.sources);\n  }\n\n  get files() {\n    return this.#getDelayedPromise(this.#delayedPromises.files);\n  }\n\n  get steps() {\n    return this.#getDelayedPromise(this.#delayedPromises.steps);\n  }\n\n  get suspendPayload() {\n    return this.#getDelayedPromise(this.#delayedPromises.suspendPayload);\n  }\n\n  get resumeSchema() {\n    return this.#getDelayedPromise(this.#delayedPromises.resumeSchema);\n  }\n\n  /**\n   * Stream of all chunks. Provides complete control over stream processing.\n   */\n  get fullStream() {\n    return this.#createEventedStream();\n  }\n\n  /**\n   * Resolves to the reason generation finished.\n   */\n  get finishReason() {\n    return this.#getDelayedPromise(this.#delayedPromises.finishReason);\n  }\n\n  /**\n   * Resolves to array of all tool calls made during execution.\n   */\n  get toolCalls() {\n    return this.#getDelayedPromise(this.#delayedPromises.toolCalls);\n  }\n\n  /**\n   * Resolves to array of all tool execution results.\n   */\n  get toolResults() {\n    return this.#getDelayedPromise(this.#delayedPromises.toolResults);\n  }\n\n  /**\n   * Resolves to token usage statistics including inputTokens, outputTokens, and totalTokens.\n   */\n  get usage() {\n    return this.#getDelayedPromise(this.#delayedPromises.usage);\n  }\n\n  /**\n   * Resolves to array of all warnings generated during execution.\n   */\n  get warnings() {\n    return this.#getDelayedPromise(this.#delayedPromises.warnings);\n  }\n\n  /**\n   * Resolves to provider metadata generated during execution.\n   */\n  get providerMetadata() {\n    return this.#getDelayedPromise(this.#delayedPromises.providerMetadata);\n  }\n\n  /**\n   * Resolves to the complete response from the model.\n   */\n  get response() {\n    return this.#getDelayedPromise(this.#delayedPromises.response);\n  }\n\n  /**\n   * Resolves to the complete request sent to the model.\n   */\n  get request() {\n    return this.#getDelayedPromise(this.#delayedPromises.request);\n  }\n\n  /**\n   * Transport handle for the current stream (when available).\n   */\n  get transport(): StreamTransport | undefined {\n    return this.#transportRef?.current as StreamTransport | undefined;\n  }\n\n  /**\n   * Resolves to an error if an error occurred during streaming.\n   */\n  get error(): Error | undefined {\n    return this.#error;\n  }\n\n  updateUsageCount(usage: Partial<LanguageModelUsage>) {\n    if (!usage) {\n      return;\n    }\n\n    // Use AI SDK v5 format only (MastraModelOutput is only used in VNext paths)\n    if (usage.inputTokens !== undefined) {\n      this.#usageCount.inputTokens = (this.#usageCount.inputTokens ?? 0) + usage.inputTokens;\n    }\n    if (usage.outputTokens !== undefined) {\n      this.#usageCount.outputTokens = (this.#usageCount.outputTokens ?? 0) + usage.outputTokens;\n    }\n    if (usage.totalTokens !== undefined) {\n      this.#usageCount.totalTokens = (this.#usageCount.totalTokens ?? 0) + usage.totalTokens;\n    }\n    if (usage.reasoningTokens !== undefined) {\n      this.#usageCount.reasoningTokens = (this.#usageCount.reasoningTokens ?? 0) + usage.reasoningTokens;\n    }\n    if (usage.cachedInputTokens !== undefined) {\n      this.#usageCount.cachedInputTokens = (this.#usageCount.cachedInputTokens ?? 0) + usage.cachedInputTokens;\n    }\n    if (usage.cacheCreationInputTokens !== undefined) {\n      this.#usageCount.cacheCreationInputTokens =\n        (this.#usageCount.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;\n    }\n    // raw is provider-specific and not summable; keep the latest step's raw\n    if (usage.raw !== undefined) {\n      this.#usageCount.raw = usage.raw;\n    }\n  }\n\n  populateUsageCount(usage: Partial<LanguageModelUsage>) {\n    if (!usage) {\n      return;\n    }\n\n    // Use AI SDK v5 format only (MastraModelOutput is only used in VNext paths)\n    if (usage.inputTokens !== undefined && this.#usageCount.inputTokens === undefined) {\n      this.#usageCount.inputTokens = usage.inputTokens;\n    }\n    if (usage.outputTokens !== undefined && this.#usageCount.outputTokens === undefined) {\n      this.#usageCount.outputTokens = usage.outputTokens;\n    }\n    if (usage.totalTokens !== undefined && this.#usageCount.totalTokens === undefined) {\n      this.#usageCount.totalTokens = usage.totalTokens;\n    }\n    if (usage.reasoningTokens !== undefined && this.#usageCount.reasoningTokens === undefined) {\n      this.#usageCount.reasoningTokens = usage.reasoningTokens;\n    }\n    if (usage.cachedInputTokens !== undefined && this.#usageCount.cachedInputTokens === undefined) {\n      this.#usageCount.cachedInputTokens = usage.cachedInputTokens;\n    }\n    if (usage.cacheCreationInputTokens !== undefined && this.#usageCount.cacheCreationInputTokens === undefined) {\n      this.#usageCount.cacheCreationInputTokens = usage.cacheCreationInputTokens;\n    }\n    if (usage.raw !== undefined && this.#usageCount.raw === undefined) {\n      this.#usageCount.raw = usage.raw;\n    }\n  }\n\n  async consumeStream(options?: ConsumeStreamOptions): Promise<void> {\n    if (this.#consumptionStarted) {\n      return;\n    }\n\n    this.#consumptionStarted = true;\n\n    try {\n      await consumeStream({\n        stream: this.#baseStream as globalThis.ReadableStream<any>,\n        onError: options?.onError,\n        logger: this.logger,\n      });\n    } catch (error) {\n      options?.onError?.(error);\n    }\n  }\n\n  /**\n   * Returns complete output including text, usage, tool calls, and all metadata.\n   */\n  async getFullOutput(): Promise<FullOutput<OUTPUT>> {\n    await this.consumeStream({\n      onError: (error: unknown) => {\n        this.logger.error('Error consuming stream', error);\n        throw error;\n      },\n    });\n\n    let scoringData:\n      | {\n          input: Omit<ScorerRunInputForAgent, 'runId'>;\n          output: ScorerRunOutputForAgent;\n        }\n      | undefined;\n\n    if (this.#returnScorerData) {\n      scoringData = {\n        input: {\n          inputMessages: this.messageList.getPersisted.input.db(),\n          rememberedMessages: this.messageList.getPersisted.remembered.db(),\n          systemMessages: this.messageList.getSystemMessages(),\n          taggedSystemMessages: this.messageList.getPersisted.taggedSystemMessages,\n        },\n        output: this.messageList.getPersisted.response.db(),\n      };\n    }\n\n    const steps = await this.steps;\n\n    // Calculate text from steps, which respects tripwire (rejected steps return empty text)\n    // This ensures rejected responses are excluded from the final text output\n    const textFromSteps = steps.map((step: any) => step.text || '').join('');\n\n    const fullOutput: FullOutput<OUTPUT> = {\n      text: textFromSteps,\n      usage: await this.usage,\n      steps,\n      finishReason: await this.finishReason,\n      warnings: await this.warnings,\n      providerMetadata: await this.providerMetadata,\n      request: await this.request,\n      reasoning: await this.reasoning,\n      reasoningText: await this.reasoningText,\n      toolCalls: await this.toolCalls,\n      toolResults: await this.toolResults,\n      sources: await this.sources,\n      files: await this.files,\n      response: await this.response,\n      totalUsage: await this.totalUsage,\n      object: await this.object,\n      error: this.error,\n      tripwire: this.#tripwire,\n      ...(scoringData ? { scoringData } : {}),\n      traceId: this.traceId,\n      spanId: this.spanId,\n      runId: this.runId,\n      suspendPayload: await this.suspendPayload,\n      resumeSchema: await this.resumeSchema,\n      // All messages from this execution (input + memory history + response)\n      messages: this.messageList.get.all.db(),\n      // Only messages loaded from memory (conversation history)\n      rememberedMessages: this.messageList.get.remembered.db(),\n    };\n\n    return fullOutput;\n  }\n\n  /**\n   * Tripwire data if the stream was aborted due to an output processor blocking the content.\n   * Returns undefined if no tripwire was triggered.\n   */\n  get tripwire(): StepTripwireData | undefined {\n    return this.#tripwire;\n  }\n\n  /**\n   * The total usage of the stream.\n   */\n  get totalUsage() {\n    return this.#getDelayedPromise(this.#delayedPromises.totalUsage);\n  }\n\n  get content(): Promise<LLMStepResult['content']> {\n    return this.#getDelayedPromise(this.#delayedPromises.content);\n  }\n\n  /**\n   * Stream of valid JSON chunks. The final JSON result is validated against the output schema when the stream ends.\n   *\n   * @example\n   * ```typescript\n   * const stream = await agent.stream(\"Extract data\", {\n   *   structuredOutput: {\n   *     schema: z.object({ name: z.string(), age: z.number() }),\n   *     model: 'gpt-4o-mini' // optional to use a model for structuring json output\n   *   }\n   * });\n   * // partial json chunks\n   * for await (const data of stream.objectStream) {\n   *   console.log(data); // { name: 'John' }, { name: 'John', age: 30 }\n   * }\n   * ```\n   */\n  get objectStream() {\n    return this.#createEventedStream().pipeThrough(\n      new TransformStream<ChunkType<OUTPUT>, Partial<OUTPUT>>({\n        transform(chunk, controller) {\n          if (chunk.type === 'object') {\n            controller.enqueue(chunk.object);\n          }\n        },\n      }),\n    );\n  }\n\n  /**\n   * Stream of individual array elements when output schema is an array type.\n   */\n  get elementStream(): ReadableStream<OUTPUT extends Array<infer T> ? T : never> {\n    let publishedElements = 0;\n\n    return this.#createEventedStream().pipeThrough(\n      new TransformStream<ChunkType<OUTPUT>, OUTPUT extends Array<infer T> ? T : never>({\n        transform(chunk, controller) {\n          if (chunk.type === 'object') {\n            if (Array.isArray(chunk.object)) {\n              // Publish new elements of the array one by one\n              for (; publishedElements < chunk.object.length; publishedElements++) {\n                controller.enqueue(chunk.object[publishedElements]);\n              }\n            }\n          }\n        },\n      }),\n    );\n  }\n\n  /**\n   * Stream of only text content, filtering out metadata and other chunk types.\n   */\n  get textStream() {\n    if (this.#structuredOutputMode === 'direct') {\n      const outputSchema = getTransformedSchema(this.#options.structuredOutput?.schema);\n      if (outputSchema?.outputFormat === 'array') {\n        return this.#createEventedStream().pipeThrough(\n          createJsonTextStreamTransformer(this.#options.structuredOutput?.schema),\n        );\n      }\n    }\n\n    return this.#createEventedStream().pipeThrough(\n      new TransformStream<ChunkType<OUTPUT>, string>({\n        transform(chunk, controller) {\n          if (chunk.type === 'text-delta') {\n            controller.enqueue(chunk.payload.text);\n          }\n        },\n      }),\n    );\n  }\n\n  /**\n   * Resolves to the complete object response from the model. Validated against the 'output' schema when the stream ends.\n   *\n   * @example\n   * ```typescript\n   * const stream = await agent.stream(\"Extract data\", {\n   *   structuredOutput: {\n   *     schema: z.object({ name: z.string(), age: z.number() }),\n   *     model: 'gpt-4o-mini' // optionally use a model for structuring json output\n   *   }\n   * });\n   * // final validated json\n   * const data = await stream.object // { name: 'John', age: 30 }\n   * ```\n   */\n  get object() {\n    if (\n      !this.processorRunner &&\n      !this.#options.structuredOutput?.schema &&\n      this.#delayedPromises.object.status.type === 'pending'\n    ) {\n      this.#delayedPromises.object.resolve(undefined as OUTPUT);\n    }\n\n    return this.#getDelayedPromise(this.#delayedPromises.object);\n  }\n\n  // Internal methods for immediate values - used internally by Mastra (llm-execution.ts bailing on errors/abort signals with current state)\n  // These are not part of the public API\n  /** @internal */\n  _getImmediateToolCalls() {\n    return this.#toolCalls;\n  }\n  /** @internal */\n  _getImmediateToolResults() {\n    return this.#toolResults;\n  }\n  /** @internal */\n  _getImmediateText() {\n    return this.#bufferedText.join('');\n  }\n\n  /** @internal */\n  _getImmediateObject() {\n    return this.#bufferedObject;\n  }\n  /** @internal */\n  _getImmediateUsage() {\n    return this.#usageCount;\n  }\n  /** @internal */\n  _getImmediateWarnings() {\n    return this.#warnings;\n  }\n  /** @internal */\n  _getImmediateFinishReason() {\n    return this.#finishReason;\n  }\n  /** @internal  */\n  _getBaseStream() {\n    return this.#baseStream;\n  }\n\n  /** @internal */\n  _waitUntilFinished() {\n    if (this.#streamFinished) {\n      return Promise.resolve();\n    }\n\n    return new Promise<void>(resolve => {\n      this.#emitter.once('finish', resolve);\n    });\n  }\n\n  #getTotalUsage(): LanguageModelUsage {\n    let total = this.#usageCount.totalTokens;\n\n    if (total === undefined) {\n      const input = this.#usageCount.inputTokens ?? 0;\n      const output = this.#usageCount.outputTokens ?? 0;\n      const reasoning = this.#usageCount.reasoningTokens ?? 0;\n      total = input + output + reasoning;\n    }\n\n    return {\n      inputTokens: this.#usageCount.inputTokens,\n      outputTokens: this.#usageCount.outputTokens,\n      totalTokens: total,\n      reasoningTokens: this.#usageCount.reasoningTokens,\n      cachedInputTokens: this.#usageCount.cachedInputTokens,\n      cacheCreationInputTokens: this.#usageCount.cacheCreationInputTokens,\n      ...(this.#usageCount.raw !== undefined && { raw: this.#usageCount.raw }),\n    };\n  }\n\n  #createAbortedOnFinishPayload(): MastraOnFinishCallbackArgs<OUTPUT> {\n    // Abort flow invokes options?.onFinish so map-results-step.ts can close the AGENT_RUN span.\n    // That span path only reads finishReason. The remaining LLMStepResult fields are empty\n    // defaults to satisfy the MastraOnFinishCallback shape without reconstructing partial\n    // buffered state from a stream that was canceled mid-flight.\n    return {\n      finishReason: 'aborted',\n      text: '',\n      reasoning: [],\n      reasoningText: undefined,\n      sources: [],\n      files: [],\n      toolCalls: [],\n      toolResults: [],\n      staticToolCalls: [],\n      staticToolResults: [],\n      dynamicToolCalls: [],\n      dynamicToolResults: [],\n      content: [],\n      usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n      warnings: [],\n      providerMetadata: undefined,\n      request: {},\n      response: {},\n      steps: [],\n      totalUsage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n      object: undefined as OUTPUT,\n    };\n  }\n\n  #createSuspendedOnFinishPayload(\n    chunk: Extract<ChunkType<OUTPUT>, { type: 'tool-call-approval' | 'tool-call-suspended' }>,\n  ): MastraOnFinishCallbackArgs<OUTPUT> & {\n    suspendReason: 'tool-call-approval' | 'tool-call-suspended';\n    toolName: string;\n    toolCallId: string;\n  } {\n    // Suspend flow invokes options?.onFinish so map-results-step.ts can close the AGENT_RUN span.\n    // That span path only reads finishReason + suspendReason/toolName/toolCallId. The remaining\n    // LLMStepResult fields are empty defaults to satisfy the MastraOnFinishCallback shape without\n    // reconstructing partial buffered text/tool/message state from a half-finished stream.\n    return {\n      finishReason: 'suspended',\n      suspendReason: chunk.type,\n      toolName: chunk.payload.toolName,\n      toolCallId: chunk.payload.toolCallId,\n      // Empty defaults for the LLMStepResult/MastraOnFinishCallback shape.\n      text: '',\n      reasoning: [],\n      reasoningText: undefined,\n      sources: [],\n      files: [],\n      toolCalls: [],\n      toolResults: [],\n      staticToolCalls: [],\n      staticToolResults: [],\n      dynamicToolCalls: [],\n      dynamicToolResults: [],\n      content: [],\n      usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n      warnings: [],\n      providerMetadata: undefined,\n      request: {},\n      response: {},\n      steps: [],\n      totalUsage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n      object: undefined as OUTPUT,\n    };\n  }\n\n  #emitChunk(chunk: ChunkType<OUTPUT>) {\n    this.#bufferedChunks.push(chunk); // add to bufferedChunks for replay in new streams\n    this.#emitter.emit('chunk', chunk); // emit chunk for existing listener streams\n  }\n\n  #createEventedStream() {\n    const self = this;\n\n    return new ReadableStream<ChunkType<OUTPUT>>({\n      start(controller) {\n        // Replay existing buffered chunks\n        self.#bufferedChunks.forEach(chunk => {\n          controller.enqueue(chunk);\n        });\n\n        // If stream already finished, close immediately\n        if (self.#streamFinished) {\n          controller.close();\n          return;\n        }\n\n        // Listen for new chunks and stream finish\n        const chunkHandler = (chunk: ChunkType<OUTPUT>) => {\n          safeEnqueue(controller, chunk);\n        };\n\n        const finishHandler = () => {\n          self.#emitter.off('chunk', chunkHandler);\n          self.#emitter.off('finish', finishHandler);\n          safeClose(controller);\n        };\n\n        self.#emitter.on('chunk', chunkHandler);\n        self.#emitter.on('finish', finishHandler);\n      },\n\n      pull(_controller) {\n        // Only start consumption when someone is actively reading the stream\n        if (!self.#consumptionStarted) {\n          void self.consumeStream();\n        }\n      },\n\n      cancel() {\n        // Stream was cancelled, clean up\n        self.#emitter.removeAllListeners();\n      },\n    });\n  }\n\n  get status() {\n    return this.#status;\n  }\n\n  serializeState() {\n    return {\n      status: this.#status,\n      bufferedSteps: this.#bufferedSteps,\n      bufferedReasoningDetails: this.#bufferedReasoningDetails,\n      bufferedByStep: this.#bufferedByStep,\n      bufferedText: this.#bufferedText,\n      bufferedTextChunks: this.#bufferedTextChunks,\n      bufferedSources: this.#bufferedSources,\n      bufferedReasoning: this.#bufferedReasoning,\n      bufferedFiles: this.#bufferedFiles,\n      toolCallArgsDeltas: this.#toolCallArgsDeltas,\n      toolCallDeltaIdNameMap: this.#toolCallDeltaIdNameMap,\n      toolCallStreamingMeta: this.#toolCallStreamingMeta,\n      toolCalls: this.#toolCalls,\n      toolResults: this.#toolResults,\n      warnings: this.#warnings,\n      finishReason: this.#finishReason,\n      request: this.#request,\n      usageCount: this.#usageCount,\n      tripwire: this.#tripwire,\n      messageList: this.messageList.serialize(),\n    };\n  }\n\n  deserializeState(state: any) {\n    this.#status = state.status;\n    this.#bufferedSteps = state.bufferedSteps;\n    this.#bufferedReasoningDetails = state.bufferedReasoningDetails;\n    this.#bufferedByStep = state.bufferedByStep;\n    this.#bufferedText = state.bufferedText;\n    this.#bufferedTextChunks = state.bufferedTextChunks;\n    this.#bufferedSources = state.bufferedSources;\n    this.#bufferedReasoning = state.bufferedReasoning;\n    this.#bufferedFiles = state.bufferedFiles;\n    this.#toolCallArgsDeltas = state.toolCallArgsDeltas;\n    this.#toolCallDeltaIdNameMap = state.toolCallDeltaIdNameMap;\n    this.#toolCallStreamingMeta = state.toolCallStreamingMeta ?? {};\n    this.#toolCalls = state.toolCalls;\n    this.#toolResults = state.toolResults;\n    this.#warnings = state.warnings;\n    this.#finishReason = state.finishReason;\n    this.#request = state.request;\n    this.#usageCount = state.usageCount;\n    this.#tripwire = state.tripwire;\n    this.messageList = this.messageList.deserialize(state.messageList);\n  }\n}\n","import { randomUUID } from 'node:crypto';\nimport { ReadableStream } from 'node:stream/web';\nimport type { MastraLanguageModel } from '../llm/model/shared.types';\nimport type { ObservabilityContext } from '../observability';\nimport { resolveObservabilityContext } from '../observability';\nimport { MastraModelOutput } from '../stream/base/output';\nimport { ChunkFrom } from '../stream/types';\nimport type { ChunkType } from '../stream/types';\nimport type { InnerAgentExecutionOptions } from './agent.types';\nimport type { MessageList } from './message-list';\n\n/**\n * Options for TripWire that control how the tripwire should be handled\n */\nexport interface TripWireOptions<TMetadata = unknown> {\n  /**\n   * If true, the agent should retry with the tripwire reason as feedback.\n   * The failed response will be added to message history along with the reason.\n   */\n  retry?: boolean;\n  /**\n   * Strongly typed metadata from the processor.\n   * This allows processors to pass structured information about what triggered the tripwire.\n   */\n  metadata?: TMetadata;\n}\n\n/**\n * TripWire is a custom Error class for aborting processing with optional retry and metadata.\n *\n * When thrown from a processor, it signals that processing should stop.\n * The `options` field controls how the tripwire should be handled:\n * - `retry: true` - The agent will retry with the reason as feedback\n * - `metadata` - Strongly typed data about what triggered the tripwire\n */\nexport class TripWire<TMetadata = unknown> extends Error {\n  public readonly options: TripWireOptions<TMetadata>;\n  public readonly processorId?: string;\n\n  constructor(reason: string, options: TripWireOptions<TMetadata> = {}, processorId?: string) {\n    super(reason);\n    this.options = options;\n    this.processorId = processorId;\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Tripwire data passed to getModelOutputForTripwire\n */\nexport interface TripwireData<TMetadata = unknown> {\n  reason: string;\n  retry?: boolean;\n  metadata?: TMetadata;\n  processorId?: string;\n}\n\nexport const getModelOutputForTripwire = async <OUTPUT = undefined, TMetadata = unknown>({\n  tripwire,\n  runId,\n  options,\n  model,\n  messageList,\n  ...rest\n}: {\n  tripwire: TripwireData<TMetadata>;\n  runId: string;\n  options: InnerAgentExecutionOptions<OUTPUT>;\n  model: MastraLanguageModel;\n  messageList: MessageList;\n} & ObservabilityContext) => {\n  const observabilityContext = resolveObservabilityContext(rest);\n  const tripwireStream = new ReadableStream<ChunkType<OUTPUT>>({\n    start(controller) {\n      controller.enqueue({\n        type: 'tripwire',\n        runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          reason: tripwire.reason || '',\n          retry: tripwire.retry,\n          metadata: tripwire.metadata,\n          processorId: tripwire.processorId,\n        },\n      });\n      controller.close();\n    },\n  });\n\n  const modelOutput = new MastraModelOutput<OUTPUT>({\n    model: {\n      modelId: model.modelId,\n      provider: model.provider,\n      version: model.specificationVersion,\n    },\n    stream: tripwireStream,\n    messageList,\n    options: {\n      runId,\n      structuredOutput: options.structuredOutput,\n      ...observabilityContext,\n      onFinish: options.onFinish as any, // Fix these types after the types PR is merged\n      onStepFinish: options.onStepFinish as any,\n      returnScorerData: options.returnScorerData,\n      requestContext: options.requestContext,\n    },\n    messageId: randomUUID(),\n  });\n\n  return modelOutput;\n};\n","import { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport type { MastraLegacyLanguageModel, MastraLanguageModel } from '../llm/model/shared.types';\nimport type { StorageThreadType } from '../memory';\nimport type { StandardSchemaWithJSON, InferStandardSchemaOutput } from '../schema';\nimport type { FullOutput } from '../stream/base/output';\nimport type { Agent } from './agent';\nimport type { AgentExecutionOptions, AgentExecutionOptionsBase } from './agent.types';\nimport type { MessageListInput } from './message-list';\nimport type { StructuredOutputOptions } from './types';\n\nexport const supportedLanguageModelSpecifications = ['v2', 'v3'];\nexport const isSupportedLanguageModel = (\n  model: MastraLanguageModel | MastraLegacyLanguageModel,\n): model is MastraLanguageModel => {\n  return supportedLanguageModelSpecifications.includes(model.specificationVersion);\n};\n\nexport async function tryGenerateWithJsonFallback<\n  SCHEMA extends StandardSchemaWithJSON,\n  OUTPUT extends InferStandardSchemaOutput<SCHEMA>,\n>(agent: Agent, prompt: MessageListInput, options: AgentExecutionOptions<OUTPUT>): Promise<FullOutput<OUTPUT>>;\nexport async function tryGenerateWithJsonFallback<OUTPUT extends {}>(\n  agent: Agent,\n  prompt: MessageListInput,\n  options: AgentExecutionOptions<OUTPUT>,\n): Promise<FullOutput<OUTPUT>>;\nexport async function tryGenerateWithJsonFallback<OUTPUT>(\n  agent: Agent,\n  prompt: MessageListInput,\n  options: AgentExecutionOptions<OUTPUT>,\n): Promise<FullOutput<OUTPUT>> {\n  if (!options.structuredOutput?.schema) {\n    throw new MastraError({\n      id: 'STRUCTURED_OUTPUT_OPTIONS_REQUIRED',\n      domain: ErrorDomain.AGENT,\n      category: ErrorCategory.USER,\n      text: 'structuredOutput is required to use tryGenerateWithJsonFallback',\n    });\n  }\n\n  try {\n    return await agent.generate(prompt, options);\n  } catch (error) {\n    console.warn('Error in tryGenerateWithJsonFallback. Attempting fallback.', error);\n    return await agent.generate(prompt, {\n      ...options,\n      structuredOutput: { ...options.structuredOutput, jsonPromptInjection: true },\n    });\n  }\n}\n\nexport async function tryStreamWithJsonFallback<OUTPUT extends {}>(\n  agent: Agent,\n  prompt: MessageListInput,\n  options: AgentExecutionOptionsBase<OUTPUT> & {\n    structuredOutput: StructuredOutputOptions<OUTPUT>;\n  },\n) {\n  if (!options.structuredOutput?.schema) {\n    throw new MastraError({\n      id: 'STRUCTURED_OUTPUT_OPTIONS_REQUIRED',\n      domain: ErrorDomain.AGENT,\n      category: ErrorCategory.USER,\n      text: 'structuredOutput is required to use tryStreamWithJsonFallback',\n    });\n  }\n\n  try {\n    const result = await agent.stream(prompt, options);\n    const object = await result.object;\n    if (!object) {\n      throw new MastraError({\n        id: 'STRUCTURED_OUTPUT_OBJECT_UNDEFINED',\n        domain: ErrorDomain.AGENT,\n        category: ErrorCategory.USER,\n        text: 'structuredOutput object is undefined',\n      });\n    }\n    return result;\n  } catch (error) {\n    console.warn('Error in tryStreamWithJsonFallback. Attempting fallback.', error);\n    return await agent.stream(prompt, {\n      ...options,\n      structuredOutput: { ...options.structuredOutput, jsonPromptInjection: true },\n    });\n  }\n}\n\nexport function resolveThreadIdFromArgs(args: {\n  memory?: { thread?: string | { id: string } };\n  threadId?: string;\n  overrideId?: string;\n}): (Partial<StorageThreadType> & { id: string }) | undefined {\n  let resolved: (Partial<StorageThreadType> & { id: string }) | undefined;\n\n  if (args?.memory?.thread) {\n    if (typeof args.memory.thread === 'string') {\n      resolved = { id: args.memory.thread };\n    } else if (typeof args.memory.thread === 'object' && args.memory.thread.id) {\n      resolved = args.memory.thread as Partial<StorageThreadType> & { id: string };\n    }\n  }\n  if (!resolved && args?.threadId) {\n    resolved = { id: args.threadId };\n  }\n\n  if (args.overrideId) {\n    return { ...(resolved || {}), id: args.overrideId };\n  }\n\n  return resolved;\n}\n","import type { ProcessorWorkflow } from './index';\n\n/**\n * Type guard to check if an object is a Workflow that can be used as a processor.\n *\n * Extracted to its own module so that `runner.ts` (and by extension\n * `stream/base/output.ts`) can use it without loading the full processors\n * barrel — which re-exports every built-in processor, many of which import\n * from the agent barrel and create ESM init-time cycles.\n */\nexport function isProcessorWorkflow(obj: unknown): obj is ProcessorWorkflow {\n  return (\n    obj !== null &&\n    typeof obj === 'object' &&\n    'id' in obj &&\n    typeof (obj as Record<string, unknown>).id === 'string' &&\n    'inputSchema' in obj &&\n    'outputSchema' in obj &&\n    'execute' in obj &&\n    typeof (obj as Record<string, unknown>).execute === 'function' &&\n    !('processInput' in obj) &&\n    !('processInputStep' in obj) &&\n    !('processOutputStream' in obj) &&\n    !('processOutputResult' in obj) &&\n    !('processOutputStep' in obj) &&\n    !('processLLMRequest' in obj) &&\n    !('processAPIError' in obj)\n  );\n}\n","function isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction readString(value: unknown): string | undefined {\n  return typeof value === 'string' ? value : undefined;\n}\n\ntype ProcessorToolSummary = {\n  id: string;\n  name: string;\n  description?: string;\n};\n\ntype ActiveToolSummary = {\n  id: string;\n  name: string;\n};\n\nfunction summarizeProcessorToolEntry(key: string, value: unknown): ProcessorToolSummary {\n  if (!isPlainObject(value)) {\n    return {\n      id: key,\n      name: key,\n    };\n  }\n\n  const id = readString(value.id) ?? key;\n  const name = readString(value.name) ?? id;\n  const description = readString(value.description);\n\n  return {\n    id,\n    name,\n    ...(description !== undefined ? { description } : {}),\n  };\n}\n\nexport function summarizeProcessorModelForSpan(value: unknown):\n  | {\n      modelId?: string;\n      provider?: string;\n      specificationVersion?: string;\n    }\n  | undefined {\n  if (!isPlainObject(value)) {\n    return undefined;\n  }\n\n  const modelId = readString(value.modelId) ?? readString(value.id);\n  const provider = readString(value.provider);\n  const specificationVersion = readString(value.specificationVersion);\n\n  if (modelId === undefined && provider === undefined && specificationVersion === undefined) {\n    return undefined;\n  }\n\n  return {\n    ...(modelId !== undefined ? { modelId } : {}),\n    ...(provider !== undefined ? { provider } : {}),\n    ...(specificationVersion !== undefined ? { specificationVersion } : {}),\n  };\n}\n\nexport function summarizeProcessorToolsForSpan(tools: unknown): ProcessorToolSummary[] | undefined {\n  if (!isPlainObject(tools)) {\n    return undefined;\n  }\n\n  return Object.entries(tools).map(([key, value]) => summarizeProcessorToolEntry(key, value));\n}\n\nfunction summarizeProcessorToolRegistry(\n  tools: unknown,\n): Array<{ registryKey: string; summary: ProcessorToolSummary }> | undefined {\n  if (!isPlainObject(tools)) {\n    return undefined;\n  }\n\n  const summaries = summarizeProcessorToolsForSpan(tools);\n  if (!summaries) {\n    return undefined;\n  }\n\n  return Object.keys(tools).map((registryKey, index) => ({\n    registryKey,\n    summary: summaries[index]!,\n  }));\n}\n\nfunction resolveToolInRegistry(\n  toolRegistry: Array<{ registryKey: string; summary: ProcessorToolSummary }>,\n  toolKey: string,\n) {\n  return toolRegistry.find(\n    candidate =>\n      candidate.summary.id === toolKey || candidate.summary.name === toolKey || candidate.registryKey === toolKey,\n  );\n}\n\nexport function summarizeActiveToolsForSpan(activeTools: unknown, tools?: unknown): ActiveToolSummary[] | undefined {\n  if (!Array.isArray(activeTools)) {\n    return undefined;\n  }\n\n  const toolRegistry = summarizeProcessorToolRegistry(tools) ?? [];\n  const summaries = activeTools\n    .map(tool => {\n      const toolKey = readString(tool);\n      if (toolKey === undefined) {\n        return undefined;\n      }\n\n      const match = resolveToolInRegistry(toolRegistry, toolKey);\n      return {\n        id: match?.summary.id ?? toolKey,\n        name: match?.summary.name ?? toolKey,\n      };\n    })\n    .filter((tool): tool is ActiveToolSummary => tool !== undefined);\n\n  return summaries;\n}\n\nexport function summarizeToolChoiceForSpan(\n  toolChoice: unknown,\n  tools?: unknown,\n):\n  | {\n      type: string;\n      tool?: ActiveToolSummary;\n    }\n  | undefined {\n  if (typeof toolChoice === 'string') {\n    return { type: toolChoice };\n  }\n\n  if (!isPlainObject(toolChoice)) {\n    return undefined;\n  }\n\n  const type = readString(toolChoice.type);\n  if (type === undefined) {\n    return undefined;\n  }\n\n  if (type !== 'tool') {\n    return { type };\n  }\n\n  const toolKey = readString(toolChoice.toolName) ?? readString(toolChoice.toolId);\n  if (toolKey === undefined) {\n    return { type };\n  }\n\n  const toolRegistry = summarizeProcessorToolRegistry(tools) ?? [];\n  const match = resolveToolInRegistry(toolRegistry, toolKey);\n  const fallbackToolId = readString(toolChoice.toolId) ?? toolKey;\n  const fallbackToolName = readString(toolChoice.toolName) ?? toolKey;\n\n  return {\n    type,\n    tool: match\n      ? {\n          id: match.summary.id,\n          name: match.summary.name,\n        }\n      : {\n          id: fallbackToolId,\n          name: fallbackToolName,\n        },\n  };\n}\n\nexport function summarizeProcessorResultForSpan(value: unknown): Record<string, unknown> | undefined {\n  if (!isPlainObject(value)) {\n    return undefined;\n  }\n\n  const projected: Record<string, unknown> = {};\n  for (const key of [\n    'text',\n    'object',\n    'finishReason',\n    'toolCalls',\n    'toolResults',\n    'warnings',\n    'files',\n    'sources',\n    'reasoning',\n    'reasoningText',\n    'tripwire',\n  ] as const) {\n    if (value[key] !== undefined) {\n      projected[key] = value[key];\n    }\n  }\n\n  if (Array.isArray(value.steps)) {\n    projected.stepCount = value.steps.length;\n  }\n\n  return Object.keys(projected).length > 0 ? projected : undefined;\n}\n","/**\n * Well-known key a stream output processor can set on its `state` to ask the\n * ProcessorRunner to re-drive an additional part through the full output\n * processor chain after the current part has been emitted.\n *\n * `processOutputStream` can only return a single part, but some processors\n * (e.g. `BatchPartsProcessor`) need to emit two parts for one input: a flushed\n * batch of buffered text plus the non-text part that triggered the flush. The\n * processor returns the flushed batch (so it flows through downstream\n * processors normally) and stashes the non-text part under this key. The runner\n * then re-feeds the stashed part through the whole chain so it also receives\n * downstream processing and is emitted in order — instead of being deferred to\n * a \"next\" call that may never happen (which dropped the part when a `stopWhen`\n * condition stopped the agent on that part — issue #17094).\n */\nexport const REPROCESS_PART_KEY = '__mastraReprocessPart';\n","import { randomUUID } from 'node:crypto';\n\nimport type { Processor, ProcessInputStepArgs, ProcessInputStepResult } from './index';\n\nconst CLAUDE_46_PATTERN = /[^0-9]4[.-]6/;\n\n/**\n * Checks whether a model config could be Claude 4.6.\n *\n * Handles raw model configs (strings like `'anthropic/claude-opus-4-6'`),\n * language model objects (with `provider` and `modelId`), dynamic functions\n * (returns `true` as a safe default), and model fallback arrays.\n */\nexport function isMaybeClaude46(\n  model:\n    | string\n    | { provider?: string; modelId?: string }\n    | ((...args: any[]) => any)\n    | { model: any; enabled?: boolean }[]\n    | unknown,\n): boolean {\n  if (typeof model === 'function') return true;\n\n  if (Array.isArray(model)) {\n    return model.some(m => isMaybeClaude46(m.model ?? m));\n  }\n\n  if (typeof model === 'string') {\n    return model.startsWith('anthropic') && CLAUDE_46_PATTERN.test(model);\n  }\n\n  if (model && typeof model === 'object' && 'provider' in model && 'modelId' in model) {\n    const { provider, modelId } = model as { provider: string; modelId: string };\n    return provider.startsWith('anthropic') && CLAUDE_46_PATTERN.test(modelId);\n  }\n\n  return true;\n}\n\n/**\n * Guards against trailing assistant messages when using native structured output\n * with Anthropic Claude 4.6.\n *\n * Claude 4.6 rejects requests where the last message is an assistant message when\n * using output format (structured output), interpreting it as pre-filling the response.\n * This processor appends a user message to prevent that error.\n *\n * This processor should only be added when the agent uses a Claude 4.6 model.\n * Use {@link isMaybeClaude46} to check before adding.\n *\n * @see https://github.com/mastra-ai/mastra/issues/12800\n */\nexport class TrailingAssistantGuard implements Processor<'trailing-assistant-guard'> {\n  readonly id = 'trailing-assistant-guard' as const;\n  readonly name = 'Trailing Assistant Guard';\n\n  processInputStep({ messages, structuredOutput }: ProcessInputStepArgs): ProcessInputStepResult | undefined {\n    const willUseResponseFormat =\n      structuredOutput?.schema && !structuredOutput?.model && !structuredOutput?.jsonPromptInjection;\n\n    if (!willUseResponseFormat) return;\n\n    const lastMessage = messages[messages.length - 1];\n    if (!lastMessage || lastMessage.role !== 'assistant') return;\n\n    return {\n      messages: [\n        ...messages,\n        {\n          id: randomUUID(),\n          role: 'user' as const,\n          content: {\n            format: 2 as const,\n            parts: [{ type: 'text' as const, text: 'Generate the structured response.' }],\n          },\n          createdAt: new Date(),\n        },\n      ],\n    };\n  }\n}\n","import type { LanguageModelV2Prompt, LanguageModelV2CallWarning } from '@ai-sdk/provider-v5';\nimport type { StepResult } from '@internal/ai-sdk-v5';\nimport type { MastraDBMessage, MessageInput } from '../agent/message-list';\nimport { MessageList, messagesAreEqual } from '../agent/message-list';\nimport { createSignal } from '../agent/signals';\nimport type { AgentSignalInput, AgentStateSignalInput, CreatedAgentSignal } from '../agent/signals';\nimport { applyStateSignal, getStateSignalsMetadata, resolveStateSignalHistory } from '../agent/state-signals';\nimport { TripWire } from '../agent/trip-wire';\nimport type { TripWireOptions } from '../agent/trip-wire';\nimport { isSupportedLanguageModel, supportedLanguageModelSpecifications } from '../agent/utils';\nimport { MastraError } from '../error';\nimport { resolveModelConfig } from '../llm';\nimport type { IMastraLogger } from '../logger';\nimport type { MastraMemory } from '../memory/memory';\nimport { parseMemoryRequestContext } from '../memory/types';\nimport { EntityType, SpanType, createObservabilityContext, resolveObservabilityContext } from '../observability';\nimport type { ObservabilityContext, Span } from '../observability';\nimport type { TracingContext } from '../observability/types';\nimport type { RequestContext } from '../request-context';\nimport type { ChunkType } from '../stream';\nimport type { MastraModelOutput } from '../stream/base/output';\nimport type { LanguageModelUsage } from '../stream/types';\nimport { isProcessorWorkflow } from './is-processor-workflow';\nimport {\n  summarizeActiveToolsForSpan,\n  summarizeProcessorModelForSpan,\n  summarizeProcessorResultForSpan,\n  summarizeProcessorToolsForSpan,\n  summarizeToolChoiceForSpan,\n} from './span-payload';\nimport type { ProcessorStepOutput } from './step-schema';\nimport { REPROCESS_PART_KEY } from './stream-reprocess';\nimport { isMaybeClaude46, TrailingAssistantGuard } from './trailing-assistant-guard';\nimport type {\n  CachedLLMStepChunk,\n  CachedLLMStepResponse,\n  ComputeStateSignalResult,\n  ErrorProcessorOrWorkflow,\n  OutputResult,\n  ProcessInputStepResult,\n  Processor,\n  ProcessorMessageResult,\n  ProcessorStreamWriter,\n  ProcessorViolation,\n  ProcessorWorkflow,\n  RunProcessInputStepArgs,\n  RunProcessInputStepResult,\n  ToolCallInfo,\n} from './index';\n\n/**\n * Safely invoke a processor's onViolation callback when a TripWire is caught.\n * Errors from the callback are silently caught.\n */\nasync function invokeOnViolation(processor: Processor, error: TripWire): Promise<void> {\n  if (!processor.onViolation) return;\n  try {\n    const violation: ProcessorViolation = {\n      processorId: error.processorId ?? processor.id,\n      message: error.message,\n      detail: error.options?.metadata,\n    };\n    await processor.onViolation(violation);\n  } catch {\n    // onViolation errors are silently caught\n  }\n}\n\n/**\n * Implementation of processor state management\n */\n/**\n * Tracks state for stream processing across chunks.\n * Used by both legacy processors and workflow processors.\n */\nexport class ProcessorState<OUTPUT = undefined> {\n  private inputAccumulatedText = '';\n  private outputAccumulatedText = '';\n  private outputChunkCount = 0;\n  public customState: Record<string, unknown> = {};\n  public streamParts: ChunkType<OUTPUT>[] = [];\n  public span?: Span<SpanType.PROCESSOR_RUN>;\n\n  constructor(\n    options?: {\n      processorName?: string;\n      processorIndex?: number;\n      createSpan?: boolean;\n    } & Partial<ObservabilityContext>,\n  ) {\n    // Only create span if explicitly requested (legacy processors)\n    // Workflow processors handle span creation in workflow.ts\n    if (!options?.createSpan || !options.processorName) {\n      return;\n    }\n\n    const currentSpan = options.tracingContext?.currentSpan;\n    const parentSpan = currentSpan?.findParent(SpanType.AGENT_RUN) || currentSpan?.parent || currentSpan;\n    this.span = parentSpan?.createChildSpan({\n      type: SpanType.PROCESSOR_RUN,\n      name: `output stream processor: ${options.processorName}`,\n      entityType: EntityType.OUTPUT_PROCESSOR,\n      entityName: options.processorName,\n      attributes: {\n        processorExecutor: 'legacy',\n        processorIndex: options.processorIndex ?? 0,\n      },\n      input: {\n        totalChunks: 0,\n      },\n    });\n  }\n\n  /** Track incoming chunk (before processor transformation) */\n  addInputPart(part: ChunkType<OUTPUT>): void {\n    // Extract text from text-delta chunks for accumulated text\n    if (part.type === 'text-delta') {\n      this.inputAccumulatedText += part.payload.text;\n    }\n    this.streamParts.push(part);\n\n    if (this.span) {\n      this.span.input = {\n        totalChunks: this.streamParts.length,\n        accumulatedText: this.inputAccumulatedText,\n      };\n    }\n  }\n\n  /** Track outgoing chunk (after processor transformation) */\n  addOutputPart(part: ChunkType<OUTPUT> | null | undefined): void {\n    if (!part) return;\n    this.outputChunkCount++;\n    // Extract text from text-delta chunks for accumulated text\n    if (part.type === 'text-delta') {\n      this.outputAccumulatedText += part.payload.text;\n    }\n  }\n\n  /** Get final output for span */\n  getFinalOutput(): { totalChunks: number; accumulatedText: string } {\n    return {\n      totalChunks: this.outputChunkCount,\n      accumulatedText: this.outputAccumulatedText,\n    };\n  }\n}\n\n/**\n * Union type for processor or workflow that can be used as a processor\n */\ntype ProcessorOrWorkflow = Processor | ProcessorWorkflow;\n\nfunction areProcessorMessageArraysEqual(before: unknown[] | undefined, after: unknown[] | undefined): boolean {\n  if (before === after) {\n    return true;\n  }\n\n  if (!before || !after) {\n    return before === after;\n  }\n\n  return (\n    before.length === after.length &&\n    before.every((message, index) => messagesAreEqual(message as MessageInput, after[index] as MessageInput))\n  );\n}\n\nexport function createProcessorSendSignal(args: {\n  messageList: MessageList;\n  writer?: ProcessorStreamWriter;\n  rotateResponseMessageId?: () => string;\n}): (signalInput: AgentSignalInput) => Promise<CreatedAgentSignal> {\n  return async signalInput => {\n    const signal = createSignal(signalInput);\n    args.rotateResponseMessageId?.();\n    args.messageList.add(signal.toDBMessage(), 'input');\n    await args.writer?.custom(signal.toDataPart());\n    return signal;\n  };\n}\n\nfunction buildProcessInputStepSpanInput(args: {\n  messages: MastraDBMessage[];\n  systemMessages: unknown[];\n  stepNumber: number;\n  messageId?: string;\n  retryCount: number;\n  model: unknown;\n  tools?: unknown;\n  toolChoice?: unknown;\n  activeTools?: unknown;\n}) {\n  const summarizedModel = summarizeProcessorModelForSpan(args.model);\n  const summarizedTools = summarizeProcessorToolsForSpan(args.tools);\n  const summarizedToolChoice = summarizeToolChoiceForSpan(args.toolChoice, args.tools);\n  const summarizedActiveTools = summarizeActiveToolsForSpan(args.activeTools, args.tools);\n\n  return {\n    messages: args.messages,\n    systemMessages: args.systemMessages,\n    stepNumber: args.stepNumber,\n    ...(args.messageId ? { messageId: args.messageId } : {}),\n    retryCount: args.retryCount,\n    ...(summarizedModel ? { model: summarizedModel } : {}),\n    ...(summarizedTools ? { tools: summarizedTools } : {}),\n    ...(summarizedToolChoice ? { toolChoice: summarizedToolChoice } : {}),\n    ...(summarizedActiveTools ? { activeTools: summarizedActiveTools } : {}),\n  };\n}\n\nfunction buildProcessInputStepSpanOutput(args: {\n  result: RunProcessInputStepResult;\n  beforeStepInput: Pick<RunProcessInputStepResult, 'messageId' | 'model' | 'tools' | 'toolChoice' | 'activeTools'>;\n  afterStepInput: RunProcessInputStepResult;\n  beforeMessages: MastraDBMessage[];\n  beforeSystemMessages: unknown[];\n  messages: MastraDBMessage[];\n  systemMessages: unknown[];\n}) {\n  const output: Record<string, unknown> = {};\n\n  if (!areProcessorMessageArraysEqual(args.beforeMessages, args.messages)) {\n    output.messages = args.messages;\n  }\n\n  if (!areProcessorMessageArraysEqual(args.beforeSystemMessages, args.systemMessages)) {\n    output.systemMessages = args.systemMessages;\n  }\n\n  if (args.afterStepInput.messageId !== args.beforeStepInput.messageId) {\n    output.messageId = args.afterStepInput.messageId;\n  }\n\n  if (args.result.model !== undefined || args.afterStepInput.model !== args.beforeStepInput.model) {\n    const model = summarizeProcessorModelForSpan(args.afterStepInput.model);\n    if (model) {\n      output.model = model;\n    }\n  }\n\n  if (args.result.tools !== undefined || args.afterStepInput.tools !== args.beforeStepInput.tools) {\n    const tools = summarizeProcessorToolsForSpan(args.afterStepInput.tools);\n    if (tools) {\n      output.tools = tools;\n    }\n  }\n\n  if (\n    args.result.toolChoice !== undefined ||\n    args.afterStepInput.toolChoice !== args.beforeStepInput.toolChoice ||\n    args.afterStepInput.tools !== args.beforeStepInput.tools\n  ) {\n    const toolChoice = summarizeToolChoiceForSpan(args.afterStepInput.toolChoice, args.afterStepInput.tools);\n    if (toolChoice) {\n      output.toolChoice = toolChoice;\n    }\n  }\n\n  if (\n    args.result.activeTools !== undefined ||\n    args.afterStepInput.activeTools !== args.beforeStepInput.activeTools ||\n    args.afterStepInput.tools !== args.beforeStepInput.tools\n  ) {\n    const activeTools = summarizeActiveToolsForSpan(args.afterStepInput.activeTools, args.afterStepInput.tools);\n    if (activeTools) {\n      output.activeTools = activeTools;\n    }\n  }\n\n  if (args.result.retryCount !== undefined) {\n    output.retryCount = args.result.retryCount;\n  }\n\n  return output;\n}\n\nexport class ProcessorRunner {\n  public readonly inputProcessors: ProcessorOrWorkflow[];\n  public readonly outputProcessors: ProcessorOrWorkflow[];\n  public readonly errorProcessors: ErrorProcessorOrWorkflow[];\n  private readonly logger: IMastraLogger;\n  private readonly agentName: string;\n  /**\n   * Shared processor state that persists across loop iterations.\n   * Used by all processor methods (input and output) to share state.\n   * Keyed by processor ID.\n   */\n  private readonly processorStates: Map<string, ProcessorState>;\n\n  constructor({\n    inputProcessors,\n    outputProcessors,\n    errorProcessors,\n    logger,\n    agentName,\n    processorStates,\n  }: {\n    inputProcessors?: ProcessorOrWorkflow[];\n    outputProcessors?: ProcessorOrWorkflow[];\n    errorProcessors?: ErrorProcessorOrWorkflow[];\n    logger: IMastraLogger;\n    agentName: string;\n    processorStates?: Map<string, ProcessorState>;\n  }) {\n    this.inputProcessors = inputProcessors ?? [];\n    this.outputProcessors = outputProcessors ?? [];\n    this.errorProcessors = errorProcessors ?? [];\n    this.logger = logger;\n    this.agentName = agentName;\n    this.processorStates = processorStates ?? new Map();\n  }\n\n  /**\n   * Get or create ProcessorState for the given processor ID.\n   * This state persists across loop iterations and is shared between\n   * all processor methods (input and output).\n   */\n  private getProcessorState(processorId: string): ProcessorState {\n    let state = this.processorStates.get(processorId);\n    if (!state) {\n      state = new ProcessorState();\n      this.processorStates.set(processorId, state);\n    }\n    return state;\n  }\n\n  private async runComputeStateSignal({\n    processor,\n    messageList,\n    stepNumber,\n    steps,\n    requestContext,\n    writer,\n    abort,\n    processorState,\n    memory,\n    resourceId,\n    threadId,\n    abortSignal,\n    retryCount,\n  }: {\n    processor: Processor;\n    messageList: MessageList;\n    stepNumber: number;\n    steps: Array<StepResult<any>>;\n    requestContext?: RequestContext;\n    writer?: ProcessorStreamWriter;\n    abort: (reason?: string, options?: TripWireOptions) => never;\n    processorState: ProcessorState;\n    memory?: MastraMemory;\n    resourceId?: string;\n    threadId?: string;\n    abortSignal?: AbortSignal;\n    retryCount: number;\n  }): Promise<void> {\n    const computeStateSignal = processor.computeStateSignal?.bind(processor);\n    if (!computeStateSignal) return;\n\n    const memoryContext = parseMemoryRequestContext(requestContext);\n    const resolvedMemory = memory;\n    const resolvedThreadId = threadId ?? memoryContext?.thread?.id;\n    const resolvedResourceId = resourceId ?? memoryContext?.resourceId;\n\n    if (!resolvedMemory || !resolvedThreadId || !resolvedResourceId) {\n      throw new Error(\n        `[Processor:${processor.id}] computeStateSignal requires Mastra memory with an active resourceId and threadId`,\n      );\n    }\n\n    const loadedThread = (await resolvedMemory.getThreadById({ threadId: resolvedThreadId })) ?? memoryContext?.thread;\n    if (!loadedThread) {\n      throw new Error(`[Processor:${processor.id}] computeStateSignal could not load thread ${resolvedThreadId}`);\n    }\n    let thread = {\n      ...loadedThread,\n      id: resolvedThreadId,\n      resourceId: loadedThread.resourceId ?? resolvedResourceId,\n      createdAt: loadedThread.createdAt ?? new Date(),\n      updatedAt: loadedThread.updatedAt ?? new Date(),\n      metadata: loadedThread.metadata,\n    };\n\n    const stateId = processor.stateId ?? processor.id;\n    const trackingById = getStateSignalsMetadata(thread.metadata);\n    const tracking = trackingById[stateId];\n    const { activeStateSignals, contextWindow, lastSnapshot, deltasSinceSnapshot } = await resolveStateSignalHistory({\n      messageList,\n      memory: resolvedMemory,\n      threadId: resolvedThreadId,\n      resourceId: resolvedResourceId,\n      stateId,\n      tracking,\n    });\n    const result = (await computeStateSignal({\n      messages: messageList.get.all.db(),\n      messageList,\n      stepNumber,\n      steps,\n      state: processorState.customState,\n      requestContext,\n      writer,\n      abortSignal,\n      abort,\n      retryCount,\n      resourceId: resolvedResourceId,\n      threadId: resolvedThreadId,\n      activeStateSignals,\n      contextWindow,\n      lastSnapshot,\n      deltasSinceSnapshot,\n      tracking,\n      sendStateSignal: async stateSignal => {\n        const sendResult = await applyStateSignal({\n          input: stateSignal,\n          memory: resolvedMemory,\n          thread,\n          resourceId: resolvedResourceId,\n          threadId: resolvedThreadId,\n          memoryConfig: memoryContext?.memoryConfig,\n          messageList,\n          defaultId: stateId,\n          writeSignal: signal => writer?.custom(signal.toDataPart()),\n        });\n        if (!sendResult.skipped) {\n          const updated = await resolvedMemory.getThreadById({ threadId: resolvedThreadId });\n          if (updated) thread = { ...thread, metadata: updated.metadata };\n        }\n        return sendResult.skipped ? sendResult : sendResult.signal;\n      },\n    })) as ComputeStateSignalResult;\n\n    if (!result) return;\n\n    await applyStateSignal({\n      input: result,\n      memory: resolvedMemory,\n      thread,\n      resourceId: resolvedResourceId,\n      threadId: resolvedThreadId,\n      memoryConfig: memoryContext?.memoryConfig,\n      messageList,\n      defaultId: stateId,\n      writeSignal: signal => writer?.custom(signal.toDataPart()),\n    });\n  }\n\n  private async runWorkflowComputeStateSignals({\n    workflow,\n    messageList,\n    stepNumber,\n    steps,\n    requestContext,\n    writer,\n    memory,\n    resourceId,\n    threadId,\n    abortSignal,\n    retryCount,\n  }: {\n    workflow: ProcessorWorkflow;\n    messageList: MessageList;\n    stepNumber: number;\n    steps: Array<StepResult<any>>;\n    requestContext?: RequestContext;\n    writer?: ProcessorStreamWriter;\n    memory?: MastraMemory;\n    resourceId?: string;\n    threadId?: string;\n    abortSignal?: AbortSignal;\n    retryCount: number;\n  }): Promise<void> {\n    for (const processor of workflow.__stateSignalProcessors ?? []) {\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      await this.runComputeStateSignal({\n        processor,\n        messageList,\n        stepNumber,\n        steps,\n        requestContext,\n        writer,\n        abort,\n        processorState: this.getProcessorState(processor.id),\n        memory,\n        resourceId,\n        threadId,\n        abortSignal,\n        retryCount,\n      });\n    }\n  }\n\n  /**\n   * Execute a workflow as a processor and handle the result.\n   * Returns the processed messages and any tripwire information.\n   */\n  private async executeWorkflowAsProcessor(\n    workflow: ProcessorWorkflow,\n    input: ProcessorStepOutput,\n    observabilityContext?: ObservabilityContext,\n    requestContext?: RequestContext,\n    writer?: ProcessorStreamWriter,\n    abortSignal?: AbortSignal,\n  ): Promise<ProcessorStepOutput> {\n    // Create a run and start the workflow\n    const run = await workflow.createRun();\n    const result = await run.start({\n      // Cast to allow processorStates/abortSignal - passed through to workflow processor steps\n      // but not part of the official ProcessorStepOutput schema\n      inputData: {\n        ...input,\n        // Pass the processorStates map so workflow processor steps can access their state\n        processorStates: this.processorStates,\n        // Pass abortSignal so processors can cancel in-flight work\n        abortSignal,\n      } as ProcessorStepOutput,\n      ...observabilityContext,\n      requestContext,\n      outputWriter: writer ? chunk => writer.custom(chunk) : undefined,\n    });\n\n    // Check for tripwire status - this means a processor in the workflow called abort()\n    if (result.status === 'tripwire') {\n      const tripwireData = (\n        result as { tripwire?: { reason?: string; retry?: boolean; metadata?: unknown; processorId?: string } }\n      ).tripwire;\n      // Re-throw as TripWire so the agent handles it properly\n      throw new TripWire(\n        tripwireData?.reason || `Tripwire triggered in workflow ${workflow.id}`,\n        {\n          retry: tripwireData?.retry,\n          metadata: tripwireData?.metadata,\n        },\n        tripwireData?.processorId || workflow.id,\n      );\n    }\n\n    // Check for execution failure\n    if (result.status !== 'success') {\n      // Collect error details from the workflow result and failed steps\n      const details: string[] = [];\n      if (result.status === 'failed') {\n        if (result.error) {\n          details.push(result.error.message || JSON.stringify(result.error));\n        }\n        for (const [stepId, step] of Object.entries(result.steps)) {\n          if (step.status === 'failed' && step.error?.message) {\n            details.push(`step ${stepId}: ${step.error.message}`);\n          }\n        }\n      }\n      const detailStr = details.length > 0 ? ` — ${details.join('; ')}` : '';\n      throw new MastraError({\n        category: 'USER',\n        domain: 'AGENT',\n        id: 'PROCESSOR_WORKFLOW_FAILED',\n        text: `Processor workflow ${workflow.id} failed with status: ${result.status}${detailStr}`,\n      });\n    }\n\n    // Extract and validate the output from the workflow result\n    const output = result.result;\n\n    if (!output || typeof output !== 'object') {\n      // No output means no changes - return input unchanged\n      return input;\n    }\n\n    // Validate it has the expected ProcessorStepOutput shape\n    if (!('phase' in output) || !('messages' in output || 'part' in output || 'messageList' in output)) {\n      throw new MastraError({\n        category: 'USER',\n        domain: 'AGENT',\n        id: 'PROCESSOR_WORKFLOW_INVALID_OUTPUT',\n        text: `Processor workflow ${workflow.id} returned invalid output format. Expected ProcessorStepOutput.`,\n      });\n    }\n\n    return output as ProcessorStepOutput;\n  }\n\n  async runOutputProcessors(\n    messageList: MessageList,\n    observabilityContext?: ObservabilityContext,\n    requestContext?: RequestContext,\n    retryCount: number = 0,\n    writer?: ProcessorStreamWriter,\n    result?: OutputResult,\n  ): Promise<MessageList> {\n    for (const [index, processorOrWorkflow] of this.outputProcessors.entries()) {\n      const allNewMessages = messageList.get.response.db();\n      let processableMessages: MastraDBMessage[] = [...allNewMessages];\n      const idsBeforeProcessing = processableMessages.map((m: MastraDBMessage) => m.id);\n      const check = messageList.makeMessageSourceChecker();\n\n      // Handle workflow as processor\n      if (isProcessorWorkflow(processorOrWorkflow)) {\n        await this.executeWorkflowAsProcessor(\n          processorOrWorkflow,\n          {\n            phase: 'outputResult',\n            messages: processableMessages,\n            messageList,\n            retryCount,\n            result,\n          },\n          observabilityContext,\n          requestContext,\n          writer,\n        );\n        continue;\n      }\n\n      // Handle regular processor\n      const processor = processorOrWorkflow;\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      // Use the processOutputResult method if available\n      const processMethod = processor.processOutputResult?.bind(processor);\n\n      if (!processMethod) {\n        // Skip processors that don't implement processOutputResult\n        continue;\n      }\n\n      const outputMessagesBefore = processableMessages;\n      const outputSystemMessagesBefore = messageList.getAllSystemMessages();\n      const defaultResult: OutputResult = {\n        text: '',\n        usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n        finishReason: 'unknown',\n        steps: [],\n      };\n      const summarizedResult = result ? summarizeProcessorResultForSpan(result) : undefined;\n      const currentSpan = observabilityContext?.tracingContext?.currentSpan;\n      const parentSpan = currentSpan?.findParent(SpanType.AGENT_RUN) || currentSpan?.parent || currentSpan;\n      const processorSpan = parentSpan?.createChildSpan({\n        type: SpanType.PROCESSOR_RUN,\n        name: `output processor: ${processor.id}`,\n        entityType: EntityType.OUTPUT_PROCESSOR,\n        entityId: processor.id,\n        entityName: processor.name,\n        attributes: {\n          processorExecutor: 'legacy',\n          processorIndex: index,\n        },\n        input: {\n          messages: processableMessages,\n          ...(summarizedResult ? { result: summarizedResult } : {}),\n          retryCount,\n        },\n      });\n\n      // Start recording MessageList mutations for this processor\n      messageList.startRecording();\n\n      try {\n        // Get per-processor state that persists across all method calls within this request\n        const processorState = this.getProcessorState(processor.id);\n\n        const processResult = await processMethod({\n          messages: processableMessages,\n          messageList,\n          state: processorState.customState,\n          result: result ?? defaultResult,\n          abort,\n          ...createObservabilityContext({ currentSpan: processorSpan }),\n          requestContext,\n          retryCount,\n          writer,\n          sendSignal: createProcessorSendSignal({ messageList, writer }),\n        });\n\n        // Stop recording and get mutations for this processor\n        const mutations = messageList.stopRecording();\n\n        // Handle the new return type - MessageList or MastraDBMessage[]\n        if (processResult instanceof MessageList) {\n          if (processResult !== messageList) {\n            throw new MastraError({\n              category: 'USER',\n              domain: 'AGENT',\n              id: 'PROCESSOR_RETURNED_EXTERNAL_MESSAGE_LIST',\n              text: `Processor ${processor.id} returned a MessageList instance other than the one that was passed in as an argument. New external message list instances are not supported. Use the messageList argument instead.`,\n            });\n          }\n          if (mutations.length > 0) {\n            processableMessages = processResult.get.response.db();\n          }\n        } else {\n          if (processResult) {\n            const deletedIds = idsBeforeProcessing.filter(\n              (i: string) => !processResult.some((m: MastraDBMessage) => m.id === i),\n            );\n            if (deletedIds.length) {\n              messageList.removeByIds(deletedIds);\n            }\n            processableMessages = processResult || [];\n            for (const message of processResult) {\n              messageList.removeByIds([message.id]);\n              messageList.add(message, check.getSource(message) || 'response');\n            }\n          }\n        }\n\n        processorSpan?.end({\n          output: {\n            ...(!areProcessorMessageArraysEqual(outputMessagesBefore, processableMessages)\n              ? { messages: processableMessages }\n              : {}),\n            ...(!areProcessorMessageArraysEqual(outputSystemMessagesBefore, messageList.getAllSystemMessages())\n              ? { systemMessages: messageList.getAllSystemMessages() }\n              : {}),\n          },\n          attributes: mutations.length > 0 ? { messageListMutations: mutations } : undefined,\n        });\n      } catch (error) {\n        // Stop recording on error\n        messageList.stopRecording();\n\n        if (error instanceof TripWire) {\n          processorSpan?.error({\n            error,\n            endSpan: true,\n            attributes: {\n              tripwireAbort: {\n                reason: error.message,\n                retry: error.options?.retry,\n                metadata: error.options?.metadata,\n              },\n            },\n          });\n          await invokeOnViolation(processor, error);\n          throw error;\n        }\n        processorSpan?.error({ error: error as Error, endSpan: true });\n        throw error;\n      }\n    }\n\n    return messageList;\n  }\n\n  /**\n   * Process a stream part through all output processors with state management\n   */\n  async processPart<OUTPUT>(\n    part: ChunkType<OUTPUT>,\n    processorStates: Map<string, ProcessorState<OUTPUT>>,\n    observabilityContext?: ObservabilityContext,\n    requestContext?: RequestContext,\n    messageList?: MessageList,\n    retryCount: number = 0,\n    writer?: ProcessorStreamWriter,\n  ): Promise<{\n    part: ChunkType<OUTPUT> | null | undefined;\n    blocked: boolean;\n    reason?: string;\n    tripwireOptions?: TripWireOptions<unknown>;\n    processorId?: string;\n  }> {\n    if (!this.outputProcessors.length) {\n      return { part, blocked: false };\n    }\n\n    try {\n      let processedPart: ChunkType<OUTPUT> | null | undefined = part;\n      const isFinishChunk = part.type === 'finish';\n\n      for (const [index, processorOrWorkflow] of this.outputProcessors.entries()) {\n        // Handle workflows for stream processing\n        if (isProcessorWorkflow(processorOrWorkflow)) {\n          if (!processedPart) continue;\n\n          // Get or create state for this workflow\n          const workflowId = processorOrWorkflow.id;\n          let state = processorStates.get(workflowId);\n          if (!state) {\n            state = new ProcessorState<OUTPUT>();\n            processorStates.set(workflowId, state);\n          }\n\n          // Track input chunk (before processor transformation)\n          state.addInputPart(processedPart);\n\n          try {\n            const result = await this.executeWorkflowAsProcessor(\n              processorOrWorkflow,\n              {\n                phase: 'outputStream',\n                part: processedPart,\n                streamParts: state.streamParts as ChunkType[],\n                state: state.customState,\n                messageList,\n                retryCount,\n              },\n              observabilityContext,\n              requestContext,\n              writer,\n            );\n\n            // Extract the processed part from the result if it exists\n            if ('part' in result) {\n              processedPart = result.part as ChunkType<OUTPUT> | null | undefined;\n            }\n            // Track output chunk (after processor transformation or passthrough)\n            state.addOutputPart(processedPart);\n          } catch (error) {\n            if (error instanceof TripWire) {\n              return {\n                part: null,\n                blocked: true,\n                reason: error.message,\n                tripwireOptions: error.options,\n                processorId: error.processorId || workflowId,\n              };\n            }\n            this.logger.error('Output processor workflow failed', { agent: this.agentName, workflowId, error });\n          }\n          continue;\n        }\n\n        const processor = processorOrWorkflow;\n        try {\n          if (processor.processOutputStream && processedPart) {\n            // Get or create state for this processor\n            let state = processorStates.get(processor.id);\n            if (!state) {\n              state = new ProcessorState<OUTPUT>({\n                processorName: processor.name ?? processor.id,\n                ...observabilityContext,\n                processorIndex: index,\n                createSpan: true,\n              });\n              processorStates.set(processor.id, state);\n            }\n\n            // Track input chunk (before processor transformation)\n            state.addInputPart(processedPart);\n\n            const result = await processor.processOutputStream({\n              part: processedPart as ChunkType,\n              streamParts: state.streamParts as ChunkType[],\n              state: state.customState,\n              abort: <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n                throw new TripWire(reason || `Stream part blocked by ${processor.id}`, options, processor.id);\n              },\n              ...createObservabilityContext({ currentSpan: state.span }),\n              requestContext,\n              messageList,\n              retryCount,\n              writer,\n            });\n\n            // Track output chunk and update processedPart\n            processedPart = result as ChunkType<OUTPUT> | null | undefined;\n            state.addOutputPart(processedPart);\n          }\n        } catch (error) {\n          if (error instanceof TripWire) {\n            // Error span for trip-wire abort so it shows as ERROR in traces\n            const state = processorStates.get(processor.id);\n            state?.span?.error({\n              error,\n              endSpan: true,\n              attributes: {\n                tripwireAbort: {\n                  reason: error.message,\n                  retry: error.options?.retry,\n                  metadata: error.options?.metadata,\n                },\n              },\n            });\n            await invokeOnViolation(processor, error);\n            return {\n              part: null,\n              blocked: true,\n              reason: error.message,\n              tripwireOptions: error.options,\n              processorId: processor.id,\n            };\n          }\n          // End span with error\n          const state = processorStates.get(processor.id);\n          state?.span?.error({ error: error as Error, endSpan: true });\n          // Log error but continue with original part\n          this.logger.error('Output processor failed', { agent: this.agentName, processorId: processor.id, error });\n        }\n      }\n\n      // If this was a finish chunk, end all processor spans AFTER processing\n      if (isFinishChunk) {\n        for (const state of processorStates.values()) {\n          if (state.span) {\n            // Set output with accumulated text and chunk count from processor's output\n            state.span.end({ output: state.getFinalOutput() });\n          }\n        }\n      }\n\n      return { part: processedPart, blocked: false };\n    } catch (error) {\n      this.logger.error('Stream part processing failed', { agent: this.agentName, error });\n      // End all spans on fatal error\n      for (const state of processorStates.values()) {\n        state.span?.error({ error: error as Error, endSpan: true });\n      }\n      return { part, blocked: false };\n    }\n  }\n\n  /**\n   * Re-drive any parts that stream processors stashed for reprocessing through\n   * the full output processor chain.\n   *\n   * A stream processor can only return one part from `processOutputStream`, but\n   * some processors (e.g. `BatchPartsProcessor`) need to emit a second part for\n   * one input — it returns the first part and stashes the second under\n   * `REPROCESS_PART_KEY` on its state. After the primary part has been emitted,\n   * callers invoke this to push each stashed part back through the whole chain\n   * (so it receives downstream processing) and emit the results in order.\n   *\n   * Returns the processed results in emission order. Reprocessing can itself\n   * stash more parts, so this drains until none remain.\n   */\n  async drainReprocessParts<OUTPUT>(\n    processorStates: Map<string, ProcessorState<OUTPUT>>,\n    observabilityContext?: ObservabilityContext,\n    requestContext?: RequestContext,\n    messageList?: MessageList,\n    retryCount: number = 0,\n    writer?: ProcessorStreamWriter,\n  ): Promise<\n    Array<{\n      part: ChunkType<OUTPUT> | null | undefined;\n      blocked: boolean;\n      reason?: string;\n      tripwireOptions?: TripWireOptions<unknown>;\n      processorId?: string;\n    }>\n  > {\n    const results: Array<{\n      part: ChunkType<OUTPUT> | null | undefined;\n      blocked: boolean;\n      reason?: string;\n      tripwireOptions?: TripWireOptions<unknown>;\n      processorId?: string;\n    }> = [];\n\n    // Pull the next stashed part (if any) from processor states, in processor order.\n    const takeNext = (): ChunkType<OUTPUT> | undefined => {\n      for (const state of processorStates.values()) {\n        const custom = state.customState as Record<string, unknown>;\n        const stashed = custom[REPROCESS_PART_KEY];\n        if (stashed) {\n          delete custom[REPROCESS_PART_KEY];\n          return stashed as ChunkType<OUTPUT>;\n        }\n      }\n      return undefined;\n    };\n\n    // Bound the loop defensively to avoid an infinite cycle if a processor were\n    // to keep restashing the same part.\n    let guard = 0;\n    let next = takeNext();\n    while (next && guard++ < 1000) {\n      const result = await this.processPart(\n        next,\n        processorStates,\n        observabilityContext,\n        requestContext,\n        messageList,\n        retryCount,\n        writer,\n      );\n      results.push(result);\n      if (result.blocked) {\n        break;\n      }\n      next = takeNext();\n    }\n\n    return results;\n  }\n\n  async runOutputProcessorsForStream<OUTPUT = undefined>(\n    streamResult: MastraModelOutput<OUTPUT>,\n    observabilityContext?: ObservabilityContext,\n    writer?: ProcessorStreamWriter,\n  ): Promise<ReadableStream<any>> {\n    return new ReadableStream({\n      start: async controller => {\n        const reader = streamResult.fullStream.getReader();\n        const processorStates = new Map<string, ProcessorState<OUTPUT>>();\n\n        // Use provided writer, or create one from the controller\n        const streamWriter = writer ?? {\n          custom: async (data: { type: string }) => controller.enqueue(data),\n        };\n\n        try {\n          while (true) {\n            const { done, value } = await reader.read();\n\n            if (done) {\n              controller.close();\n              break;\n            }\n\n            // Process all stream parts through output processors\n            const {\n              part: processedPart,\n              blocked,\n              reason,\n              tripwireOptions,\n              processorId,\n            } = await this.processPart(\n              value,\n              processorStates,\n              observabilityContext,\n              undefined,\n              undefined,\n              0,\n              streamWriter,\n            );\n\n            const enqueueTripwire = (r?: string, opts?: TripWireOptions<unknown>, pid?: string) => {\n              void this.logger.debug('Stream part blocked by output processor', {\n                agent: this.agentName,\n                reason: r,\n                originalPart: value,\n              });\n              controller.enqueue({\n                type: 'tripwire',\n                payload: {\n                  reason: r || 'Output processor blocked content',\n                  retry: opts?.retry,\n                  metadata: opts?.metadata,\n                  processorId: pid,\n                },\n              });\n            };\n\n            if (blocked) {\n              // Send tripwire part and close stream for abort\n              enqueueTripwire(reason, tripwireOptions, processorId);\n              controller.close();\n              break;\n            } else if (processedPart != null) {\n              // Send processed part only if it's not null/undefined (which indicates don't emit)\n              controller.enqueue(processedPart);\n            }\n            // If processedPart is null/undefined, don't emit anything for this part\n\n            // Emit any parts a processor stashed for reprocessing (e.g. the\n            // non-text part that triggered a BatchPartsProcessor flush), pushing\n            // each back through the whole chain so it gets downstream processing.\n            const reprocessed = await this.drainReprocessParts(\n              processorStates,\n              observabilityContext,\n              undefined,\n              undefined,\n              0,\n              streamWriter,\n            );\n            let aborted = false;\n            for (const r of reprocessed) {\n              if (r.blocked) {\n                enqueueTripwire(r.reason, r.tripwireOptions, r.processorId);\n                controller.close();\n                aborted = true;\n                break;\n              }\n              if (r.part != null) {\n                controller.enqueue(r.part);\n              }\n            }\n            if (aborted) {\n              break;\n            }\n          }\n        } catch (error) {\n          controller.error(error);\n        }\n      },\n    });\n  }\n\n  async runInputProcessors(\n    messageList: MessageList,\n    observabilityContext?: ObservabilityContext,\n    requestContext?: RequestContext,\n    retryCount: number = 0,\n  ): Promise<MessageList> {\n    for (const [index, processorOrWorkflow] of this.inputProcessors.entries()) {\n      let processableMessages: MastraDBMessage[] = messageList.get.input.db();\n      const inputIds = processableMessages.map((m: MastraDBMessage) => m.id);\n      const check = messageList.makeMessageSourceChecker();\n\n      // Handle workflow as processor\n      if (isProcessorWorkflow(processorOrWorkflow)) {\n        const currentSystemMessages = messageList.getSystemMessages();\n        await this.executeWorkflowAsProcessor(\n          processorOrWorkflow,\n          {\n            phase: 'input',\n            messages: processableMessages,\n            messageList,\n            systemMessages: currentSystemMessages,\n            retryCount,\n          },\n          observabilityContext,\n          requestContext,\n        );\n        continue;\n      }\n\n      // Handle regular processor\n      const processor = processorOrWorkflow;\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      // Use the processInput method if available\n      const processMethod = processor.processInput?.bind(processor);\n\n      if (!processMethod) {\n        // Skip processors that don't implement processInput\n        continue;\n      }\n\n      const currentSystemMessages = messageList.getSystemMessages();\n      const inputMessagesBefore = processableMessages;\n      const inputSystemMessagesBefore = currentSystemMessages;\n      const currentSpan = observabilityContext?.tracingContext?.currentSpan;\n      const parentSpan = currentSpan?.findParent(SpanType.AGENT_RUN) || currentSpan?.parent || currentSpan;\n      const processorSpan = parentSpan?.createChildSpan({\n        type: SpanType.PROCESSOR_RUN,\n        name: `input processor: ${processor.id}`,\n        entityType: EntityType.INPUT_PROCESSOR,\n        entityId: processor.id,\n        entityName: processor.name,\n        attributes: {\n          processorExecutor: 'legacy',\n          processorIndex: index,\n        },\n        input: {\n          messages: processableMessages,\n          systemMessages: currentSystemMessages,\n        },\n      });\n\n      // Start recording MessageList mutations for this processor\n      messageList.startRecording();\n\n      try {\n        // Get per-processor state that persists across all method calls within this request\n        const processorState = this.getProcessorState(processor.id);\n\n        const result = await processMethod({\n          messages: processableMessages,\n          systemMessages: currentSystemMessages,\n          state: processorState.customState,\n          abort,\n          ...createObservabilityContext({ currentSpan: processorSpan }),\n          messageList,\n          requestContext,\n          retryCount,\n          sendSignal: createProcessorSendSignal({ messageList }),\n        });\n\n        // Handle MessageList, MastraDBMessage[], or { messages, systemMessages } return types\n        let mutations: Array<{\n          type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n          source?: string;\n          count?: number;\n          ids?: string[];\n          text?: string;\n          tag?: string;\n          message?: any;\n        }>;\n\n        if (result instanceof MessageList) {\n          if (result !== messageList) {\n            throw new MastraError({\n              category: 'USER',\n              domain: 'AGENT',\n              id: 'PROCESSOR_RETURNED_EXTERNAL_MESSAGE_LIST',\n              text: `Processor ${processor.id} returned a MessageList instance other than the one that was passed in as an argument. New external message list instances are not supported. Use the messageList argument instead.`,\n            });\n          }\n          // Stop recording and capture mutations\n          mutations = messageList.stopRecording();\n          if (mutations.length > 0) {\n            // Processor returned a MessageList - it has been modified in place\n            // Update processableMessages to reflect ALL current messages for next processor\n            processableMessages = messageList.get.input.db();\n          }\n        } else if (this.isProcessInputResultWithSystemMessages(result)) {\n          // Processor returned { messages, systemMessages } - handle both\n          mutations = messageList.stopRecording();\n\n          messageList.replaceAllSystemMessages(result.systemMessages);\n\n          // Handle regular messages\n          const regularMessages = result.messages;\n          if (regularMessages) {\n            const deletedIds = inputIds.filter(i => !regularMessages.some(m => m.id === i));\n            if (deletedIds.length) {\n              messageList.removeByIds(deletedIds);\n            }\n\n            // Separate any new system messages from other messages (backward compat)\n            const newSystemMessages = regularMessages.filter(m => m.role === 'system');\n            const nonSystemMessages = regularMessages.filter(m => m.role !== 'system');\n\n            // Add any new system messages from the messages array\n            for (const sysMsg of newSystemMessages) {\n              const systemText =\n                (sysMsg.content.content as string | undefined) ??\n                sysMsg.content.parts?.map(p => (p.type === 'text' ? p.text : '')).join('\\n') ??\n                '';\n              messageList.addSystem(systemText);\n            }\n\n            // Add non-system messages normally\n            if (nonSystemMessages.length > 0) {\n              for (const message of nonSystemMessages) {\n                messageList.removeByIds([message.id]);\n                messageList.add(message, check.getSource(message) || 'input');\n              }\n            }\n          }\n\n          processableMessages = messageList.get.input.db();\n        } else {\n          // Processor returned an array - stop recording before clear/add (that's just internal plumbing)\n          mutations = messageList.stopRecording();\n\n          if (result) {\n            // Clear and re-add since processor worked with array. clear all messages, the new result array is all messages in the list (new input but also any messages added by other processors, memory for ex)\n            const deletedIds = inputIds.filter(i => !result.some(m => m.id === i));\n            if (deletedIds.length) {\n              messageList.removeByIds(deletedIds);\n            }\n\n            // Separate system messages from other messages since they need different handling\n            const systemMessages = result.filter(m => m.role === 'system');\n            const nonSystemMessages = result.filter(m => m.role !== 'system');\n\n            // Add system messages using addSystem\n            for (const sysMsg of systemMessages) {\n              const systemText =\n                (sysMsg.content.content as string | undefined) ??\n                sysMsg.content.parts?.map(p => (p.type === 'text' ? p.text : '')).join('\\n') ??\n                '';\n              messageList.addSystem(systemText);\n            }\n\n            // Add non-system messages normally\n            if (nonSystemMessages.length > 0) {\n              for (const message of nonSystemMessages) {\n                messageList.removeByIds([message.id]);\n                messageList.add(message, check.getSource(message) || 'input');\n              }\n            }\n\n            // Use messageList.get.input.db() for consistency with MessageList return type\n            processableMessages = messageList.get.input.db();\n          }\n        }\n\n        processorSpan?.end({\n          output: {\n            ...(!areProcessorMessageArraysEqual(inputMessagesBefore, processableMessages)\n              ? { messages: processableMessages }\n              : {}),\n            ...(!areProcessorMessageArraysEqual(inputSystemMessagesBefore, messageList.getSystemMessages())\n              ? { systemMessages: messageList.getSystemMessages() }\n              : {}),\n          },\n          attributes: mutations.length > 0 ? { messageListMutations: mutations } : undefined,\n        });\n      } catch (error) {\n        // Stop recording on error\n        messageList.stopRecording();\n\n        if (error instanceof TripWire) {\n          processorSpan?.error({\n            error,\n            endSpan: true,\n            attributes: {\n              tripwireAbort: {\n                reason: error.message,\n                retry: error.options?.retry,\n                metadata: error.options?.metadata,\n              },\n            },\n          });\n          await invokeOnViolation(processor, error);\n          throw error;\n        }\n        processorSpan?.error({ error: error as Error, endSpan: true });\n        throw error;\n      }\n    }\n\n    return messageList;\n  }\n\n  /**\n   * Run processInputStep for all processors that implement it.\n   * Called at each step of the agentic loop, before the LLM is invoked.\n   *\n   * Unlike processInput which runs once at the start, this runs at every step\n   * (including tool call continuations). This is useful for:\n   * - Transforming message types between steps (e.g., AI SDK 'reasoning' -> Anthropic 'thinking')\n   * - Modifying messages based on step context\n   * - Implementing per-step message transformations\n   *\n   * @param args.messages - The current messages to be sent to the LLM (MastraDBMessage format)\n   * @param args.messageList - MessageList instance for managing message sources\n   * @param args.stepNumber - The current step number (0-indexed)\n   * @param args.tracingContext - Optional tracing context for observability\n   * @param args.requestContext - Optional runtime context with execution metadata\n   *\n   * @returns The processed MessageList\n   */\n  async runProcessInputStep(args: RunProcessInputStepArgs): Promise<RunProcessInputStepResult> {\n    const { messageList, stepNumber, steps, requestContext, writer } = args;\n    const observabilityContext = resolveObservabilityContext(args);\n\n    // Initialize with all provided values - processors will modify this object in order\n    const stepInput: RunProcessInputStepResult = {\n      messageId: args.messageId,\n      tools: args.tools,\n      toolChoice: args.toolChoice,\n      model: args.model,\n      activeTools: args.activeTools,\n      providerOptions: args.providerOptions,\n      modelSettings: args.modelSettings,\n      structuredOutput: args.structuredOutput,\n      retryCount: args.retryCount ?? 0,\n    };\n\n    // Append the trailing assistant guard when the resolved model is Claude 4.6\n    const processors =\n      stepInput.model && isMaybeClaude46(stepInput.model)\n        ? [...this.inputProcessors, new TrailingAssistantGuard()]\n        : this.inputProcessors;\n\n    // Run through all input processors that have processInputStep\n    for (const [index, processorOrWorkflow] of processors.entries()) {\n      const processableMessages: MastraDBMessage[] = messageList.get.all.db();\n      const idsBeforeProcessing = processableMessages.map((m: MastraDBMessage) => m.id);\n      const check = messageList.makeMessageSourceChecker();\n\n      // Handle workflow as processor with inputStep phase\n      if (isProcessorWorkflow(processorOrWorkflow)) {\n        const currentSystemMessages = messageList.getSystemMessages();\n        const result = await this.executeWorkflowAsProcessor(\n          processorOrWorkflow,\n          {\n            phase: 'inputStep',\n            messages: processableMessages,\n            messageList,\n            stepNumber,\n            steps,\n            systemMessages: currentSystemMessages,\n            rotateResponseMessageId: args.rotateResponseMessageId\n              ? () => {\n                  const nextMessageId = args.rotateResponseMessageId!();\n                  stepInput.messageId = nextMessageId;\n                  return nextMessageId;\n                }\n              : undefined,\n            ...stepInput,\n          },\n          observabilityContext,\n          requestContext,\n          writer,\n          args.abortSignal,\n        );\n        Object.assign(stepInput, result);\n        await this.runWorkflowComputeStateSignals({\n          workflow: processorOrWorkflow,\n          messageList,\n          stepNumber,\n          steps,\n          requestContext,\n          writer,\n          memory: args.memory,\n          resourceId: args.resourceId,\n          threadId: args.threadId,\n          abortSignal: args.abortSignal,\n          retryCount: args.retryCount ?? 0,\n        });\n        continue;\n      }\n\n      // Handle regular processor\n      const processor = processorOrWorkflow as Processor;\n      const processMethod = processor.processInputStep?.bind(processor);\n      const computeStateSignal = processor.computeStateSignal?.bind(processor);\n      if (!processMethod && !computeStateSignal) {\n        // Skip processors that don't implement per-step input hooks\n        continue;\n      }\n\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      // Pass only the untagged system messages — tagged buckets belong to\n      // their owning processors and are merged back in at final model assembly.\n      const currentSystemMessages = messageList.getSystemMessages();\n\n      const inputData = {\n        messages: processableMessages,\n        stepNumber,\n        steps,\n        messageId: stepInput.messageId,\n        systemMessages: currentSystemMessages,\n        tools: stepInput.tools,\n        toolChoice: stepInput.toolChoice,\n        model: stepInput.model!,\n        activeTools: stepInput.activeTools,\n        providerOptions: stepInput.providerOptions,\n        modelSettings: stepInput.modelSettings,\n        structuredOutput: stepInput.structuredOutput,\n        requestContext,\n      };\n\n      // Use the current span (the step span) as the parent for processor spans\n      const currentSpan = observabilityContext.tracingContext?.currentSpan;\n      const processorSpan = currentSpan?.createChildSpan({\n        type: SpanType.PROCESSOR_RUN,\n        name: `input step processor: ${processor.id}`,\n        entityType: EntityType.INPUT_STEP_PROCESSOR,\n        entityId: processor.id,\n        entityName: processor.name,\n        attributes: {\n          processorExecutor: 'legacy',\n          processorIndex: index,\n        },\n        input: buildProcessInputStepSpanInput({\n          messages: inputData.messages,\n          systemMessages: inputData.systemMessages,\n          stepNumber: inputData.stepNumber,\n          messageId: inputData.messageId,\n          retryCount: args.retryCount ?? 0,\n          model: inputData.model,\n          tools: inputData.tools,\n          toolChoice: inputData.toolChoice,\n          activeTools: inputData.activeTools,\n        }),\n      });\n\n      // Start recording MessageList mutations for this processor\n      messageList.startRecording();\n\n      try {\n        // Get per-processor state that persists across all method calls within this request\n        const processorState = this.getProcessorState(processor.id);\n        const beforeStepInput = {\n          messageId: inputData.messageId,\n          model: inputData.model,\n          tools: inputData.tools,\n          toolChoice: inputData.toolChoice,\n          activeTools: inputData.activeTools,\n        };\n\n        const rotateResponseMessageId = args.rotateResponseMessageId\n          ? () => {\n              const nextMessageId = args.rotateResponseMessageId!();\n              stepInput.messageId = nextMessageId;\n              return nextMessageId;\n            }\n          : undefined;\n\n        const processMethodArgs = {\n          messageList,\n          ...inputData,\n          state: processorState.customState,\n          abort,\n          ...(rotateResponseMessageId ? { rotateResponseMessageId } : {}),\n          ...createObservabilityContext({ currentSpan: processorSpan }),\n          retryCount: args.retryCount ?? 0,\n          writer,\n          abortSignal: args.abortSignal,\n          sendSignal: createProcessorSendSignal({ messageList, writer, rotateResponseMessageId }),\n          sendStateSignal: async (\n            stateSignal: AgentStateSignalInput | (Omit<AgentStateSignalInput, 'id'> & { id?: string }),\n          ) => {\n            const memoryContext = parseMemoryRequestContext(requestContext);\n            const resolvedMemory = args.memory;\n            const resolvedThreadId = args.threadId ?? memoryContext?.thread?.id;\n            const resolvedResourceId = args.resourceId ?? memoryContext?.resourceId;\n            if (!resolvedMemory || !resolvedThreadId || !resolvedResourceId) {\n              throw new Error(\n                `[Processor:${processor.id}] sendStateSignal requires Mastra memory with an active resourceId and threadId`,\n              );\n            }\n            const loadedThread =\n              (await resolvedMemory.getThreadById({ threadId: resolvedThreadId })) ?? memoryContext?.thread;\n            if (!loadedThread) {\n              throw new Error(`[Processor:${processor.id}] sendStateSignal could not load thread ${resolvedThreadId}`);\n            }\n            const thread = {\n              ...loadedThread,\n              id: resolvedThreadId,\n              resourceId: loadedThread.resourceId ?? resolvedResourceId,\n              createdAt: loadedThread.createdAt ?? new Date(),\n              updatedAt: loadedThread.updatedAt ?? new Date(),\n              metadata: loadedThread.metadata,\n            };\n            const result = await applyStateSignal({\n              input: stateSignal,\n              memory: resolvedMemory,\n              thread,\n              resourceId: resolvedResourceId,\n              threadId: resolvedThreadId,\n              memoryConfig: memoryContext?.memoryConfig,\n              messageList,\n              defaultId: processor.stateId ?? processor.id,\n              writeSignal: signal => writer?.custom(signal.toDataPart()),\n            });\n            return result.skipped ? result : result.signal;\n          },\n        };\n\n        const result = processMethod\n          ? await ProcessorRunner.validateAndFormatProcessInputStepResult(await processMethod(processMethodArgs), {\n              messageList,\n              processor,\n              stepNumber,\n            })\n          : {};\n        const { messages, systemMessages, ...rest } = result;\n        if (messages) {\n          ProcessorRunner.applyMessagesToMessageList(messages, messageList, idsBeforeProcessing, check);\n        }\n        if (systemMessages) {\n          messageList.replaceAllSystemMessages(systemMessages);\n        }\n        Object.assign(stepInput, rest);\n\n        await this.runComputeStateSignal({\n          processor,\n          messageList,\n          stepNumber,\n          steps,\n          requestContext,\n          writer,\n          abort,\n          processorState,\n          memory: args.memory,\n          resourceId: args.resourceId,\n          threadId: args.threadId,\n          abortSignal: args.abortSignal,\n          retryCount: args.retryCount ?? 0,\n        });\n\n        // Stop recording and get mutations for this processor\n        const mutations = messageList.stopRecording();\n\n        processorSpan?.end({\n          output: buildProcessInputStepSpanOutput({\n            result,\n            beforeStepInput,\n            afterStepInput: stepInput,\n            beforeMessages: inputData.messages,\n            beforeSystemMessages: inputData.systemMessages,\n            messages: messageList.get.all.db(),\n            systemMessages: messageList.getSystemMessages(),\n          }),\n          attributes: mutations.length > 0 ? { messageListMutations: mutations } : undefined,\n        });\n      } catch (error) {\n        // Stop recording on error\n        messageList.stopRecording();\n\n        if (error instanceof TripWire) {\n          processorSpan?.error({\n            error,\n            endSpan: true,\n            attributes: {\n              tripwireAbort: {\n                reason: error.message,\n                retry: error.options?.retry,\n                metadata: error.options?.metadata,\n              },\n            },\n          });\n          await invokeOnViolation(processor, error);\n          throw error;\n        }\n        processorSpan?.error({ error: error as Error, endSpan: true });\n        throw error;\n      }\n    }\n\n    return stepInput;\n  }\n\n  /**\n   * Run processLLMRequest for all processors that implement it.\n   *\n   * Called *after* `MessageList` has been converted to `LanguageModelV2Prompt`\n   * and immediately *before* the prompt is forwarded to the provider.\n   * Mutations are scoped to this single call — they do not affect the\n   * persisted message list, memory, UI, or future model swaps.\n   */\n  async runProcessLLMRequest(args: {\n    prompt: LanguageModelV2Prompt;\n    model: unknown;\n    stepNumber: number;\n    steps: Array<StepResult<any>>;\n    requestContext?: RequestContext;\n    retryCount?: number;\n    abortSignal?: AbortSignal;\n    tracingContext?: TracingContext;\n    writer?: ProcessorStreamWriter;\n  }): Promise<{ prompt: LanguageModelV2Prompt; response?: CachedLLMStepResponse }> {\n    const observabilityContext = resolveObservabilityContext({ tracingContext: args.tracingContext });\n\n    let currentPrompt = args.prompt;\n    let cachedResponse: CachedLLMStepResponse | undefined;\n\n    for (const processorOrWorkflow of this.inputProcessors) {\n      // Workflows do not currently participate in processLLMRequest.\n      if (isProcessorWorkflow(processorOrWorkflow)) continue;\n      const processor = processorOrWorkflow;\n      const processMethod = processor.processLLMRequest?.bind(processor);\n      if (!processMethod) continue;\n\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      try {\n        const processorState = this.getProcessorState(processor.id);\n\n        const result = await processMethod({\n          prompt: currentPrompt,\n          // The Processor interface types `model` as `MastraLanguageModel`, but\n          // the runner accepts the looser `unknown` to match other call paths\n          // (e.g. unresolved string ids or function-typed dynamic models).\n          model: args.model as never,\n          stepNumber: args.stepNumber,\n          steps: args.steps,\n          state: processorState.customState,\n          retryCount: args.retryCount ?? 0,\n          requestContext: args.requestContext,\n          abort,\n          abortSignal: args.abortSignal,\n          writer: args.writer,\n          ...createObservabilityContext(args.tracingContext),\n        });\n\n        if (result && typeof result === 'object') {\n          // Use property presence (not truthiness) so a processor can\n          // intentionally pass an empty prompt without it being silently\n          // ignored.\n          if (Object.prototype.hasOwnProperty.call(result, 'prompt')) {\n            currentPrompt = result.prompt as LanguageModelV2Prompt;\n          }\n          if (result.response && !cachedResponse) {\n            // First processor to short-circuit wins. Subsequent processors\n            // still see their `processLLMRequest` invoked so per-request side\n            // effects (telemetry, key derivation) run, but they cannot\n            // override an already-resolved cached response.\n            cachedResponse = result.response;\n          }\n        }\n      } catch (error) {\n        if (error instanceof TripWire) {\n          await invokeOnViolation(processor, error);\n        }\n        throw error;\n      }\n    }\n\n    void observabilityContext;\n    return { prompt: currentPrompt, response: cachedResponse };\n  }\n\n  /**\n   * Run processLLMResponse for all processors that implement it.\n   *\n   * Called *after* the LLM step completes (or after a cached response is\n   * replayed) and *after* output processors have collected the response\n   * chunks. The shared `state` object is the same instance passed to\n   * `processLLMRequest` for the same step, allowing processors to correlate\n   * pre- and post-call work (e.g. cache key stash, then cache write).\n   */\n  async runProcessLLMResponse(args: {\n    chunks: CachedLLMStepChunk[];\n    model: unknown;\n    stepNumber: number;\n    steps: Array<StepResult<any>>;\n    warnings?: LanguageModelV2CallWarning[];\n    request?: unknown;\n    rawResponse?: unknown;\n    fromCache: boolean;\n    requestContext?: RequestContext;\n    retryCount?: number;\n    abortSignal?: AbortSignal;\n    tracingContext?: TracingContext;\n    writer?: ProcessorStreamWriter;\n  }): Promise<void> {\n    const observabilityContext = resolveObservabilityContext({ tracingContext: args.tracingContext });\n\n    for (const processorOrWorkflow of this.inputProcessors) {\n      // Workflows do not currently participate in processLLMResponse.\n      if (isProcessorWorkflow(processorOrWorkflow)) continue;\n      const processor = processorOrWorkflow;\n      const processMethod = processor.processLLMResponse?.bind(processor);\n      if (!processMethod) continue;\n\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      try {\n        const processorState = this.getProcessorState(processor.id);\n\n        await processMethod({\n          chunks: args.chunks,\n          model: args.model as never,\n          stepNumber: args.stepNumber,\n          steps: args.steps,\n          state: processorState.customState,\n          warnings: args.warnings,\n          request: args.request,\n          rawResponse: args.rawResponse,\n          fromCache: args.fromCache,\n          retryCount: args.retryCount ?? 0,\n          requestContext: args.requestContext,\n          abort,\n          abortSignal: args.abortSignal,\n          writer: args.writer,\n          ...createObservabilityContext(args.tracingContext),\n        });\n      } catch (error) {\n        if (error instanceof TripWire) {\n          await invokeOnViolation(processor, error);\n        }\n        throw error;\n      }\n    }\n\n    void observabilityContext;\n  }\n\n  /**\n   * Type guard to check if result is { messages, systemMessages }\n   */\n  private isProcessInputResultWithSystemMessages(\n    result: unknown,\n  ): result is { messages: MastraDBMessage[]; systemMessages: unknown[] } {\n    return (\n      result !== null &&\n      typeof result === 'object' &&\n      'messages' in result &&\n      'systemMessages' in result &&\n      Array.isArray((result as any).messages) &&\n      Array.isArray((result as any).systemMessages)\n    );\n  }\n\n  /**\n   * Run processOutputStep for all processors that implement it.\n   * Called after each LLM response in the agentic loop, before tool execution.\n   *\n   * Unlike processOutputResult which runs once at the end, this runs at every step.\n   * This is the ideal place to implement guardrails that can trigger retries.\n   *\n   * @param args.messages - The current messages including the LLM response\n   * @param args.messageList - MessageList instance for managing message sources\n   * @param args.stepNumber - The current step number (0-indexed)\n   * @param args.finishReason - The finish reason from the LLM\n   * @param args.toolCalls - Tool calls made in this step (if any)\n   * @param args.text - Generated text from this step\n   * @param args.tracingContext - Optional tracing context for observability\n   * @param args.requestContext - Optional runtime context with execution metadata\n   * @param args.retryCount - Number of times processors have triggered retry\n   *\n   * @returns The processed MessageList\n   */\n  async runProcessOutputStep(\n    args: {\n      steps: Array<StepResult<any>>;\n      messages: MastraDBMessage[];\n      messageList: MessageList;\n      stepNumber: number;\n      finishReason?: string;\n      toolCalls?: ToolCallInfo[];\n      text?: string;\n      usage?: LanguageModelUsage;\n      requestContext?: RequestContext;\n      retryCount?: number;\n      writer?: ProcessorStreamWriter;\n    } & Partial<ObservabilityContext>,\n  ): Promise<MessageList> {\n    const {\n      steps,\n      messageList,\n      stepNumber,\n      finishReason,\n      toolCalls,\n      text,\n      usage,\n      requestContext,\n      retryCount = 0,\n      writer,\n    } = args;\n    const observabilityContext = resolveObservabilityContext(args);\n\n    // Run through all output processors that have processOutputStep\n    for (const [index, processorOrWorkflow] of this.outputProcessors.entries()) {\n      const processableMessages: MastraDBMessage[] = messageList.get.all.db();\n      const idsBeforeProcessing = processableMessages.map((m: MastraDBMessage) => m.id);\n      const check = messageList.makeMessageSourceChecker();\n\n      // Handle workflow as processor with outputStep phase\n      if (isProcessorWorkflow(processorOrWorkflow)) {\n        const currentSystemMessages = messageList.getSystemMessages();\n        await this.executeWorkflowAsProcessor(\n          processorOrWorkflow,\n          {\n            phase: 'outputStep',\n            messages: processableMessages,\n            messageList,\n            stepNumber,\n            finishReason,\n            toolCalls,\n            text,\n            usage,\n            systemMessages: currentSystemMessages,\n            steps,\n            retryCount,\n          },\n          observabilityContext,\n          requestContext,\n          writer,\n        );\n        continue;\n      }\n\n      // Handle regular processor\n      const processor = processorOrWorkflow;\n      const processMethod = processor.processOutputStep?.bind(processor);\n\n      if (!processMethod) {\n        // Skip processors that don't implement processOutputStep\n        continue;\n      }\n\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      const currentSystemMessages = messageList.getSystemMessages();\n      const defaultUsage: LanguageModelUsage = {\n        inputTokens: undefined,\n        outputTokens: undefined,\n        totalTokens: undefined,\n      };\n      const currentSpan = observabilityContext.tracingContext?.currentSpan;\n      const parentSpan = currentSpan?.findParent(SpanType.AGENT_RUN) || currentSpan?.parent || currentSpan;\n      const processorSpan = parentSpan?.createChildSpan({\n        type: SpanType.PROCESSOR_RUN,\n        name: `output step processor: ${processor.id}`,\n        entityType: EntityType.OUTPUT_STEP_PROCESSOR,\n        entityId: processor.id,\n        entityName: processor.name,\n        attributes: {\n          processorExecutor: 'legacy',\n          processorIndex: index,\n        },\n        input: {\n          messages: processableMessages,\n          systemMessages: currentSystemMessages,\n          stepNumber,\n          ...(finishReason !== undefined ? { finishReason } : {}),\n          ...(toolCalls !== undefined ? { toolCalls } : {}),\n          ...(text !== undefined ? { text } : {}),\n        },\n      });\n\n      // Start recording MessageList mutations for this processor\n      messageList.startRecording();\n\n      // Get or create processor state (persists across steps within a request)\n      const processorState = this.getProcessorState(processor.id);\n\n      try {\n        const result = await processMethod({\n          messages: processableMessages,\n          messageList,\n          stepNumber,\n          finishReason,\n          toolCalls,\n          text,\n          usage: usage ?? defaultUsage,\n          systemMessages: currentSystemMessages,\n          steps,\n          state: processorState.customState,\n          abort,\n          ...createObservabilityContext({ currentSpan: processorSpan }),\n          requestContext,\n          retryCount,\n          writer,\n          sendSignal: createProcessorSendSignal({ messageList, writer }),\n        });\n\n        // Stop recording and get mutations for this processor\n        const mutations = messageList.stopRecording();\n\n        // Handle the return type - MessageList or MastraDBMessage[]\n        if (result instanceof MessageList) {\n          if (result !== messageList) {\n            throw new MastraError({\n              category: 'USER',\n              domain: 'AGENT',\n              id: 'PROCESSOR_RETURNED_EXTERNAL_MESSAGE_LIST',\n              text: `Processor ${processor.id} returned a MessageList instance other than the one that was passed in as an argument. New external message list instances are not supported. Use the messageList argument instead.`,\n            });\n          }\n          // Processor returned the same messageList - mutations have been applied\n        } else if (result) {\n          // Processor returned an array - apply changes to messageList\n          const deletedIds = idsBeforeProcessing.filter(\n            (i: string) => !result.some((m: MastraDBMessage) => m.id === i),\n          );\n          if (deletedIds.length) {\n            messageList.removeByIds(deletedIds);\n          }\n\n          // Re-add messages with correct sources\n          for (const message of result) {\n            messageList.removeByIds([message.id]);\n            if (message.role === 'system') {\n              const systemText =\n                (message.content.content as string | undefined) ??\n                message.content.parts?.map((p: any) => (p.type === 'text' ? p.text : '')).join('\\n') ??\n                '';\n              messageList.addSystem(systemText);\n            } else {\n              messageList.add(message, check.getSource(message) || 'response');\n            }\n          }\n        }\n\n        processorSpan?.end({\n          output: {\n            ...(!areProcessorMessageArraysEqual(processableMessages, messageList.get.all.db())\n              ? { messages: messageList.get.all.db() }\n              : {}),\n            ...(!areProcessorMessageArraysEqual(currentSystemMessages, messageList.getSystemMessages())\n              ? { systemMessages: messageList.getSystemMessages() }\n              : {}),\n          },\n          attributes: mutations.length > 0 ? { messageListMutations: mutations } : undefined,\n        });\n      } catch (error) {\n        // Stop recording on error\n        messageList.stopRecording();\n\n        if (error instanceof TripWire) {\n          processorSpan?.error({\n            error,\n            endSpan: true,\n            attributes: {\n              tripwireAbort: {\n                reason: error.message,\n                retry: error.options?.retry,\n                metadata: error.options?.metadata,\n              },\n            },\n          });\n          await invokeOnViolation(processor, error);\n          throw error;\n        }\n        processorSpan?.error({ error: error as Error, endSpan: true });\n        throw error;\n      }\n    }\n\n    return messageList;\n  }\n\n  /**\n   * Run processAPIError on all processors that implement it.\n   * Called when an LLM API call fails with a non-retryable error.\n   * Iterates through both input and output processors.\n   *\n   * @returns { retry: boolean } indicating whether to retry the LLM call\n   */\n  async runProcessAPIError(\n    args: {\n      error: unknown;\n      messages: MastraDBMessage[];\n      messageList: MessageList;\n      stepNumber: number;\n      steps: Array<StepResult<any>>;\n      messageId?: string;\n      requestContext?: RequestContext;\n      retryCount?: number;\n      writer?: ProcessorStreamWriter;\n      abortSignal?: AbortSignal;\n      rotateResponseMessageId?: () => string;\n    } & Partial<ObservabilityContext>,\n  ): Promise<{ retry: boolean }> {\n    const { error, messageList, stepNumber, steps, requestContext, retryCount = 0, writer, abortSignal } = args;\n    const observabilityContext = resolveObservabilityContext(args);\n\n    const allProcessors: ProcessorOrWorkflow[] = [\n      ...this.inputProcessors,\n      ...this.outputProcessors,\n      ...this.errorProcessors,\n    ];\n\n    for (const [index, processorOrWorkflow] of allProcessors.entries()) {\n      // Skip workflows — processAPIError is only available on Processor instances\n      if (isProcessorWorkflow(processorOrWorkflow)) {\n        continue;\n      }\n\n      const processor = processorOrWorkflow;\n      const processMethod = processor.processAPIError?.bind(processor);\n\n      if (!processMethod) {\n        continue;\n      }\n\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      const processableMessages: MastraDBMessage[] = messageList.get.all.db();\n      const systemMessagesBefore = messageList.getAllSystemMessages();\n      const messageIdBefore = args.messageId;\n      let messageIdAfter = args.messageId;\n      const currentSpan = observabilityContext.tracingContext?.currentSpan;\n      const parentSpan = currentSpan?.findParent(SpanType.AGENT_RUN) || currentSpan?.parent || currentSpan;\n      const processorSpan = parentSpan?.createChildSpan({\n        type: SpanType.PROCESSOR_RUN,\n        name: `request error processor: ${processor.id}`,\n        entityType: EntityType.OUTPUT_STEP_PROCESSOR,\n        entityId: processor.id,\n        entityName: processor.name,\n        attributes: {\n          processorExecutor: 'legacy',\n          processorIndex: index,\n        },\n        input: {\n          messages: processableMessages,\n          error: error instanceof Error ? error.message : String(error),\n          stepNumber,\n          ...(args.messageId ? { messageId: args.messageId } : {}),\n          retryCount,\n        },\n      });\n\n      // Start recording MessageList mutations for this processor\n      messageList.startRecording();\n\n      // Get or create processor state (persists across steps within a request)\n      const processorState = this.getProcessorState(processor.id);\n\n      try {\n        const rotateResponseMessageId = args.rotateResponseMessageId\n          ? () => {\n              const nextMessageId = args.rotateResponseMessageId!();\n              messageIdAfter = nextMessageId;\n              return nextMessageId;\n            }\n          : undefined;\n\n        const result = await processMethod({\n          messages: processableMessages,\n          messageList,\n          stepNumber,\n          steps,\n          state: processorState.customState,\n          error,\n          abort,\n          ...createObservabilityContext({ currentSpan: processorSpan }),\n          requestContext,\n          retryCount,\n          writer,\n          abortSignal,\n          messageId: args.messageId,\n          ...(rotateResponseMessageId ? { rotateResponseMessageId } : {}),\n          sendSignal: createProcessorSendSignal({ messageList, writer, rotateResponseMessageId }),\n        });\n\n        // Stop recording and get mutations for this processor\n        const mutations = messageList.stopRecording();\n        const messagesAfter = messageList.get.all.db();\n        const systemMessagesAfter = messageList.getAllSystemMessages();\n        const output: Record<string, unknown> = {\n          retry: result?.retry ?? false,\n        };\n\n        if (!areProcessorMessageArraysEqual(processableMessages, messagesAfter)) {\n          output.messages = messagesAfter;\n        }\n\n        if (!areProcessorMessageArraysEqual(systemMessagesBefore, systemMessagesAfter)) {\n          output.systemMessages = systemMessagesAfter;\n        }\n\n        if (messageIdAfter !== messageIdBefore) {\n          output.messageId = messageIdAfter;\n        }\n\n        processorSpan?.end({\n          output,\n          attributes: mutations.length > 0 ? { messageListMutations: mutations } : undefined,\n        });\n\n        if (result?.retry) {\n          return { retry: true };\n        }\n      } catch (processorError) {\n        // Stop recording on error\n        messageList.stopRecording();\n\n        if (processorError instanceof TripWire) {\n          processorSpan?.error({\n            error: processorError,\n            endSpan: true,\n            attributes: {\n              tripwireAbort: {\n                reason: processorError.message,\n                retry: processorError.options?.retry,\n                metadata: processorError.options?.metadata,\n              },\n            },\n          });\n          await invokeOnViolation(processor, processorError);\n          throw processorError;\n        }\n\n        processorSpan?.error({ error: processorError as Error, endSpan: true });\n        this.logger.error(\n          `[Agent:${this.agentName}] - Request error processor ${processor.id} failed:`,\n          processorError,\n        );\n        // Don't re-throw — if the error processor itself fails, fall through to original error handling\n      }\n    }\n\n    return { retry: false };\n  }\n\n  static applyMessagesToMessageList(\n    messages: MastraDBMessage[],\n    messageList: MessageList,\n    idsBeforeProcessing: string[],\n    check: ReturnType<MessageList['makeMessageSourceChecker']>,\n    defaultSource: 'input' | 'response' = 'input',\n  ) {\n    const deletedIds = idsBeforeProcessing.filter(i => !messages.some(m => m.id === i));\n    if (deletedIds.length) {\n      messageList.removeByIds(deletedIds);\n    }\n\n    // Re-add messages with correct sources\n    for (const message of messages) {\n      messageList.removeByIds([message.id]);\n      if (message.role === 'system') {\n        const systemText =\n          (message.content.content as string | undefined) ??\n          message.content.parts?.map(p => (p.type === 'text' ? p.text : '')).join('\\n') ??\n          '';\n        messageList.addSystem(systemText);\n      } else {\n        messageList.add(message, check.getSource(message) || defaultSource);\n      }\n    }\n  }\n\n  static async validateAndFormatProcessInputStepResult(\n    result: ProcessInputStepResult | Awaited<ProcessorMessageResult> | undefined | void,\n    {\n      messageList,\n      processor,\n      stepNumber,\n    }: {\n      messageList: MessageList;\n      processor: Processor;\n      stepNumber: number;\n    },\n  ): Promise<RunProcessInputStepResult> {\n    if (result instanceof MessageList) {\n      if (result !== messageList) {\n        throw new MastraError({\n          category: 'USER',\n          domain: 'AGENT',\n          id: 'PROCESSOR_RETURNED_EXTERNAL_MESSAGE_LIST',\n          text: `Processor ${processor.id} returned a MessageList instance other than the one that was passed in as an argument. New external message list instances are not supported. Use the messageList argument instead.`,\n        });\n      }\n      return {\n        messageList: result,\n      };\n    } else if (Array.isArray(result)) {\n      return {\n        messages: result,\n      };\n    } else if (result) {\n      if (result.messageList && result.messageList !== messageList) {\n        throw new MastraError({\n          category: 'USER',\n          domain: 'AGENT',\n          id: 'PROCESSOR_RETURNED_EXTERNAL_MESSAGE_LIST',\n          text: `Processor ${processor.id} returned a MessageList instance other than the one that was passed in as an argument. New external message list instances are not supported. Use the messageList argument instead.`,\n        });\n      }\n      if (result.messages && result.messageList) {\n        throw new MastraError({\n          category: 'USER',\n          domain: 'AGENT',\n          id: 'PROCESSOR_RETURNED_MESSAGES_AND_MESSAGE_LIST',\n          text: `Processor ${processor.id} returned both messages and messageList. Only one of these is allowed.`,\n        });\n      }\n      const { model: _model, ...rest } = result;\n      if (result.model) {\n        const resolvedModel = await resolveModelConfig(result.model);\n        const isSupported = isSupportedLanguageModel(resolvedModel);\n        if (!isSupported) {\n          throw new MastraError({\n            category: 'USER',\n            domain: 'AGENT',\n            id: 'PROCESSOR_RETURNED_UNSUPPORTED_MODEL',\n            text: `Processor ${processor.id} returned an unsupported model version ${resolvedModel.specificationVersion} in step ${stepNumber}. Only ${supportedLanguageModelSpecifications.join(', ')} models are supported in processInputStep.`,\n          });\n        }\n\n        return {\n          model: resolvedModel,\n          ...rest,\n        };\n      }\n\n      return rest;\n    }\n\n    return {};\n  }\n}\n"]}