{"version":3,"sources":["../../../src/agent/durable/constants.ts","../../../src/agent/durable/durable-stream-until-idle.ts","../../../src/agent/durable/utils/serialize-state.ts","../../../src/agent/durable/preparation.ts","../../../src/agent/durable/run-registry.ts","../../../src/agent/durable/stream-adapter.ts","../../../src/agent/durable/workflows/shared/execute-tool-calls.ts","../../../src/agent/durable/workflows/shared/schemas.ts","../../../src/agent/durable/workflows/shared/iteration-state.ts","../../../src/agent/durable/workflows/steps/background-task-check.ts","../../../src/agent/durable/utils/resolve-runtime.ts","../../../src/agent/durable/workflows/steps/llm-execution.ts","../../../src/agent/durable/workflows/steps/tool-call.ts","../../../src/agent/durable/workflows/steps/llm-mapping.ts","../../../src/agent/durable/workflows/create-durable-agentic-workflow.ts","../../../src/agent/durable/durable-agent.ts","../../../src/agent/durable/create-durable-agent.ts","../../../src/agent/durable/evented-agent.ts","../../../src/agent/durable/create-evented-agent.ts"],"names":["RequestContext","MASTRA_THREAD_ID_KEY","MASTRA_RESOURCE_ID_KEY","deepMerge","MASTRA_VERSIONS_KEY","mergeVersionOverrides","MessageList","memory","memoryConfig","ProcessorRunner","SaveQueueManager","TTLCache","safeEnqueue","safeClose","ReadableStream","MastraModelOutput","z","createStep","PUBSUB_SYMBOL","getNeedsApprovalFn","resolveModelConfig","isSupportedLanguageModel","mergeProviderOptions","getStepAvailableToolNames","execute","resolveBackgroundConfig","createBackgroundTask","params","task","createWorkflow","runScorer","createObservabilityContext","Agent","EventEmitterPubSub","InMemoryServerCache","CachingPubSub"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Constants for DurableAgent pubsub channels and event types\n */\n\n/**\n * Symbol for passing run registry to workflow steps\n * This allows steps to access the actual model/tool instances\n */\nexport const RUN_REGISTRY_SYMBOL = Symbol('run_registry');\n\n/**\n * Generate the pubsub topic name for agent streaming events\n * @param runId - The unique run identifier\n * @returns The topic name for subscribing/publishing agent stream events\n */\nexport const AGENT_STREAM_TOPIC = (runId: string): string => `agent.stream.${runId}`;\n\n/**\n * Event type constants for agent stream events\n */\nexport const AgentStreamEventTypes = {\n  /** Chunk of streaming data (text, tool call, etc.) */\n  CHUNK: 'chunk',\n  /** Start of a new step in the agentic loop */\n  STEP_START: 'step-start',\n  /** End of a step in the agentic loop */\n  STEP_FINISH: 'step-finish',\n  /** Agent execution completed successfully */\n  FINISH: 'finish',\n  /** Error occurred during execution */\n  ERROR: 'error',\n  /** Workflow suspended (e.g., for tool approval) */\n  SUSPENDED: 'suspended',\n} as const;\n\n/**\n * Default values for durable agent execution\n */\nexport const DurableAgentDefaults = {\n  /** Default maximum number of agentic loop iterations */\n  MAX_STEPS: 5,\n  /**\n   * Default tool call concurrency.\n   * NOTE: Currently unused — durable workflows run tool calls sequentially\n   * (concurrency: 1) because tool approval and suspension require sequential\n   * execution. The serialized toolCallConcurrency option is preserved in\n   * workflow input for future use when dynamic foreach concurrency is supported.\n   */\n  TOOL_CALL_CONCURRENCY: 10,\n} as const;\n\n/**\n * Step IDs used in the durable agentic workflow\n */\nexport const DurableStepIds = {\n  /** LLM execution step */\n  LLM_EXECUTION: 'durable-llm-execution',\n  /** Tool call step */\n  TOOL_CALL: 'durable-tool-call',\n  /** LLM mapping step (combines results) */\n  LLM_MAPPING: 'durable-llm-mapping',\n  /** Agentic execution workflow (one iteration) */\n  AGENTIC_EXECUTION: 'durable-agentic-execution',\n  /** Full agentic loop workflow */\n  AGENTIC_LOOP: 'durable-agentic-loop',\n  /** Scorer execution step */\n  SCORER_EXECUTION: 'durable-scorer-execution',\n} as const;\n","/**\n * Implementation of `DurableAgent.streamUntilIdle`. Mirrors the regular\n * agent's `stream-until-idle.ts` but adapted for durable execution:\n * - `DurableAgent.stream()` returns `DurableAgentStreamResult` (not `MastraModelOutput`)\n * - Each continuation starts a new durable workflow (new runId)\n * - Cleanup functions from each inner stream are tracked and called on close\n *\n * High-level flow:\n * 1. Resolve memory scope (threadId, resourceId) -- falls through to plain\n *    `agent.stream` if no memory or bgManager.\n * 2. Register this call as the active wrapper for the scope, aborting any\n *    prior wrapper.\n * 3. Run initial turn via `agent.stream(messages, { _skipBgTaskWait: true })`\n *    and pipe its `fullStream` into a combined outer stream.\n * 4. Subscribe to `bgManager.stream(...)` for background task lifecycle\n *    events. On terminal events, queue a continuation.\n * 5. `maxIdleMs` fires only between turns when nothing is happening.\n */\nimport type { BackgroundTaskManager } from '../../background-tasks/manager';\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY, RequestContext } from '../../request-context';\nimport { deepMerge } from '../../utils';\nimport type { MessageListInput } from '../message-list';\n\nimport type { DurableAgent, DurableAgentStreamOptions, DurableAgentStreamResult } from './durable-agent';\n\nexport interface DurableStreamUntilIdleDeps {\n  activeStreams: Map<string, () => void>;\n  bgManager: BackgroundTaskManager | undefined;\n}\n\nconst TERMINAL_BG_CHUNKS = new Set([\n  'background-task-completed',\n  'background-task-failed',\n  'background-task-cancelled',\n  // Suspended is non-terminal for the bg task itself (it can be resumed\n  // later via `manager.resume`), but it IS terminal-for-this-iteration of\n  // the streamUntilIdle wrapper: the agent should react to the suspend in\n  // a follow-up turn so the user is told the task is parked. Without\n  // this, the wrapper waits indefinitely for completed/failed/cancelled\n  // and the stream times out.\n  'background-task-suspended',\n]);\n\nasync function resolveScope(\n  agent: DurableAgent<any, any, any>,\n  mergedOptions: Record<string, any>,\n): Promise<{ threadId: string | undefined; resourceId: string | undefined; scopeKey: string | null } | null> {\n  const requestContext = (mergedOptions?.requestContext as RequestContext | undefined) ?? new RequestContext();\n  const memory = await agent.getMemory();\n  if (!memory) return null;\n\n  const threadIdFromContext = requestContext.get(MASTRA_THREAD_ID_KEY) as string | undefined;\n  const resourceIdFromContext = requestContext.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n  const threadIdFromArgs =\n    typeof mergedOptions?.memory?.thread === 'string'\n      ? mergedOptions.memory.thread\n      : (mergedOptions?.memory?.thread as { id?: string } | undefined)?.id;\n\n  const threadId = threadIdFromContext ?? threadIdFromArgs;\n  const resourceId = resourceIdFromContext ?? (mergedOptions?.memory?.resource as string | undefined);\n  const scopeKey = threadId || resourceId ? `${threadId ?? ''}|${resourceId ?? ''}` : null;\n  return { threadId, resourceId, scopeKey };\n}\n\nfunction buildContinuationDirective(batch: Array<Record<string, unknown>>): string {\n  const entries = batch\n    .map(chunk => {\n      const payload = (chunk as { payload?: Record<string, unknown> }).payload ?? {};\n      return {\n        toolCallId: payload.toolCallId as string | undefined,\n        toolName: payload.toolName as string | undefined,\n        isSuspended: !!payload.suspendedAt,\n      };\n    })\n    .filter(e => !!e.toolCallId);\n\n  const idList = entries\n    .filter(e => !e.isSuspended)\n    .map(e => (e.toolName ? `${e.toolCallId} (${e.toolName})` : e.toolCallId))\n    .join(', ');\n\n  // Suspend payloads are tool-controlled and may carry secrets, PII, or\n  // large opaque blobs — never serialize them into the continuation\n  // prompt. Just name the suspended tool-call IDs.\n  const suspendedIdList = entries\n    .filter(e => e.isSuspended)\n    .map(e => `${e.toolCallId} (${e.toolName})`)\n    .join(', ');\n\n  return (\n    `Background task(s) you previously dispatched have completed. ` +\n    `Process ONLY these tool-call IDs (their results are now in the conversation): ${idList}. ` +\n    `IMPORTANT: Do NOT process any tool-call IDs that were not in the list, ` +\n    `and do NOT call the same tool again — the result is already available. ` +\n    `Use these result(s) to answer the user's original question.` +\n    `IMPORTANT: The following tool-call IDs are suspended: ${suspendedIdList}. Do not attempt to resume them; let the user know they are waiting for explicit resume input.`\n  );\n}\n\nfunction buildContinuationOpts(\n  baseContinuationOpts: Record<string, any>,\n  callerContext: any[] | undefined,\n  batch: Array<Record<string, unknown>>,\n): Record<string, any> {\n  const directive = buildContinuationDirective(batch);\n  return {\n    ...baseContinuationOpts,\n    context: [...(callerContext ?? []), { role: 'user' as const, content: directive }],\n  };\n}\n\nfunction acquireStreamSlot(activeStreams: Map<string, () => void>, scopeKey: string | null, closer: () => void): void {\n  if (!scopeKey) return;\n  const priorClose = activeStreams.get(scopeKey);\n  priorClose?.();\n  activeStreams.set(scopeKey, closer);\n}\n\nfunction releaseStreamSlot(activeStreams: Map<string, () => void>, scopeKey: string | null, closer: () => void): void {\n  if (!scopeKey) return;\n  if (activeStreams.get(scopeKey) === closer) {\n    activeStreams.delete(scopeKey);\n  }\n}\n\nexport async function runDurableStreamUntilIdle<OUTPUT = undefined>(\n  agent: DurableAgent<any, any, OUTPUT>,\n  messages: MessageListInput,\n  streamOptions: (DurableAgentStreamOptions<OUTPUT> & { maxIdleMs?: number }) | undefined,\n  deps: DurableStreamUntilIdleDeps,\n): Promise<DurableAgentStreamResult<OUTPUT>> {\n  const { maxIdleMs: _maxIdleMs, ...restStreamOptions } = streamOptions ?? {};\n\n  const defaultOptions = await agent.getDefaultOptions({\n    requestContext: streamOptions?.requestContext,\n  });\n  const mergedOptions = deepMerge(\n    defaultOptions as Record<string, unknown>,\n    (restStreamOptions ?? {}) as Record<string, unknown>,\n  ) as Record<string, any>;\n\n  const scope = await resolveScope(agent, mergedOptions);\n\n  if (!deps.bgManager || !scope) {\n    return (agent as any).stream(messages, restStreamOptions as any) as Promise<DurableAgentStreamResult<OUTPUT>>;\n  }\n\n  const { threadId, resourceId, scopeKey } = scope;\n  const maxIdleMs = _maxIdleMs ?? 5 * 60_000;\n\n  const baseContinuationOpts = {\n    ...(restStreamOptions ?? {}),\n    onFinish: undefined,\n    _skipBgTaskWait: true,\n  } as Record<string, any>;\n\n  const initialStreamOpts = {\n    ...(restStreamOptions ?? {}),\n    _skipBgTaskWait: true,\n  } as DurableAgentStreamOptions<OUTPUT>;\n\n  // --- State ---\n  const runningTaskIds = new Set<string>();\n  const pendingCompletions: Array<Record<string, unknown>> = [];\n  // Keyed by `${taskId}:${chunkType}` so a task that suspends + later\n  // resumes + completes doesn't see its `background-task-completed`\n  // dropped as a \"duplicate\" of the earlier `background-task-suspended`.\n  const processedTerminalKeys = new Set<string>();\n  const innerCleanups: Array<() => void> = [];\n  let isProcessing = false;\n  let closed = false;\n  let idleTimer: ReturnType<typeof setTimeout> | undefined;\n  let outerController!: ReadableStreamDefaultController<any>;\n  const outerAbort = new AbortController();\n  let firstRunId: string | undefined;\n\n  // --- Close / idle timer ---\n  const forceClose = () => {\n    if (closed) return;\n    closed = true;\n    if (idleTimer) {\n      clearTimeout(idleTimer);\n      idleTimer = undefined;\n    }\n    outerAbort.abort();\n    try {\n      outerController.close();\n    } catch {\n      // already closed\n    }\n    for (const fn of innerCleanups) {\n      try {\n        fn();\n      } catch {\n        // ignore\n      }\n    }\n    releaseStreamSlot(deps.activeStreams, scopeKey, forceClose);\n  };\n\n  const tryClose = () => {\n    if (closed) return;\n    if (isProcessing) return;\n    if (runningTaskIds.size > 0) return;\n    if (pendingCompletions.length > 0) return;\n    forceClose();\n  };\n\n  const clearIdleTimer = () => {\n    if (idleTimer) {\n      clearTimeout(idleTimer);\n      idleTimer = undefined;\n    }\n  };\n\n  const updateIdleTimer = () => {\n    if (closed) return;\n    clearIdleTimer();\n    if (isProcessing) return;\n    if (runningTaskIds.size === 0) return;\n    if (pendingCompletions.length > 0) return;\n    idleTimer = setTimeout(forceClose, maxIdleMs);\n  };\n\n  // --- Stream plumbing ---\n  const pipeInner = async (inner: ReadableStream<any>) => {\n    const reader = inner.getReader();\n    try {\n      while (true) {\n        if (outerAbort.signal.aborted) break;\n        const { done, value } = await reader.read();\n        if (done) break;\n        clearIdleTimer();\n        try {\n          outerController.enqueue(value);\n        } catch {\n          break;\n        }\n        if (value && typeof value === 'object' && (value as any).type === 'background-task-started') {\n          const taskId = (value as any).payload?.taskId;\n          if (taskId) runningTaskIds.add(taskId);\n        }\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  };\n\n  const processIfIdle = async () => {\n    if (isProcessing || closed || pendingCompletions.length === 0) return;\n    isProcessing = true;\n    try {\n      const batch = pendingCompletions.splice(0, pendingCompletions.length);\n      for (const chunk of batch) {\n        const tid = (chunk as { payload?: { taskId?: string } }).payload?.taskId;\n        const ctype = (chunk as { type?: string }).type;\n        if (tid && ctype) processedTerminalKeys.add(`${tid}:${ctype}`);\n      }\n      const continuationOpts = buildContinuationOpts(baseContinuationOpts, restStreamOptions?.context as any[], batch);\n      const inner = await (agent as any).stream([], continuationOpts);\n      innerCleanups.push(inner.cleanup);\n      await pipeInner(inner.fullStream);\n    } catch (err) {\n      try {\n        outerController.error(err);\n      } catch {\n        // already closed\n      }\n      forceClose();\n      return;\n    } finally {\n      isProcessing = false;\n      if (pendingCompletions.length > 0) {\n        void processIfIdle();\n      } else {\n        tryClose();\n        updateIdleTimer();\n      }\n    }\n  };\n\n  // --- Setup ---\n  acquireStreamSlot(deps.activeStreams, scopeKey, forceClose);\n\n  (streamOptions as any)?.abortSignal?.addEventListener('abort', forceClose);\n\n  const combinedStream = new ReadableStream<any>({\n    start(controller) {\n      outerController = controller;\n    },\n    cancel() {\n      closed = true;\n      outerAbort.abort();\n      clearIdleTimer();\n    },\n  });\n\n  // --- Subscribe to background task events ---\n  const bgStream = deps.bgManager.stream({\n    agentId: agent.id,\n    threadId,\n    resourceId,\n    abortSignal: outerAbort.signal,\n  });\n  const bgReader = bgStream.getReader();\n  void (async () => {\n    try {\n      while (true) {\n        if (outerAbort.signal.aborted) break;\n        const { done, value } = await bgReader.read();\n        if (done) break;\n        const chunk = value as { type?: string; payload?: Record<string, unknown> };\n        if (!chunk || typeof chunk !== 'object' || typeof chunk.type !== 'string') continue;\n\n        const taskId = (chunk.payload as { taskId?: string } | undefined)?.taskId;\n\n        const terminalKey = taskId && TERMINAL_BG_CHUNKS.has(chunk.type) ? `${taskId}:${chunk.type}` : undefined;\n        if (terminalKey && processedTerminalKeys.has(terminalKey)) {\n          continue;\n        }\n\n        updateIdleTimer();\n\n        try {\n          outerController.enqueue(chunk);\n        } catch {\n          break;\n        }\n\n        if (!taskId) continue;\n        if (chunk.type === 'background-task-running') {\n          runningTaskIds.add(taskId);\n        } else if (TERMINAL_BG_CHUNKS.has(chunk.type)) {\n          runningTaskIds.delete(taskId);\n          pendingCompletions.push(chunk);\n          void processIfIdle();\n        }\n      }\n    } catch {\n      // bg stream ended\n    } finally {\n      bgReader.releaseLock();\n    }\n  })();\n\n  // --- Initial turn ---\n  isProcessing = true;\n  clearIdleTimer();\n  let first: DurableAgentStreamResult<OUTPUT>;\n  try {\n    first = await (agent as any).stream(messages, initialStreamOpts);\n  } catch (err) {\n    forceClose();\n    throw err;\n  }\n  firstRunId = first.runId;\n  innerCleanups.push(first.cleanup);\n\n  void (async () => {\n    try {\n      await pipeInner(first.fullStream);\n    } catch (err) {\n      try {\n        outerController.error(err);\n      } catch {\n        // already closed\n      }\n    }\n    isProcessing = false;\n    if (pendingCompletions.length > 0) {\n      void processIfIdle();\n    } else {\n      tryClose();\n      updateIdleTimer();\n    }\n  })();\n\n  return {\n    output: new Proxy(first.output, {\n      get(target, prop) {\n        if (prop === 'fullStream') return combinedStream;\n        const value = Reflect.get(target, prop, target);\n        return typeof value === 'function' ? value.bind(target) : value;\n      },\n    }) as any,\n    get fullStream() {\n      return combinedStream;\n    },\n    runId: firstRunId!,\n    threadId,\n    resourceId,\n    cleanup: forceClose,\n  };\n}\n","import type { JSONSchema7 } from 'json-schema';\nimport type { MastraLanguageModel } from '../../../llm/model/shared.types';\nimport type { MemoryConfig } from '../../../memory/types';\nimport type { CoreTool } from '../../../tools/types';\nimport type { MessageList } from '../../message-list';\nimport type { AgentModelManagerConfig } from '../../types';\nimport type {\n  SerializableToolMetadata,\n  SerializableModelConfig,\n  SerializableModelListEntry,\n  SerializableDurableState,\n  SerializableDurableOptions,\n  SerializableScorersConfig,\n  SerializableScorerEntry,\n  DurableAgenticWorkflowInput,\n} from '../types';\n\n/**\n * Extract serializable metadata from a CoreTool\n * This strips out the execute function and converts the schema to JSON Schema\n */\nexport function serializeToolMetadata(name: string, tool: CoreTool): SerializableToolMetadata {\n  // Extract JSON Schema from the parameters\n  let inputSchema: JSONSchema7 = { type: 'object' };\n\n  if (tool.parameters) {\n    // If it's already a JSON Schema object\n    if ('type' in tool.parameters && typeof tool.parameters.type === 'string') {\n      inputSchema = tool.parameters as JSONSchema7;\n    }\n    // If it has a jsonSchema property (zod schema converted)\n    else if ('jsonSchema' in tool.parameters) {\n      inputSchema = (tool.parameters as any).jsonSchema as JSONSchema7;\n    }\n    // If it's a Zod schema with _def (try to extract)\n    else if ('_def' in tool.parameters) {\n      // We'll need to use zodToJsonSchema at runtime if available\n      // For now, use a basic object schema\n      inputSchema = { type: 'object' };\n    }\n  }\n\n  return {\n    id: 'id' in tool && typeof tool.id === 'string' ? tool.id : name,\n    name,\n    description: tool.description,\n    inputSchema,\n    requireApproval: (tool as any).requireApproval,\n    hasSuspendSchema: (tool as any).hasSuspendSchema,\n  };\n}\n\n/**\n * Extract serializable metadata from all tools\n */\nexport function serializeToolsMetadata(tools: Record<string, CoreTool>): SerializableToolMetadata[] {\n  return Object.entries(tools).map(([name, tool]) => serializeToolMetadata(name, tool));\n}\n\n/**\n * Extract serializable model configuration\n */\nexport function serializeModelConfig(model: MastraLanguageModel): SerializableModelConfig {\n  return {\n    provider: model.provider,\n    modelId: model.modelId,\n    specificationVersion: model.specificationVersion,\n    // Store the original config string for runtime resolution (e.g., 'openai/gpt-4o')\n    originalConfig: `${model.provider}/${model.modelId}`,\n    // Note: We don't serialize model settings here - they come from execution options\n  };\n}\n\n/**\n * Extract serializable model list entry from AgentModelManagerConfig\n */\nexport function serializeModelListEntry(entry: AgentModelManagerConfig): SerializableModelListEntry {\n  const model = entry.model;\n  return {\n    id: entry.id,\n    config: {\n      provider: model.provider,\n      modelId: model.modelId,\n      specificationVersion: model.specificationVersion,\n      originalConfig: `${model.provider}/${model.modelId}`,\n      providerOptions: entry.providerOptions,\n    },\n    maxRetries: entry.maxRetries,\n    enabled: entry.enabled,\n  };\n}\n\n/**\n * Serialize an array of model configs into a model list.\n * Filters out disabled models since they shouldn't be included in durable execution.\n */\nexport function serializeModelList(models: AgentModelManagerConfig[]): SerializableModelListEntry[] {\n  return models.filter(m => m.enabled !== false).map(serializeModelListEntry);\n}\n\n/**\n * Serialize scorers configuration for durable execution.\n *\n * This extracts the scorer name (for resolution at runtime) and sampling config.\n * The actual scorer objects are resolved from Mastra at step execution time.\n *\n * @param scorers The agent's scorers configuration (from agent.scorers or options.scorers)\n * @returns Serializable scorer configuration\n */\nexport function serializeScorersConfig(\n  scorers: Record<\n    string,\n    { scorer: { name: string } | string; sampling?: { type: 'none' } | { type: 'ratio'; rate: number } }\n  >,\n): SerializableScorersConfig {\n  const result: SerializableScorersConfig = {};\n\n  for (const [key, entry] of Object.entries(scorers)) {\n    // Get the scorer name - can be a string directly or from scorer.name\n    const scorerName = typeof entry.scorer === 'string' ? entry.scorer : entry.scorer.name;\n\n    const scorerEntry: SerializableScorerEntry = {\n      scorerName,\n    };\n\n    // Include sampling if provided\n    if (entry.sampling) {\n      scorerEntry.sampling = entry.sampling;\n    }\n\n    result[key] = scorerEntry;\n  }\n\n  return result;\n}\n\n/**\n * Extract serializable state from _internal-like objects\n */\nexport function serializeDurableState(params: {\n  memoryConfig?: MemoryConfig;\n  threadId?: string;\n  resourceId?: string;\n  threadExists?: boolean;\n  savePerStep?: boolean;\n  observationalMemory?: boolean;\n}): SerializableDurableState {\n  return {\n    memoryConfig: params.memoryConfig,\n    threadId: params.threadId,\n    resourceId: params.resourceId,\n    threadExists: params.threadExists,\n    savePerStep: params.savePerStep,\n    observationalMemory: params.observationalMemory,\n  };\n}\n\n/**\n * Extract serializable options from agent execution options\n */\nexport function serializeDurableOptions(options: {\n  maxSteps?: number;\n  toolChoice?: any;\n  activeTools?: string[];\n  temperature?: number;\n  requireToolApproval?: boolean;\n  toolCallConcurrency?: number;\n  autoResumeSuspendedTools?: boolean;\n  maxProcessorRetries?: number;\n  includeRawChunks?: boolean;\n  returnScorerData?: boolean;\n  hasErrorProcessors?: boolean;\n  providerOptions?: SerializableDurableOptions['providerOptions'];\n  structuredOutput?: SerializableDurableOptions['structuredOutput'];\n  skipBgTaskWait?: boolean;\n}): SerializableDurableOptions {\n  // Normalize toolChoice to serializable form\n  let serializedToolChoice: SerializableDurableOptions['toolChoice'];\n  if (options.toolChoice) {\n    if (typeof options.toolChoice === 'string') {\n      serializedToolChoice = options.toolChoice as 'auto' | 'none' | 'required';\n    } else if (typeof options.toolChoice === 'object' && 'type' in options.toolChoice) {\n      if (options.toolChoice.type === 'tool' && 'toolName' in options.toolChoice) {\n        serializedToolChoice = {\n          type: 'tool',\n          toolName: options.toolChoice.toolName as string,\n        };\n      }\n    }\n  }\n\n  return {\n    maxSteps: options.maxSteps,\n    toolChoice: serializedToolChoice,\n    activeTools: options.activeTools,\n    temperature: options.temperature,\n    requireToolApproval: options.requireToolApproval,\n    toolCallConcurrency: options.toolCallConcurrency,\n    autoResumeSuspendedTools: options.autoResumeSuspendedTools,\n    maxProcessorRetries: options.maxProcessorRetries,\n    includeRawChunks: options.includeRawChunks,\n    returnScorerData: options.returnScorerData,\n    hasErrorProcessors: options.hasErrorProcessors,\n    providerOptions: options.providerOptions,\n    structuredOutput: options.structuredOutput,\n    skipBgTaskWait: options.skipBgTaskWait,\n  };\n}\n\n/**\n * Create the full workflow input from all components\n */\nexport function createWorkflowInput(params: {\n  runId: string;\n  agentId: string;\n  agentName?: string;\n  messageList: MessageList;\n  tools: Record<string, CoreTool>;\n  model: MastraLanguageModel;\n  modelList?: AgentModelManagerConfig[];\n  scorers?: Parameters<typeof serializeScorersConfig>[0];\n  options: Parameters<typeof serializeDurableOptions>[0];\n  state: Parameters<typeof serializeDurableState>[0];\n  messageId: string;\n}): DurableAgenticWorkflowInput {\n  return {\n    __workflowKind: 'durable-agent',\n    runId: params.runId,\n    agentId: params.agentId,\n    agentName: params.agentName,\n    messageListState: params.messageList.serialize(),\n    toolsMetadata: serializeToolsMetadata(params.tools),\n    modelConfig: serializeModelConfig(params.model),\n    modelList: params.modelList ? serializeModelList(params.modelList) : undefined,\n    scorers: params.scorers ? serializeScorersConfig(params.scorers) : undefined,\n    options: serializeDurableOptions(params.options),\n    state: serializeDurableState(params.state),\n    messageId: params.messageId,\n  };\n}\n\n/**\n * Serialize an error for workflow state\n */\nexport function serializeError(error: unknown): { name: string; message: string; stack?: string } {\n  if (error instanceof Error) {\n    return {\n      name: error.name,\n      message: error.message,\n      stack: error.stack,\n    };\n  }\n  return {\n    name: 'Error',\n    message: String(error),\n  };\n}\n\n/**\n * Serialize a Date to ISO string for workflow state\n */\nexport function serializeDate(date: Date | undefined): string | undefined {\n  return date?.toISOString();\n}\n\n/**\n * Deserialize an ISO string back to Date\n */\nexport function deserializeDate(isoString: string | undefined): Date | undefined {\n  return isoString ? new Date(isoString) : undefined;\n}\n","import type { AgentBackgroundConfig } from '../../background-tasks/types';\nimport type { MastraLanguageModel } from '../../llm/model/shared.types';\nimport type { IMastraLogger } from '../../logger';\nimport type { Mastra } from '../../mastra';\nimport type { MastraMemory } from '../../memory/memory';\nimport type { MemoryConfig, MemoryConfig as _MemoryConfig, StorageThreadType } from '../../memory/types';\nimport type { InputProcessorOrWorkflow, OutputProcessorOrWorkflow, ErrorProcessorOrWorkflow } from '../../processors';\nimport type { ProcessorState } from '../../processors/runner';\nimport { RequestContext, MASTRA_VERSIONS_KEY, mergeVersionOverrides } from '../../request-context';\nimport type { VersionOverrides } from '../../request-context';\nimport type { CoreTool } from '../../tools/types';\nimport type { Workspace } from '../../workspace';\nimport type { Agent } from '../agent';\nimport type { AgentExecutionOptions } from '../agent.types';\nimport { MessageList } from '../message-list';\nimport type { MessageListInput } from '../message-list';\nimport { SaveQueueManager } from '../save-queue';\nimport type { AgentInstructions, AgentModelManagerConfig, ToolsetsInput, ToolsInput } from '../types';\nimport type { DurableAgenticWorkflowInput, RunRegistryEntry, SerializableStructuredOutput } from './types';\nimport { createWorkflowInput } from './utils/serialize-state';\n\n/**\n * Interface for the Agent methods needed during durable preparation.\n * This provides proper typing for the public Agent methods we call.\n */\ninterface DurablePreparationAgent {\n  id: string;\n  name?: string;\n  getInstructions(opts: { requestContext: RequestContext }): AgentInstructions | Promise<AgentInstructions>;\n  getModel(opts: { requestContext: RequestContext }): MastraLanguageModel | Promise<MastraLanguageModel>;\n  getModelList(requestContext: RequestContext): Promise<AgentModelManagerConfig[] | null>;\n  getMemory(opts: { requestContext: RequestContext }): Promise<MastraMemory | undefined>;\n  getWorkspace(opts: { requestContext: RequestContext }): Promise<Workspace | undefined>;\n  listScorers(opts: {\n    requestContext: RequestContext;\n  }): Promise<Record<string, { scorer: unknown; sampling?: unknown }> | undefined>;\n  getToolsForExecution(opts: {\n    toolsets?: ToolsetsInput;\n    clientTools?: ToolsInput;\n    threadId?: string;\n    resourceId?: string;\n    runId?: string;\n    requestContext?: RequestContext;\n    memoryConfig?: MemoryConfig;\n    autoResumeSuspendedTools?: boolean;\n  }): Promise<Record<string, CoreTool>>;\n  listInputProcessors(requestContext?: RequestContext): Promise<InputProcessorOrWorkflow[]>;\n  listOutputProcessors(requestContext?: RequestContext): Promise<OutputProcessorOrWorkflow[]>;\n  listErrorProcessors(requestContext?: RequestContext): Promise<ErrorProcessorOrWorkflow[]>;\n  getBackgroundTasksConfig(): AgentBackgroundConfig | undefined;\n}\n\n/**\n * Result from the preparation phase\n */\nexport interface PreparationResult<_OUTPUT = undefined> {\n  /** Unique run identifier */\n  runId: string;\n  /** Message ID for this generation */\n  messageId: string;\n  /** Serialized workflow input */\n  workflowInput: DurableAgenticWorkflowInput;\n  /** Non-serializable state for the run registry */\n  registryEntry: RunRegistryEntry;\n  /** MessageList for callback access */\n  messageList: MessageList;\n  /** Thread ID if using memory */\n  threadId?: string;\n  /** Resource ID if using memory */\n  resourceId?: string;\n}\n\n/**\n * Options for preparation phase\n */\nexport interface PreparationOptions<OUTPUT = undefined> {\n  /** The agent instance */\n  agent: Agent<string, any, OUTPUT>;\n  /** User messages to process */\n  messages: MessageListInput;\n  /** Execution options */\n  options?: AgentExecutionOptions<OUTPUT>;\n  /** Run ID (will be generated if not provided) */\n  runId?: string;\n  /** Request context */\n  requestContext?: RequestContext;\n  /** Logger */\n  logger?: IMastraLogger;\n  /** Mastra instance (for version overrides, background tasks, etc.) */\n  mastra?: Mastra;\n}\n\n/**\n * Prepare for durable agent execution.\n *\n * This function performs the non-durable preparation phase:\n * 1. Generates run ID and message ID\n * 2. Resolves thread/memory context\n * 3. Creates MessageList with instructions and messages\n * 4. Converts tools to CoreTool format\n * 5. Gets the model configuration\n * 6. Creates serialized workflow input\n * 7. Creates run registry entry for non-serializable state\n *\n * The result includes both the serialized workflow input (for the durable\n * workflow) and the run registry entry (for non-serializable state).\n */\nexport async function prepareForDurableExecution<OUTPUT = undefined>(\n  options: PreparationOptions<OUTPUT>,\n): Promise<PreparationResult<OUTPUT>> {\n  const {\n    agent,\n    messages,\n    options: execOptions,\n    runId: providedRunId,\n    requestContext: providedRequestContext,\n    logger,\n    mastra,\n  } = options;\n\n  const typedAgent = agent as unknown as DurablePreparationAgent;\n\n  // 1. Generate IDs\n  const runId = providedRunId ?? crypto.randomUUID();\n  const messageId = crypto.randomUUID();\n\n  // 2. Get request context\n  const requestContext = providedRequestContext ?? new RequestContext();\n\n  // 3. Merge version overrides (Mastra defaults < requestContext < call-site)\n  const requestVersions = requestContext.get(MASTRA_VERSIONS_KEY) as VersionOverrides | undefined;\n  let mergedVersions = mergeVersionOverrides(mastra?.getVersionOverrides?.(), requestVersions);\n  if ((execOptions as any)?.versions) {\n    mergedVersions = mergeVersionOverrides(mergedVersions, (execOptions as any).versions);\n  }\n  if (mergedVersions) {\n    requestContext.set(MASTRA_VERSIONS_KEY, mergedVersions);\n  }\n\n  // 4. Resolve thread/memory context\n  const thread =\n    typeof execOptions?.memory?.thread === 'string' ? { id: execOptions.memory.thread } : execOptions?.memory?.thread;\n  const threadId = thread?.id;\n  const resourceId = execOptions?.memory?.resource;\n  let threadObject: StorageThreadType | undefined;\n  let threadExists = false;\n\n  // 5. Create MessageList\n  const messageList = new MessageList({\n    threadId,\n    resourceId,\n  });\n\n  // Add agent instructions\n  const instructions = await typedAgent.getInstructions({ requestContext });\n  if (instructions) {\n    if (typeof instructions === 'string') {\n      messageList.addSystem(instructions);\n    } else if (Array.isArray(instructions)) {\n      for (const inst of instructions) {\n        messageList.addSystem(inst);\n      }\n    } else {\n      messageList.addSystem(instructions);\n    }\n  }\n  const workspace = await typedAgent.getWorkspace({ requestContext });\n\n  // Durable preparation runs processInput processors below, but workspace\n  // instructions are a processInputStep concern in the non-durable path.\n  // Add them here once so durable runs get the same workspace context.\n  if (workspace) {\n    const hasFs =\n      typeof workspace.hasFilesystemConfig === 'function' ? workspace.hasFilesystemConfig() : !!workspace.filesystem;\n    const hasSb = typeof workspace.hasSandboxConfig === 'function' ? workspace.hasSandboxConfig() : !!workspace.sandbox;\n    if (hasFs || hasSb) {\n      const wsInstructions =\n        typeof workspace.getInstructionsAsync === 'function'\n          ? await workspace.getInstructionsAsync({ requestContext })\n          : workspace.getInstructions({ requestContext });\n      if (wsInstructions) {\n        messageList.addSystem({ role: 'system', content: wsInstructions });\n      }\n    }\n  }\n\n  // Add context messages if provided\n  if (execOptions?.context) {\n    messageList.add(execOptions.context, 'context');\n  }\n\n  // Add user messages\n  messageList.add(messages, 'input');\n\n  // 6. Run input processors on the message list\n  const processorStates = new Map<string, ProcessorState>();\n  let inputProcessors: InputProcessorOrWorkflow[] = [];\n  let outputProcessors: OutputProcessorOrWorkflow[] = [];\n  let errorProcessors: ErrorProcessorOrWorkflow[] = [];\n\n  try {\n    inputProcessors = await typedAgent.listInputProcessors(requestContext);\n    outputProcessors = await typedAgent.listOutputProcessors(requestContext);\n    errorProcessors = await typedAgent.listErrorProcessors(requestContext);\n  } catch (error) {\n    logger?.warn?.(`[DurableAgent] Error resolving processors: ${error}`);\n  }\n\n  // Run processInput (once, before execution) if we have any processors\n  if (inputProcessors.length > 0) {\n    try {\n      // Set MastraMemory context so processors that need it (OM, message history) can access it\n      const memory = await typedAgent.getMemory({ requestContext });\n      const memoryConfig = execOptions?.memory?.options;\n      if (memory && threadId && resourceId) {\n        const existingThread = await memory.getThreadById({ threadId });\n        threadObject =\n          existingThread ??\n          (await memory.createThread({\n            threadId,\n            metadata: thread?.metadata,\n            title: thread?.title,\n            memoryConfig,\n            resourceId,\n            saveThread: true,\n          }));\n        threadExists = true;\n        requestContext.set('MastraMemory', { thread: threadObject, resourceId, memoryConfig });\n      }\n\n      const { ProcessorRunner } = await import('../../processors/runner');\n      const runner = new ProcessorRunner({\n        inputProcessors,\n        outputProcessors,\n        errorProcessors,\n        logger: logger as any,\n        agentName: agent.name,\n        processorStates,\n      });\n      await runner.runInputProcessors(messageList, {} as any, requestContext, 0);\n    } catch (error) {\n      logger?.warn?.(`[DurableAgent] Error running input processors: ${error}`);\n    }\n  }\n\n  // 7. Convert tools to CoreTool format for execution\n  let tools: Record<string, CoreTool> = {};\n  try {\n    tools = await typedAgent.getToolsForExecution({\n      toolsets: execOptions?.toolsets,\n      clientTools: execOptions?.clientTools,\n      threadId,\n      resourceId,\n      runId,\n      requestContext,\n      memoryConfig: execOptions?.memory?.options,\n      autoResumeSuspendedTools: execOptions?.autoResumeSuspendedTools,\n    });\n  } catch (error) {\n    logger?.warn?.(`[DurableAgent] Error converting tools: ${error}`);\n  }\n\n  // 8. Get model (and model list if configured)\n  const model = await typedAgent.getModel({ requestContext });\n  if (!model) {\n    throw new Error('Agent model not available');\n  }\n\n  const modelList = await typedAgent.getModelList(requestContext);\n\n  // 8b. Get scorers configuration\n  const overrideScorers = (execOptions as any)?.scorers;\n  let scorers: Record<string, { scorer: any; sampling?: any }> | undefined;\n\n  if (overrideScorers) {\n    scorers = overrideScorers;\n  } else {\n    try {\n      const agentScorers = await typedAgent.listScorers({ requestContext });\n      if (agentScorers && Object.keys(agentScorers).length > 0) {\n        scorers = agentScorers;\n      }\n    } catch (error) {\n      logger?.debug?.(`[DurableAgent] Error getting scorers: ${error}`);\n    }\n  }\n\n  // 9. Get memory and create SaveQueueManager\n  const memory = await typedAgent.getMemory({ requestContext });\n  const memoryConfig = execOptions?.memory?.options;\n\n  const saveQueueManager = memory\n    ? new SaveQueueManager({\n        logger,\n        memory,\n      })\n    : undefined;\n\n  // 10. Serialize structured output if provided\n  let serializedStructuredOutput: SerializableStructuredOutput | undefined;\n  if (execOptions?.structuredOutput) {\n    const so = execOptions.structuredOutput as any;\n    if (so.schema) {\n      serializedStructuredOutput = {\n        jsonPromptInjection: so.jsonPromptInjection,\n        useAgent: so.useAgent,\n      };\n      // Convert Zod schema to JSON Schema if possible\n      if (typeof so.schema === 'object' && 'type' in so.schema) {\n        serializedStructuredOutput.schema = so.schema;\n      } else if (typeof so.schema === 'object' && 'jsonSchema' in so.schema) {\n        serializedStructuredOutput.schema = so.schema.jsonSchema;\n      }\n    }\n  }\n\n  // 11. Get background task config\n  const backgroundTasksConfig = typedAgent.getBackgroundTasksConfig?.();\n  const backgroundTaskManager = mastra?.backgroundTaskManager;\n\n  // 12. Resolve memory persistence flags\n  const savePerStep = execOptions?.savePerStep;\n  const observationalMemory = !!memoryConfig?.observationalMemory;\n\n  // 13. Create serialized workflow input\n  const workflowInput = createWorkflowInput({\n    runId,\n    agentId: agent.id,\n    agentName: agent.name,\n    messageList,\n    tools,\n    model,\n    modelList: modelList ?? undefined,\n    scorers,\n    options: {\n      maxSteps: execOptions?.maxSteps,\n      toolChoice: execOptions?.toolChoice as any,\n      activeTools: execOptions?.activeTools,\n      temperature: execOptions?.modelSettings?.temperature,\n      // Durable runs serialize their options, so a function-valued global approval policy\n      // can't be persisted. Degrade safely by requiring approval for every tool call.\n      requireToolApproval:\n        typeof execOptions?.requireToolApproval === 'function' ? true : execOptions?.requireToolApproval,\n      toolCallConcurrency: execOptions?.toolCallConcurrency,\n      autoResumeSuspendedTools: execOptions?.autoResumeSuspendedTools,\n      maxProcessorRetries: execOptions?.maxProcessorRetries,\n      includeRawChunks: execOptions?.includeRawChunks,\n      returnScorerData: (execOptions as any)?.returnScorerData,\n      hasErrorProcessors: errorProcessors.length > 0,\n      providerOptions: execOptions?.providerOptions,\n      structuredOutput: serializedStructuredOutput,\n      skipBgTaskWait: (execOptions as any)?._skipBgTaskWait,\n    },\n    state: {\n      memoryConfig,\n      threadId,\n      resourceId,\n      threadExists,\n      savePerStep,\n      observationalMemory,\n    },\n    messageId,\n  });\n\n  // 14. Create registry entry for non-serializable state\n  const registryEntry: RunRegistryEntry = {\n    tools,\n    saveQueueManager,\n    memory,\n    model,\n    modelList: modelList\n      ? modelList.map((entry: AgentModelManagerConfig) => ({\n          id: entry.id,\n          model: entry.model,\n          maxRetries: entry.maxRetries ?? 0,\n          enabled: entry.enabled ?? true,\n        }))\n      : undefined,\n    workspace,\n    requestContext,\n    inputProcessors,\n    outputProcessors,\n    errorProcessors,\n    processorStates,\n    backgroundTaskManager,\n    backgroundTasksConfig,\n    cleanup: () => {},\n  };\n\n  return {\n    runId,\n    messageId,\n    workflowInput,\n    registryEntry,\n    messageList,\n    threadId,\n    resourceId,\n  };\n}\n","import { TTLCache } from '@isaacs/ttlcache';\nimport type { MastraLanguageModel } from '../../llm/model/shared.types';\nimport type { CoreTool } from '../../tools/types';\nimport type { MessageList } from '../message-list';\nimport type { SaveQueueManager } from '../save-queue';\nimport type { RunRegistryEntry } from './types';\n\n/**\n * Global registry for accessing run entries from workflow steps.\n * This is necessary because workflow steps don't have direct access to\n * the DurableAgent instance's registry.\n *\n * Entries are keyed by runId (which are unique UUIDs).\n *\n * Uses TTLCache to prevent unbounded memory growth: entries auto-expire\n * after 10 minutes (refreshed on access) and the registry is hard-capped\n * at 1000 concurrent entries.\n */\nexport const globalRunRegistry = new TTLCache<string, RunRegistryEntry>({\n  max: 1000,\n  ttl: 10 * 60 * 1000,\n  updateAgeOnGet: true,\n  dispose: entry => {\n    entry.cleanup?.();\n  },\n  noDisposeOnSet: true,\n});\n\n/**\n * Registry for per-run non-serializable state.\n *\n * During durable execution, the DurableAgent needs to store non-serializable\n * objects (tools with execute functions, SaveQueueManager, etc.) that can't\n * flow through workflow state. This registry provides a way to store and\n * retrieve these objects keyed by runId.\n *\n * The registry is scoped to a single DurableAgent instance and entries are\n * cleaned up when a run completes.\n */\nexport class RunRegistry {\n  #entries = new Map<string, RunRegistryEntry>();\n\n  /**\n   * Register non-serializable state for a run\n   * @param runId - The unique run identifier\n   * @param entry - The registry entry containing tools, saveQueueManager, etc.\n   */\n  register(runId: string, entry: RunRegistryEntry): void {\n    // Clean up any existing entry first\n    this.cleanup(runId);\n    this.#entries.set(runId, entry);\n  }\n\n  /**\n   * Get the registry entry for a run\n   * @param runId - The unique run identifier\n   * @returns The registry entry or undefined if not found\n   */\n  get(runId: string): RunRegistryEntry | undefined {\n    return this.#entries.get(runId);\n  }\n\n  /**\n   * Get tools for a specific run\n   * @param runId - The unique run identifier\n   * @returns The tools record or an empty object if not found\n   */\n  getTools(runId: string): Record<string, CoreTool> {\n    return this.#entries.get(runId)?.tools ?? {};\n  }\n\n  /**\n   * Get SaveQueueManager for a specific run\n   * @param runId - The unique run identifier\n   * @returns The SaveQueueManager or undefined if not found\n   */\n  getSaveQueueManager(runId: string): SaveQueueManager | undefined {\n    return this.#entries.get(runId)?.saveQueueManager;\n  }\n\n  /**\n   * Get the language model for a specific run\n   * @param runId - The unique run identifier\n   * @returns The MastraLanguageModel or undefined if not found\n   */\n  getModel(runId: string): MastraLanguageModel | undefined {\n    return this.#entries.get(runId)?.model;\n  }\n\n  /**\n   * Check if a run is registered\n   * @param runId - The unique run identifier\n   * @returns True if the run is registered\n   */\n  has(runId: string): boolean {\n    return this.#entries.has(runId);\n  }\n\n  /**\n   * Cleanup and remove a run's entry from the registry\n   * @param runId - The unique run identifier\n   */\n  cleanup(runId: string): void {\n    const entry = this.#entries.get(runId);\n    if (entry) {\n      // Call cleanup function if provided\n      entry.cleanup?.();\n      this.#entries.delete(runId);\n    }\n  }\n\n  /**\n   * Get the number of active runs in the registry\n   */\n  get size(): number {\n    return this.#entries.size;\n  }\n\n  /**\n   * Get all active run IDs\n   */\n  get runIds(): string[] {\n    return Array.from(this.#entries.keys());\n  }\n\n  /**\n   * Clear all entries from the registry\n   * Calls cleanup on each entry before removing\n   */\n  clear(): void {\n    for (const runId of this.#entries.keys()) {\n      this.cleanup(runId);\n    }\n  }\n}\n\n/**\n * Extended registry entry that also stores the MessageList reference.\n * This is useful for accessing message state outside of workflow steps\n * (e.g., for callbacks that need to read messages).\n */\nexport interface ExtendedRunRegistryEntry extends RunRegistryEntry {\n  /** MessageList reference for callback access */\n  messageList?: MessageList;\n  /** Thread ID for memory */\n  threadId?: string;\n  /** Resource ID for memory */\n  resourceId?: string;\n}\n\n/**\n * Extended run registry that also stores MessageList references and memory info\n */\nexport class ExtendedRunRegistry extends RunRegistry {\n  #messageLists = new Map<string, MessageList>();\n  #memoryInfo = new Map<string, { threadId?: string; resourceId?: string }>();\n\n  /**\n   * Register non-serializable state for a run including MessageList\n   */\n  registerWithMessageList(\n    runId: string,\n    entry: RunRegistryEntry,\n    messageList: MessageList,\n    memoryInfo?: { threadId?: string; resourceId?: string },\n  ): void {\n    this.register(runId, entry);\n    this.#messageLists.set(runId, messageList);\n    if (memoryInfo) {\n      this.#memoryInfo.set(runId, memoryInfo);\n    }\n  }\n\n  /**\n   * Get MessageList for a specific run\n   */\n  getMessageList(runId: string): MessageList | undefined {\n    return this.#messageLists.get(runId);\n  }\n\n  /**\n   * Get memory info for a specific run\n   */\n  getMemoryInfo(runId: string): { threadId?: string; resourceId?: string } | undefined {\n    return this.#memoryInfo.get(runId);\n  }\n\n  /**\n   * Override cleanup to also remove MessageList and memory info\n   */\n  override cleanup(runId: string): void {\n    super.cleanup(runId);\n    this.#messageLists.delete(runId);\n    this.#memoryInfo.delete(runId);\n  }\n\n  /**\n   * Override clear to also clear MessageLists and memory info\n   */\n  override clear(): void {\n    super.clear();\n    this.#messageLists.clear();\n    this.#memoryInfo.clear();\n  }\n}\n","import { ReadableStream } from 'node:stream/web';\nimport type { PubSub } from '../../events/pubsub';\nimport type { Event } from '../../events/types';\nimport type { IMastraLogger } from '../../logger';\nimport { safeClose, safeEnqueue } from '../../stream/base';\nimport { MastraModelOutput } from '../../stream/base/output';\nimport type { ChunkType } from '../../stream/types';\nimport { MessageList } from '../message-list';\nimport { AGENT_STREAM_TOPIC, AgentStreamEventTypes } from './constants';\nimport type {\n  AgentStreamEvent,\n  AgentChunkEventData,\n  AgentStepFinishEventData,\n  AgentFinishEventData,\n  AgentErrorEventData,\n  AgentSuspendedEventData,\n} from './types';\n\n/**\n * Options for creating a durable agent stream\n */\nexport interface DurableAgentStreamOptions<OUTPUT = undefined> {\n  /** Pubsub instance to subscribe to */\n  pubsub: PubSub;\n  /** Run identifier */\n  runId: string;\n  /** Message ID for this execution */\n  messageId: string;\n  /** Model information for the output */\n  model: {\n    modelId: string | undefined;\n    provider: string | undefined;\n    version: 'v2' | 'v3';\n  };\n  /** Thread ID for memory */\n  threadId?: string;\n  /** Resource ID for memory */\n  resourceId?: string;\n  /**\n   * Start replay from this index (0-based).\n   * If undefined, uses full replay (subscribeWithReplay).\n   * If specified, uses efficient indexed replay (subscribeFromOffset).\n   */\n  offset?: number;\n  /** Callback when chunk is received */\n  onChunk?: (chunk: ChunkType<OUTPUT>) => void | Promise<void>;\n  /** Callback when step finishes */\n  onStepFinish?: (result: AgentStepFinishEventData) => void | Promise<void>;\n  /** Callback when execution finishes */\n  onFinish?: (result: AgentFinishEventData) => void | Promise<void>;\n  /** Callback on error */\n  onError?: (error: Error) => void | Promise<void>;\n  /** Callback when workflow suspends */\n  onSuspended?: (data: AgentSuspendedEventData) => void | Promise<void>;\n  /** Optional logger for structured logging */\n  logger?: IMastraLogger;\n}\n\n/**\n * Result from creating a durable agent stream\n */\nexport interface DurableAgentStreamResult<OUTPUT = undefined> {\n  /** The MastraModelOutput that streams from pubsub events */\n  output: MastraModelOutput<OUTPUT>;\n  /** Cleanup function to unsubscribe from pubsub */\n  cleanup: () => void;\n  /** Promise that resolves when subscription is established */\n  ready: Promise<void>;\n}\n\n/**\n * Create a MastraModelOutput that streams from pubsub events.\n *\n * This adapter subscribes to the agent stream pubsub channel and converts\n * pubsub events into a ReadableStream that MastraModelOutput can consume.\n * Callbacks are invoked as events arrive.\n */\nexport function createDurableAgentStream<OUTPUT = undefined>(\n  options: DurableAgentStreamOptions<OUTPUT>,\n): DurableAgentStreamResult<OUTPUT> {\n  const {\n    pubsub,\n    runId,\n    messageId,\n    model,\n    threadId,\n    resourceId,\n    offset,\n    onChunk,\n    onStepFinish,\n    onFinish,\n    onError,\n    onSuspended,\n    logger,\n  } = options;\n\n  // Helper to log errors (uses logger if available, falls back to console)\n  const logError = (message: string, error: unknown) => {\n    if (logger) {\n      logger.error(message, error);\n    } else {\n      console.error(message, error);\n    }\n  };\n\n  // Create a message list for the output\n  const messageList = new MessageList({\n    threadId,\n    resourceId,\n  });\n\n  // Track subscription state\n  let isSubscribed = false;\n  let cancelled = false;\n  let controller: ReadableStreamDefaultController<ChunkType<OUTPUT>> | null = null;\n\n  // Promise that resolves when subscription is established\n  let resolveReady: () => void;\n  let rejectReady: (error: Error) => void;\n  const ready = new Promise<void>((resolve, reject) => {\n    resolveReady = resolve;\n    rejectReady = reject;\n  });\n\n  // Handler for pubsub events.\n  //\n  // All `controller.enqueue` / `controller.close` / `controller.error` calls\n  // are wrapped in safe* helpers because pubsub events can arrive AFTER the\n  // stream has already been closed (e.g. a stale background-task lifecycle\n  // event published after the agent's FINISH chunk closed the controller).\n  // Without the guards, those late events surface as\n  // `TypeError: Invalid state: Controller is already closed` from the\n  // controller, which the outer try/catch logs but which floods the\n  // console and (in test runs) causes timeouts as event handlers retry.\n  const handleEvent = async (event: Event) => {\n    if (!controller) return;\n\n    // Parse the event data as AgentStreamEvent\n    const streamEvent = event as unknown as AgentStreamEvent;\n\n    try {\n      switch (streamEvent.type) {\n        case AgentStreamEventTypes.CHUNK: {\n          const chunk = streamEvent.data as AgentChunkEventData;\n          safeEnqueue(controller, chunk as ChunkType<OUTPUT>);\n          await onChunk?.(chunk as ChunkType<OUTPUT>);\n          break;\n        }\n\n        case AgentStreamEventTypes.STEP_START: {\n          // Step start - enqueue if it's a chunk type\n          const chunk = streamEvent.data as ChunkType<OUTPUT>;\n          if (chunk && 'type' in chunk) {\n            safeEnqueue(controller, chunk);\n          }\n          break;\n        }\n\n        case AgentStreamEventTypes.STEP_FINISH: {\n          const data = streamEvent.data as AgentStepFinishEventData;\n          await onStepFinish?.(data);\n          break;\n        }\n\n        case AgentStreamEventTypes.FINISH: {\n          const data = streamEvent.data as AgentFinishEventData;\n          // Enqueue finish chunk and close stream even if callback throws\n          const finishChunk = {\n            type: 'finish' as const,\n            payload: {\n              output: data.output,\n              stepResult: data.stepResult,\n            },\n          } as ChunkType<OUTPUT>;\n          safeEnqueue(controller, finishChunk);\n          safeClose(controller);\n          // Call callback after closing stream (errors don't prevent closure)\n          try {\n            await onFinish?.(data);\n          } catch (callbackError) {\n            logError(`[DurableAgentStream] onFinish callback error:`, callbackError);\n          }\n          break;\n        }\n\n        case AgentStreamEventTypes.ERROR: {\n          const data = streamEvent.data as AgentErrorEventData;\n          const error = new Error(data.error.message);\n          error.name = data.error.name;\n          if (data.error.stack) {\n            error.stack = data.error.stack;\n          }\n          // Close stream with error first, then call callback. Wrapped in\n          // try/catch because `controller.error` throws if the controller\n          // has already been closed/errored by an earlier event.\n          try {\n            controller.error(error);\n          } catch {\n            // Stream already closed/errored — drop silently.\n          }\n          try {\n            await onError?.(error);\n          } catch (callbackError) {\n            logError(`[DurableAgentStream] onError callback error:`, callbackError);\n          }\n          break;\n        }\n\n        case AgentStreamEventTypes.SUSPENDED: {\n          const data = streamEvent.data as AgentSuspendedEventData;\n          await onSuspended?.(data);\n          // Don't close the stream on suspend - it can be resumed\n          break;\n        }\n\n        default:\n          // Unknown event type - ignore\n          break;\n      }\n    } catch (error) {\n      // Intentional catch-and-continue: callback errors (onChunk, onStepFinish,\n      // onSuspended) must not kill the stream. onFinish/onError have their own\n      // inner try/catch and close/error the stream before invoking callbacks,\n      // so they are not affected by this outer handler.\n      logError(`[DurableAgentStream] Error handling event ${streamEvent.type}:`, error);\n    }\n  };\n\n  // Create the readable stream\n  const stream = new ReadableStream<ChunkType<OUTPUT>>({\n    start(ctrl) {\n      controller = ctrl;\n\n      // Subscribe to pubsub with replay support for resumable streams\n      // If offset is specified, use indexed replay for efficiency\n      // Otherwise use full replay\n      const topic = AGENT_STREAM_TOPIC(runId);\n      const subscribePromise =\n        offset !== undefined\n          ? pubsub.subscribeFromOffset(topic, offset, handleEvent)\n          : pubsub.subscribeWithReplay(topic, handleEvent);\n\n      subscribePromise\n        .then(() => {\n          if (cancelled) {\n            // cleanup() was called before subscribe resolved — unsubscribe now\n            void pubsub.unsubscribe(topic, handleEvent).catch(error => {\n              logError(`[DurableAgentStream] Failed to unsubscribe from ${topic}:`, error);\n            });\n            resolveReady();\n            return;\n          }\n          isSubscribed = true;\n          resolveReady();\n        })\n        .catch(error => {\n          logError(`[DurableAgentStream] Failed to subscribe to ${topic}:`, error);\n          rejectReady(error);\n          ctrl.error(error);\n        });\n    },\n    cancel() {\n      cleanup();\n    },\n  });\n\n  // Cleanup function - intentionally fire-and-forget for unsubscribe.\n  // Sets cancelled=true so the subscribe .then() handler will unsubscribe\n  // if cleanup runs before the subscription promise resolves.\n  const cleanup = () => {\n    cancelled = true;\n    if (isSubscribed) {\n      isSubscribed = false;\n      const topic = AGENT_STREAM_TOPIC(runId);\n      void pubsub.unsubscribe(topic, handleEvent).catch(error => {\n        logError(`[DurableAgentStream] Failed to unsubscribe from ${topic}:`, error);\n      });\n    }\n    controller = null;\n  };\n\n  // Create the MastraModelOutput\n  const output = new MastraModelOutput<OUTPUT>({\n    model,\n    stream,\n    messageList,\n    messageId,\n    options: {\n      runId,\n    },\n  });\n\n  return {\n    output,\n    cleanup,\n    ready,\n  };\n}\n\n/**\n * Helper to emit a chunk event to pubsub\n */\nexport async function emitChunkEvent<OUTPUT = undefined>(\n  pubsub: PubSub,\n  runId: string,\n  chunk: ChunkType<OUTPUT>,\n): Promise<void> {\n  const topic = AGENT_STREAM_TOPIC(runId);\n  await pubsub.publish(topic, {\n    type: AgentStreamEventTypes.CHUNK,\n    runId,\n    data: chunk,\n  });\n}\n\n/**\n * Helper to emit a step start event to pubsub\n */\nexport async function emitStepStartEvent(\n  pubsub: PubSub,\n  runId: string,\n  data: { stepId?: string; request?: unknown; warnings?: unknown[] },\n): Promise<void> {\n  await pubsub.publish(AGENT_STREAM_TOPIC(runId), {\n    type: AgentStreamEventTypes.STEP_START,\n    runId,\n    data,\n  });\n}\n\n/**\n * Helper to emit a step finish event to pubsub\n */\nexport async function emitStepFinishEvent(\n  pubsub: PubSub,\n  runId: string,\n  data: AgentStepFinishEventData,\n): Promise<void> {\n  await pubsub.publish(AGENT_STREAM_TOPIC(runId), {\n    type: AgentStreamEventTypes.STEP_FINISH,\n    runId,\n    data,\n  });\n}\n\n/**\n * Helper to emit a finish event to pubsub\n */\nexport async function emitFinishEvent(pubsub: PubSub, runId: string, data: AgentFinishEventData): Promise<void> {\n  await pubsub.publish(AGENT_STREAM_TOPIC(runId), {\n    type: AgentStreamEventTypes.FINISH,\n    runId,\n    data,\n  });\n}\n\n/**\n * Helper to emit an error event to pubsub\n */\nexport async function emitErrorEvent(pubsub: PubSub, runId: string, error: Error): Promise<void> {\n  await pubsub.publish(AGENT_STREAM_TOPIC(runId), {\n    type: AgentStreamEventTypes.ERROR,\n    runId,\n    data: {\n      error: {\n        name: error.name,\n        message: error.message,\n        // stack intentionally omitted — avoid leaking internals through external pubsub\n      },\n    },\n  });\n}\n\n/**\n * Helper to emit a suspended event to pubsub\n */\nexport async function emitSuspendedEvent(pubsub: PubSub, runId: string, data: AgentSuspendedEventData): Promise<void> {\n  await pubsub.publish(AGENT_STREAM_TOPIC(runId), {\n    type: AgentStreamEventTypes.SUSPENDED,\n    runId,\n    data,\n  });\n}\n","import type { RequestContext } from '../../../../request-context';\nimport type { Workspace } from '../../../../workspace';\nimport type { DurableToolCallInput, DurableToolCallOutput } from '../../types';\n\n/**\n * Context for tool execution\n */\nexport interface ToolExecutionContext {\n  /** Tool calls from the LLM output */\n  toolCalls: DurableToolCallInput[];\n  /** Resolved tools with execute functions */\n  tools: Record<string, any>;\n  /** Run identifier */\n  runId: string;\n  /** Agent identifier */\n  agentId: string;\n  /** Message identifier */\n  messageId: string;\n  /** Serializable state */\n  state: any;\n  /** Workspace for file/sandbox operations */\n  workspace?: Workspace;\n  /** Request context for auth data, feature flags, etc. */\n  requestContext?: RequestContext;\n\n  /**\n   * Optional hooks for observability/streaming.\n   * All hooks can be sync or async.\n   */\n\n  /** Called before starting tool execution (for span creation) */\n  onToolStart?: (toolCall: DurableToolCallInput) => void | Promise<void>;\n  /** Called after successful tool execution (for span close, pubsub emit) */\n  onToolResult?: (toolCall: DurableToolCallInput, result: unknown) => void | Promise<void>;\n  /** Called on tool execution error (for span error, pubsub emit) */\n  onToolError?: (toolCall: DurableToolCallInput, error: ToolExecutionError) => void | Promise<void>;\n}\n\n/**\n * Error structure for tool execution failures\n */\nexport interface ToolExecutionError {\n  name: string;\n  message: string;\n  stack?: string;\n}\n\n/**\n * Execute tool calls durably with optional hooks for observability and streaming.\n *\n * This is the shared implementation used by:\n * - Core DurableAgent workflow\n * - Inngest durable agent workflow (with observability hooks)\n * - Evented durable agent workflow\n *\n * @param ctx - Tool execution context with tool calls, resolved tools, and optional hooks\n * @returns Array of tool call outputs with results or errors\n */\nexport async function executeDurableToolCalls(ctx: ToolExecutionContext): Promise<DurableToolCallOutput[]> {\n  const toolResults: DurableToolCallOutput[] = [];\n\n  for (const toolCall of ctx.toolCalls) {\n    // Handle provider-executed tools (e.g., OpenAI function calling with parallel_tool_calls)\n    if (toolCall.providerExecuted && toolCall.output !== undefined) {\n      toolResults.push({\n        ...toolCall,\n        result: toolCall.output,\n      });\n      continue;\n    }\n\n    // Resolve the tool from the tools record\n    const tool = ctx.tools[toolCall.toolName];\n\n    if (!tool) {\n      const error: ToolExecutionError = {\n        name: 'ToolNotFoundError',\n        message: `Tool ${toolCall.toolName} not found`,\n      };\n      await ctx.onToolError?.(toolCall, error);\n      toolResults.push({\n        ...toolCall,\n        error,\n      });\n      continue;\n    }\n\n    // Notify start of tool execution (for observability)\n    await ctx.onToolStart?.(toolCall);\n\n    // Execute the tool\n    try {\n      if (tool.execute) {\n        const result = await tool.execute(toolCall.args, {\n          toolCallId: toolCall.toolCallId,\n          messages: [],\n          workspace: ctx.workspace,\n          requestContext: ctx.requestContext,\n        });\n        await ctx.onToolResult?.(toolCall, result);\n        toolResults.push({\n          ...toolCall,\n          result,\n        });\n      } else {\n        // Tool has no execute function - return undefined result\n        await ctx.onToolResult?.(toolCall, undefined);\n        toolResults.push({\n          ...toolCall,\n          result: undefined,\n        });\n      }\n    } catch (error) {\n      const toolError: ToolExecutionError = {\n        name: 'ToolExecutionError',\n        message: error instanceof Error ? error.message : String(error),\n        stack: error instanceof Error ? error.stack : undefined,\n      };\n      await ctx.onToolError?.(toolCall, toolError);\n      toolResults.push({\n        ...toolCall,\n        error: toolError,\n      });\n    }\n  }\n\n  return toolResults;\n}\n","import { z } from 'zod';\n\n/**\n * Shared Zod schemas for durable agentic workflows.\n *\n * These schemas are used by:\n * - Core DurableAgent workflow\n * - Inngest durable agent workflow\n * - Evented durable agent workflow (future)\n */\n\n/**\n * Schema for model configuration\n */\nexport const modelConfigSchema = z.object({\n  provider: z.string(),\n  modelId: z.string(),\n  specificationVersion: z.string().optional(),\n  settings: z.record(z.string(), z.any()).optional(),\n  providerOptions: z.record(z.string(), z.any()).optional(),\n});\n\n/**\n * Schema for model list entry (fallback support)\n */\nexport const modelListEntrySchema = z.object({\n  id: z.string(),\n  config: z.object({\n    provider: z.string(),\n    modelId: z.string(),\n    specificationVersion: z.string().optional(),\n    originalConfig: z.union([z.string(), z.record(z.string(), z.any())]).optional(),\n    providerOptions: z.record(z.string(), z.any()).optional(),\n  }),\n  maxRetries: z.number(),\n  enabled: z.boolean(),\n});\n\n/**\n * Schema for accumulated usage across iterations\n */\nexport const accumulatedUsageSchema = z.object({\n  inputTokens: z.number(),\n  outputTokens: z.number(),\n  totalTokens: z.number(),\n});\n\n/**\n * Schema for output from the durable agentic workflow\n */\nexport const durableAgenticOutputSchema = z.object({\n  messageListState: z.any(),\n  messageId: z.string(),\n  stepResult: z.any(),\n  output: z.object({\n    text: z.string().optional(),\n    usage: z.any(),\n    steps: z.array(z.any()),\n  }),\n  state: z.any(),\n});\n\n/**\n * Base schema for durable agentic workflow input.\n * Implementations can extend this with additional fields.\n */\nexport const baseDurableAgenticInputSchema = z.object({\n  runId: z.string(),\n  agentId: z.string(),\n  agentName: z.string().optional(),\n  messageListState: z.any(),\n  toolsMetadata: z.array(z.any()),\n  modelConfig: modelConfigSchema,\n  options: z.any(),\n  state: z.any(),\n  messageId: z.string(),\n});\n\n/**\n * Base schema for iteration state.\n * Implementations can extend this with additional fields.\n */\nexport const baseIterationStateSchema = z.object({\n  // Original input fields\n  runId: z.string(),\n  agentId: z.string(),\n  agentName: z.string().optional(),\n  messageListState: z.any(),\n  toolsMetadata: z.array(z.any()),\n  modelConfig: z.any(),\n  options: z.any(),\n  state: z.any(),\n  messageId: z.string(),\n  // Iteration tracking\n  iterationCount: z.number(),\n  accumulatedSteps: z.array(z.any()),\n  accumulatedUsage: accumulatedUsageSchema,\n  // Last step result for continuation check\n  lastStepResult: z.any().optional(),\n  // Background task tracking\n  backgroundTaskPending: z.boolean().optional(),\n});\n\n/**\n * Type for the base iteration state\n */\nexport type BaseIterationState = z.infer<typeof baseIterationStateSchema>;\n\n/**\n * Type for accumulated usage\n */\nexport type AccumulatedUsage = z.infer<typeof accumulatedUsageSchema>;\n","import type { DurableAgenticExecutionOutput } from '../../types';\nimport type { AccumulatedUsage, BaseIterationState } from './schemas';\n\n/**\n * Input for creating iteration state update\n */\nexport interface IterationStateUpdateInput {\n  /** Current iteration state */\n  currentState: BaseIterationState;\n  /** Output from the current iteration's execution */\n  executionOutput: DurableAgenticExecutionOutput;\n}\n\n/**\n * Step record for tracking iteration history\n */\nexport interface StepRecord {\n  text?: string;\n  toolCalls?: unknown[];\n  toolResults?: unknown[];\n  usage?: unknown;\n  finishReason?: string;\n}\n\n/**\n * Calculate accumulated usage from current state and new execution output.\n */\nexport function calculateAccumulatedUsage(\n  currentUsage: AccumulatedUsage,\n  executionUsage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number },\n): AccumulatedUsage {\n  return {\n    inputTokens: currentUsage.inputTokens + (executionUsage?.inputTokens || 0),\n    outputTokens: currentUsage.outputTokens + (executionUsage?.outputTokens || 0),\n    totalTokens: currentUsage.totalTokens + (executionUsage?.totalTokens || 0),\n  };\n}\n\n/**\n * Build a step record from execution output.\n */\nexport function buildStepRecord(executionOutput: DurableAgenticExecutionOutput): StepRecord {\n  return {\n    text: executionOutput.output.text,\n    toolCalls: executionOutput.output.toolCalls,\n    toolResults: executionOutput.toolResults,\n    usage: executionOutput.output.usage,\n    finishReason: executionOutput.stepResult.reason,\n  };\n}\n\n/**\n * Create the base iteration state update.\n *\n * This returns the common fields for iteration state updates.\n * Implementations can extend this with their specific fields.\n *\n * @example\n * ```typescript\n * const baseUpdate = createBaseIterationStateUpdate({\n *   currentState: initData,\n *   executionOutput,\n * });\n *\n * // Core extends with modelList\n * const coreState = { ...baseUpdate, modelList: initData.modelList };\n *\n * // Inngest extends with observability\n * const inngestState = {\n *   ...baseUpdate,\n *   agentSpanData: initData.agentSpanData,\n *   modelSpanData: initData.modelSpanData,\n *   stepIndex: initData.stepIndex + 1,\n * };\n * ```\n */\nexport function createBaseIterationStateUpdate(input: IterationStateUpdateInput): BaseIterationState {\n  const { currentState, executionOutput } = input;\n\n  const newUsage = calculateAccumulatedUsage(currentState.accumulatedUsage, executionOutput.output.usage);\n  const stepRecord = buildStepRecord(executionOutput);\n\n  return {\n    runId: currentState.runId,\n    agentId: currentState.agentId,\n    agentName: currentState.agentName,\n    messageListState: executionOutput.messageListState,\n    toolsMetadata: currentState.toolsMetadata,\n    modelConfig: currentState.modelConfig,\n    options: currentState.options,\n    state: executionOutput.state,\n    messageId: executionOutput.messageId,\n    iterationCount: currentState.iterationCount + 1,\n    accumulatedSteps: [...currentState.accumulatedSteps, stepRecord],\n    accumulatedUsage: newUsage,\n    lastStepResult: executionOutput.stepResult,\n    backgroundTaskPending: executionOutput.backgroundTaskPending,\n  };\n}\n","import { z } from 'zod';\nimport type { PubSub } from '../../../../events/pubsub';\nimport { ChunkFrom } from '../../../../stream/types';\nimport { createStep } from '../../../../workflows';\nimport { PUBSUB_SYMBOL } from '../../../../workflows/constants';\nimport { DurableStepIds } from '../../constants';\nimport { globalRunRegistry } from '../../run-registry';\nimport { emitChunkEvent } from '../../stream-adapter';\n\nconst BG_CHECK_STEP_ID = `${DurableStepIds.AGENTIC_EXECUTION}-bg-task-check`;\n\n/**\n * The background task check step accepts the output of llmMappingStep\n * and passes it through, adding backgroundTaskPending if tasks are running.\n */\nconst bgCheckInputSchema = z.any();\nconst bgCheckOutputSchema = z.any();\n\n/**\n * Create a durable background task check step.\n *\n * Mirrors the regular agent's backgroundTaskCheckStep pattern:\n * - After tool calls complete, checks if any background tasks are still running\n * - First invocation (retryCount === 0): returns immediately with backgroundTaskPending=true\n *   so the loop can re-enter without blocking\n * - Subsequent invocations: waits with timeout for the next task to complete,\n *   then sets isContinued=true so the LLM processes the result\n * - If no running tasks: passes through unchanged\n */\nexport function createDurableBackgroundTaskCheckStep() {\n  return createStep({\n    id: BG_CHECK_STEP_ID,\n    inputSchema: bgCheckInputSchema,\n    outputSchema: bgCheckOutputSchema,\n    execute: async params => {\n      const { inputData, retryCount, getInitData } = params;\n      const pubsub = (params as any)[PUBSUB_SYMBOL] as PubSub | undefined;\n      const typedInput = inputData as Record<string, any>;\n\n      const initData = getInitData<{\n        runId: string;\n        agentId: string;\n        options?: { skipBgTaskWait?: boolean };\n        state?: { threadId?: string; resourceId?: string };\n      }>();\n      const { runId, agentId } = initData;\n\n      const registryEntry = globalRunRegistry.get(runId);\n      const bgManager = registryEntry?.backgroundTaskManager;\n\n      if (!bgManager) {\n        return typedInput;\n      }\n\n      const runningResult = await bgManager.listTasks({\n        agentId,\n        status: 'running',\n        threadId: initData.state?.threadId,\n        resourceId: initData.state?.resourceId,\n      });\n      const runningTasks = runningResult?.tasks;\n\n      if (!runningTasks || runningTasks.length === 0) {\n        return typedInput;\n      }\n\n      // When the outer caller drives continuation externally (e.g. streamUntilIdle),\n      // skip the in-loop wait. We still mark pending so downstream knows.\n      if (initData.options?.skipBgTaskWait) {\n        return { ...typedInput, backgroundTaskPending: true };\n      }\n\n      const taskIds = runningTasks.map(task => task.id);\n\n      const bgConfig = registryEntry?.backgroundTasksConfig;\n      const managerConfig = bgManager.config;\n      const waitTimeoutMs = bgConfig?.waitTimeoutMs ?? managerConfig?.waitTimeoutMs;\n\n      // First invocation: signal pending but don't block\n      if (retryCount === 0 || !waitTimeoutMs) {\n        return { ...typedInput, backgroundTaskPending: true };\n      }\n\n      // Emit initial progress chunk\n      if (pubsub) {\n        try {\n          await emitChunkEvent(pubsub, runId, {\n            type: 'background-task-progress' as any,\n            runId,\n            from: ChunkFrom.AGENT,\n            payload: { taskIds, runningCount: runningTasks.length, elapsedMs: 0 },\n          });\n        } catch {\n          // PubSub may be closed\n        }\n      }\n\n      // Wait for the next task to complete (or until timeout)\n      try {\n        await bgManager.waitForNextTask(taskIds, {\n          timeoutMs: waitTimeoutMs,\n          onProgress: (elapsedMs: number) => {\n            if (!pubsub) return;\n            void emitChunkEvent(pubsub, runId, {\n              type: 'background-task-progress' as any,\n              runId,\n              from: ChunkFrom.AGENT,\n              payload: { taskIds, runningCount: runningTasks.length, elapsedMs },\n            }).catch(() => {});\n          },\n          progressIntervalMs: 3000,\n        });\n      } catch {\n        // Timeout elapsed — no task completed. Return unchanged so the loop can end.\n        // The tasks keep running in the background — results are picked up on\n        // the next user message or stream.\n        return typedInput;\n      }\n\n      // A task completed — force the loop to continue so the LLM processes the result\n      if (typedInput.stepResult) {\n        return {\n          ...typedInput,\n          backgroundTaskPending: true,\n          stepResult: { ...typedInput.stepResult, isContinued: true },\n        };\n      }\n\n      return { ...typedInput, backgroundTaskPending: true };\n    },\n  });\n}\n","import type { ToolSet } from '@internal/ai-sdk-v5';\nimport { resolveModelConfig } from '../../../llm/model/resolve-model';\nimport type { MastraLanguageModel } from '../../../llm/model/shared.types';\nimport type { StreamInternal } from '../../../loop/types';\nimport type { Mastra } from '../../../mastra';\nimport type { MastraMemory } from '../../../memory/memory';\nimport { RequestContext } from '../../../request-context';\nimport { getNeedsApprovalFn } from '../../../tools/toolchecks';\nimport type { CoreTool } from '../../../tools/types';\nimport type { Workspace } from '../../../workspace';\nimport { MessageList } from '../../message-list';\nimport { SaveQueueManager } from '../../save-queue';\nimport { globalRunRegistry } from '../run-registry';\nimport type {\n  SerializableDurableState,\n  SerializableModelConfig,\n  SerializableModelListEntry,\n  SerializableToolMetadata,\n  DurableAgenticWorkflowInput,\n  RegistryModelListEntry,\n} from '../types';\n\n/**\n * Runtime dependencies that need to be resolved at step execution time.\n * These cannot be serialized and must be recreated from available context.\n */\nexport interface ResolvedRuntimeDependencies {\n  /** Reconstructed _internal object for compatibility with existing code */\n  _internal: StreamInternal;\n  /** Resolved tools with execute functions */\n  tools: Record<string, CoreTool>;\n  /** Resolved language model */\n  model: MastraLanguageModel;\n  /** Resolved model list for fallback support (actual model instances) */\n  modelList?: RegistryModelListEntry[];\n  /** Deserialized MessageList */\n  messageList: MessageList;\n  /** Memory instance (if available) */\n  memory?: MastraMemory;\n  /** SaveQueueManager for message persistence */\n  saveQueueManager?: SaveQueueManager;\n  /** Workspace for file/sandbox operations */\n  workspace?: Workspace;\n}\n\n/**\n * Options for resolving runtime dependencies\n */\nexport interface ResolveRuntimeOptions {\n  /** Mastra instance for accessing services */\n  mastra?: Mastra;\n  /** Run identifier */\n  runId: string;\n  /** Agent identifier */\n  agentId: string;\n  /** Workflow input containing serialized state */\n  input: DurableAgenticWorkflowInput;\n  /** Logger for debugging */\n  logger?: { debug?: (...args: any[]) => void; error?: (...args: any[]) => void };\n}\n\n/**\n * Resolve all runtime dependencies needed for durable step execution.\n *\n * This function reconstructs the non-serializable state needed to execute\n * agent steps from:\n * 1. The Mastra instance (for agent lookup, tools, model)\n * 2. The serialized workflow input (for MessageList, state)\n *\n * Unlike the registry-based approach, this reconstructs tools and model\n * from the agent registered with Mastra, making it truly durable across\n * process restarts.\n */\nexport async function resolveRuntimeDependencies(options: ResolveRuntimeOptions): Promise<ResolvedRuntimeDependencies> {\n  const { mastra, runId, agentId, input, logger } = options;\n\n  // 1. Deserialize MessageList\n  const messageList = new MessageList({\n    threadId: input.state.threadId,\n    resourceId: input.state.resourceId,\n  });\n  messageList.deserialize(input.messageListState);\n\n  // 2. Check global registry first (for local/test execution)\n  // This is necessary because workflow steps don't have direct access to DurableAgent's registry\n  const globalEntry = globalRunRegistry.get(runId);\n  let tools: Record<string, CoreTool> = globalEntry?.tools ?? {};\n  let model: MastraLanguageModel = globalEntry?.model as MastraLanguageModel;\n  let modelList: RegistryModelListEntry[] | undefined = globalEntry?.modelList;\n  let workspace: Workspace | undefined = globalEntry?.workspace;\n  let memory: MastraMemory | undefined;\n\n  // If we found the entry in global registry, we already have model and tools\n  if (globalEntry) {\n    logger?.debug?.(`[DurableAgent:${agentId}] Using model and tools from global registry for run ${runId}`);\n  } else if (mastra) {\n    try {\n      const agent = mastra.getAgentById(agentId);\n\n      // Build a request context with version overrides if available\n      const resolveRequestContext = new RequestContext();\n      // Future: restore serialized version overrides from workflow input here\n\n      tools = await agent.getToolsForExecution({\n        runId,\n        threadId: input.state.threadId,\n        resourceId: input.state.resourceId,\n        requestContext: resolveRequestContext,\n        memoryConfig: input.state.memoryConfig,\n        autoResumeSuspendedTools: input.options?.autoResumeSuspendedTools,\n      });\n\n      model =\n        (await (agent as any).getModel?.({ requestContext: resolveRequestContext })) ??\n        resolveModel(input.modelConfig, mastra);\n\n      const rawModelList = await (agent as any).getModelList?.(resolveRequestContext);\n      if (rawModelList && Array.isArray(rawModelList)) {\n        modelList = rawModelList.map((entry: any) => ({\n          id: entry.id,\n          model: entry.model,\n          maxRetries: entry.maxRetries ?? 0,\n          enabled: entry.enabled ?? true,\n        }));\n      }\n\n      memory = await (agent as any).getMemory?.({ requestContext: resolveRequestContext });\n      workspace = await (agent as any).getWorkspace?.({ requestContext: resolveRequestContext });\n    } catch (error) {\n      logger?.debug?.(`[DurableAgent:${agentId}] Failed to get agent from Mastra: ${error}`);\n      model = resolveModel(input.modelConfig, mastra);\n    }\n  } else {\n    logger?.debug?.(`[DurableAgent:${agentId}] No Mastra instance available, using fallback model`);\n    model = resolveModel(input.modelConfig);\n  }\n\n  if (Object.keys(tools).length === 0) {\n    logger?.debug?.(`[DurableAgent:${agentId}] No tools resolved for run ${runId}`);\n  }\n\n  // 3. Get or create SaveQueueManager\n  let saveQueueManager: SaveQueueManager | undefined;\n  if (memory) {\n    saveQueueManager = new SaveQueueManager({\n      logger: mastra?.getLogger?.(),\n      memory,\n    });\n  }\n\n  // 4. Reconstruct _internal for compatibility with existing code\n  const _internal = resolveInternalState({\n    state: input.state,\n    memory,\n    saveQueueManager,\n    tools,\n  });\n\n  return {\n    _internal,\n    tools,\n    model,\n    modelList,\n    messageList,\n    memory,\n    saveQueueManager,\n    workspace,\n  };\n}\n\n/**\n * Resolve the language model from serialized config.\n *\n * Note: This is a fallback when the model is not in the run registry.\n * The preferred approach is to store the actual model instance in the\n * run registry during preparation and retrieve it via runRegistry.getModel().\n *\n * This fallback returns a metadata-only stub that will fail the\n * isSupportedLanguageModel check with a descriptive error message.\n */\nexport function resolveModel(config: SerializableModelConfig, _mastra?: Mastra): MastraLanguageModel {\n  const metadataError = () => {\n    throw new Error(\n      `Model ${config.provider}/${config.modelId} is a metadata-only stub. ` +\n        `The actual model instance should be resolved from the run registry.`,\n    );\n  };\n\n  return {\n    provider: config.provider,\n    modelId: config.modelId,\n    specificationVersion: config.specificationVersion ?? 'v2',\n    supportedUrls: {},\n    doGenerate: metadataError,\n    doStream: metadataError,\n    __metadataOnly: true,\n  } as MastraLanguageModel;\n}\n\n/**\n * Reconstruct the _internal (StreamInternal) object from available state\n */\nexport function resolveInternalState(options: {\n  state: SerializableDurableState;\n  memory?: MastraMemory;\n  saveQueueManager?: SaveQueueManager;\n  tools?: Record<string, CoreTool>;\n}): StreamInternal {\n  const { state, memory, saveQueueManager, tools } = options;\n\n  return {\n    // Functions - create fresh\n    now: () => Date.now(),\n    generateId: () => crypto.randomUUID(),\n    currentDate: () => new Date(),\n\n    // Class instances - from resolved state\n    saveQueueManager,\n    memory,\n\n    // Serializable state\n    memoryConfig: state.memoryConfig,\n    threadId: state.threadId,\n    resourceId: state.resourceId,\n    threadExists: state.threadExists,\n\n    // Tools if provided - cast to ToolSet for compatibility\n    // CoreTool and ToolSet are structurally compatible at runtime\n    stepTools: tools as ToolSet | undefined,\n  };\n}\n\n/**\n * Resolve a single tool by name from Mastra's global tool registry\n */\nexport function resolveTool(toolName: string, mastra?: Mastra): CoreTool | undefined {\n  // Get from Mastra's global tool registry\n  try {\n    return mastra?.getTool?.(toolName as any) as CoreTool | undefined;\n  } catch {\n    // Tool not found in global registry\n    return undefined;\n  }\n}\n\n/**\n * Check if a tool requires human approval.\n *\n * If the tool has a `needsApprovalFn`, it takes precedence over both the\n * global `requireToolApproval` flag and the tool-level `requireApproval` flag\n * (e.g. skill tools return `false` to suppress approval). On error the call\n * defaults to requiring approval (safe default).\n */\nexport async function toolRequiresApproval(\n  tool: CoreTool,\n  globalRequireApproval?: boolean,\n  args?: Record<string, unknown>,\n): Promise<boolean> {\n  let requires = !!(globalRequireApproval || (tool as any).requireApproval);\n\n  // needsApprovalFn overrides all other flags (e.g., skill tools return false)\n  const needsApprovalFn = getNeedsApprovalFn(tool);\n  if (needsApprovalFn) {\n    try {\n      requires = !!(await needsApprovalFn(args ?? {}));\n    } catch {\n      // On error, default to requiring approval (safe default)\n      requires = true;\n    }\n  }\n\n  return requires;\n}\n\n/**\n * Extract tool metadata needed for LLM from resolved tools\n * This is useful when we need to pass tool info to the model\n */\nexport function extractToolsForModel(\n  tools: Record<string, CoreTool>,\n  _toolsMetadata: SerializableToolMetadata[],\n): Record<string, CoreTool> {\n  // Return the tools as-is since they're already in CoreTool format\n  // The metadata is just for reference/serialization\n  return tools;\n}\n\n/**\n * Resolve a language model from a serialized model config.\n *\n * This is used during durable execution to reconstruct models from\n * serialized configuration. It uses the originalConfig string (e.g., 'openai/gpt-4o')\n * to resolve the model through the standard model resolution pipeline.\n *\n * @param config The serialized model configuration\n * @param mastra Optional Mastra instance for custom gateways\n * @returns Resolved language model\n */\nexport async function resolveModelFromConfig(\n  config: SerializableModelConfig,\n  mastra?: Mastra,\n): Promise<MastraLanguageModel> {\n  const requestContext = new RequestContext();\n\n  // Use originalConfig if available (e.g., 'openai/gpt-4o'), otherwise construct from provider/modelId\n  const modelConfigString = config.originalConfig ?? `${config.provider}/${config.modelId}`;\n\n  if (typeof modelConfigString === 'string') {\n    return (await resolveModelConfig(modelConfigString, requestContext, mastra)) as MastraLanguageModel;\n  }\n\n  // If originalConfig is an object, pass it through\n  return (await resolveModelConfig(\n    modelConfigString as Parameters<typeof resolveModelConfig>[0],\n    requestContext,\n    mastra,\n  )) as MastraLanguageModel;\n}\n\n/**\n * Resolve a model from a model list entry.\n *\n * @param entry The model list entry with config, maxRetries, enabled\n * @param mastra Optional Mastra instance\n * @returns Resolved language model\n */\nexport async function resolveModelFromListEntry(\n  entry: SerializableModelListEntry,\n  mastra?: Mastra,\n): Promise<MastraLanguageModel> {\n  return resolveModelFromConfig(entry.config, mastra);\n}\n","import type { LanguageModelV2Prompt } from '@ai-sdk/provider-v5';\nimport type { ToolChoice, ToolSet } from '@internal/ai-sdk-v5';\nimport { z } from 'zod';\nimport type { PubSub } from '../../../../events/pubsub';\nimport { mergeProviderOptions } from '../../../../llm/model/provider-options';\nimport type { SharedProviderOptions } from '../../../../llm/model/shared.types';\nimport type { Mastra } from '../../../../mastra';\nimport type { SpanType, AIModelGenerationSpan, ExportedSpan, IModelSpanTracker } from '../../../../observability';\nimport { getStepAvailableToolNames } from '../../../../observability/utils';\nimport { ProcessorRunner } from '../../../../processors/runner';\nimport { execute } from '../../../../stream/aisdk/v5/execute';\nimport { MastraModelOutput } from '../../../../stream/base/output';\nimport type { TextDeltaPayload, ToolCallPayload } from '../../../../stream/types';\nimport { createStep } from '../../../../workflows';\nimport { PUBSUB_SYMBOL } from '../../../../workflows/constants';\nimport { MessageList } from '../../../message-list';\nimport type { MastraDBMessage } from '../../../message-list';\nimport { isSupportedLanguageModel } from '../../../utils';\nimport { DurableStepIds } from '../../constants';\nimport { globalRunRegistry } from '../../run-registry';\nimport { emitChunkEvent, emitStepStartEvent } from '../../stream-adapter';\nimport type { DurableAgenticWorkflowInput, DurableLLMStepOutput, DurableToolCallInput } from '../../types';\nimport { resolveRuntimeDependencies, resolveModelFromListEntry } from '../../utils/resolve-runtime';\n\n/**\n * Input schema for the durable LLM execution step\n */\nconst durableLLMInputSchema = z.object({\n  runId: z.string(),\n  agentId: z.string(),\n  agentName: z.string().optional(),\n  messageListState: z.any(), // SerializedMessageListState\n  toolsMetadata: z.array(z.any()),\n  modelConfig: z.object({\n    provider: z.string(),\n    modelId: z.string(),\n    specificationVersion: z.string().optional(),\n    originalConfig: z.union([z.string(), z.record(z.string(), z.any())]).optional(),\n    settings: z.record(z.string(), z.any()).optional(),\n    providerOptions: z.record(z.string(), z.any()).optional(),\n  }),\n  // Model list for fallback support (when agent configured with array of models)\n  modelList: z\n    .array(\n      z.object({\n        id: z.string(),\n        config: z.object({\n          provider: z.string(),\n          modelId: z.string(),\n          specificationVersion: z.string().optional(),\n          originalConfig: z.union([z.string(), z.record(z.string(), z.any())]).optional(),\n          providerOptions: z.record(z.string(), z.any()).optional(),\n        }),\n        maxRetries: z.number(),\n        enabled: z.boolean(),\n      }),\n    )\n    .optional(),\n  options: z.any(),\n  state: z.any(),\n  messageId: z.string(),\n  // Agent span data for model span parenting\n  agentSpanData: z.any().optional(),\n  // Model span data (ONE span for entire agent run, created before workflow)\n  modelSpanData: z.any().optional(),\n  // Step index for continuation (step: 0, 1, 2, ...)\n  stepIndex: z.number().optional(),\n});\n\n/**\n * Output schema for the durable LLM execution step\n */\nconst durableLLMOutputSchema = z.object({\n  messageListState: z.any(),\n  toolCalls: z.array(\n    z.object({\n      toolCallId: z.string(),\n      toolName: z.string(),\n      args: z.record(z.string(), z.any()),\n      providerMetadata: z.record(z.string(), z.any()).optional(),\n      activeTools: z.array(z.string()).nullable().optional(),\n    }),\n  ),\n  stepResult: z.object({\n    reason: z.string(),\n    warnings: z.array(z.any()),\n    isContinued: z.boolean(),\n    totalUsage: z.any().optional(),\n  }),\n  metadata: z.any(),\n  processorRetryCount: z.number().optional(),\n  processorRetryFeedback: z.string().optional(),\n  state: z.any(),\n  // Step index used in this execution (for tracking)\n  stepIndex: z.number().optional(),\n});\n\n/**\n * Options for creating the durable LLM execution step\n */\nexport interface DurableLLMExecutionStepOptions {\n  // No options needed - tools and model are resolved from Mastra at runtime\n}\n\n/**\n * Create a durable LLM execution step.\n *\n * This step:\n * 1. Deserializes the MessageList from workflow input\n * 2. Resolves tools and model from the runtime context\n * 3. Executes the LLM call\n * 4. Emits streaming chunks via pubsub\n * 5. Returns serialized state for the next step\n *\n * The key difference from the non-durable version is that all state\n * flows through the workflow input/output, and non-serializable\n * dependencies are resolved at execution time.\n */\nexport function createDurableLLMExecutionStep(_options?: DurableLLMExecutionStepOptions) {\n  return createStep({\n    id: DurableStepIds.LLM_EXECUTION,\n    inputSchema: durableLLMInputSchema,\n    outputSchema: durableLLMOutputSchema,\n    execute: async params => {\n      const { inputData, mastra, tracingContext, requestContext, abortSignal } = params;\n\n      // Access pubsub via symbol\n      const pubsub = (params as any)[PUBSUB_SYMBOL] as PubSub | undefined;\n\n      const typedInput = inputData as DurableAgenticWorkflowInput;\n      const { agentId, messageId, options: execOptions } = typedInput;\n      const runId = typedInput.runId;\n      const logger = mastra?.getLogger?.();\n\n      // 1. Resolve runtime dependencies (tools from Mastra)\n      const resolved = await resolveRuntimeDependencies({\n        mastra: mastra as Mastra,\n        runId,\n        agentId,\n        input: typedInput,\n        logger,\n      });\n\n      const { messageList, tools, model: resolvedModel, modelList: resolvedModelList } = resolved;\n\n      // 2. Determine if we have a model list for fallback support\n      const hasModelList = typedInput.modelList && typedInput.modelList.length > 0;\n\n      // 3. Build the model list - either from explicit list or single model\n      // For single model case (no modelList), we use the resolved model directly\n      // which supports mock models and directly-provided models\n      const modelList = hasModelList\n        ? typedInput.modelList!.filter(m => m.enabled)\n        : [\n            {\n              id: `${typedInput.modelConfig.provider}/${typedInput.modelConfig.modelId}`,\n              config: typedInput.modelConfig,\n              maxRetries: 0,\n              enabled: true,\n            },\n          ];\n\n      if (modelList.length === 0) {\n        throw new Error('No enabled models available for execution');\n      }\n\n      // 4. Execute with model fallback - try each model in the list with retries\n      let lastError: Error | undefined;\n\n      for (let modelIndex = 0; modelIndex < modelList.length; modelIndex++) {\n        const modelEntry = modelList[modelIndex]!;\n        const maxRetries = modelEntry.maxRetries || 0;\n\n        for (let attempt = 0; attempt <= maxRetries; attempt++) {\n          try {\n            // Resolve the model - for single model case (no modelList), use resolved model\n            // For model list case, try registry first (works with mock models), then config resolution (for Inngest)\n            const model = !hasModelList\n              ? resolvedModel\n              : (resolvedModelList?.find(m => m.id === modelEntry.id)?.model ??\n                (await resolveModelFromListEntry(modelEntry, mastra as Mastra)));\n\n            // Check if model is supported\n            if (!isSupportedLanguageModel(model)) {\n              const hint = (model as any).__metadataOnly\n                ? ' The model could not be resolved from the run registry or Mastra instance.'\n                : '';\n              throw new Error(\n                `Unsupported model version: ${(model as any).specificationVersion}. Model must implement doStream.${hint}`,\n              );\n            }\n\n            let currentMessageId = messageId;\n\n            // 5. Prepare tools - cast through unknown as CoreTool and ToolSet are structurally compatible at runtime\n            let currentModel = model;\n            let currentTools = tools as unknown as ToolSet;\n            let currentToolChoice = execOptions.toolChoice as ToolChoice<ToolSet> | undefined;\n            let currentActiveTools = execOptions.activeTools;\n            let currentModelSettings = { temperature: execOptions.temperature };\n            let currentProviderOptions: SharedProviderOptions | undefined = mergeProviderOptions(\n              execOptions.providerOptions,\n              modelEntry.config.providerOptions,\n            ) as SharedProviderOptions | undefined;\n\n            // 6. Rebuild MODEL_GENERATION span from passed data\n            // For durable execution, ONE model_generation span is created BEFORE the workflow starts\n            // and passed through each iteration. This ensures all steps are children of the same span.\n            const observability = mastra?.observability?.getSelectedInstance({ requestContext });\n\n            // modelSpanData is passed through from the workflow input (created in create-inngest-agent.ts)\n            const inputModelSpanData = (inputData as any).modelSpanData as\n              | ExportedSpan<SpanType.MODEL_GENERATION>\n              | undefined;\n            const modelSpan = inputModelSpanData\n              ? (observability?.rebuildSpan(inputModelSpanData) as AIModelGenerationSpan | undefined)\n              : undefined;\n\n            // Create model span tracker for MODEL_STEP and MODEL_CHUNK spans\n            const modelSpanTracker: IModelSpanTracker | undefined = modelSpan?.createTracker();\n\n            // Set the step index for continuation (step: 0, 1, 2, ...)\n            // This ensures step numbering continues across agentic loop iterations\n            const stepIndex = (inputData as any).stepIndex ?? 0;\n            modelSpanTracker?.setStepIndex(stepIndex);\n\n            // Build structured output for AI SDK if configured\n            const structuredOutputConfig = execOptions.structuredOutput;\n            const structuredOutput =\n              structuredOutputConfig?.schema && !structuredOutputConfig?.structuringModelConfig\n                ? {\n                    schema: structuredOutputConfig.schema,\n                    jsonPromptInjection: structuredOutputConfig.jsonPromptInjection,\n                  }\n                : undefined;\n\n            const registryEntry = globalRunRegistry.get(runId);\n            const executionAbortSignal = (registryEntry as any)?.abortSignal ?? abortSignal;\n            if (registryEntry?.inputProcessors?.length) {\n              const inputStepWriter = pubsub\n                ? {\n                    custom: async (data: { type: string }) => {\n                      await emitChunkEvent(pubsub, runId, data as any);\n                    },\n                  }\n                : undefined;\n              const runner = new ProcessorRunner({\n                inputProcessors: registryEntry.inputProcessors,\n                outputProcessors: registryEntry.outputProcessors ?? [],\n                errorProcessors: registryEntry.errorProcessors ?? [],\n                logger: logger as any,\n                agentName: typedInput.agentName ?? typedInput.agentId,\n                processorStates: registryEntry.processorStates,\n              });\n              const processInputStepResult = await runner.runProcessInputStep({\n                messageList,\n                stepNumber: stepIndex,\n                steps: (inputData as any).accumulatedSteps ?? [],\n                tracingContext: modelSpanTracker?.getTracingContext() ?? tracingContext,\n                requestContext,\n                memory: registryEntry.memory,\n                resourceId: typedInput.state?.resourceId,\n                threadId: typedInput.state?.threadId,\n                model: currentModel,\n                messageId: currentMessageId,\n                rotateResponseMessageId: () => {\n                  currentMessageId = crypto.randomUUID();\n                  return currentMessageId;\n                },\n                tools: currentTools,\n                toolChoice: currentToolChoice,\n                providerOptions: currentProviderOptions,\n                activeTools: currentActiveTools,\n                modelSettings: currentModelSettings,\n                structuredOutput: structuredOutput as any,\n                retryCount: (inputData as any).processorRetryCount ?? 0,\n                abortSignal: executionAbortSignal,\n                writer: inputStepWriter,\n              });\n              currentMessageId = processInputStepResult.messageId ?? currentMessageId;\n              currentModel = (processInputStepResult.model ?? currentModel) as typeof currentModel;\n              currentTools = (processInputStepResult.tools ?? currentTools) as ToolSet;\n              currentToolChoice = processInputStepResult.toolChoice as ToolChoice<ToolSet> | undefined;\n              currentProviderOptions = processInputStepResult.providerOptions ?? currentProviderOptions;\n              currentActiveTools = processInputStepResult.activeTools;\n              currentModelSettings = {\n                ...currentModelSettings,\n                ...(processInputStepResult.modelSettings ?? {}),\n              };\n            }\n\n            // Get messages for LLM (using async llmPrompt for proper format conversion)\n            const inputMessages = (await messageList.get.all.aiV5.llmPrompt()) as LanguageModelV2Prompt;\n\n            // Enable defer mode - step-finish won't auto-close the step span\n            // This allows us to export the step span and close it later after tool execution\n            modelSpanTracker?.setDeferStepClose(true);\n\n            // 7. Track state during streaming\n            let warnings: any[] = [];\n            let request: any = {};\n            let rawResponse: any = {};\n            const textDeltas: string[] = [];\n            const toolCalls: DurableToolCallInput[] = [];\n            let finishReason: string = 'stop';\n            let usage: any = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n            let responseMetadata: any = {};\n\n            // 8. Start MODEL_STEP span at the beginning of LLM execution\n            modelSpanTracker?.startStep();\n\n            // Apply post-processor request-side context to MODEL_INFERENCE then\n            // open the inference span immediately before the model call so its\n            // startTime excludes any input processor work and availableTools /\n            // toolChoice reflect per-step mutations. responseFormat tracks the\n            // actual structuredOutput payload sent to execute() — which is\n            // undefined when structuringModelConfig routes through a separate\n            // structuring step instead of asking the model for json_schema.\n            modelSpanTracker?.setInferenceContext?.({\n              parameters: currentModelSettings as Record<string, unknown> | undefined,\n              providerOptions: currentProviderOptions as Record<string, unknown> | undefined,\n              availableTools: getStepAvailableToolNames(\n                currentTools as Record<string, unknown> | undefined,\n                currentActiveTools,\n              ),\n              toolChoice: currentToolChoice,\n              responseFormat: structuredOutput ? 'json_schema' : undefined,\n            });\n            modelSpanTracker?.startInference?.();\n\n            // 10. Execute LLM call\n            const modelResult = execute({\n              runId,\n              model: currentModel,\n              providerOptions: currentProviderOptions,\n              inputMessages,\n              tools: currentTools,\n              toolChoice: currentToolChoice,\n              activeTools: currentActiveTools,\n              options: { abortSignal: executionAbortSignal },\n              modelSettings: {\n                ...currentModelSettings,\n                maxRetries: 0,\n              },\n              includeRawChunks: execOptions.includeRawChunks,\n              methodType: 'stream',\n              structuredOutput: structuredOutput as any,\n              onResult: ({ warnings: w, request: r, rawResponse: rr }) => {\n                warnings = w || [];\n                request = r || {};\n                rawResponse = rr || {};\n                modelSpanTracker?.updateStep?.({ request, inputMessages, warnings, messageId: currentMessageId });\n\n                if (pubsub) {\n                  void emitStepStartEvent(pubsub, runId, {\n                    stepId: DurableStepIds.LLM_EXECUTION,\n                    request,\n                    warnings,\n                  });\n                }\n              },\n            });\n\n            // 10. Create output stream to process chunks\n            // Note: We cast through any to handle the web/node ReadableStream type mismatch\n            const outputStream = new MastraModelOutput({\n              model: {\n                modelId: currentModel.modelId,\n                provider: currentModel.provider,\n                version: currentModel.specificationVersion,\n              },\n              stream: modelResult as any,\n              messageList,\n              messageId: currentMessageId,\n              options: {\n                runId,\n                tracingContext: modelSpanTracker?.getTracingContext() ?? tracingContext,\n                requestContext,\n              },\n            });\n\n            // 11. Process the stream and emit chunks via pubsub\n            // Wrap the base stream with ModelSpanTracker to create MODEL_STEP and MODEL_CHUNK spans\n            const baseStream = outputStream._getBaseStream();\n            const trackedStream = modelSpanTracker?.wrapStream(baseStream) ?? baseStream;\n\n            try {\n              for await (const chunk of trackedStream) {\n                if (!chunk) continue;\n\n                // Emit chunk via pubsub for streaming to client.\n                // Two special transforms:\n                //\n                // - 'finish' chunks are NEVER forwarded as-is. The agent run's\n                //   real terminal signal is the FINISH event published at the\n                //   end of the agentic loop; emitting a CHUNK 'finish' here\n                //   would close the client's MastraModelOutput prematurely in\n                //   multi-step workflows.\n                //\n                // - The inner LLM stream emits 'finish' but never 'step-finish'\n                //   (the non-durable agentic-loop wraps the LLM call and emits\n                //   step-finish itself; the durable workflow bypasses that\n                //   wrapper and calls `execute` directly). Without a step-finish\n                //   chunk, the client's MastraModelOutput never populates its\n                //   bufferedSteps, so `getFullOutput().text` returns ''. Convert\n                //   each inner 'finish' into a 'step-finish' chunk so the client\n                //   sees the same shape it would in the non-durable path.\n                if (pubsub && chunk.type !== 'finish') {\n                  await emitChunkEvent(pubsub, runId, chunk);\n                } else if (pubsub && chunk.type === 'finish') {\n                  await emitChunkEvent(pubsub, runId, {\n                    ...chunk,\n                    type: 'step-finish',\n                  } as any);\n                }\n\n                // Process different chunk types\n                switch (chunk.type) {\n                  case 'text-delta': {\n                    const payload = chunk.payload as TextDeltaPayload;\n                    textDeltas.push(payload.text);\n                    break;\n                  }\n\n                  case 'tool-call': {\n                    const payload = chunk.payload as ToolCallPayload;\n                    toolCalls.push({\n                      toolCallId: payload.toolCallId,\n                      toolName: payload.toolName,\n                      args: payload.args || {},\n                      providerMetadata: payload.providerMetadata as Record<string, unknown> | undefined,\n                      providerExecuted: payload.providerExecuted,\n                      output: payload.output,\n                      activeTools: currentActiveTools ?? null,\n                    });\n                    break;\n                  }\n\n                  case 'finish': {\n                    const payload = chunk.payload as any;\n                    // The finish chunk from MastraModelOutput has finishReason in stepResult.reason\n                    finishReason = payload.stepResult?.reason || payload.finishReason || 'stop';\n                    // Usage can be in output.usage or directly in payload.usage\n                    usage = payload.output?.usage || payload.usage || usage;\n                    break;\n                  }\n\n                  case 'response-metadata': {\n                    const payload = chunk.payload as any;\n                    responseMetadata = {\n                      id: payload.id,\n                      timestamp: payload.timestamp,\n                      modelId: payload.modelId,\n                      headers: payload.headers,\n                    };\n                    break;\n                  }\n\n                  case 'error': {\n                    const payload = chunk.payload as any;\n                    const errorMessage = payload?.error?.message || payload?.message || 'LLM execution error';\n                    const errorObj = new Error(errorMessage);\n                    // DON'T emit error event here - we might have fallback models to try\n                    // Error event will be emitted after all models are exhausted\n                    throw errorObj;\n                  }\n                }\n              }\n            } catch (error) {\n              logger?.error?.('Error processing LLM stream', { error, runId });\n\n              const errorObj = error instanceof Error ? error : new Error(String(error));\n              if (modelSpanTracker) {\n                modelSpanTracker.reportGenerationError({ error: errorObj });\n              } else if (modelSpan) {\n                modelSpan.error({ error: errorObj });\n              }\n\n              lastError = errorObj;\n              if (attempt < maxRetries) continue; // retry same model\n              break; // exhausted retries, try next model\n            }\n\n            // Check if the stream captured an error (MastraModelOutput swallows errors internally)\n            const streamError = outputStream.error;\n            if (streamError) {\n              logger?.error?.('Stream captured error', { error: streamError, runId });\n\n              if (modelSpanTracker) {\n                modelSpanTracker.reportGenerationError({ error: streamError });\n              } else if (modelSpan) {\n                modelSpan.error({ error: streamError });\n              }\n\n              lastError = streamError;\n              if (attempt < maxRetries) continue; // retry same model\n              break; // exhausted retries, try next model\n            }\n\n            // 12. Add assistant response to message list\n            if (textDeltas.length > 0 || toolCalls.length > 0) {\n              const parts: any[] = [];\n\n              if (textDeltas.length > 0) {\n                parts.push({\n                  type: 'text' as const,\n                  text: textDeltas.join(''),\n                });\n              }\n\n              for (const tc of toolCalls) {\n                parts.push({\n                  type: 'tool-invocation' as const,\n                  toolInvocation: {\n                    state: 'call' as const,\n                    toolCallId: tc.toolCallId,\n                    toolName: tc.toolName,\n                    args: tc.args,\n                  },\n                });\n              }\n\n              const assistantMessage: MastraDBMessage = {\n                id: currentMessageId,\n                role: 'assistant' as const,\n                content: {\n                  format: 2,\n                  parts,\n                },\n                createdAt: new Date(),\n              };\n\n              messageList.add(assistantMessage, 'response');\n            }\n\n            // 13. Determine if we should continue (has tool calls)\n            const isContinued = toolCalls.length > 0 && finishReason !== 'stop';\n            const hasToolCalls = toolCalls.length > 0;\n\n            // 14. Export spans if there are tool calls (so tools can be children of model_step)\n            // Don't end the spans yet - they will be ended after tool execution\n            const stepSpanData = hasToolCalls ? modelSpanTracker?.exportCurrentStep() : undefined;\n            const stepFinishPayload = hasToolCalls ? modelSpanTracker?.getPendingStepFinishPayload() : undefined;\n\n            // 15. Build output\n            const output: DurableLLMStepOutput = {\n              messageListState: messageList.serialize(),\n              toolCalls,\n              stepResult: {\n                reason: finishReason as any,\n                warnings,\n                isContinued,\n                totalUsage: usage,\n                headers: rawResponse?.headers,\n                request,\n              },\n              metadata: {\n                id: responseMetadata.id,\n                modelId: responseMetadata.modelId || currentModel.modelId,\n                timestamp: responseMetadata.timestamp || new Date().toISOString(),\n                providerMetadata: responseMetadata,\n                headers: rawResponse?.headers,\n                request,\n              },\n              state: typedInput.state,\n              // Pass span data so tool calls can be children of model_step\n              modelSpanData: hasToolCalls ? modelSpan?.exportSpan?.() : undefined,\n              stepSpanData,\n              stepFinishPayload,\n            };\n\n            // 16. End step span only if there are NO tool calls\n            // If there are tool calls, step span will be ended after tool execution\n            // NOTE: We NEVER close the model span here - it stays open for the entire agent run\n            // and is closed in map-final-output after the agentic loop completes\n            if (!hasToolCalls) {\n              // Close the step span with usage/finish info\n              const pendingPayload = modelSpanTracker?.getPendingStepFinishPayload() as any;\n              if (pendingPayload) {\n                // End step span using the pending payload\n                const stepSpan = modelSpanTracker?.exportCurrentStep();\n                if (stepSpan && observability) {\n                  const rebuiltStepSpan = observability.rebuildSpan(stepSpan);\n                  rebuiltStepSpan?.end({\n                    output: {\n                      text: textDeltas.join(''),\n                      toolCalls: [],\n                    },\n                    attributes: {\n                      usage: pendingPayload.output?.usage,\n                      finishReason: pendingPayload.stepResult?.reason,\n                      isContinued: pendingPayload.stepResult?.isContinued,\n                    },\n                  });\n                }\n              }\n            }\n\n            // Success - return the output\n            return output;\n          } catch (error) {\n            lastError = error instanceof Error ? error : new Error(String(error));\n\n            const modelId = modelEntry.config.modelId;\n            logger?.error?.(`Error executing model ${modelId}, attempt ${attempt + 1}/${maxRetries + 1}`, {\n              error: lastError,\n              runId,\n              modelIndex,\n              attempt,\n            });\n\n            // Try processAPIError if error processors are available\n            const registryEntry = globalRunRegistry.get(runId);\n            if (registryEntry?.errorProcessors?.length) {\n              try {\n                const runner = new ProcessorRunner({\n                  inputProcessors: registryEntry.inputProcessors ?? [],\n                  outputProcessors: registryEntry.outputProcessors ?? [],\n                  errorProcessors: registryEntry.errorProcessors,\n                  logger: logger as any,\n                  agentName: typedInput.agentName ?? typedInput.agentId,\n                  processorStates: registryEntry.processorStates,\n                });\n                const currentMessageList = new MessageList();\n                currentMessageList.deserialize(typedInput.messageListState);\n                const { retry } = await runner.runProcessAPIError({\n                  error: lastError,\n                  messages: currentMessageList.get.all.db(),\n                  messageList: currentMessageList,\n                  stepNumber: (inputData as any).stepIndex ?? 0,\n                  steps: [],\n                  requestContext,\n                });\n                if (retry) {\n                  logger?.debug?.(`processAPIError requested retry for model ${modelId}`, { runId });\n                  continue;\n                }\n              } catch (processorError) {\n                logger?.debug?.(`processAPIError handler failed: ${processorError}`, { runId });\n              }\n            }\n\n            if (attempt >= maxRetries) {\n              logger?.debug?.(`Exhausted retries for model ${modelId}, trying next model`, { runId });\n              break;\n            }\n\n            const delayMs = Math.min(1000 * Math.pow(2, attempt), 10000);\n            logger?.debug?.(`Retrying model ${modelId} after ${delayMs}ms`, { runId, attempt });\n            await new Promise(resolve => setTimeout(resolve, delayMs));\n          }\n        } // end retry loop\n      } // end model loop\n\n      // All models exhausted - throw the last error\n      throw lastError ?? new Error('Exhausted all fallback models and reached the maximum number of retries.');\n    },\n  });\n}\n","import { z } from 'zod';\nimport { createBackgroundTask } from '../../../../background-tasks/create';\nimport { resolveBackgroundConfig } from '../../../../background-tasks/resolve-config';\nimport type { ToolBackgroundConfig } from '../../../../background-tasks/types';\nimport type { PubSub } from '../../../../events/pubsub';\nimport type { Mastra } from '../../../../mastra';\nimport type { MastraMemory } from '../../../../memory/memory';\nimport type { MemoryConfig } from '../../../../memory/types';\nimport { ChunkFrom } from '../../../../stream/types';\nimport { createStep } from '../../../../workflows';\nimport { PUBSUB_SYMBOL } from '../../../../workflows/constants';\nimport type { SuspendOptions } from '../../../../workflows/step';\nimport type { MessageList } from '../../../message-list';\nimport type { SaveQueueManager } from '../../../save-queue';\nimport { DurableStepIds } from '../../constants';\nimport { globalRunRegistry } from '../../run-registry';\nimport { emitSuspendedEvent, emitChunkEvent } from '../../stream-adapter';\nimport type { DurableToolCallInput, SerializableDurableOptions, AgentSuspendedEventData } from '../../types';\nimport { resolveTool, toolRequiresApproval } from '../../utils/resolve-runtime';\nimport { serializeError } from '../../utils/serialize-state';\n\n/**\n * Input schema for the durable tool call step.\n * Each tool call flows through this schema when using .foreach()\n */\nconst durableToolCallInputSchema = z.object({\n  toolCallId: z.string(),\n  toolName: z.string(),\n  args: z.record(z.string(), z.any()),\n  providerMetadata: z.record(z.string(), z.any()).optional(),\n  providerExecuted: z.boolean().optional(),\n  output: z.any().optional(),\n  activeTools: z.array(z.string()).nullable().optional(),\n});\n\n/**\n * Output schema for the durable tool call step\n */\nconst durableToolCallOutputSchema = durableToolCallInputSchema.extend({\n  result: z.any().optional(),\n  error: z\n    .object({\n      name: z.string(),\n      message: z.string(),\n      stack: z.string().optional(),\n    })\n    .optional(),\n});\n\n/**\n * Flush messages to memory before suspending.\n * Mirrors the base Agent's flushMessagesBeforeSuspension() to ensure\n * the thread exists and all pending messages are persisted.\n */\nasync function flushMessagesBeforeSuspension({\n  saveQueueManager,\n  messageList,\n  memory,\n  threadId,\n  resourceId,\n  memoryConfig,\n  threadExists,\n  onThreadCreated,\n}: {\n  saveQueueManager?: SaveQueueManager;\n  messageList?: MessageList;\n  memory?: MastraMemory;\n  threadId?: string;\n  resourceId?: string;\n  memoryConfig?: MemoryConfig;\n  threadExists?: boolean;\n  onThreadCreated?: () => void;\n}) {\n  if (!saveQueueManager || !messageList || !threadId) {\n    return;\n  }\n\n  try {\n    // Ensure thread exists before flushing messages\n    if (memory && !threadExists && resourceId) {\n      const thread = await memory.getThreadById?.({ threadId });\n      if (!thread) {\n        await memory.createThread?.({\n          threadId,\n          resourceId,\n          memoryConfig,\n        });\n      }\n      onThreadCreated?.();\n    }\n\n    // Flush all pending messages immediately\n    await saveQueueManager.flushMessages(messageList, threadId, memoryConfig);\n  } catch {\n    // Log but don't throw — suspension should proceed even if flush fails\n  }\n}\n\n/**\n * Create a durable tool call step.\n *\n * This step mirrors the base Agent's createToolCallStep pattern:\n * 1. Resolves the tool from the run registry or Mastra\n * 2. Checks if approval is required (global or per-tool)\n * 3. If approval required, emits suspended event, persists messages, and suspends\n * 4. Executes the tool with a suspend callback for in-execution suspension\n * 5. Emits tool-result or tool-error chunks via PubSub\n * 6. Returns the result or error\n *\n * Tool suspension is handled via workflow suspend/resume mechanism:\n * - Tool approval: step suspends with approval payload\n * - In-execution suspension: tool calls suspend() callback, step suspends with suspension payload\n * - Message persistence: messages are flushed before any suspension\n */\nexport function createDurableToolCallStep() {\n  return createStep({\n    id: DurableStepIds.TOOL_CALL,\n    inputSchema: durableToolCallInputSchema,\n    outputSchema: durableToolCallOutputSchema,\n    execute: async params => {\n      const { inputData, mastra, suspend, resumeData, requestContext, getInitData } = params;\n\n      // Access pubsub via symbol\n      const pubsub = (params as any)[PUBSUB_SYMBOL] as PubSub | undefined;\n\n      const typedInput = inputData as DurableToolCallInput;\n      const { toolCallId, toolName, args, providerExecuted, output, activeTools } = typedInput;\n\n      // Get context from init data (the parent workflow input)\n      const initData = getInitData<{\n        runId: string;\n        agentId: string;\n        options: SerializableDurableOptions;\n        state: {\n          threadId?: string;\n          resourceId?: string;\n          memoryConfig?: MemoryConfig;\n          threadExists?: boolean;\n        };\n      }>();\n\n      const { runId, options: agentOptions, state } = initData;\n      const logger = (mastra as any)?.getLogger?.();\n\n      // If the tool was already executed by the provider, return the output\n      if (providerExecuted && output !== undefined) {\n        return {\n          ...typedInput,\n          result: output,\n        };\n      }\n\n      // 1. Resolve the tool from global registry first, then Mastra\n      const registryEntry = globalRunRegistry.get(runId);\n      let tool = registryEntry?.tools?.[toolName];\n\n      if (!tool) {\n        tool = resolveTool(toolName, mastra as Mastra);\n      }\n\n      const toolKey = registryEntry?.tools?.[toolName]\n        ? toolName\n        : Object.entries(registryEntry?.tools ?? {}).find(([, registeredTool]) => registeredTool === tool)?.[0];\n      const effectiveActiveTools = activeTools === null ? undefined : (activeTools ?? agentOptions.activeTools);\n      const activeToolKey = toolKey ?? toolName;\n      const isHiddenByActiveTools = effectiveActiveTools !== undefined && !effectiveActiveTools.includes(activeToolKey);\n\n      if (!tool || isHiddenByActiveTools) {\n        const availableToolNames = effectiveActiveTools ?? Object.keys(registryEntry?.tools ?? {});\n        const availableToolsStr =\n          availableToolNames.length > 0 ? ` Available tools: ${availableToolNames.join(', ')}` : '';\n        const error = {\n          name: 'ToolNotFoundError',\n          message: `Tool \"${toolName}\" not found.${availableToolsStr}. Call tools by their exact name only — never add prefixes, namespaces, or colons.`,\n        };\n        if (pubsub) {\n          await emitChunkEvent(pubsub, runId, {\n            type: 'tool-error',\n            runId,\n            from: ChunkFrom.AGENT,\n            payload: { toolCallId, toolName, args, error },\n          });\n        }\n        return {\n          ...typedInput,\n          error,\n        };\n      }\n\n      // Get memory-related state for message persistence\n      const saveQueueManager = registryEntry?.saveQueueManager;\n      const memory = registryEntry?.memory;\n      const workspace = registryEntry?.workspace;\n      let threadExists = state?.threadExists ?? false;\n\n      // Reconstruct MessageList from workflow state if available\n      // Note: In foreach mode, the message list from the registry may be available\n      // but for durability, we access what's available through the registry\n      let messageList: MessageList | undefined;\n      // For local execution, the globalRunRegistry might have an ExtendedRunRegistry entry\n      // that stores the messageList. We cast and check safely.\n      const extendedEntry = globalRunRegistry.get(runId) as any;\n      if (extendedEntry?.messageList) {\n        messageList = extendedEntry.messageList;\n      }\n\n      const doFlush = () =>\n        flushMessagesBeforeSuspension({\n          saveQueueManager,\n          messageList,\n          memory,\n          threadId: state?.threadId,\n          resourceId: state?.resourceId,\n          memoryConfig: state?.memoryConfig,\n          threadExists,\n          onThreadCreated: () => {\n            threadExists = true;\n          },\n        });\n\n      // 2. Check if tool requires approval\n      const requiresApproval = await toolRequiresApproval(tool, agentOptions.requireToolApproval, args);\n\n      if (requiresApproval && !resumeData) {\n        const resumeSchema = JSON.stringify({\n          type: 'object',\n          properties: {\n            approved: { type: 'boolean' },\n          },\n          required: ['approved'],\n        });\n\n        // Emit approval chunk via PubSub (mirrors base agent's controller.enqueue)\n        if (pubsub) {\n          await emitChunkEvent(pubsub, runId, {\n            type: 'tool-call-approval',\n            runId,\n            from: ChunkFrom.AGENT,\n            payload: { toolCallId, toolName, args, resumeSchema },\n          });\n        }\n\n        // Emit suspended event for the stream adapter\n        if (pubsub) {\n          await emitSuspendedEvent(pubsub, runId, {\n            toolCallId,\n            toolName,\n            args,\n            type: 'approval',\n            resumeSchema,\n          });\n        }\n\n        // Flush messages before suspension\n        await doFlush();\n\n        // Suspend and wait for approval\n        return suspend(\n          {\n            type: 'approval',\n            toolCallId,\n            toolName,\n            args,\n          },\n          {\n            resumeLabel: toolCallId,\n          },\n        );\n      }\n\n      // Check if resuming from approval\n      if (resumeData && typeof resumeData === 'object' && resumeData !== null && 'approved' in resumeData) {\n        if (!(resumeData as { approved: boolean }).approved) {\n          return {\n            ...typedInput,\n            result: 'Tool call was not approved by the user',\n          };\n        }\n      }\n\n      // Check if resuming from in-execution suspension\n      // Pass resumeData through to the tool so it can continue from where it left off\n      const isResumingFromSuspension =\n        resumeData && typeof resumeData === 'object' && resumeData !== null && !('approved' in resumeData);\n\n      // 3. Check for background task execution\n      const bgManager = registryEntry?.backgroundTaskManager;\n      const bgConfig = registryEntry?.backgroundTasksConfig;\n      const toolBgConfig = (tool as any).backgroundConfig as ToolBackgroundConfig | undefined;\n      const llmBgOverrides =\n        typeof args === 'object' && args !== null && '_background' in args ? (args as any)._background : undefined;\n\n      // Strip _background from args before execution (same as non-durable path)\n      const cleanedArgs = { ...args };\n      if ('_background' in cleanedArgs) {\n        delete (cleanedArgs as any)._background;\n      }\n\n      // Execute the tool\n      if (!tool.execute) {\n        return {\n          ...typedInput,\n          result: undefined,\n        };\n      }\n\n      const toolOptions = {\n        toolCallId,\n        messages: [],\n        workspace,\n        requestContext,\n        resumeData: isResumingFromSuspension ? resumeData : undefined,\n\n        // In-execution suspend callback — allows tools to suspend mid-execution\n        suspend: async (suspendPayload: any, suspendOptions?: SuspendOptions) => {\n          if (suspendOptions?.requireToolApproval) {\n            // Tool is requesting approval during execution\n            const approvalResumeSchema = JSON.stringify({\n              type: 'object',\n              properties: {\n                approved: { type: 'boolean' },\n              },\n              required: ['approved'],\n            });\n\n            if (pubsub) {\n              await emitChunkEvent(pubsub, runId, {\n                type: 'tool-call-approval',\n                runId,\n                from: ChunkFrom.AGENT,\n                payload: { toolCallId, toolName, args, resumeSchema: approvalResumeSchema },\n              });\n            }\n\n            if (pubsub) {\n              await emitSuspendedEvent(pubsub, runId, {\n                toolCallId,\n                toolName,\n                args,\n                type: 'approval',\n                resumeSchema: approvalResumeSchema,\n              });\n            }\n\n            await doFlush();\n\n            return suspend(\n              {\n                type: 'approval',\n                requireToolApproval: { toolCallId, toolName, args },\n              },\n              { resumeLabel: toolCallId },\n            );\n          } else {\n            // General tool suspension (e.g., tool calls context.agent.suspend())\n            const suspendedEventData: AgentSuspendedEventData = {\n              toolCallId,\n              toolName,\n              args,\n              suspendPayload,\n              type: 'suspension',\n              resumeSchema: suspendOptions?.resumeSchema,\n            };\n\n            if (pubsub) {\n              await emitChunkEvent(pubsub, runId, {\n                type: 'tool-call-suspended',\n                runId,\n                from: ChunkFrom.AGENT,\n                payload: {\n                  toolCallId,\n                  toolName,\n                  suspendPayload,\n                  args,\n                  resumeSchema: suspendOptions?.resumeSchema,\n                },\n              });\n\n              await emitSuspendedEvent(pubsub, runId, suspendedEventData);\n            }\n\n            await doFlush();\n\n            return suspend(\n              {\n                type: 'suspension',\n                toolCallSuspended: suspendPayload,\n                toolName,\n                resumeLabel: suspendOptions?.resumeLabel,\n              },\n              { resumeLabel: toolCallId },\n            );\n          }\n        },\n      };\n\n      // Resolve whether to run in background using the shared config resolver\n      if (bgManager && !bgConfig?.disabled && typeof cleanedArgs === 'object' && cleanedArgs !== null) {\n        const bgResolved = resolveBackgroundConfig({\n          llmBgOverrides,\n          toolName,\n          toolConfig: toolBgConfig,\n          agentConfig: bgConfig,\n          managerConfig: bgManager.config,\n        });\n\n        if (bgResolved.runInBackground) {\n          try {\n            const bgTask = createBackgroundTask(bgManager, {\n              toolName,\n              toolCallId,\n              args: cleanedArgs,\n              agentId: initData.agentId,\n              threadId: state?.threadId,\n              resourceId: state?.resourceId,\n              runId,\n              timeoutMs: bgResolved.timeoutMs,\n              maxRetries: bgResolved.maxRetries,\n              context: {\n                executor: {\n                  execute: async (taskArgs: any, taskContext: any) => {\n                    return tool.execute!(taskArgs, {\n                      ...toolOptions,\n                      ...(taskContext?.resumeData !== undefined ? { resumeData: taskContext.resumeData } : {}),\n                      suspend: async (data?: unknown, options?: SuspendOptions) => {\n                        await toolOptions.suspend?.(data, options);\n                        return taskContext?.suspend?.(data, options);\n                      },\n                    });\n                  },\n                },\n                onChunk: (chunk: any) => {\n                  if (!pubsub) return;\n                  try {\n                    const bgRunId = chunk.payload.runId;\n                    // Emit tool-call chunk so UIs can render the invocation inline\n                    if (bgRunId !== runId || (bgRunId === runId && resumeData)) {\n                      void emitChunkEvent(pubsub, bgRunId, {\n                        type: 'tool-call',\n                        runId: bgRunId,\n                        from: ChunkFrom.AGENT,\n                        payload: {\n                          toolCallId: chunk.payload.toolCallId,\n                          toolName: chunk.payload.toolName,\n                          args: cleanedArgs,\n                        },\n                      });\n                    }\n\n                    if (chunk.type === 'background-task-completed') {\n                      void emitChunkEvent(pubsub, bgRunId, {\n                        type: 'tool-result',\n                        runId: bgRunId,\n                        from: ChunkFrom.AGENT,\n                        payload: {\n                          toolCallId: chunk.payload.toolCallId,\n                          toolName: chunk.payload.toolName,\n                          args: cleanedArgs,\n                          result: chunk.payload.result,\n                        },\n                      });\n                    } else if (chunk.type === 'background-task-failed') {\n                      void emitChunkEvent(pubsub, bgRunId, {\n                        type: 'tool-error',\n                        runId: bgRunId,\n                        from: ChunkFrom.AGENT,\n                        payload: {\n                          toolCallId: chunk.payload.toolCallId,\n                          toolName: chunk.payload.toolName,\n                          error: chunk.payload.error,\n                          args: cleanedArgs,\n                        },\n                      });\n                    }\n                  } catch {\n                    // PubSub may be closed — ignore\n                  }\n                },\n\n                onResult: async (params: any) => {\n                  if (!messageList) return;\n\n                  const result =\n                    params.status === 'failed'\n                      ? `Background task failed: ${params.error?.message ?? 'Unknown error'}`\n                      : params.result;\n\n                  const updated = messageList.updateToolInvocation(\n                    {\n                      type: 'tool-invocation',\n                      toolInvocation: {\n                        state: 'result',\n                        toolCallId: params.toolCallId,\n                        toolName: params.toolName,\n                        args: cleanedArgs,\n                        result,\n                      },\n                    },\n                    {\n                      backgroundTasks: {\n                        [params.toolCallId]: {\n                          startedAt: params.startedAt,\n                          completedAt: params.completedAt,\n                          taskId: params.taskId,\n                        },\n                      },\n                    },\n                  );\n\n                  if (!updated) {\n                    if (params.runId !== runId || (params.runId === runId && resumeData)) {\n                      messageList.add(\n                        [\n                          {\n                            role: 'tool' as const,\n                            type: 'tool-call',\n                            id: crypto.randomUUID(),\n                            createdAt: new Date(),\n                            content: [\n                              {\n                                type: 'tool-call' as const,\n                                toolCallId: params.toolCallId,\n                                toolName: params.toolName,\n                                args: cleanedArgs,\n                              },\n                            ],\n                          },\n                        ],\n                        'response',\n                      );\n                    }\n                    messageList.add(\n                      [\n                        {\n                          role: 'tool' as const,\n                          content: [\n                            {\n                              type: 'tool-result' as const,\n                              toolCallId: params.toolCallId,\n                              toolName: params.toolName,\n                              result,\n                              isError: params.status === 'failed',\n                            },\n                          ],\n                        },\n                      ],\n                      'response',\n                    );\n                  }\n\n                  if (saveQueueManager && state?.threadId) {\n                    await saveQueueManager.flushMessages(messageList, state.threadId, state.memoryConfig);\n                  }\n                },\n\n                onExecution: async (params: any) => {\n                  if (!messageList) return;\n\n                  messageList.updateToolInvocation(\n                    {\n                      type: 'tool-invocation',\n                      toolInvocation: {\n                        state: 'call',\n                        toolCallId: params.toolCallId,\n                        toolName: params.toolName,\n                        args: cleanedArgs,\n                      },\n                    },\n                    {\n                      backgroundTasks: {\n                        [params.toolCallId]: {\n                          startedAt: params.startedAt,\n                          suspendedAt: params.suspendedAt,\n                          taskId: params.taskId,\n                        },\n                      },\n                    },\n                  );\n                },\n\n                onComplete: toolBgConfig?.onComplete ?? bgConfig?.onTaskComplete,\n                onFailed: toolBgConfig?.onFailed ?? bgConfig?.onTaskFailed,\n              },\n            });\n\n            // If the agent is resuming this tool call and a previously-suspended\n            // bg task exists for this toolCallId+runId, resume the bg task with\n            // the agent-resume payload instead of dispatching a fresh one.\n            const isSuspendedBgResume =\n              isResumingFromSuspension && resumeData && typeof resumeData === 'object' && resumeData !== null;\n            if (isSuspendedBgResume) {\n              const isSuspended = await bgTask.checkIfSuspended({\n                toolCallId,\n                runId,\n                agentId: initData.agentId,\n                threadId: state?.threadId,\n                resourceId: state?.resourceId,\n                toolName,\n              });\n              if (isSuspended) {\n                const task = await bgTask.resume(resumeData);\n                return {\n                  ...typedInput,\n                  args: cleanedArgs,\n                  result: `Background task resumed. Task ID: ${task.id}. The tool \"${toolName}\" is running in the background. You will be notified when it completes.`,\n                };\n              }\n            }\n\n            const { task, fallbackToSync } = await bgTask.dispatch();\n\n            if (!fallbackToSync) {\n              // Emit background-task-started chunk via PubSub\n              if (pubsub) {\n                await emitChunkEvent(pubsub, runId, {\n                  type: 'background-task-started' as any,\n                  runId,\n                  from: ChunkFrom.AGENT,\n                  payload: {\n                    taskId: task.id,\n                    toolName,\n                    toolCallId,\n                  },\n                });\n              }\n\n              // Return placeholder result so the LLM can continue\n              return {\n                ...typedInput,\n                args: cleanedArgs,\n                result: `Background task started. Task ID: ${task.id}. The tool \"${toolName}\" is running in the background. You will be notified when it completes.`,\n              };\n            }\n            // fallbackToSync: concurrency limit hit, fall through to synchronous execution\n          } catch (bgError) {\n            logger?.debug?.(\n              `[DurableAgent] Background task dispatch failed for ${toolName}, falling back to sync: ${bgError}`,\n            );\n          }\n        }\n      }\n\n      try {\n        const result = await tool.execute(cleanedArgs, toolOptions);\n\n        // Emit tool-result chunk (non-fatal — result is returned regardless)\n        if (pubsub) {\n          try {\n            await emitChunkEvent(pubsub, runId, {\n              type: 'tool-result',\n              runId,\n              from: ChunkFrom.AGENT,\n              payload: { toolCallId, toolName, args, result },\n            });\n          } catch (emitError) {\n            logger?.warn?.(`[DurableAgent] Failed to emit tool-result chunk for ${toolName}: ${emitError}`);\n          }\n        }\n\n        return {\n          ...typedInput,\n          result,\n        };\n      } catch (error) {\n        const toolError = serializeError(error);\n\n        // Emit tool-error chunk (non-fatal — error result is returned regardless)\n        if (pubsub) {\n          try {\n            await emitChunkEvent(pubsub, runId, {\n              type: 'tool-error',\n              runId,\n              from: ChunkFrom.AGENT,\n              payload: { toolCallId, toolName, args, error: toolError },\n            });\n          } catch (emitError) {\n            logger?.warn?.(`[DurableAgent] Failed to emit tool-error chunk for ${toolName}: ${emitError}`);\n          }\n        }\n\n        return {\n          ...typedInput,\n          error: toolError,\n        };\n      }\n    },\n  });\n}\n","import { z } from 'zod';\nimport { createStep } from '../../../../workflows';\nimport { MessageList } from '../../../message-list';\nimport type { MastraDBMessage } from '../../../message-list';\nimport { DurableStepIds } from '../../constants';\nimport type {\n  DurableLLMStepOutput,\n  DurableToolCallOutput,\n  DurableAgenticExecutionOutput,\n  SerializableDurableState,\n} from '../../types';\n\n/**\n * Input schema for the durable LLM mapping step.\n * This combines the LLM execution output with tool call results.\n */\nconst durableLLMMappingInputSchema = z.object({\n  llmOutput: z.any(), // DurableLLMStepOutput\n  toolResults: z.array(z.any()), // DurableToolCallOutput[]\n  runId: z.string(),\n  agentId: z.string(),\n  messageId: z.string(),\n  state: z.any(), // SerializableDurableState\n});\n\n/**\n * Output schema for the durable LLM mapping step\n */\nconst durableLLMMappingOutputSchema = z.object({\n  messageListState: z.any(),\n  messageId: z.string(),\n  stepResult: z.any(),\n  toolResults: z.array(z.any()),\n  output: z.object({\n    text: z.string().optional(),\n    toolCalls: z.array(z.any()).optional(),\n    usage: z.any(),\n    steps: z.array(z.any()),\n  }),\n  state: z.any(),\n  processorRetryCount: z.number().optional(),\n  processorRetryFeedback: z.string().optional(),\n});\n\n/**\n * Create a durable LLM mapping step.\n *\n * This step:\n * 1. Takes the LLM execution output and tool call results\n * 2. Updates the message list with tool results\n * 3. Combines everything into the final iteration output\n *\n * This is the \"merge\" step that combines parallel tool call results\n * back into a single coherent state.\n */\nexport function createDurableLLMMappingStep() {\n  return createStep({\n    id: DurableStepIds.LLM_MAPPING,\n    inputSchema: durableLLMMappingInputSchema,\n    outputSchema: durableLLMMappingOutputSchema,\n    execute: async ({ inputData }) => {\n      const {\n        llmOutput,\n        toolResults,\n        runId: _runId,\n        agentId: _agentId,\n        messageId,\n        state,\n      } = inputData as {\n        llmOutput: DurableLLMStepOutput;\n        toolResults: DurableToolCallOutput[];\n        runId: string;\n        agentId: string;\n        messageId: string;\n        state: SerializableDurableState;\n      };\n\n      // 1. Deserialize message list\n      const messageList = new MessageList({\n        threadId: state.threadId,\n        resourceId: state.resourceId,\n      });\n      messageList.deserialize(llmOutput.messageListState);\n\n      // 2. Add tool results to message list\n      if (toolResults.length > 0) {\n        // Create tool result parts for each tool call\n        const toolResultParts = toolResults.map(toolResult => {\n          // Determine the result content\n          let resultContent: string;\n          if (toolResult.error) {\n            resultContent = `Error: ${toolResult.error.message}`;\n          } else if (toolResult.result !== undefined) {\n            resultContent =\n              typeof toolResult.result === 'string' ? toolResult.result : JSON.stringify(toolResult.result);\n          } else {\n            resultContent = '';\n          }\n\n          return {\n            type: 'tool-invocation' as const,\n            toolInvocation: {\n              state: 'result' as const,\n              toolCallId: toolResult.toolCallId,\n              toolName: toolResult.toolName,\n              args: toolResult.args,\n              result: resultContent,\n            },\n          };\n        });\n\n        // Add as assistant message with tool results\n        const toolResultMessage: MastraDBMessage = {\n          id: crypto.randomUUID(),\n          role: 'assistant' as const,\n          content: {\n            format: 2,\n            parts: toolResultParts,\n          },\n          createdAt: new Date(),\n        };\n\n        messageList.add(toolResultMessage, 'response');\n      }\n\n      // 3. Determine if we should continue\n      // Preserve the LLM step's isContinued (which respects finishReason).\n      // Keep ToolNotFoundError recoverable so the model can see the error and\n      // retry with one of the currently available tool names.\n      const allToolsErrored = toolResults.length > 0 && toolResults.every(r => r.error !== undefined);\n      const allToolsNotFound = allToolsErrored && toolResults.every(r => r.error?.name === 'ToolNotFoundError');\n      const isContinued = llmOutput.stepResult.isContinued && (!allToolsErrored || allToolsNotFound);\n\n      // 4. Build the output\n      const output: DurableAgenticExecutionOutput = {\n        messageListState: messageList.serialize(),\n        messageId,\n        stepResult: {\n          ...llmOutput.stepResult,\n          isContinued,\n        },\n        toolResults,\n        output: {\n          text: undefined, // Text is in the LLM output, would be extracted from assistant message\n          toolCalls: llmOutput.toolCalls,\n          usage: llmOutput.stepResult.totalUsage ?? {\n            inputTokens: 0,\n            outputTokens: 0,\n            totalTokens: 0,\n          },\n          steps: [], // Steps are accumulated at the loop level\n        },\n        state: {\n          ...state,\n          threadExists: state.threadExists,\n        },\n        processorRetryCount: llmOutput.processorRetryCount,\n        processorRetryFeedback: llmOutput.processorRetryFeedback,\n      };\n\n      return output;\n    },\n  });\n}\n","import { z } from 'zod';\nimport type { MastraScorer, MastraScorerEntry } from '../../../evals/base';\nimport { runScorer } from '../../../evals/hooks';\nimport type { PubSub } from '../../../events/pubsub';\nimport type { Mastra } from '../../../mastra';\nimport { createObservabilityContext, InternalSpans } from '../../../observability';\nimport { RequestContext } from '../../../request-context';\nimport { createWorkflow } from '../../../workflows';\nimport { PUBSUB_SYMBOL } from '../../../workflows/constants';\nimport { MessageList } from '../../message-list';\nimport { DurableStepIds, DurableAgentDefaults } from '../constants';\nimport { globalRunRegistry } from '../run-registry';\nimport { emitFinishEvent } from '../stream-adapter';\nimport type {\n  DurableToolCallInput,\n  DurableAgenticWorkflowInput,\n  DurableAgenticExecutionOutput,\n  DurableLLMStepOutput,\n  DurableToolCallOutput,\n  SerializableScorersConfig,\n} from '../types';\nimport {\n  modelConfigSchema,\n  modelListEntrySchema,\n  durableAgenticOutputSchema,\n  baseIterationStateSchema,\n  createBaseIterationStateUpdate,\n} from './shared';\nimport {\n  createDurableBackgroundTaskCheckStep,\n  createDurableLLMExecutionStep,\n  createDurableToolCallStep,\n  createDurableLLMMappingStep,\n} from './steps';\n\n/**\n * Options for creating a durable agentic workflow\n */\nexport interface DurableAgenticWorkflowOptions {\n  /** Maximum number of agentic loop iterations */\n  maxSteps?: number;\n}\n\n/**\n * Input schema for the durable agentic workflow.\n * Extends base schema with model list for fallback support.\n */\nconst durableAgenticInputSchema = z.object({\n  __workflowKind: z.literal('durable-agent'),\n  runId: z.string(),\n  agentId: z.string(),\n  agentName: z.string().optional(),\n  messageListState: z.any(),\n  toolsMetadata: z.array(z.any()),\n  modelConfig: modelConfigSchema,\n  // Model list for fallback support (when agent configured with array of models)\n  modelList: z.array(modelListEntrySchema).optional(),\n  options: z.any(),\n  state: z.any(),\n  messageId: z.string(),\n});\n\n// Re-export shared output schema (identical across implementations)\n// Note: durableAgenticOutputSchema is imported from shared\n\n/**\n * Schema for the iteration state that flows through the dowhile loop.\n * Extends base schema with model list for fallback support.\n */\nconst iterationStateSchema = baseIterationStateSchema.extend({\n  // Model list for fallback support\n  modelList: z.array(z.any()).optional(),\n});\n\ntype IterationState = z.infer<typeof iterationStateSchema>;\n\n/**\n * Create a durable agentic workflow.\n *\n * This workflow implements the agentic loop pattern in a durable way:\n *\n * 1. LLM Execution Step - Calls the LLM and gets response/tool calls\n * 2. Tool Call Steps (foreach) - Executes each tool call in parallel\n * 3. LLM Mapping Step - Merges tool results back into state\n * 4. Loop - Continues if more tool calls are needed (dowhile)\n *\n * All state flows through workflow input/output, making it durable across\n * process restarts and execution engine replays.\n */\nexport function createDurableAgenticWorkflow(options?: DurableAgenticWorkflowOptions) {\n  const maxSteps = options?.maxSteps ?? DurableAgentDefaults.MAX_STEPS;\n\n  // Create the LLM execution step - tools and model are resolved from Mastra at runtime\n  const llmExecutionStep = createDurableLLMExecutionStep();\n\n  // Create the tool call step - each tool call runs as its own step with suspend support\n  const toolCallStep = createDurableToolCallStep();\n\n  // Create the LLM mapping step\n  const llmMappingStep = createDurableLLMMappingStep();\n\n  // Create the background task check step\n  const backgroundTaskCheckStep = createDurableBackgroundTaskCheckStep();\n\n  // Create the single iteration workflow (LLM -> Tool Calls -> Mapping)\n  // Note: foreach runs with concurrency: 1 (sequential) because tool approval\n  // and suspension require sequential execution to properly handle suspend/resume.\n  // The workflow is created once at startup and reused for all runs.\n  const singleIterationWorkflow = createWorkflow({\n    id: DurableStepIds.AGENTIC_EXECUTION,\n    inputSchema: iterationStateSchema,\n    outputSchema: iterationStateSchema,\n    options: {\n      shouldPersistSnapshot: ({ workflowStatus }) => workflowStatus === 'suspended',\n      validateInputs: false,\n      sharePubsub: true,\n      // Internal durable-agent execution plumbing — hide workflow spans;\n      // the agent/tool/model spans within still surface for users.\n      tracingPolicy: {\n        internal: InternalSpans.WORKFLOW,\n      },\n    },\n  })\n    // Step 0: Convert iteration state to LLM input format\n    .map(\n      async ({ inputData }) => {\n        const state = inputData as IterationState;\n        return {\n          runId: state.runId,\n          agentId: state.agentId,\n          agentName: state.agentName,\n          messageListState: state.messageListState,\n          toolsMetadata: state.toolsMetadata,\n          modelConfig: state.modelConfig,\n          modelList: state.modelList,\n          options: state.options,\n          state: state.state,\n          messageId: state.messageId,\n        };\n      },\n      { id: 'map-to-llm-input' },\n    )\n    // Step 1: Execute LLM\n    .then(llmExecutionStep)\n    // Step 2: Extract tool calls as array for foreach\n    .map(\n      async ({ inputData }) => {\n        const llmOutput = inputData as DurableLLMStepOutput;\n        return (llmOutput.toolCalls ?? []) as DurableToolCallInput[];\n      },\n      { id: 'extract-tool-calls' },\n    )\n    // Step 3: Execute each tool call individually (with suspend support)\n    .foreach(toolCallStep)\n    // Step 4: Collect tool results and bundle with LLM output for mapping step\n    .map(\n      async ({ inputData, getStepResult, getInitData }) => {\n        const toolResults = inputData as DurableToolCallOutput[];\n        const llmOutput = getStepResult(llmExecutionStep.id) as DurableLLMStepOutput;\n        const initData = getInitData() as IterationState;\n\n        return {\n          llmOutput,\n          toolResults,\n          runId: initData.runId,\n          agentId: initData.agentId,\n          messageId: initData.messageId,\n          state: llmOutput?.state ?? initData.state,\n        };\n      },\n      { id: 'collect-tool-results' },\n    )\n    // Step 5: Map tool results back to state\n    .then(llmMappingStep)\n    // Step 6: Check for pending background tasks\n    .then(backgroundTaskCheckStep)\n    // Step 7: Map back to iteration state format using shared function\n    .map(\n      async ({ inputData, getInitData }) => {\n        const executionOutput = inputData as DurableAgenticExecutionOutput;\n        const initData = getInitData() as IterationState;\n\n        // Use shared function for base state update\n        const baseUpdate = createBaseIterationStateUpdate({\n          currentState: initData,\n          executionOutput,\n        });\n\n        // Extend with core-specific fields\n        const newIterationState: IterationState = {\n          ...baseUpdate,\n          modelList: initData.modelList,\n        };\n\n        return newIterationState;\n      },\n      { id: 'update-iteration-state' },\n    )\n    .commit();\n\n  // Create the main agentic loop workflow with dowhile\n  return (\n    createWorkflow({\n      id: DurableStepIds.AGENTIC_LOOP,\n      inputSchema: durableAgenticInputSchema,\n      outputSchema: durableAgenticOutputSchema,\n      options: {\n        shouldPersistSnapshot: ({ workflowStatus }) => workflowStatus === 'suspended',\n        validateInputs: false,\n        // Internal durable-agent execution plumbing — see singleIterationWorkflow.\n        tracingPolicy: {\n          internal: InternalSpans.WORKFLOW,\n        },\n      },\n    })\n      // Initialize iteration state from input\n      .map(\n        async ({ inputData }) => {\n          const input = inputData as DurableAgenticWorkflowInput;\n          const iterationState: IterationState = {\n            ...input,\n            iterationCount: 0,\n            accumulatedSteps: [],\n            accumulatedUsage: {\n              inputTokens: 0,\n              outputTokens: 0,\n              totalTokens: 0,\n            },\n            lastStepResult: undefined,\n          };\n          return iterationState;\n        },\n        { id: 'init-iteration-state' },\n      )\n      // Run the agentic loop with dowhile\n      .dowhile(singleIterationWorkflow, async ({ inputData }) => {\n        const state = inputData as IterationState;\n\n        // Check if we should continue\n        const shouldContinue = state.lastStepResult?.isContinued === true;\n        const runMaxSteps = state.options?.maxSteps ?? maxSteps;\n        const underMaxSteps = state.iterationCount < runMaxSteps;\n\n        return shouldContinue && underMaxSteps;\n      })\n      // Map final state to output format, run output processors, persist memory, emit finish\n      .map(\n        async params => {\n          const { inputData, mastra, requestContext } = params;\n          const state = inputData as IterationState;\n          const initData = params.getInitData() as DurableAgenticWorkflowInput;\n\n          const pubsub = (params as any)[PUBSUB_SYMBOL] as PubSub | undefined;\n          const logger = mastra?.getLogger?.();\n\n          // Extract final text from last step\n          const lastStep = state.accumulatedSteps[state.accumulatedSteps.length - 1];\n          const finalText = lastStep?.text;\n\n          // Run output processors (processOutputResult) if available\n          const registryEntry = globalRunRegistry.get(state.runId);\n          if (registryEntry?.outputProcessors?.length) {\n            try {\n              const { ProcessorRunner } = await import('../../../processors/runner');\n              const runner = new ProcessorRunner({\n                inputProcessors: registryEntry.inputProcessors ?? [],\n                outputProcessors: registryEntry.outputProcessors,\n                errorProcessors: registryEntry.errorProcessors ?? [],\n                logger: logger as any,\n                agentName: initData.agentName ?? initData.agentId,\n                processorStates: registryEntry.processorStates,\n              });\n              const outputMessageList = new MessageList();\n              outputMessageList.deserialize(state.messageListState);\n              await runner.runOutputProcessors(outputMessageList, {} as any, requestContext ?? new RequestContext(), 0);\n            } catch (error) {\n              logger?.warn?.(`[DurableAgent] Error running output processors: ${error}`);\n            }\n          }\n\n          // Memory persistence (executeOnFinish equivalent)\n          const durableState = initData.state;\n          if (\n            registryEntry?.saveQueueManager &&\n            registryEntry.memory &&\n            durableState?.threadId &&\n            durableState?.resourceId &&\n            !durableState.observationalMemory\n          ) {\n            try {\n              const memoryMessageList = new MessageList();\n              memoryMessageList.deserialize(state.messageListState);\n\n              if (!durableState.threadExists) {\n                await registryEntry.memory.createThread?.({\n                  threadId: durableState.threadId,\n                  resourceId: durableState.resourceId,\n                  memoryConfig: durableState.memoryConfig,\n                });\n              }\n\n              await registryEntry.saveQueueManager.flushMessages(\n                memoryMessageList,\n                durableState.threadId,\n                durableState.memoryConfig,\n              );\n            } catch (error) {\n              logger?.warn?.(`[DurableAgent] Error persisting messages: ${error}`);\n            }\n          }\n\n          const finalOutput = {\n            messageListState: state.messageListState,\n            messageId: state.messageId,\n            stepResult: state.lastStepResult || {\n              reason: 'stop',\n              warnings: [],\n              isContinued: false,\n            },\n            output: {\n              text: finalText,\n              usage: state.accumulatedUsage,\n              steps: state.accumulatedSteps,\n            },\n            state: state.state,\n          };\n\n          if (pubsub) {\n            await emitFinishEvent(pubsub, state.runId, {\n              output: finalOutput.output,\n              stepResult: finalOutput.stepResult,\n            });\n          }\n\n          return finalOutput;\n        },\n        { id: 'map-final-output' },\n      )\n      // Execute scorers (fire-and-forget, doesn't affect main result)\n      .map(\n        async params => {\n          const { inputData, getInitData, mastra, requestContext, tracingContext } = params;\n          const finalOutput = inputData;\n          const initData = getInitData() as DurableAgenticWorkflowInput;\n\n          // If no scorers configured, skip\n          const scorers = initData.scorers as SerializableScorersConfig | undefined;\n          if (!scorers || Object.keys(scorers).length === 0) {\n            return finalOutput;\n          }\n\n          const logger = mastra?.getLogger?.();\n\n          // Reconstruct input MessageList to extract scorer input\n          const inputMessageList = new MessageList();\n          inputMessageList.deserialize(initData.messageListState);\n\n          // Build scorer input (messages before generation)\n          const scorerInput = {\n            inputMessages: inputMessageList.getPersisted.input.db(),\n            rememberedMessages: inputMessageList.getPersisted.remembered.db(),\n            systemMessages: inputMessageList.getSystemMessages(),\n            taggedSystemMessages: inputMessageList.getPersisted.taggedSystemMessages,\n          };\n\n          // Reconstruct output MessageList to extract scorer output\n          const outputMessageList = new MessageList();\n          outputMessageList.deserialize(finalOutput.messageListState);\n          const scorerOutput = outputMessageList.getPersisted.response.db();\n\n          // Create request context for scorer resolution\n          const resolveContext = requestContext ?? new RequestContext();\n\n          // Execute each scorer (fire-and-forget)\n          for (const [scorerKey, scorerEntry] of Object.entries(scorers)) {\n            const { scorerName, sampling } = scorerEntry;\n\n            try {\n              // Resolve the scorer from Mastra\n              const scorer = (mastra as Mastra)?.getScorer?.(scorerName) as MastraScorer | undefined;\n\n              if (!scorer) {\n                logger?.warn?.(`Scorer ${scorerName} not found in Mastra, skipping`, {\n                  runId: initData.runId,\n                  scorerKey,\n                });\n                continue;\n              }\n\n              // Create the scorer entry expected by runScorer\n              const scorerObject: MastraScorerEntry = {\n                scorer,\n                sampling,\n              };\n\n              // Call runScorer (fire-and-forget via hooks)\n              runScorer({\n                runId: initData.runId,\n                scorerId: scorerKey,\n                scorerObject,\n                input: scorerInput,\n                output: scorerOutput,\n                requestContext: resolveContext as any,\n                entity: {\n                  id: initData.agentId,\n                  name: initData.agentName ?? initData.agentId,\n                },\n                structuredOutput: false,\n                source: 'LIVE',\n                entityType: 'AGENT',\n                threadId: initData.state?.threadId,\n                resourceId: initData.state?.resourceId,\n                ...createObservabilityContext(tracingContext),\n              });\n            } catch (error) {\n              // Log but don't fail - scorer errors shouldn't affect main execution\n              logger?.warn?.(`Error executing scorer ${scorerName}`, {\n                error,\n                runId: initData.runId,\n                scorerKey,\n              });\n            }\n          }\n\n          return finalOutput;\n        },\n        { id: 'execute-scorers' },\n      )\n      .commit()\n  );\n}\n","import type { MastraServerCache } from '../../cache/base';\nimport { InMemoryServerCache } from '../../cache/inmemory';\nimport { CachingPubSub } from '../../events/caching-pubsub';\nimport { EventEmitterPubSub } from '../../events/event-emitter';\nimport type { PubSub } from '../../events/pubsub';\nimport type { Mastra } from '../../mastra';\nimport type { MastraModelOutput } from '../../stream/base/output';\nimport type { ChunkType } from '../../stream/types';\nimport { Agent } from '../agent';\nimport type { AgentExecutionOptions } from '../agent.types';\nimport type { MessageListInput } from '../message-list';\nimport type { ToolsInput } from '../types';\n\nimport { AGENT_STREAM_TOPIC } from './constants';\nimport { runDurableStreamUntilIdle } from './durable-stream-until-idle';\nimport { prepareForDurableExecution } from './preparation';\nimport { ExtendedRunRegistry, globalRunRegistry } from './run-registry';\nimport { createDurableAgentStream, emitErrorEvent } from './stream-adapter';\nimport type {\n  AgentFinishEventData,\n  AgentStepFinishEventData,\n  AgentSuspendedEventData,\n  DurableAgenticWorkflowInput,\n} from './types';\nimport { createDurableAgenticWorkflow } from './workflows';\n\n/**\n * Options for DurableAgent.stream()\n */\nexport interface DurableAgentStreamOptions<OUTPUT = undefined> {\n  /** Custom instructions that override the agent's default instructions for this execution */\n  instructions?: AgentExecutionOptions<OUTPUT>['instructions'];\n  /** Additional context messages to provide to the agent */\n  context?: AgentExecutionOptions<OUTPUT>['context'];\n  /** Memory configuration for conversation persistence and retrieval */\n  memory?: AgentExecutionOptions<OUTPUT>['memory'];\n  /** Unique identifier for this execution run */\n  runId?: string;\n  /** Request Context containing dynamic configuration and state */\n  requestContext?: AgentExecutionOptions<OUTPUT>['requestContext'];\n  /** Maximum number of steps to run */\n  maxSteps?: number;\n  /** Additional tool sets that can be used for this execution */\n  toolsets?: AgentExecutionOptions<OUTPUT>['toolsets'];\n  /** Client-side tools available during execution */\n  clientTools?: AgentExecutionOptions<OUTPUT>['clientTools'];\n  /** Tool selection strategy */\n  toolChoice?: AgentExecutionOptions<OUTPUT>['toolChoice'];\n  /** Tool names enabled for this execution */\n  activeTools?: AgentExecutionOptions<OUTPUT>['activeTools'];\n  /** Model-specific settings like temperature */\n  modelSettings?: AgentExecutionOptions<OUTPUT>['modelSettings'];\n  /** Require approval for all tool calls */\n  requireToolApproval?: boolean;\n  /** Automatically resume suspended tools */\n  autoResumeSuspendedTools?: boolean;\n  /** Maximum number of tool calls to execute concurrently */\n  toolCallConcurrency?: number;\n  /** Whether to include raw chunks in the stream output */\n  includeRawChunks?: boolean;\n  /** Maximum processor retries */\n  maxProcessorRetries?: number;\n  /** Structured output configuration */\n  structuredOutput?: AgentExecutionOptions<OUTPUT>['structuredOutput'];\n  /** Version overrides for sub-agent delegation */\n  versions?: AgentExecutionOptions<OUTPUT>['versions'];\n  /** Callback when chunk is received */\n  onChunk?: (chunk: ChunkType<OUTPUT>) => void | Promise<void>;\n  /** Callback when step finishes */\n  onStepFinish?: (result: AgentStepFinishEventData) => void | Promise<void>;\n  /** Callback when execution finishes */\n  onFinish?: (result: AgentFinishEventData) => void | Promise<void>;\n  /** Callback on error */\n  onError?: (error: Error) => void | Promise<void>;\n  /** Callback when workflow suspends (e.g., for tool approval) */\n  onSuspended?: (data: AgentSuspendedEventData) => void | Promise<void>;\n  /** When true, the in-loop background task check step skips waiting (streamUntilIdle sets this) */\n  _skipBgTaskWait?: boolean;\n}\n\n/**\n * Result from DurableAgent.stream()\n */\nexport interface DurableAgentStreamResult<OUTPUT = undefined> {\n  /** The streaming output */\n  output: MastraModelOutput<OUTPUT>;\n  /** The full stream - delegates to output.fullStream for server compatibility */\n  readonly fullStream: ReadableStream<any>;\n  /** The unique run ID for this execution */\n  runId: string;\n  /** Thread ID if using memory */\n  threadId?: string;\n  /** Resource ID if using memory */\n  resourceId?: string;\n  /** Cleanup function to call when done (unsubscribes from pubsub) */\n  cleanup: () => void;\n}\n\n/**\n * Configuration for DurableAgent - wraps an existing Agent with durable execution\n */\nexport interface DurableAgentConfig<\n  TAgentId extends string = string,\n  TTools extends ToolsInput = ToolsInput,\n  TOutput = undefined,\n> {\n  /**\n   * The Agent to wrap with durable execution capabilities.\n   * All agent methods (getModel, listTools, etc.) delegate to this agent.\n   */\n  agent: Agent<TAgentId, TTools, TOutput>;\n\n  /**\n   * Optional ID override. Defaults to agent.id.\n   */\n  id?: TAgentId;\n\n  /**\n   * Optional name override. Defaults to agent.name.\n   */\n  name?: string;\n\n  /**\n   * PubSub instance for streaming events.\n   * Optional - if not provided, defaults to EventEmitterPubSub.\n   */\n  pubsub?: PubSub;\n\n  /**\n   * Cache instance for storing stream events.\n   * Enables resumable streams - clients can disconnect and reconnect\n   * without missing events.\n   *\n   * - If not provided: Inherits from Mastra instance, or uses InMemoryServerCache\n   * - If provided: Uses the provided cache backend (e.g., Redis)\n   * - If set to `false`: Disables caching (streams are not resumable)\n   */\n  cache?: MastraServerCache | false;\n\n  /**\n   * Maximum steps for the agentic loop.\n   * Defaults to the workflow default if not specified.\n   */\n  maxSteps?: number;\n\n  /**\n   * Timeout in milliseconds before automatic cleanup of registry entries\n   * after a stream finishes or errors. This provides a grace period for\n   * late observers to access the stream.\n   *\n   * Defaults to 30000 (30 seconds).\n   * Set to 0 to disable auto-cleanup (manual cleanup() required).\n   */\n  cleanupTimeoutMs?: number;\n}\n\n/**\n * DurableAgent wraps an existing Agent with durable execution capabilities.\n *\n * Key features:\n * 1. Resumable streams - clients can disconnect and reconnect without missing events\n * 2. Serializable workflow inputs - works with durable execution engines\n * 3. PubSub-based streaming - events flow through pubsub for distribution\n *\n * DurableAgent extends Agent, delegating most methods to the wrapped agent.\n * It overrides stream() to use durable execution with the agentic workflow.\n *\n * Subclasses (EventedAgent, InngestAgent) override executeWorkflow() to\n * customize how the workflow is executed.\n *\n * @example\n * ```typescript\n * import { Agent } from '@mastra/core/agent';\n * import { DurableAgent } from '@mastra/core/agent/durable';\n *\n * const agent = new Agent({\n *   id: 'my-agent',\n *   instructions: 'You are a helpful assistant',\n *   model: openai('gpt-4'),\n * });\n *\n * const durableAgent = new DurableAgent({ agent });\n *\n * const { output, runId, cleanup } = await durableAgent.stream('Hello!');\n * const text = await output.text;\n * cleanup();\n * ```\n */\nexport class DurableAgent<\n  TAgentId extends string = string,\n  TTools extends ToolsInput = ToolsInput,\n  TOutput = undefined,\n> extends Agent<TAgentId, TTools, TOutput> {\n  /** The wrapped agent */\n  readonly #wrappedAgent: Agent<TAgentId, TTools, TOutput>;\n\n  /** Registry for per-run non-serializable state */\n  readonly #runRegistry: ExtendedRunRegistry;\n\n  /** The durable workflow for agent execution */\n  #workflow: ReturnType<typeof createDurableAgenticWorkflow> | null = null;\n\n  /** Maximum steps for the agentic loop */\n  readonly #maxSteps?: number;\n\n  /** Inner pubsub (before CachingPubSub wrapper) */\n  #innerPubsub: PubSub;\n\n  /** Whether the user explicitly provided a pubsub (don't override with mastra.pubsub) */\n  readonly #hasCustomPubsub: boolean;\n\n  /** User-provided cache (undefined = inherit from mastra, false = disabled) */\n  #cacheConfig: MastraServerCache | false | undefined;\n\n  /** Resolved cache instance (lazily initialized) */\n  #resolvedCache: MastraServerCache | null = null;\n\n  /** CachingPubSub instance (lazily initialized) */\n  #cachingPubsub: PubSub | null = null;\n\n  /** Mastra instance (set via __setMastra when registered) */\n  #mastra: Mastra | undefined;\n\n  /** Active streamUntilIdle wrappers keyed by scope (threadId|resourceId) */\n  #activeStreamUntilIdle = new Map<string, () => void>();\n\n  /** Timeout for auto-cleanup after stream finishes (0 = disabled) */\n  readonly #cleanupTimeoutMs: number;\n\n  /**\n   * Create a new DurableAgent that wraps an existing Agent\n   */\n  constructor(config: DurableAgentConfig<TAgentId, TTools, TOutput>) {\n    const { agent, id: idOverride, name: nameOverride, pubsub, cache, maxSteps, cleanupTimeoutMs } = config;\n\n    // Use provided id/name or fall back to agent.id/agent.name\n    const agentId = idOverride ?? agent.id;\n    const agentName = nameOverride ?? agent.name ?? agent.id;\n\n    // Call Agent constructor with minimal config - we delegate to the wrapped agent\n    super({\n      id: agentId as TAgentId,\n      name: agentName,\n      // Delegate to wrapped agent's instructions\n      instructions: ({ requestContext }) => agent.getInstructions({ requestContext }),\n      // We need to provide model to satisfy the base class, but we'll delegate to wrapped agent\n      model: (agent as any).__model ?? agent.getModel(),\n    });\n\n    this.#wrappedAgent = agent;\n    this.#runRegistry = new ExtendedRunRegistry();\n    this.#maxSteps = maxSteps;\n    this.#hasCustomPubsub = !!pubsub;\n    this.#innerPubsub = pubsub ?? new EventEmitterPubSub();\n    this.#cacheConfig = cache;\n    this.#cleanupTimeoutMs = cleanupTimeoutMs ?? 30_000;\n  }\n\n  // ===========================================================================\n  // Lazy PubSub/Cache initialization (allows inheriting cache from Mastra)\n  // ===========================================================================\n\n  /**\n   * Get the resolved cache instance.\n   * Lazily initialized to allow inheriting from Mastra.\n   */\n  get cache(): MastraServerCache | null {\n    this.#ensurePubsubInitialized();\n    return this.#resolvedCache;\n  }\n\n  /**\n   * Get the PubSub instance.\n   * Returns CachingPubSub if caching is enabled, otherwise the inner pubsub.\n   */\n  get pubsub(): PubSub {\n    this.#ensurePubsubInitialized();\n    return this.#cachingPubsub!;\n  }\n\n  /**\n   * Ensure pubsub and cache are initialized.\n   * Called lazily on first access to allow inheriting cache from Mastra.\n   */\n  #ensurePubsubInitialized(): void {\n    if (this.#cachingPubsub) return;\n\n    if (this.#cacheConfig === false) {\n      // Caching explicitly disabled\n      this.#cachingPubsub = this.#innerPubsub;\n      this.#resolvedCache = null;\n    } else {\n      // Resolve cache: user-provided > mastra's cache > default InMemoryServerCache\n      const resolvedCache = this.#cacheConfig ?? this.#mastra?.serverCache ?? new InMemoryServerCache();\n      this.#resolvedCache = resolvedCache;\n      this.#cachingPubsub = new CachingPubSub(this.#innerPubsub, resolvedCache);\n    }\n  }\n\n  // ===========================================================================\n  // Delegate to wrapped agent\n  // ===========================================================================\n\n  /**\n   * Get the wrapped agent instance.\n   */\n  get agent(): Agent<TAgentId, TTools, TOutput> {\n    return this.#wrappedAgent;\n  }\n\n  /**\n   * Get the run registry (for testing and advanced usage)\n   */\n  get runRegistry(): ExtendedRunRegistry {\n    return this.#runRegistry;\n  }\n\n  /**\n   * Get the max steps configured for this agent\n   */\n  get maxSteps(): number | undefined {\n    return this.#maxSteps;\n  }\n\n  /**\n   * Get the cleanup timeout in milliseconds.\n   * Returns 0 if auto-cleanup is disabled.\n   */\n  get cleanupTimeoutMs(): number {\n    return this.#cleanupTimeoutMs;\n  }\n\n  // Delegate Agent methods to wrapped agent\n  override getModel(options?: any) {\n    return this.#wrappedAgent.getModel(options);\n  }\n\n  override getInstructions(options?: any) {\n    return this.#wrappedAgent.getInstructions(options);\n  }\n\n  override listTools(options?: any) {\n    return this.#wrappedAgent.listTools(options);\n  }\n\n  override getMemory() {\n    return this.#wrappedAgent.getMemory();\n  }\n\n  override getVoice() {\n    return this.#wrappedAgent.getVoice();\n  }\n\n  // ===========================================================================\n  // Protected methods for subclass overrides\n  // ===========================================================================\n\n  /**\n   * Get the PubSub instance for use by subclasses.\n   * @internal\n   */\n  protected get pubsubInternal(): PubSub {\n    return this.pubsub;\n  }\n\n  /**\n   * Get the run registry for use by subclasses.\n   * @internal\n   */\n  protected get runRegistryInternal(): ExtendedRunRegistry {\n    return this.#runRegistry;\n  }\n\n  /**\n   * Execute the durable workflow.\n   *\n   * Subclasses override this method to customize how the workflow is executed:\n   * - DurableAgent (this): Runs the workflow directly via createRun + start\n   * - EventedAgent: Uses run.startAsync() for fire-and-forget execution\n   * - InngestAgent: Uses inngest.send() to trigger Inngest function\n   *\n   * @param runId - The unique run ID\n   * @param workflowInput - The serialized workflow input\n   * @internal\n   */\n  protected async executeWorkflow(runId: string, workflowInput: DurableAgenticWorkflowInput): Promise<void> {\n    const workflow = this.getWorkflow();\n    const requestContext = globalRunRegistry.get(runId)?.requestContext;\n\n    const run = await workflow.createRun({ runId, pubsub: this.pubsub });\n    const result = await run.start({ inputData: workflowInput, requestContext });\n\n    if (result?.status === 'failed') {\n      const error = new Error((result as any).error?.message || 'Workflow execution failed');\n      await this.emitError(runId, error);\n    }\n  }\n\n  /**\n   * Create the durable workflow for this agent.\n   *\n   * Subclasses can override this method to use a different workflow implementation:\n   * - DurableAgent (this): Uses createDurableAgenticWorkflow()\n   * - InngestAgent: Uses createInngestDurableAgenticWorkflow()\n   *\n   * @internal\n   */\n  protected createWorkflow(): ReturnType<typeof createDurableAgenticWorkflow> {\n    return createDurableAgenticWorkflow({\n      maxSteps: this.#maxSteps,\n    });\n  }\n\n  /**\n   * Emit an error event to pubsub.\n   *\n   * @param runId - The run ID\n   * @param error - The error to emit\n   * @internal\n   */\n  protected async emitError(runId: string, error: Error): Promise<void> {\n    await emitErrorEvent(this.pubsub, runId, error);\n  }\n\n  // ===========================================================================\n  // Public API\n  // ===========================================================================\n\n  /**\n   * Stream a response from the agent using durable execution.\n   */\n  // @ts-expect-error - Intentionally different signature for durable execution\n  async stream(\n    messages: MessageListInput,\n    options?: DurableAgentStreamOptions<TOutput>,\n  ): Promise<DurableAgentStreamResult<TOutput>> {\n    // 1. Prepare for durable execution (non-durable phase)\n    const preparation = await prepareForDurableExecution<TOutput>({\n      agent: this.#wrappedAgent as Agent<string, any, TOutput>,\n      messages,\n      options: options as AgentExecutionOptions<TOutput>,\n      runId: options?.runId,\n      requestContext: options?.requestContext,\n      mastra: this.#mastra,\n    });\n\n    const { runId, messageId, workflowInput, registryEntry, messageList, threadId, resourceId } = preparation;\n\n    // 2. Register non-serializable state (both local and global registries)\n    this.#runRegistry.registerWithMessageList(runId, registryEntry, messageList, { threadId, resourceId });\n    globalRunRegistry.set(runId, { ...registryEntry, messageList });\n\n    // Track cleanup state to avoid double cleanup\n    let cleanedUp = false;\n    let autoCleanupTimer: ReturnType<typeof setTimeout> | null = null;\n\n    // Schedule automatic registry cleanup after stream ends\n    const scheduleAutoCleanup = () => {\n      if (autoCleanupTimer || cleanedUp || this.#cleanupTimeoutMs === 0) return;\n      autoCleanupTimer = setTimeout(() => {\n        if (!cleanedUp) {\n          this.#runRegistry.cleanup(runId);\n          globalRunRegistry.delete(runId);\n          this.#clearPubsubTopic(runId);\n          cleanedUp = true;\n        }\n      }, this.#cleanupTimeoutMs);\n    };\n\n    // 3. Create the durable agent stream (subscribes to pubsub)\n    const {\n      output,\n      cleanup: streamCleanup,\n      ready,\n    } = createDurableAgentStream<TOutput>({\n      pubsub: this.pubsub,\n      runId,\n      messageId,\n      model: {\n        modelId: workflowInput.modelConfig.modelId,\n        provider: workflowInput.modelConfig.provider,\n        version: 'v3',\n      },\n      threadId,\n      resourceId,\n      onChunk: options?.onChunk,\n      onStepFinish: options?.onStepFinish,\n      onFinish: async result => {\n        await options?.onFinish?.(result);\n        scheduleAutoCleanup();\n      },\n      onError: async error => {\n        await options?.onError?.(error);\n        scheduleAutoCleanup();\n      },\n      onSuspended: options?.onSuspended,\n    });\n\n    // 4. Wait for subscription to be ready, then execute workflow\n    // This prevents race conditions where events are published before subscription\n    ready\n      .then(() => this.executeWorkflow(runId, workflowInput))\n      .catch(error => {\n        void this.emitError(runId, error);\n      });\n\n    // 5. Create cleanup function (cancels auto-cleanup timer if called)\n    const cleanup = () => {\n      if (autoCleanupTimer) {\n        clearTimeout(autoCleanupTimer);\n        autoCleanupTimer = null;\n      }\n      if (!cleanedUp) {\n        streamCleanup();\n        this.#runRegistry.cleanup(runId);\n        globalRunRegistry.delete(runId);\n        this.#clearPubsubTopic(runId);\n        cleanedUp = true;\n      }\n    };\n\n    return {\n      output,\n      get fullStream() {\n        return output.fullStream as ReadableStream<any>;\n      },\n      runId,\n      threadId,\n      resourceId,\n      cleanup,\n    };\n  }\n\n  /**\n   * Resume a suspended workflow execution.\n   */\n  async resume(\n    runId: string,\n    resumeData: unknown,\n    options?: {\n      onChunk?: (chunk: ChunkType<TOutput>) => void | Promise<void>;\n      onStepFinish?: (result: AgentStepFinishEventData) => void | Promise<void>;\n      onFinish?: (result: AgentFinishEventData) => void | Promise<void>;\n      onError?: (error: Error) => void | Promise<void>;\n      onSuspended?: (data: AgentSuspendedEventData) => void | Promise<void>;\n    },\n  ): Promise<DurableAgentStreamResult<TOutput>> {\n    const entry = this.#runRegistry.get(runId);\n    if (!entry) {\n      throw new Error(`No registry entry found for run ${runId}. Cannot resume.`);\n    }\n\n    const memoryInfo = this.#runRegistry.getMemoryInfo(runId);\n\n    // Track cleanup state to avoid double cleanup\n    let cleanedUp = false;\n    let autoCleanupTimer: ReturnType<typeof setTimeout> | null = null;\n\n    const scheduleAutoCleanup = () => {\n      if (autoCleanupTimer || cleanedUp || this.#cleanupTimeoutMs === 0) return;\n      autoCleanupTimer = setTimeout(() => {\n        if (!cleanedUp) {\n          this.#runRegistry.cleanup(runId);\n          globalRunRegistry.delete(runId);\n          this.#clearPubsubTopic(runId);\n          cleanedUp = true;\n        }\n      }, this.#cleanupTimeoutMs);\n    };\n\n    const globalEntry = globalRunRegistry.get(runId);\n    const resumeModel = globalEntry?.model as any;\n\n    const {\n      output,\n      cleanup: streamCleanup,\n      ready,\n    } = createDurableAgentStream<TOutput>({\n      pubsub: this.pubsub,\n      runId,\n      messageId: crypto.randomUUID(),\n      model: {\n        modelId: resumeModel?.modelId,\n        provider: resumeModel?.provider,\n        version: 'v3',\n      },\n      threadId: memoryInfo?.threadId,\n      resourceId: memoryInfo?.resourceId,\n      onChunk: options?.onChunk,\n      onStepFinish: options?.onStepFinish,\n      onFinish: async result => {\n        await options?.onFinish?.(result);\n        scheduleAutoCleanup();\n      },\n      onError: async error => {\n        await options?.onError?.(error);\n        scheduleAutoCleanup();\n      },\n      onSuspended: options?.onSuspended,\n    });\n\n    // Wait for subscription to be ready, then resume workflow\n    const workflow = this.getWorkflow();\n    const requestContext = globalRunRegistry.get(runId)?.requestContext;\n    ready\n      .then(async () => {\n        const run = await workflow.createRun({ runId, pubsub: this.pubsub });\n        const result = await run.resume({ resumeData, requestContext });\n        if (result?.status === 'failed') {\n          const error = new Error((result as any).error?.message || 'Workflow resume failed');\n          void this.emitError(runId, error);\n        }\n      })\n      .catch(error => {\n        void this.emitError(runId, error);\n      });\n\n    const cleanup = () => {\n      if (autoCleanupTimer) {\n        clearTimeout(autoCleanupTimer);\n        autoCleanupTimer = null;\n      }\n      if (!cleanedUp) {\n        streamCleanup();\n        this.#runRegistry.cleanup(runId);\n        globalRunRegistry.delete(runId);\n        this.#clearPubsubTopic(runId);\n        cleanedUp = true;\n      }\n    };\n\n    return {\n      output,\n      get fullStream() {\n        return output.fullStream as ReadableStream<any>;\n      },\n      runId,\n      threadId: memoryInfo?.threadId,\n      resourceId: memoryInfo?.resourceId,\n      cleanup,\n    };\n  }\n\n  /**\n   * Observe an existing stream.\n   * Use this to reconnect to a stream after a network disconnection.\n   *\n   * **Warning:** The returned `cleanup()` function destroys the run's registry\n   * entries and cached PubSub events. Only call it when you are done with the\n   * run entirely. If the workflow is suspended and you intend to resume later,\n   * do not call cleanup — let the auto-cleanup timer handle it after\n   * FINISH/ERROR. Auto-cleanup does not fire on SUSPENDED events.\n   */\n  async observe(\n    runId: string,\n    options?: {\n      offset?: number;\n      onChunk?: (chunk: ChunkType<TOutput>) => void | Promise<void>;\n      onStepFinish?: (result: AgentStepFinishEventData) => void | Promise<void>;\n      onFinish?: (result: AgentFinishEventData) => void | Promise<void>;\n      onError?: (error: Error) => void | Promise<void>;\n      onSuspended?: (data: AgentSuspendedEventData) => void | Promise<void>;\n    },\n  ): Promise<Omit<DurableAgentStreamResult<TOutput>, 'runId'> & { runId: string }> {\n    const memoryInfo = this.#runRegistry.getMemoryInfo(runId);\n\n    // Track cleanup state to avoid double cleanup\n    let cleanedUp = false;\n    let autoCleanupTimer: ReturnType<typeof setTimeout> | null = null;\n\n    const scheduleAutoCleanup = () => {\n      if (autoCleanupTimer || cleanedUp || this.#cleanupTimeoutMs === 0) return;\n      autoCleanupTimer = setTimeout(() => {\n        if (!cleanedUp) {\n          this.#runRegistry.cleanup(runId);\n          globalRunRegistry.delete(runId);\n          this.#clearPubsubTopic(runId);\n          cleanedUp = true;\n        }\n      }, this.#cleanupTimeoutMs);\n    };\n\n    const {\n      output,\n      cleanup: streamCleanup,\n      ready,\n    } = createDurableAgentStream<TOutput>({\n      pubsub: this.pubsub,\n      runId,\n      messageId: crypto.randomUUID(),\n      model: {\n        modelId: undefined,\n        provider: undefined,\n        version: 'v3',\n      },\n      threadId: memoryInfo?.threadId,\n      resourceId: memoryInfo?.resourceId,\n      offset: options?.offset,\n      onChunk: options?.onChunk,\n      onStepFinish: options?.onStepFinish,\n      onFinish: async result => {\n        await options?.onFinish?.(result);\n        scheduleAutoCleanup();\n      },\n      onError: async error => {\n        await options?.onError?.(error);\n        scheduleAutoCleanup();\n      },\n      onSuspended: options?.onSuspended,\n    });\n\n    // Wait for subscription to be ready\n    await ready;\n\n    const cleanup = () => {\n      if (autoCleanupTimer) {\n        clearTimeout(autoCleanupTimer);\n        autoCleanupTimer = null;\n      }\n      if (!cleanedUp) {\n        streamCleanup();\n        this.#runRegistry.cleanup(runId);\n        globalRunRegistry.delete(runId);\n        this.#clearPubsubTopic(runId);\n        cleanedUp = true;\n      }\n    };\n\n    return {\n      output,\n      get fullStream() {\n        return output.fullStream as ReadableStream<any>;\n      },\n      runId,\n      threadId: memoryInfo?.threadId,\n      resourceId: memoryInfo?.resourceId,\n      cleanup,\n    };\n  }\n\n  /**\n   * Clear cached pubsub events for a run's topic.\n   * Only effective when pubsub supports clearTopic (e.g. CachingPubSub).\n   */\n  #clearPubsubTopic(runId: string): void {\n    const pubsub = this.pubsub;\n    if ('clearTopic' in pubsub && typeof (pubsub as any).clearTopic === 'function') {\n      void (pubsub as any).clearTopic(AGENT_STREAM_TOPIC(runId));\n    }\n  }\n\n  /**\n   * Get the workflow instance for direct execution.\n   * Lazily creates the workflow and registers Mastra on it (needed for\n   * getAgentById in execution steps).\n   */\n  getWorkflow() {\n    if (!this.#workflow) {\n      this.#workflow = this.createWorkflow();\n      // Register mastra on the workflow so execution steps can access agents/tools.\n      // DurableAgent goes through the normal Agent registration path (not the durable wrapper\n      // path that calls addWorkflow), so the workflow isn't registered in Mastra's #workflows.\n      // We set mastra directly here instead.\n      if (this.#mastra) {\n        this.#workflow.__registerMastra(this.#mastra);\n        this.#workflow.__registerPrimitives({\n          logger: this.#mastra.getLogger(),\n          storage: this.#mastra.getStorage(),\n        });\n      }\n    }\n    return this.#workflow;\n  }\n\n  /**\n   * Stream until all background tasks complete and the agent is idle.\n   * Mirrors the regular Agent's streamUntilIdle but adapted for durable execution.\n   */\n  // @ts-expect-error - Intentionally different return type for durable execution\n  override async streamUntilIdle<OUTPUT = TOutput>(\n    messages: MessageListInput,\n    streamOptions?: DurableAgentStreamOptions<OUTPUT> & { maxIdleMs?: number },\n  ): Promise<DurableAgentStreamResult<OUTPUT>> {\n    return runDurableStreamUntilIdle<OUTPUT>(\n      this as unknown as DurableAgent<any, any, OUTPUT>,\n      messages,\n      streamOptions,\n      {\n        activeStreams: this.#activeStreamUntilIdle,\n        bgManager: this.#mastra?.backgroundTaskManager,\n      },\n    );\n  }\n\n  /**\n   * Prepare for durable execution without starting it.\n   */\n  async prepare(messages: MessageListInput, options?: AgentExecutionOptions<TOutput>) {\n    const preparation = await prepareForDurableExecution<TOutput>({\n      agent: this.#wrappedAgent as Agent<string, any, TOutput>,\n      messages,\n      options,\n      requestContext: options?.requestContext,\n      mastra: this.#mastra,\n    });\n\n    this.#runRegistry.registerWithMessageList(preparation.runId, preparation.registryEntry, preparation.messageList, {\n      threadId: preparation.threadId,\n      resourceId: preparation.resourceId,\n    });\n    globalRunRegistry.set(preparation.runId, {\n      ...preparation.registryEntry,\n      messageList: preparation.messageList,\n    });\n\n    return {\n      runId: preparation.runId,\n      messageId: preparation.messageId,\n      workflowInput: preparation.workflowInput,\n      registryEntry: preparation.registryEntry,\n      threadId: preparation.threadId,\n      resourceId: preparation.resourceId,\n    };\n  }\n\n  /**\n   * Get the durable workflows required by this agent.\n   * Called by Mastra during agent registration.\n   * @internal\n   */\n  getDurableWorkflows() {\n    return [this.getWorkflow()];\n  }\n\n  /**\n   * Set the Mastra instance.\n   * Called by the durable agent registration path in addAgent().\n   * Delegates to __registerMastra so the pubsub wiring and agent\n   * registration happen regardless of which entry point is called first.\n   * @internal\n   */\n  __setMastra(mastra: Mastra): void {\n    this.__registerMastra(mastra);\n  }\n\n  /**\n   * Register the Mastra instance.\n   * Called by Mastra during agent registration (normal Agent path).\n   *\n   * Also wires mastra.pubsub as the inner pubsub (if the user didn't provide\n   * a custom one), so that the OBSERVE_AGENT_STREAM_ROUTE handler can subscribe\n   * to the same PubSub instance that this agent publishes to.\n   * @internal\n   */\n  __registerMastra(mastra: Mastra): void {\n    super.__registerMastra(mastra);\n    this.#mastra = mastra;\n    // Also set on wrapped agent\n    this.#wrappedAgent.__registerMastra(mastra);\n\n    // Wire mastra.pubsub as the inner pubsub if user didn't provide a custom one.\n    // This must happen before CachingPubSub initialization.\n    if (!this.#hasCustomPubsub && !this.#cachingPubsub) {\n      this.#innerPubsub = mastra.pubsub;\n    }\n  }\n}\n","/**\n * Factory function to create a DurableAgent that wraps an existing Agent.\n *\n * This is the recommended way to add durable execution capabilities to an agent.\n * The factory creates a DurableAgent instance with resumable streams.\n *\n * @example\n * ```typescript\n * import { Agent } from '@mastra/core/agent';\n * import { createDurableAgent } from '@mastra/core/agent/durable';\n *\n * const agent = new Agent({\n *   id: 'my-agent',\n *   name: 'My Agent',\n *   instructions: 'You are a helpful assistant',\n *   model: openai('gpt-4'),\n * });\n *\n * const durableAgent = createDurableAgent({ agent });\n *\n * const mastra = new Mastra({\n *   agents: { myAgent: durableAgent },\n * });\n * ```\n */\n\nimport type { MastraServerCache } from '../../cache/base';\nimport type { PubSub } from '../../events/pubsub';\nimport type { Agent } from '../agent';\n\nimport { DurableAgent } from './durable-agent';\nimport type { DurableAgentConfig } from './durable-agent';\n\n/**\n * Options for createDurableAgent factory function.\n */\nexport interface CreateDurableAgentOptions<\n  TAgentId extends string = string,\n  TTools extends Record<string, any> = Record<string, any>,\n  TOutput = undefined,\n> {\n  /** The Agent to wrap with durable execution capabilities */\n  agent: Agent<TAgentId, TTools, TOutput>;\n\n  /** Optional ID override (defaults to agent.id) */\n  id?: TAgentId;\n\n  /** Optional name override (defaults to agent.name) */\n  name?: string;\n\n  /**\n   * Cache instance for storing stream events.\n   * Enables resumable streams - clients can disconnect and reconnect\n   * without missing events.\n   *\n   * - If not provided: Inherits from Mastra instance, or uses InMemoryServerCache\n   * - If provided: Uses the provided cache backend (e.g., Redis)\n   * - If set to `false`: Disables caching (streams are not resumable)\n   */\n  cache?: MastraServerCache | false;\n\n  /**\n   * PubSub instance for streaming events.\n   * Optional - if not provided, defaults to EventEmitterPubSub.\n   */\n  pubsub?: PubSub;\n\n  /** Maximum steps for agentic loop */\n  maxSteps?: number;\n}\n\n/**\n * Create a DurableAgent that wraps an existing Agent.\n *\n * This factory function is the recommended way to add durable execution\n * capabilities to an agent. It creates a DurableAgent instance with\n * resumable streams.\n *\n * @param options - Configuration options\n * @returns A DurableAgent instance\n *\n * @example\n * ```typescript\n * const agent = new Agent({\n *   id: 'my-agent',\n *   instructions: 'You are helpful',\n *   model: openai('gpt-4'),\n * });\n *\n * const durableAgent = createDurableAgent({ agent });\n *\n * const mastra = new Mastra({\n *   agents: { myAgent: durableAgent },\n * });\n * ```\n */\nexport function createDurableAgent<\n  TAgentId extends string = string,\n  TTools extends Record<string, any> = Record<string, any>,\n  TOutput = undefined,\n>(options: CreateDurableAgentOptions<TAgentId, TTools, TOutput>): DurableAgent<TAgentId, TTools, TOutput> {\n  const { agent, id, name, cache, pubsub, maxSteps } = options;\n\n  return new DurableAgent({\n    agent,\n    id,\n    name,\n    cache,\n    pubsub,\n    maxSteps,\n  } as DurableAgentConfig<TAgentId, TTools, TOutput>);\n}\n\n/**\n * Check if an object is a DurableAgent\n */\nexport function isDurableAgent(obj: any): obj is DurableAgent {\n  return obj instanceof DurableAgent;\n}\n\n/**\n * Alias for isDurableAgent for backwards compatibility\n * @deprecated Use isDurableAgent instead\n */\nexport const isLocalDurableAgent = isDurableAgent;\n\n// Re-export types for convenience\nexport type { DurableAgentConfig, DurableAgentStreamOptions, DurableAgentStreamResult } from './durable-agent';\n\n// Backwards compatibility type aliases\nexport type LocalDurableAgent<\n  TAgentId extends string = string,\n  TTools extends Record<string, any> = Record<string, any>,\n  TOutput = undefined,\n> = DurableAgent<TAgentId, TTools, TOutput>;\n","/**\n * EventedAgent - A durable agent that uses fire-and-forget execution.\n *\n * EventedAgent extends DurableAgent and overrides the execution strategy to use\n * fire-and-forget execution via the workflow engine's startAsync() method.\n *\n * Unlike DurableAgent which runs the workflow synchronously, EventedAgent:\n * 1. Uses startAsync() for non-blocking execution\n * 2. Fire-and-forget pattern - execution starts and returns immediately\n * 3. Events are streamed via pubsub as the workflow executes\n */\n\nimport type { ToolsInput } from '../types';\n\nimport { DurableAgent } from './durable-agent';\nimport type { DurableAgentConfig } from './durable-agent';\nimport type { DurableAgenticWorkflowInput } from './types';\n\n/**\n * Configuration for EventedAgent - wraps an existing Agent with fire-and-forget execution\n */\nexport interface EventedAgentConfig<\n  TAgentId extends string = string,\n  TTools extends ToolsInput = ToolsInput,\n  TOutput = undefined,\n> extends DurableAgentConfig<TAgentId, TTools, TOutput> {}\n\n/**\n * EventedAgent extends DurableAgent to use fire-and-forget execution.\n *\n * This agent type uses the built-in evented workflow engine, which is useful when:\n * - You don't need an external execution engine (like Inngest)\n * - You want fire-and-forget execution with pubsub streaming\n * - You need resumable streams with event caching\n *\n * The key difference from DurableAgent is the execution strategy:\n * - DurableAgent: Runs the workflow synchronously via createRun + start\n * - EventedAgent: Uses run.startAsync() for fire-and-forget execution\n *\n * @example\n * ```typescript\n * import { Agent } from '@mastra/core/agent';\n * import { EventedAgent } from '@mastra/core/agent/durable';\n *\n * const agent = new Agent({\n *   id: 'my-agent',\n *   instructions: 'You are a helpful assistant',\n *   model: openai('gpt-4'),\n * });\n *\n * const eventedAgent = new EventedAgent({ agent });\n *\n * const { output, runId, cleanup } = await eventedAgent.stream('Hello!');\n * const text = await output.text;\n * cleanup();\n * ```\n */\nexport class EventedAgent<\n  TAgentId extends string = string,\n  TTools extends ToolsInput = ToolsInput,\n  TOutput = undefined,\n> extends DurableAgent<TAgentId, TTools, TOutput> {\n  /**\n   * Create a new EventedAgent that wraps an existing Agent\n   */\n  constructor(config: EventedAgentConfig<TAgentId, TTools, TOutput>) {\n    super(config);\n  }\n\n  /**\n   * Execute the durable workflow using fire-and-forget pattern.\n   *\n   * Unlike DurableAgent which runs the workflow synchronously, EventedAgent uses\n   * the workflow's startAsync() method for non-blocking execution.\n   *\n   * @param runId - The unique run ID\n   * @param workflowInput - The serialized workflow input\n   * @internal\n   */\n  protected override async executeWorkflow(runId: string, workflowInput: DurableAgenticWorkflowInput): Promise<void> {\n    try {\n      const workflow = this.getWorkflow();\n      const run = await workflow.createRun({\n        runId,\n        pubsub: this.pubsubInternal,\n      });\n      // Fire and forget - use startAsync for non-blocking execution\n      await run.startAsync({ inputData: workflowInput });\n    } catch (error) {\n      await this.emitError(runId, error instanceof Error ? error : new Error(String(error)));\n    }\n  }\n}\n\n/**\n * Check if an object is an EventedAgent class instance\n */\nexport function isEventedAgentClass(obj: any): obj is EventedAgent {\n  return obj instanceof EventedAgent;\n}\n","/**\n * Factory function to create an EventedAgent that wraps an existing Agent.\n *\n * This creates a durable agent that uses fire-and-forget execution via\n * the built-in workflow engine with startAsync().\n *\n * @example\n * ```typescript\n * import { Agent } from '@mastra/core/agent';\n * import { createEventedAgent } from '@mastra/core/agent/durable';\n *\n * const agent = new Agent({\n *   id: 'my-agent',\n *   name: 'My Agent',\n *   instructions: 'You are a helpful assistant',\n *   model: openai('gpt-4'),\n * });\n *\n * const eventedAgent = createEventedAgent({ agent });\n *\n * const mastra = new Mastra({\n *   agents: { myAgent: eventedAgent },\n * });\n * ```\n */\n\nimport type { MastraServerCache } from '../../cache/base';\nimport type { PubSub } from '../../events/pubsub';\nimport type { Agent } from '../agent';\n\nimport { EventedAgent } from './evented-agent';\nimport type { EventedAgentConfig } from './evented-agent';\n\n/**\n * Options for createEventedAgent factory function.\n */\nexport interface CreateEventedAgentOptions<\n  TAgentId extends string = string,\n  TTools extends Record<string, any> = Record<string, any>,\n  TOutput = undefined,\n> {\n  /** The Agent to wrap with evented durable execution capabilities */\n  agent: Agent<TAgentId, TTools, TOutput>;\n\n  /**\n   * PubSub instance for streaming events.\n   * Optional - if not provided, defaults to EventEmitterPubSub.\n   */\n  pubsub?: PubSub;\n\n  /**\n   * Cache instance for storing stream events.\n   * Enables resumable streams - clients can disconnect and reconnect\n   * without missing events.\n   *\n   * - If not provided: Inherits from Mastra instance, or uses InMemoryServerCache\n   * - If provided: Uses the provided cache backend (e.g., Redis)\n   * - If set to `false`: Disables caching (streams are not resumable)\n   */\n  cache?: MastraServerCache | false;\n\n  /** Maximum steps for agentic loop */\n  maxSteps?: number;\n}\n\n/**\n * Create an EventedAgent that wraps an existing Agent.\n *\n * This factory function creates an EventedAgent instance with fire-and-forget\n * execution via the built-in workflow engine.\n *\n * @param options - Configuration options\n * @returns An EventedAgent instance\n *\n * @example\n * ```typescript\n * const agent = new Agent({\n *   id: 'my-agent',\n *   instructions: 'You are helpful',\n *   model: openai('gpt-4'),\n * });\n *\n * const eventedAgent = createEventedAgent({ agent });\n *\n * const mastra = new Mastra({\n *   agents: { myAgent: eventedAgent },\n * });\n * ```\n */\nexport function createEventedAgent<\n  TAgentId extends string = string,\n  TTools extends Record<string, any> = Record<string, any>,\n  TOutput = undefined,\n>(options: CreateEventedAgentOptions<TAgentId, TTools, TOutput>): EventedAgent<TAgentId, TTools, TOutput> {\n  const { agent, pubsub, cache, maxSteps } = options;\n\n  return new EventedAgent({\n    agent,\n    pubsub,\n    cache,\n    maxSteps,\n  } as EventedAgentConfig<TAgentId, TTools, TOutput>);\n}\n\n/**\n * Check if an object is an EventedAgent\n */\nexport function isEventedAgent(obj: any): obj is EventedAgent {\n  return obj instanceof EventedAgent;\n}\n\n// Re-export types for convenience\nexport type { EventedAgentConfig } from './evented-agent';\n"]}