{"version":3,"sources":["../src/background-tasks/workflow-id.ts","../src/background-tasks/manager.ts","../src/background-tasks/create.ts","../src/background-tasks/resolve-config.ts","../src/background-tasks/schema-injection.ts","../src/background-tasks/system-prompt.ts"],"names":["randomUUID","z"],"mappings":"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","file":"chunk-23FX5JPX.cjs","sourcesContent":["/**\n * Workflow id used by the bg-task workflow registered on Mastra.\n * Double-underscore prefix marks it as internal — same convention as\n * `__batch-scoring-traces`.\n *\n * Lives in its own file (separate from `./workflow`) so `manager.ts` can\n * reference the id without statically pulling in `../workflows/evented`,\n * which would create a circular import via `agent → background-tasks →\n * workflow → evented → workflows/index → agent`.\n */\nexport const BACKGROUND_TASK_WORKFLOW_ID = '__background-task';\n","import { randomUUID } from 'node:crypto';\nimport type { Mastra } from '..';\nimport type { PubSub } from '../events/pubsub';\nimport type { Event, EventCallback } from '../events/types';\nimport type {\n BackgroundTask,\n BackgroundTaskManagerConfig,\n BackgroundTaskStatus,\n EnqueueResult,\n TaskContext,\n TaskFilter,\n TaskPayload,\n TaskListResult,\n ToolExecutor,\n BackgroundTaskEvent,\n} from './types';\nimport { BACKGROUND_TASK_WORKFLOW_ID } from './workflow-id';\n\nconst TOPIC_DISPATCH = 'background-tasks';\nconst TOPIC_RESULT = 'background-tasks-result';\nconst WORKER_GROUP = 'background-task-workers';\n\nexport class BackgroundTaskManager {\n private pubsub!: PubSub;\n config: Required<\n Pick\n > &\n BackgroundTaskManagerConfig;\n\n #mastra?: Mastra;\n\n // Per-task contexts — keyed by task ID, holds closures from the caller's stream.\n /** @internal — read by the workflow-engine step bodies in workflow.ts */\n taskContexts: Map = new Map();\n\n // Static executors keyed by tool name. Populated by `Mastra` for every\n // registered tool, and by `BackgroundTaskWorker.#wireStaticTools` on\n // standalone worker processes. Used as the fallback for cross-process\n // dispatch where the producer's per-task closure (taskContexts) is not\n // visible — a remote worker resolves the tool by name instead.\n private staticExecutors: Map = new Map();\n\n // Track active AbortControllers for running tasks (for cancellation + timeout)\n /** @internal — read by the workflow-engine step bodies in workflow.ts */\n activeAbortControllers: Map = new Map();\n\n // Pubsub callbacks (kept for unsubscribe)\n private workerCallback?: EventCallback;\n private resultCallback?: EventCallback;\n\n private shuttingDown = false;\n\n // Cleanup interval handle\n private cleanupInterval?: ReturnType;\n\n // Tracks the in-flight `init(pubsub)` so consumers can await readiness.\n // Mastra fires init as fire-and-forget in `#ensureBackgroundTaskManager`,\n // so without this any caller that hits `enqueue`/`resume`/`cancel`\n // before init completes races against worker subscription + workflow\n // registration. Public methods that depend on init await this promise\n // before doing work.\n private initPromise?: Promise;\n\n constructor(config: BackgroundTaskManagerConfig = { enabled: false }) {\n this.config = {\n globalConcurrency: config.globalConcurrency ?? 10,\n perAgentConcurrency: config.perAgentConcurrency ?? 5,\n backpressure: config.backpressure ?? 'queue',\n defaultTimeoutMs: config.defaultTimeoutMs ?? 300_000,\n ...config,\n };\n }\n\n __registerMastra(mastra: Mastra) {\n this.#mastra = mastra;\n }\n\n async getStorage() {\n const storage = this.#mastra?.getStorage();\n if (!storage) {\n throw new Error('Storage is not initialized');\n }\n const bgStore = await storage.getStore('backgroundTasks');\n if (!bgStore) {\n throw new Error('Background tasks storage is not available');\n }\n return bgStore;\n }\n\n async init(pubsub: PubSub): Promise {\n if (this.initPromise) return this.initPromise;\n this.initPromise = this.#doInit(pubsub);\n return this.initPromise;\n }\n\n async #doInit(pubsub: PubSub): Promise {\n this.pubsub = pubsub;\n\n // Worker: subscribes with group so only one worker processes each task.\n this.workerCallback = async (event: Event, ack?: () => Promise) => {\n if (event.type === 'task.dispatch') {\n await this.handleDispatch(event);\n } else if (event.type === 'task.resume') {\n await this.handleResume(event);\n } else if (event.type === 'task.cancel') {\n this.handleCancel(event);\n }\n await ack?.();\n };\n\n // Result listener: fan-out so all processes receive results\n this.resultCallback = async (event: Event, ack?: () => Promise) => {\n if (event.type === 'task.completed' || event.type === 'task.failed') {\n await this.handleResult(event);\n }\n await ack?.();\n };\n\n // Register the workflow BEFORE subscribing the worker so that any\n // dispatch event the worker picks up can immediately resolve the\n // workflow on Mastra. Reversing this order races: a publish that\n // arrives between `subscribe(TOPIC_DISPATCH)` and the workflow\n // registration triggers `__getInternalWorkflow` to throw\n // `Workflow with id __background-task not found`, the task stays at\n // `running` forever, and the dispatch is silently dropped.\n if (this.#mastra) {\n // Dynamic import breaks the static cycle:\n // agent → background-tasks → manager → workflow → workflows/evented →\n // workflows/index → agent. Static import works at runtime but during\n // module evaluation in test environments the cycle leaves `Workflow`\n // undefined when `evented/workflow.ts` evaluates its `class extends`.\n const { buildBackgroundTaskWorkflow } = await import('./workflow');\n const workflow = buildBackgroundTaskWorkflow(this);\n if (!this.#mastra.__hasInternalWorkflow(BACKGROUND_TASK_WORKFLOW_ID)) {\n // The `__background-task` workflow is typed against `EventedEngineType`\n // and a concrete input/output schema, while `__registerInternalWorkflow`\n // accepts the looser default `Workflow` shape. The cast is purely a\n // type-level bridge — the runtime value is a real Workflow.\n this.#mastra.__registerInternalWorkflow(\n workflow as unknown as Parameters[0],\n );\n }\n }\n\n await this.pubsub.subscribe(TOPIC_DISPATCH, this.workerCallback, { group: WORKER_GROUP });\n await this.pubsub.subscribe(TOPIC_RESULT, this.resultCallback);\n\n // Recover stale tasks from a previous process\n await this.recoverStaleTasks();\n\n // Start periodic cleanup if configured\n const cleanupConfig = this.config.cleanup;\n if (cleanupConfig) {\n const intervalMs = cleanupConfig.cleanupIntervalMs ?? 60_000;\n this.cleanupInterval = setInterval(() => {\n void this.cleanup();\n }, intervalMs);\n }\n }\n\n // --- Per-task context registration ---\n\n /**\n * Register per-task hooks (executor, stream emitter, result injector).\n * Called internally by createBackgroundTask or directly for advanced usage.\n */\n registerTaskContext(taskId: string, context: TaskContext): void {\n this.taskContexts.set(taskId, context);\n }\n\n /**\n * Remove per-task hooks. Called after task reaches terminal state.\n */\n deregisterTaskContext(taskId: string): void {\n this.taskContexts.delete(taskId);\n }\n\n /**\n * Register a tool executor by tool name. Used for cross-process dispatch:\n * when a worker in a different process picks up a `task.dispatch` event,\n * it has no per-task closure (`taskContexts`) for that taskId, but it can\n * resolve the executor by tool name via this registry.\n */\n registerStaticExecutor(toolName: string, executor: ToolExecutor): void {\n if (this.staticExecutors.has(toolName)) {\n this.#mastra?.getLogger?.()?.debug?.(`Overwriting existing static executor for tool \"${toolName}\"`);\n }\n this.staticExecutors.set(toolName, executor);\n }\n\n /**\n * Symmetric to `registerStaticExecutor`. Called when a tool is removed\n * from `Mastra`.\n */\n unregisterStaticExecutor(toolName: string): void {\n this.staticExecutors.delete(toolName);\n }\n\n /**\n * Look up an executor by tool name. Read by the workflow-step body in\n * `workflow.ts:runAttemptStep` as a fallback when no per-task `TaskContext`\n * is registered (cross-process path).\n */\n getStaticExecutor(toolName: string): ToolExecutor | undefined {\n return this.staticExecutors.get(toolName);\n }\n\n // --- Core operations ---\n\n /**\n * Enqueue a task for background execution.\n * Prefer `createBackgroundTask()` which returns a self-contained handle.\n */\n async enqueue(payload: TaskPayload, context?: TaskContext): Promise {\n if (this.shuttingDown) {\n throw new Error('BackgroundTaskManager is shutting down, cannot enqueue new tasks');\n }\n\n // Mastra fires `init` as fire-and-forget. If a caller hits enqueue\n // before init completes, the dispatch publish fires before the worker\n // subscribes and the event is dropped (or, worse, lands on a worker\n // whose Mastra hasn't yet registered the bg-task workflow → \"Workflow\n // with id __background-task not found\"). Await readiness up front.\n if (this.initPromise) await this.initPromise;\n\n const task: BackgroundTask = {\n id: this.#mastra?.generateId() ?? randomUUID(),\n status: 'pending',\n toolName: payload.toolName,\n toolCallId: payload.toolCallId,\n args: payload.args,\n agentId: payload.agentId,\n threadId: payload.threadId,\n resourceId: payload.resourceId,\n runId: payload.runId,\n retryCount: 0,\n maxRetries: payload.maxRetries ?? this.config.defaultRetries?.maxRetries ?? 0,\n timeoutMs: payload.timeoutMs ?? this.config.defaultTimeoutMs,\n createdAt: new Date(),\n };\n\n // Register per-task context if provided\n if (context) {\n this.registerTaskContext(task.id, context);\n }\n\n const storage = await this.getStorage();\n await storage.createTask(task);\n\n const canRun = await this.checkConcurrency(task.agentId);\n\n if (canRun) {\n await this.dispatch(task);\n return { task };\n }\n\n // Backpressure\n switch (this.config.backpressure) {\n case 'reject':\n this.deregisterTaskContext(task.id);\n await storage.deleteTask(task.id);\n throw new Error(`Concurrency limit reached, cannot enqueue task for tool \"${task.toolName}\"`);\n\n case 'fallback-sync':\n this.deregisterTaskContext(task.id);\n await storage.deleteTask(task.id);\n return { task, fallbackToSync: true };\n\n case 'queue':\n default:\n // Task stays pending in storage, will be dispatched when a slot opens\n return { task };\n }\n }\n\n async cancel(taskId: string): Promise {\n if (this.initPromise) await this.initPromise;\n const storage = await this.getStorage();\n const task = await storage.getTask(taskId);\n if (!task) {\n throw new Error(`Task not found: ${taskId}`);\n }\n\n if (\n task.status === 'completed' ||\n task.status === 'failed' ||\n task.status === 'cancelled' ||\n task.status === 'timed_out'\n ) {\n return; // no-op for terminal states\n }\n\n if (task.status === 'pending') {\n await storage.updateTask(taskId, { status: 'cancelled', completedAt: new Date() });\n const cancelledTask = await storage.getTask(taskId);\n if (cancelledTask) await this.publishLifecycleEvent('task.cancelled', cancelledTask);\n this.deregisterTaskContext(taskId);\n return;\n }\n\n if (task.status === 'suspended') {\n // No active executor or AbortController to tear down — the task is\n // sitting on a workflow snapshot. Flip storage, publish, and tell the\n // workflow run to cancel so the snapshot is cleaned up too.\n await storage.updateTask(taskId, { status: 'cancelled', completedAt: new Date() });\n if (this.#mastra) {\n try {\n const workflow = this.#mastra.__getInternalWorkflow(BACKGROUND_TASK_WORKFLOW_ID);\n const wrapper = await workflow.createRun({ runId: taskId });\n await wrapper.cancel();\n } catch (err) {\n this.#mastra?.getLogger?.()?.warn(`background-task workflow cancel failed for ${taskId}:`, err as any);\n }\n }\n const cancelledTask = await storage.getTask(taskId);\n if (cancelledTask) await this.publishLifecycleEvent('task.cancelled', cancelledTask);\n this.deregisterTaskContext(taskId);\n return;\n }\n\n if (task.status === 'running') {\n await storage.updateTask(taskId, { status: 'cancelled', completedAt: new Date() });\n\n // Abort the running tool\n const controller = this.activeAbortControllers.get(taskId);\n if (controller) {\n controller.abort(new Error('Task cancelled'));\n this.activeAbortControllers.delete(taskId);\n }\n\n // Also cancel the workflow run so workflow storage reflects the\n // cancellation (run status flips to 'canceled' and the workflow's\n // abortSignal fires — redundant with the local AbortController above\n // but keeps run history clean and propagates cross-process via the\n // workflow.cancel pubsub event).\n if (this.#mastra) {\n try {\n const workflow = this.#mastra.__getInternalWorkflow(BACKGROUND_TASK_WORKFLOW_ID);\n const wrapper = await workflow.createRun({ runId: taskId });\n await wrapper.cancel();\n } catch (err) {\n this.#mastra?.getLogger?.()?.warn(`background-task workflow cancel failed for ${taskId}:`, err as any);\n }\n }\n\n const cancelledTask = await storage.getTask(taskId);\n if (cancelledTask) await this.publishLifecycleEvent('task.cancelled', cancelledTask);\n this.deregisterTaskContext(taskId);\n\n // Also publish cancel on dispatch topic for distributed worker abort\n await this.pubsub.publish(TOPIC_DISPATCH, {\n type: 'task.cancel',\n data: { taskId },\n runId: taskId,\n });\n }\n }\n\n /**\n * Resume a suspended task. The tool executor must be re-registered via\n * `registerTaskContext(taskId, ...)` before calling this if the original\n * registration is gone (e.g. process restart) — the manager doesn't\n * rehydrate executor closures from storage.\n *\n * `resumeData` is forwarded to the tool's `execute` options on the\n * resumed run.\n */\n async resume(taskId: string, resumeData?: unknown): Promise {\n if (!this.#mastra) {\n throw new Error('Mastra is not registered with this manager');\n }\n\n if (this.initPromise) await this.initPromise;\n\n const storage = await this.getStorage();\n const task = await storage.getTask(taskId);\n if (!task) {\n throw new Error(`Task not found: ${taskId}`);\n }\n if (task.status !== 'suspended') {\n throw new Error(`Cannot resume task in status '${task.status}' (expected 'suspended')`);\n }\n\n const canRun = await this.checkConcurrency(task.agentId);\n if (!canRun) {\n // Resume sits outside the queue/fallback-sync paths — there's no\n // synchronous caller to fall back to, and silently leaving the task\n // suspended hides the failure from the caller. Throw and let the\n // caller retry once a slot frees.\n throw new Error(`Concurrency limit reached, cannot resume task \"${taskId}\" — retry once a slot is available`);\n }\n\n // Hand off to the worker subscriber. `task.resume` rides the same\n // `TOPIC_DISPATCH` + `WORKER_GROUP` exactly-once channel as\n // `task.dispatch`, so any worker (including a different process from\n // the one that suspended the task) can pick it up.\n await this.pubsub.publish(TOPIC_DISPATCH, {\n type: 'task.resume',\n data: { taskId, resumeData },\n runId: taskId,\n });\n\n return task;\n }\n\n async getTask(taskId: string): Promise {\n const storage = await this.getStorage();\n return storage.getTask(taskId);\n }\n\n async listTasks(filter: TaskFilter = {}): Promise {\n const storage = await this.getStorage();\n return storage.listTasks(filter);\n }\n\n /**\n * Deletes old completed/failed/cancelled/timed_out task records from storage.\n */\n async cleanup(): Promise {\n const completedTtlMs = this.config.cleanup?.completedTtlMs ?? 3_600_000;\n const failedTtlMs = this.config.cleanup?.failedTtlMs ?? 86_400_000;\n const now = Date.now();\n\n const storage = await this.getStorage();\n await storage.deleteTasks({\n status: ['completed'],\n toDate: new Date(now - completedTtlMs),\n dateFilterBy: 'completedAt',\n });\n\n await storage.deleteTasks({\n status: ['failed', 'cancelled', 'timed_out'],\n toDate: new Date(now - failedTtlMs),\n dateFilterBy: 'completedAt',\n });\n }\n\n /**\n * Returns a promise that resolves when the next task from the given set\n * reaches a terminal state.\n */\n async waitForNextTask(\n taskIds: string[],\n options?: {\n timeoutMs?: number;\n onProgress?: (elapsedMs: number) => void;\n progressIntervalMs?: number;\n },\n ): Promise {\n const storage = await this.getStorage();\n\n const isTerminal = (status: string) =>\n status === 'completed' || status === 'failed' || status === 'cancelled' || status === 'timed_out';\n\n for (const id of taskIds) {\n const task = await storage.getTask(id);\n if (task && isTerminal(task.status)) {\n return task;\n }\n }\n\n return new Promise((resolve, reject) => {\n const startTime = Date.now();\n\n const timeout = options?.timeoutMs\n ? setTimeout(() => {\n clearInterval(pollInterval);\n if (progressInterval) clearInterval(progressInterval);\n reject(new Error('Timed out waiting for background task'));\n }, options.timeoutMs)\n : undefined;\n\n const progressInterval = options?.onProgress\n ? setInterval(() => {\n options.onProgress!(Date.now() - startTime);\n }, options.progressIntervalMs ?? 3000)\n : undefined;\n\n const pollInterval = setInterval(async () => {\n for (const id of taskIds) {\n const task = await storage.getTask(id);\n if (task && isTerminal(task.status)) {\n clearInterval(pollInterval);\n if (timeout) clearTimeout(timeout);\n if (progressInterval) clearInterval(progressInterval);\n resolve(task);\n return;\n }\n }\n }, 50);\n });\n }\n\n /**\n * Returns a ReadableStream of all background task lifecycle events,\n * filtered by optional criteria. Intended to be piped directly to an SSE response.\n *\n * On connection, emits the current state of all non-terminal tasks as a snapshot,\n * then subscribes to live pubsub events for subsequent updates.\n *\n * Events include:\n * - `task.running` (status: 'running') — task picked up by a worker\n * - `task.completed` (status: 'completed') — task finished successfully\n * - `task.failed` (status: 'failed' or 'timed_out') — task errored or timed out\n * - `task.cancelled` (status: 'cancelled') — task was cancelled\n * - `task.suspended` (status: 'suspended') — task paused via `suspend()` from\n * inside its tool executor; resume with `manager.resume(taskId, data)`\n * - `task.resumed` (status: 'running') — suspended task resumed\n *\n * The stream stays open until the caller's AbortSignal fires (client disconnect).\n */\n stream(options?: {\n agentId?: string;\n runId?: string;\n threadId?: string;\n resourceId?: string;\n taskId?: string;\n abortSignal?: AbortSignal;\n }): ReadableStream> {\n const manager = this;\n const pubsub = this.pubsub;\n const { agentId, runId, threadId, resourceId, abortSignal, taskId } = options ?? {};\n\n const EVENT_STATUS_MAP: Record = {\n 'task.running': 'running',\n 'task.output': 'running',\n 'task.completed': 'completed',\n 'task.failed': 'failed',\n 'task.cancelled': 'cancelled',\n 'task.suspended': 'suspended',\n 'task.resumed': 'running',\n };\n\n const CHUNK_EVENT_MAP: Record = {\n 'task.running': 'background-task-running',\n 'task.output': 'background-task-output',\n 'task.completed': 'background-task-completed',\n 'task.failed': 'background-task-failed',\n 'task.cancelled': 'background-task-cancelled',\n 'task.suspended': 'background-task-suspended',\n 'task.resumed': 'background-task-resumed',\n };\n\n return new ReadableStream({\n async start(controller) {\n // 1. Subscribe to live events first (so we don't miss anything between snapshot and subscribe)\n const handler = async (event: Event) => {\n const status = EVENT_STATUS_MAP[event.type];\n if (!status) return;\n\n const data = event.data;\n if (agentId && data.agentId !== agentId) return;\n if (runId && data.runId !== runId) return;\n if (threadId && data.threadId !== threadId) return;\n if (resourceId && data.resourceId !== resourceId) return;\n if (taskId && data.taskId !== taskId) return;\n\n const payload: Record = {\n taskId: data.taskId,\n toolName: data.toolName,\n toolCallId: data.toolCallId,\n agentId: data.agentId,\n runId: data.runId,\n };\n\n switch (event.type) {\n case 'task.running':\n payload.startedAt = data.startedAt;\n payload.args = data.args;\n break;\n case 'task.completed':\n payload.completedAt = data.completedAt;\n payload.result = data.result;\n break;\n case 'task.failed':\n payload.completedAt = data.completedAt;\n payload.error = data.error;\n break;\n case 'task.cancelled':\n payload.completedAt = data.completedAt;\n break;\n case 'task.output':\n payload.payload = data.chunk;\n break;\n case 'task.suspended':\n payload.suspendPayload = data.suspendPayload;\n payload.suspendedAt = data.suspendedAt;\n payload.args = data.args;\n break;\n case 'task.resumed':\n payload.startedAt = data.startedAt;\n payload.args = data.args;\n break;\n }\n\n try {\n controller.enqueue({\n type: CHUNK_EVENT_MAP[event.type],\n payload,\n });\n } catch {\n // Controller closed\n }\n };\n\n void pubsub.subscribe(TOPIC_RESULT, handler);\n\n abortSignal?.addEventListener('abort', () => {\n void pubsub.unsubscribe(TOPIC_RESULT, handler);\n try {\n controller.close();\n } catch {\n // Already closed\n }\n });\n\n // 2. Emit snapshot of existing in-flight tasks (running + suspended).\n try {\n const storage = await manager.getStorage();\n if (taskId) {\n const task = await storage.getTask(taskId);\n if (task && task.status === 'running') {\n controller.enqueue({\n type: 'background-task-running',\n payload: {\n taskId: task.id,\n toolName: task.toolName,\n toolCallId: task.toolCallId,\n agentId: task.agentId,\n runId: task.runId,\n startedAt: task.startedAt,\n args: task.args,\n },\n });\n }\n } else {\n const { tasks: existing } = await storage.listTasks({\n agentId,\n runId,\n threadId,\n resourceId,\n status: ['running'],\n });\n\n for (const task of existing) {\n if (abortSignal?.aborted) break;\n try {\n controller.enqueue({\n type: 'background-task-running',\n payload: {\n taskId: task.id,\n toolName: task.toolName,\n toolCallId: task.toolCallId,\n agentId: task.agentId,\n runId: task.runId,\n startedAt: task.startedAt,\n args: task.args,\n },\n });\n } catch {\n break;\n }\n }\n }\n } catch {\n // Storage not available — continue with live events only\n }\n },\n });\n }\n\n async shutdown(): Promise {\n this.shuttingDown = true;\n\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = undefined;\n }\n\n if (this.workerCallback) {\n await this.pubsub.unsubscribe(TOPIC_DISPATCH, this.workerCallback);\n }\n if (this.resultCallback) {\n await this.pubsub.unsubscribe(TOPIC_RESULT, this.resultCallback);\n }\n\n this.taskContexts.clear();\n await this.pubsub.flush();\n }\n\n // --- Internal ---\n\n private async dispatch(task: BackgroundTask): Promise {\n // Publish `task.dispatch` on `TOPIC_DISPATCH` with `WORKER_GROUP`, so\n // exactly one worker handles the task. `handleDispatch` flips the\n // task to running and starts the per-task workflow run.\n await this.pubsub.publish(TOPIC_DISPATCH, {\n type: 'task.dispatch',\n data: {\n taskId: task.id,\n toolName: task.toolName,\n toolCallId: task.toolCallId,\n args: task.args,\n agentId: task.agentId,\n threadId: task.threadId,\n resourceId: task.resourceId,\n timeoutMs: task.timeoutMs,\n maxRetries: task.maxRetries,\n runId: task.runId,\n },\n runId: task.id,\n });\n }\n\n /**\n * Handles a task.dispatch event. Returns true if the message was nacked (for retry).\n */\n private async handleDispatch(event: Event): Promise {\n const { taskId } = event.data;\n const deliveryAttempt = event.deliveryAttempt ?? 1;\n let nacked = false;\n\n const storage = await this.getStorage();\n const task = await storage.getTask(taskId);\n if (!task || task.status === 'cancelled') {\n this.deregisterTaskContext(taskId);\n return false;\n }\n\n await storage.updateTask(taskId, { status: 'running', startedAt: new Date(), retryCount: deliveryAttempt - 1 });\n\n // Publish running lifecycle event (fan-out, for stream consumers)\n const runningTask = await storage.getTask(taskId);\n if (runningTask) await this.publishLifecycleEvent('task.running', runningTask);\n\n // Fire-and-forget the workflow run; the workflow step body owns\n // executor invocation, retries, and suspend/resume. The local\n // execution hook still runs here so callers see `onExecution` fire.\n if (this.#mastra) {\n if (runningTask) void this.runLocalExecutionHook(runningTask);\n const workflow = this.#mastra.__getInternalWorkflow(BACKGROUND_TASK_WORKFLOW_ID);\n const run = await workflow.createRun({ runId: taskId });\n void run\n .start({ inputData: { taskId } })\n .then(result => {\n if (result.status !== 'suspended') {\n void workflow.deleteWorkflowRunById(taskId);\n }\n })\n .catch(err => {\n this.#mastra?.getLogger?.()?.error(`background-task workflow start failed for ${taskId}:`, err);\n })\n .finally(() => {\n // Free the concurrency slot once the run terminates.\n void this.drainPending();\n });\n }\n\n return nacked;\n }\n\n /**\n * Handles a task.resume event. Mirrors the workflow branch of handleDispatch\n * but resumes an existing run from its suspended snapshot instead of starting\n * a fresh one. Concurrency gating, suspended-status validation, and the\n * `task.resumed` lifecycle publish all happen here so a different process\n * than the one that suspended the task can drive the resume.\n */\n private async handleResume(event: Event): Promise {\n const { taskId, resumeData } = event.data;\n\n const storage = await this.getStorage();\n const task = await storage.getTask(taskId);\n if (!task || task.status !== 'suspended') {\n // Either gone or already resumed/cancelled by another worker. Drop the\n // event silently — the worker group ensures exactly-once delivery, but\n // the task may have moved on between publish and pickup.\n return;\n }\n\n await storage.updateTask(taskId, {\n status: 'running',\n startedAt: new Date(),\n suspendPayload: undefined,\n suspendedAt: undefined,\n });\n const resumedTask = await storage.getTask(taskId);\n if (resumedTask) {\n await this.publishLifecycleEvent('task.resumed', resumedTask);\n }\n\n if (!this.#mastra) return;\n const workflow = this.#mastra.__getInternalWorkflow(BACKGROUND_TASK_WORKFLOW_ID);\n // `createRun({ runId })` reattaches to the existing snapshot when given a\n // stable runId — we don't want a fresh run.\n const run = await workflow.createRun({ runId: taskId });\n void run\n .resume({ resumeData })\n .then(result => {\n if (result.status !== 'suspended') {\n void workflow.deleteWorkflowRunById(taskId);\n }\n })\n .catch(err => {\n this.#mastra?.getLogger?.()?.error(`background-task workflow resume failed for ${taskId}:`, err);\n })\n .finally(() => {\n // Mirror dispatch's drain — resuming frees a slot when it terminates.\n void this.drainPending();\n });\n }\n\n /**\n * Run per-task hooks (onChunk, onResult, onComplete/onFailed) locally in the\n * worker path, before publishing the terminal lifecycle event. Ensures\n * memory / stream state is consistent by the time any pubsub subscriber is\n * notified. After running, the task context is deregistered so\n * `handleResult` (which also fires from pubsub) becomes a no-op for this\n * task in the same process.\n *\n * In distributed deployments where the worker runs in a different process\n * from the dispatcher, `this.taskContexts` won't contain an entry for\n * `task.id` — this method is a no-op there, and `handleResult` in the\n * dispatching process runs the hooks instead.\n */\n /**\n * Terminal-state hooks only. Called when a task reaches `'completed'` or\n * `'failed'`. Suspend is non-terminal — see `runLocalSuspendHooks` for that\n * path.\n *\n * @internal — also called by the workflow-engine step bodies in workflow.ts\n */\n async runLocalCompletionHooks(\n task: BackgroundTask,\n status: 'completed' | 'failed',\n extras: { result?: unknown; error?: { message: string; stack?: string } },\n ): Promise {\n const ctx = this.taskContexts.get(task.id);\n if (!ctx) return;\n\n try {\n if (status === 'completed') {\n ctx.onChunk?.({\n type: 'background-task-completed',\n payload: {\n taskId: task.id,\n toolName: task.toolName,\n toolCallId: task.toolCallId,\n runId: task.runId,\n result: extras.result,\n completedAt: task.completedAt!,\n agentId: task.agentId,\n },\n });\n\n await ctx.onResult?.({\n runId: task.runId,\n taskId: task.id,\n toolCallId: task.toolCallId,\n toolName: task.toolName,\n agentId: task.agentId,\n threadId: task.threadId,\n resourceId: task.resourceId,\n result: extras.result,\n status: 'completed',\n completedAt: task.completedAt!,\n startedAt: task.startedAt!,\n });\n\n // Globals (this.config.onTaskComplete / onTaskFailed) fire from\n // handleResult via pubsub so they run once per subscribing process\n // — in distributed deployments that's the dispatching process, which\n // is where observers/metrics are typically wired.\n await ctx.onComplete?.(task);\n } else {\n ctx.onChunk?.({\n type: 'background-task-failed',\n payload: {\n taskId: task.id,\n toolName: task.toolName,\n toolCallId: task.toolCallId,\n runId: task.runId,\n error: extras.error ?? { message: 'Unknown error' },\n completedAt: task.completedAt!,\n agentId: task.agentId,\n },\n });\n\n await ctx.onResult?.({\n runId: task.runId,\n taskId: task.id,\n toolCallId: task.toolCallId,\n toolName: task.toolName,\n agentId: task.agentId,\n threadId: task.threadId,\n resourceId: task.resourceId,\n error: extras.error,\n status: 'failed',\n completedAt: task.completedAt!,\n startedAt: task.startedAt!,\n });\n\n // See comment above — globals are handled exclusively by\n // handleResult so they fire once per subscribing process.\n await ctx.onFailed?.(task);\n }\n } finally {\n this.deregisterTaskContext(task.id);\n }\n }\n\n /**\n * Per-task suspend hooks. Fires `ctx.onResult({ status: 'suspended', ... })`\n * so the message list / memory pick up the suspension as the tool's\n * current invocation state. Does NOT deregister the task context — resume\n * needs the executor closure intact.\n *\n * @internal — called by the workflow-engine step bodies in workflow.ts\n */\n async runLocalSuspendHooks(task: BackgroundTask): Promise {\n const ctx = this.taskContexts.get(task.id);\n if (!ctx) return;\n await ctx.onExecution?.({\n runId: task.runId,\n taskId: task.id,\n toolCallId: task.toolCallId,\n toolName: task.toolName,\n agentId: task.agentId,\n threadId: task.threadId,\n resourceId: task.resourceId,\n startedAt: task.startedAt!,\n suspendedAt: task.suspendedAt,\n });\n }\n\n /** @internal — also called by the workflow-engine step bodies in workflow.ts */\n async runLocalExecutionHook(task: BackgroundTask): Promise {\n const ctx = this.taskContexts.get(task.id);\n if (!ctx) return;\n\n try {\n await ctx.onExecution?.({\n runId: task.runId,\n taskId: task.id,\n toolCallId: task.toolCallId,\n toolName: task.toolName,\n agentId: task.agentId,\n threadId: task.threadId,\n resourceId: task.resourceId,\n startedAt: task.startedAt!,\n });\n } catch {\n //fail silently\n }\n }\n\n private async handleResult(event: Event): Promise {\n const { taskId, toolName, toolCallId, threadId, resourceId, runId } = event.data;\n const storage = await this.getStorage();\n const task = await storage.getTask(taskId);\n\n if (task?.completedAt) {\n // Look up per-task hooks\n const ctx = this.taskContexts.get(taskId);\n\n if (event.type === 'task.completed') {\n ctx?.onChunk?.({\n type: 'background-task-completed',\n payload: {\n taskId,\n toolName,\n toolCallId,\n runId,\n result: event.data.result,\n completedAt: task.completedAt,\n agentId: task.agentId,\n },\n });\n\n await ctx?.onResult?.({\n runId,\n taskId,\n toolCallId,\n toolName,\n agentId: event.data.agentId,\n threadId,\n resourceId,\n result: event.data.result,\n status: 'completed',\n completedAt: task.completedAt!,\n startedAt: task.startedAt!,\n });\n\n if (task) {\n await Promise.all([ctx?.onComplete?.(task), this.config.onTaskComplete?.(task)]);\n }\n }\n\n if (event.type === 'task.failed') {\n ctx?.onChunk?.({\n type: 'background-task-failed',\n payload: {\n taskId,\n toolName,\n toolCallId,\n runId,\n error: event.data.error,\n completedAt: task.completedAt,\n agentId: task.agentId,\n },\n });\n\n await ctx?.onResult?.({\n runId,\n taskId,\n toolCallId,\n toolName,\n agentId: event.data.agentId,\n threadId,\n resourceId,\n error: event.data.error,\n status: 'failed',\n completedAt: task.completedAt!,\n startedAt: task.startedAt!,\n });\n\n if (task) {\n await Promise.all([ctx?.onFailed?.(task), this.config.onTaskFailed?.(task)]);\n }\n }\n\n // Clean up context after terminal result\n this.deregisterTaskContext(taskId);\n }\n }\n\n private handleCancel(event: Event): void {\n const { taskId } = event.data;\n const controller = this.activeAbortControllers.get(taskId);\n if (controller) {\n controller.abort(new Error('Task cancelled'));\n this.activeAbortControllers.delete(taskId);\n }\n this.deregisterTaskContext(taskId);\n }\n\n /** @internal — also called by the workflow-engine step bodies in workflow.ts */\n async publishLifecycleEvent(\n type:\n | 'task.running'\n | 'task.completed'\n | 'task.failed'\n | 'task.cancelled'\n | 'task.output'\n | 'task.suspended'\n | 'task.resumed',\n task: BackgroundTaskEvent,\n ): Promise {\n await this.pubsub.publish(TOPIC_RESULT, {\n type,\n data: {\n taskId: task.id,\n toolName: task.toolName,\n toolCallId: task.toolCallId,\n runId: task.runId,\n agentId: task.agentId,\n threadId: task.threadId,\n resourceId: task.resourceId,\n args: task.args,\n result: task.result,\n error: task.error,\n chunk: task.chunk,\n completedAt: task.completedAt,\n startedAt: task.startedAt,\n suspendPayload: task.suspendPayload,\n suspendedAt: task.suspendedAt,\n },\n runId: task.id,\n });\n }\n\n private async checkConcurrency(agentId: string): Promise {\n const storage = await this.getStorage();\n const globalRunning = await storage.getRunningCount();\n if (globalRunning >= this.config.globalConcurrency) {\n return false;\n }\n\n const agentRunning = await storage.getRunningCountByAgent(agentId);\n if (agentRunning >= this.config.perAgentConcurrency) {\n return false;\n }\n\n return true;\n }\n\n private async drainPending(): Promise {\n const storage = await this.getStorage();\n const { tasks: pending } = await storage.listTasks({\n status: 'pending',\n orderBy: 'createdAt',\n orderDirection: 'asc',\n });\n\n for (const task of pending) {\n if (await this.checkConcurrency(task.agentId)) {\n await this.dispatch(task);\n }\n }\n }\n\n /**\n * Recovers tasks left in 'running' or 'pending' state from a previous process.\n */\n private async recoverStaleTasks(): Promise {\n try {\n const storage = await this.getStorage();\n const { tasks: staleTasks } = await storage.listTasks({ status: 'running' });\n for (const task of staleTasks) {\n if (task.maxRetries > 0) {\n await storage.updateTask(task.id, {\n status: 'pending',\n startedAt: undefined,\n });\n } else {\n await storage.updateTask(task.id, {\n status: 'failed',\n error: { message: 'Worker process terminated before task completed' },\n completedAt: new Date(),\n });\n }\n }\n\n const { tasks: pendingTasks } = await storage.listTasks({\n status: 'pending',\n orderBy: 'createdAt',\n orderDirection: 'asc',\n });\n for (const task of pendingTasks) {\n if (await this.checkConcurrency(task.agentId)) {\n await this.dispatch(task);\n }\n }\n } catch (error) {\n const logger = this.#mastra?.getLogger();\n if (logger) {\n logger.error('Failed to recover stale background tasks', error);\n }\n }\n }\n}\n","import type { BackgroundTaskManager } from './manager';\nimport type { BackgroundTaskHandle, CheckIfSuspendedPayload, CreateBackgroundTaskOptions } from './types';\n\n/**\n * Creates a self-contained background task handle.\n *\n * Bundles the task payload with per-stream hooks (executor, onChunk, onResult)\n * so each dispatch is fully isolated — no shared mutable state on the manager.\n *\n * @example\n * ```ts\n * const bgTask = createBackgroundTask(manager, {\n * toolName: 'research',\n * toolCallId: 'call-1',\n * args: { query: 'solana' },\n * agentId: 'agent-1',\n * runId: 'run-1',\n * context: {\n * executor: { execute: (args, opts) => tool.execute(args, opts) },\n * onChunk: (chunk) => controller.enqueue(chunk),\n * onResult: (params) => messageList.addToolResult(params),\n * },\n * });\n *\n * const { task, fallbackToSync } = await bgTask.dispatch();\n * const completed = await bgTask.waitForCompletion();\n * await bgTask.cancel();\n * ```\n */\nexport function createBackgroundTask(\n manager: BackgroundTaskManager,\n options: CreateBackgroundTaskOptions,\n): BackgroundTaskHandle {\n const { context, ...payload } = options;\n let taskId: string | undefined;\n\n return {\n get task() {\n if (!taskId) throw new Error('Task has not been dispatched yet');\n // Synchronous access to task ID — full task data requires async getTask()\n return { id: taskId } as any;\n },\n\n async dispatch() {\n const result = await manager.enqueue(payload, context);\n taskId = result.task.id;\n return result;\n },\n\n async checkIfSuspended(args: CheckIfSuspendedPayload) {\n const result = await manager.listTasks({\n toolCallId: args.toolCallId,\n runId: args.runId,\n agentId: args.agentId,\n threadId: args.threadId,\n resourceId: args.resourceId,\n toolName: args.toolName,\n status: 'suspended',\n });\n if (result.total > 0) {\n const task = result.tasks[0];\n if (task) {\n taskId = task.id;\n return true;\n }\n }\n\n return false;\n },\n\n async resume(resumeData?: unknown) {\n if (!taskId) throw new Error('Task has not been dispatched yet');\n return manager.resume(taskId, resumeData);\n },\n\n async cancel() {\n if (!taskId) throw new Error('Task has not been dispatched yet');\n return manager.cancel(taskId);\n },\n\n async waitForCompletion(waitOptions) {\n if (!taskId) throw new Error('Task has not been dispatched yet');\n return manager.waitForNextTask([taskId], waitOptions);\n },\n };\n}\n","import type {\n AgentBackgroundConfig,\n AgentBackgroundToolConfig,\n BackgroundTaskManagerConfig,\n LLMBackgroundOverride,\n ToolBackgroundConfig,\n} from './types';\n\nexport interface ResolvedBackgroundConfig {\n runInBackground: boolean;\n timeoutMs: number;\n maxRetries: number;\n}\n\n/**\n * Resolves whether a tool call should run in the background, and with what config.\n *\n * Resolution order (highest to lowest priority):\n * 1. LLM per-call override (`_background` field in tool args)\n * 2. Agent-level backgroundTasks.tools config\n * 3. Tool-level background config\n * 4. Default: foreground\n *\n * Strips the `_background` field from args (mutates the args object).\n */\nexport function resolveBackgroundConfig({\n llmBgOverrides,\n toolName,\n toolConfig,\n agentConfig,\n managerConfig,\n}: {\n llmBgOverrides: Record;\n toolName: string;\n toolConfig?: ToolBackgroundConfig;\n agentConfig?: AgentBackgroundConfig;\n managerConfig?: BackgroundTaskManagerConfig;\n}): ResolvedBackgroundConfig {\n const llmOverride = llmBgOverrides as LLMBackgroundOverride | undefined;\n\n // If this agent has background tasks disabled, short-circuit so no tool can\n // dispatch a background task even if its own config or the LLM override\n // would otherwise enable it. Default timeoutMs/maxRetries are still returned\n // so callers can use the shape safely.\n if (agentConfig?.disabled) {\n return {\n runInBackground: false,\n timeoutMs: managerConfig?.defaultTimeoutMs ?? 300_000,\n maxRetries: managerConfig?.defaultRetries?.maxRetries ?? 0,\n };\n }\n\n // Resolve agent-level config for this specific tool\n const agentToolConfig = resolveAgentToolConfig(toolName, agentConfig);\n\n // --- enabled ---\n // The LLM `_background` override is a modifier on tools the developer has\n // already opted in at the tool or agent layer — it is NOT a standalone\n // opt-in. A foreground-only tool must stay foreground regardless of what\n // the model emits, so `agent.generate()` / `agent.stream()` keep returning\n // real tool results for deterministic tools. See issue #16783.\n const baseEnabled = agentToolConfig?.enabled ?? toolConfig?.enabled ?? false;\n const enabled = baseEnabled ? (llmOverride?.enabled ?? true) : false;\n\n // --- timeoutMs ---\n const timeoutMs =\n llmOverride?.timeoutMs ??\n agentToolConfig?.timeoutMs ??\n toolConfig?.timeoutMs ??\n managerConfig?.defaultTimeoutMs ??\n 300_000;\n\n // --- maxRetries ---\n const maxRetries =\n llmOverride?.maxRetries ?? toolConfig?.maxRetries ?? managerConfig?.defaultRetries?.maxRetries ?? 0;\n\n return { runInBackground: enabled, timeoutMs, maxRetries };\n}\n\nfunction resolveAgentToolConfig(\n toolName: string,\n agentConfig?: AgentBackgroundConfig,\n): { enabled: boolean; timeoutMs?: number } | undefined {\n if (!agentConfig?.tools) return undefined;\n\n if (agentConfig.tools === 'all') {\n return { enabled: true };\n }\n\n if (toolName.startsWith('agent-')) {\n toolName = toolName.substring('agent-'.length);\n } else if (toolName.startsWith('workflow-')) {\n toolName = toolName.substring('workflow-'.length);\n }\n\n const entry: AgentBackgroundToolConfig | undefined = agentConfig.tools[toolName];\n if (entry === undefined) return undefined;\n if (typeof entry === 'boolean') return { enabled: entry };\n return entry;\n}\n","import { z } from 'zod/v4';\n\n/**\n * JSON Schema definition for the `_background` override field.\n * Injected into background-eligible tool schemas so the LLM can override behavior per-call.\n */\nexport const backgroundOverrideJsonSchema = {\n type: 'object' as const,\n description:\n 'Optional: override background execution behavior for this specific call. ' +\n 'Set enabled=false to force foreground, enabled=true to force background. ' +\n 'Omit entirely to use the default configuration.',\n properties: {\n enabled: {\n type: 'boolean' as const,\n description: 'Force background (true) or foreground (false) execution for this call.',\n },\n timeoutMs: {\n type: 'number' as const,\n description: 'Override timeout in milliseconds for this call.',\n },\n maxRetries: {\n type: 'number' as const,\n description: 'Override maximum retry attempts for this call.',\n },\n },\n additionalProperties: false,\n};\n\nexport const backgroundOverrideZodSchema = z\n .object({\n enabled: z.boolean().optional().describe('Force background (true) or foreground (false) execution for this call.'),\n timeoutMs: z.number().optional().describe('Override timeout in milliseconds for this call.'),\n maxRetries: z.number().optional().describe('Override maximum retry attempts for this call.'),\n })\n .optional()\n .describe(\n 'Optional: override background execution behavior for this specific call. Set enabled=false to force foreground, enabled=true to force background. Omit entirely to use the default configuration.',\n );\n","import type { AgentBackgroundConfig, ToolBackgroundConfig } from './types';\n\ninterface ToolEntry {\n toolName: string;\n toolConfig?: ToolBackgroundConfig;\n /** Whether the tool defaults to background execution */\n defaultBackground: boolean;\n}\n\n/**\n * Generates the system prompt section that tells the LLM about background task capabilities.\n *\n * Returns undefined if no tools are background-eligible (nothing to inject).\n */\nexport function generateBackgroundTaskSystemPrompt(\n tools: Record,\n agentConfig?: AgentBackgroundConfig,\n): string | undefined {\n const eligibleTools: ToolEntry[] = [];\n\n const enableAll = agentConfig?.tools === 'all';\n\n for (const [toolName, tool] of Object.entries(tools)) {\n const bgEnabledFromAgentConfig =\n agentConfig?.tools === 'all'\n ? false\n : typeof agentConfig?.tools?.[toolName] === 'boolean'\n ? agentConfig.tools[toolName]\n : (agentConfig?.tools?.[toolName]?.enabled ?? false);\n eligibleTools.push({\n toolName,\n toolConfig: tool.background,\n defaultBackground: enableAll ? true : (bgEnabledFromAgentConfig ?? tool.background?.enabled ?? false),\n });\n }\n\n if (eligibleTools.length === 0) {\n return undefined;\n }\n\n const toolLines = eligibleTools\n .map(t => `- ${t.toolName} (default: ${t.defaultBackground ? 'background' : 'foreground'})`)\n .join('\\n');\n\n return `You have the ability to run certain tools in the background while continuing the conversation. The following tools support background execution:\n${toolLines}\n\nFor any of these tools, you can include a \"_background\" field in the tool arguments to override the default:\n \"_background\": { \"enabled\": true/false, \"timeoutMs\": number, \"maxRetries\": number }\n\nAll fields in \"_background\" are optional. Only include what you want to override.\n\nGuidelines:\n- Use background execution when the user doesn't need the result immediately, or when you're launching multiple independent tasks.\n- Use foreground execution when the user is directly waiting for the result and the conversation can't continue without it.\n- If you don't include \"_background\", the tool's default configuration is used.\n- When a tool runs in the background, you'll receive a placeholder result with a task ID. You can reference this in your response to the user.\n\nIMPORTANT: \"_background\" field is always an object. The fields in the _background field should be inside the _background object, not outside of it.`;\n}\n"]}