{"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-M5AKMHS2.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<BackgroundTaskManagerConfig, 'globalConcurrency' | 'perAgentConcurrency' | 'backpressure' | 'defaultTimeoutMs'>\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<string, TaskContext> = 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<string, ToolExecutor> = 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<string, AbortController> = 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<typeof setInterval>;\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<void>;\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<void> {\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<void> {\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<void>) => {\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<void>) => {\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<Mastra['__registerInternalWorkflow']>[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<EnqueueResult> {\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<void> {\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<BackgroundTask> {\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<BackgroundTask | null> {\n    const storage = await this.getStorage();\n    return storage.getTask(taskId);\n  }\n\n  async listTasks(filter: TaskFilter = {}): Promise<TaskListResult> {\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<void> {\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<BackgroundTask> {\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<Record<string, unknown>> {\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<string, BackgroundTaskStatus> = {\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<string, string> = {\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<string, unknown> = {\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<void> {\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<void> {\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<boolean> {\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<void> {\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<void> {\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<void> {\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<void> {\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<void> {\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<void> {\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<boolean> {\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<void> {\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<void> {\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<string, unknown>;\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<string, { background?: ToolBackgroundConfig; description?: string }>,\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}\n"]}