{"version":3,"file":"worker-D6tELOAF.cjs","names":["MastraWorker","#config","#running","#handleEvent","#pushCb","#transport","PullTransport","#dispatch","#recordTrigger","RequestContext"],"sources":["../src/schedules/worker.ts"],"sourcesContent":["import type { AgentSignal, AgentSignalIfIdleOptions } from '../agent/types';\nimport type { Event, EventCallback } from '../events/types';\nimport type { Mastra } from '../mastra';\nimport { RequestContext } from '../request-context';\nimport type { ScheduleTarget } from '../storage/domains/schedules/base';\nimport { PullTransport } from '../worker/transport/pull-transport';\nimport type { WorkerTransport } from '../worker/transport/transport';\nimport { MastraWorker } from '../worker/worker';\nimport type { WorkerDeps } from '../worker/worker';\nimport type {\n  ScheduleEffective,\n  ScheduleHooks,\n  ScheduleIfIdle,\n  SchedulePrepareContext,\n  SchedulePrepareResult,\n  ScheduleRunStatus,\n  ScheduleTriggerInfo,\n} from './types';\n\n/** PubSub topic on which the scheduler publishes `agent-schedule.fire` events. */\nexport const TOPIC_AGENT_SCHEDULES = 'agent-schedules';\n\nconst DEFAULT_GROUP = 'mastra-agent-schedules';\n\nexport interface AgentScheduleWorkerConfig {\n  group?: string;\n}\n\nexport interface AgentScheduleFireEventData {\n  scheduleId: string;\n  claimId: string;\n  scheduledFireAt: number;\n  target: Extract<ScheduleTarget, { type: 'agent' }>;\n  /** Defaults to `'schedule-fire'`. `'manual'` for fire-now invocations. */\n  triggerKind?: 'schedule-fire' | 'manual';\n}\n\n/**\n * Consumes `agent-schedule.fire` events published by the scheduler and runs\n * the configured agent — either by `sendSignal` (threaded) or\n * `agent.generate` (threadless). Mirrors `OrchestrationWorker`'s\n * subscribe-on-start / unsubscribe-on-stop lifecycle.\n *\n * Records the schedule trigger after dispatching so the trigger row\n * carries the agent's runId (not just the scheduler's claim id),\n * letting the UI link triggers to real agent runs.\n */\nexport class AgentScheduleWorker extends MastraWorker {\n  readonly name = 'agent-schedule';\n\n  #config: AgentScheduleWorkerConfig;\n  #transport?: WorkerTransport;\n  #pushCb?: EventCallback;\n  #running = false;\n\n  constructor(config: AgentScheduleWorkerConfig = {}) {\n    super();\n    this.#config = config;\n  }\n\n  async init(deps: WorkerDeps): Promise<void> {\n    await super.init(deps);\n\n    if (!deps.mastra) {\n      throw new Error('AgentScheduleWorker requires Mastra instance');\n    }\n  }\n\n  async start(): Promise<void> {\n    if (this.#running) return;\n    if (!this.deps) throw new Error('AgentScheduleWorker: call init() before start()');\n\n    // Push-only pubsubs (EventEmitter, UnixSocketPubSub) don't support the\n    // grouped pull subscription a PullTransport requires. They deliver every\n    // event to every in-process subscriber, so subscribe directly without a\n    // group — mirroring how Mastra.startWorkers handles workflow events for\n    // push-only transports instead of running the pull-based worker.\n    const modes = this.deps.pubsub.supportedModes ?? ['pull'];\n    if (!modes.includes('pull')) {\n      const cb: EventCallback = (event, ack, nack) => {\n        void this.#handleEvent(event, ack, nack);\n      };\n      this.#pushCb = cb;\n      await this.deps.pubsub.subscribe(TOPIC_AGENT_SCHEDULES, cb);\n      this.#running = true;\n      return;\n    }\n\n    const group = this.#config.group ?? DEFAULT_GROUP;\n    this.#transport = new PullTransport({\n      pubsub: this.deps.pubsub,\n      group,\n      topic: TOPIC_AGENT_SCHEDULES,\n      logger: this.deps.logger,\n    });\n\n    await this.#transport.start({\n      route: (event, ack, nack) => this.#handleEvent(event, ack, nack),\n    });\n\n    this.#running = true;\n  }\n\n  async stop(): Promise<void> {\n    if (!this.#running) return;\n    try {\n      if (this.#transport) {\n        await this.#transport.stop();\n        this.#transport = undefined;\n      }\n      if (this.#pushCb && this.deps) {\n        await this.deps.pubsub.unsubscribe(TOPIC_AGENT_SCHEDULES, this.#pushCb);\n        this.#pushCb = undefined;\n      }\n    } finally {\n      this.#running = false;\n    }\n  }\n\n  get isRunning(): boolean {\n    return this.#running;\n  }\n\n  async #handleEvent(event: Event, ack?: () => Promise<void>, nack?: () => Promise<void>): Promise<void> {\n    if (event.type !== 'agent-schedule.fire') {\n      // Not ours — ack and ignore.\n      await ack?.();\n      return;\n    }\n\n    const mastra = this.mastra!;\n    const payload = event.data as AgentScheduleFireEventData;\n    try {\n      await this.#dispatch(mastra, payload);\n      await ack?.();\n    } catch (err) {\n      this.deps?.logger?.error('AgentScheduleWorker: error processing agent-schedule.fire', {\n        scheduleId: payload?.scheduleId,\n        claimId: payload?.claimId,\n        error: err,\n      });\n      await nack?.();\n    }\n  }\n\n  async #dispatch(mastra: Mastra, data: AgentScheduleFireEventData): Promise<void> {\n    const { scheduleId, claimId, scheduledFireAt, target } = data;\n    const actualFireAt = Date.now();\n\n    const result = await executeAgentSchedule(mastra, scheduleId, target, {\n      triggerKind: data.triggerKind ?? 'schedule-fire',\n      firedAt: new Date(actualFireAt),\n      logger: this.deps?.logger,\n    });\n\n    await this.#recordTrigger({\n      scheduleId,\n      claimId,\n      scheduledFireAt,\n      actualFireAt,\n      outcome: result.outcome,\n      runId: result.runId,\n      error: result.reason,\n      triggerKind: data.triggerKind ?? 'schedule-fire',\n    });\n  }\n\n  async #recordTrigger(args: {\n    scheduleId: string;\n    claimId: string;\n    scheduledFireAt: number;\n    actualFireAt: number;\n    outcome: ScheduleTriggerOutcome;\n    runId?: string;\n    error?: string;\n    triggerKind: 'schedule-fire' | 'manual';\n  }): Promise<void> {\n    const store = await this.deps?.storage.getStore('schedules');\n    if (!store) return;\n    try {\n      await store.recordTrigger({\n        scheduleId: args.scheduleId,\n        runId: args.runId ?? args.claimId,\n        scheduledFireAt: args.scheduledFireAt,\n        actualFireAt: args.actualFireAt,\n        outcome: args.outcome,\n        error: args.error,\n        triggerKind: args.triggerKind,\n      });\n    } catch (err) {\n      this.deps?.logger?.error('AgentScheduleWorker: failed to record trigger', {\n        scheduleId: args.scheduleId,\n        claimId: args.claimId,\n        error: err,\n      });\n    }\n  }\n}\n\n/** Outcome union written to the schedule trigger row for an agent-schedule fire. */\nexport type ScheduleTriggerOutcome =\n  | 'succeeded'\n  | 'delivered'\n  | 'persisted'\n  | 'discarded'\n  | 'skipped'\n  | 'aborted'\n  | 'failed';\n\n/**\n * Best-effort delete of the schedule row. Self-clean is best-effort —\n * an explicit `schedules.delete()` may have raced us. Swallow errors.\n */\nasync function selfClean(mastra: Mastra, scheduleId: string): Promise<void> {\n  try {\n    const store = await mastra.getStorage()?.getStore('schedules');\n    if (!store) return;\n    await store.deleteSchedule(scheduleId);\n  } catch (error) {\n    mastra.getLogger?.()?.debug?.('agent-schedule self-clean failed', { scheduleId, error });\n  }\n}\n\ntype LooseLogger = {\n  error?: (message: string, ...args: any[]) => void;\n  debug?: (message: string, ...args: any[]) => void;\n};\n\n/** Optional context the `AgentScheduleWorker` passes to `executeAgentSchedule`. */\nexport interface ExecuteAgentScheduleContext {\n  triggerKind?: 'schedule-fire' | 'manual';\n  firedAt?: Date;\n  logger?: LooseLogger;\n}\n\n/**\n * Resolves the agent, runs the user `prepare` hook (if any), applies\n * idle filters, and either `sendSignal`s into the target\n * thread or runs `agent.generate`. The returned `runId` is the agent\n * run id from the SDK call (when a run was actually started), suitable\n * for trigger-row linkability.\n *\n * `outcome` is the final outcome for the schedule trigger row and is\n * also the one that drove the `onFinish`/`onError`/`onAbort` hook\n * selection. `status` is retained for back-compat with existing tests.\n */\nexport async function executeAgentSchedule(\n  mastra: Mastra,\n  scheduleId: string,\n  target: Extract<ScheduleTarget, { type: 'agent' }>,\n  ctx: ExecuteAgentScheduleContext = {},\n): Promise<{ status: ScheduleRunStatus; outcome: ScheduleTriggerOutcome; reason?: string; runId?: string }> {\n  const { agentId } = target;\n  const trigger: ScheduleTriggerInfo = {\n    kind: ctx.triggerKind === 'manual' ? 'manual' : 'cron',\n    firedAt: ctx.firedAt ?? new Date(),\n  };\n  const log = ctx.logger ?? mastra.getLogger?.();\n\n  const agent = (() => {\n    try {\n      return mastra.getAgentById(agentId);\n    } catch {\n      return null;\n    }\n  })();\n  if (!agent) {\n    await selfClean(mastra, scheduleId);\n    return {\n      status: 'agent-missing',\n      outcome: 'failed',\n      reason: `agent \"${agentId}\" no longer registered`,\n    };\n  }\n\n  const hooks =\n    (\n      mastra as unknown as {\n        __getScheduleHooks?: () => ScheduleHooks | null | undefined;\n      }\n    ).__getScheduleHooks?.() ?? undefined;\n\n  // Build a partial `AgentSchedule` view for hook contexts. Best-effort —\n  // pulls from the live schedule row when hooks are configured (so they see\n  // fresh fields), otherwise a cheap projection from the event target. The\n  // ref is only ever passed to hooks, so hookless fires skip the extra\n  // storage round-trip entirely.\n  const scheduleRef = hooks\n    ? await loadScheduleRef(mastra, scheduleId, target, log)\n    : scheduleRefFromTarget(scheduleId, target);\n\n  const rowDefaults: ScheduleEffective = buildEffectiveFromTarget(target);\n\n  // 1. prepare hook\n  let prepared: SchedulePrepareResult | null | undefined;\n  if (hooks?.prepare) {\n    try {\n      const prepareCtx: SchedulePrepareContext = {\n        mastra,\n        agentId,\n        schedule: scheduleRef,\n        trigger,\n      };\n      prepared = await hooks.prepare(prepareCtx);\n    } catch (err) {\n      await safeHookCall(log, () =>\n        hooks.onError?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          phase: 'prepare',\n          error: err instanceof Error ? err : new Error(String(err)),\n          effective: rowDefaults,\n        }),\n      );\n      return {\n        status: 'invalid-input',\n        outcome: 'failed',\n        reason: err instanceof Error ? err.message : String(err),\n      };\n    }\n  }\n\n  if (prepared === null) {\n    // Hook explicitly asked to skip this fire.\n    await safeHookCall(log, () =>\n      hooks?.onFinish?.({\n        mastra,\n        agentId,\n        schedule: scheduleRef,\n        trigger,\n        outcome: 'skipped',\n        effective: rowDefaults,\n      }),\n    );\n    return { status: 'fired', outcome: 'skipped' };\n  }\n\n  const effective: ScheduleEffective = mergeEffective(rowDefaults, prepared);\n\n  // Run-level marker carried on the signal / agent run so consumers\n  // (typing status, UI badges) can detect that this run was\n  // schedule-driven.\n  const scheduleRunMeta = {\n    scheduleId,\n    ...(effective.threadId ? { threadId: effective.threadId } : {}),\n  };\n\n  // 2. threaded vs threadless\n  if (effective.threadId) {\n    if (!effective.resourceId) {\n      const reason = 'resourceId required when threadId is set';\n      await safeHookCall(log, () =>\n        hooks?.onError?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          phase: 'run',\n          error: new Error(reason),\n          effective,\n        }),\n      );\n      return { status: 'invalid-input', outcome: 'failed', reason };\n    }\n\n    const memory = await agent.getMemory();\n    if (memory) {\n      const thread = await memory.getThreadById({ threadId: effective.threadId });\n      if (!thread) {\n        await selfClean(mastra, scheduleId);\n        const reason = `thread \"${effective.threadId}\" not found`;\n        await safeHookCall(log, () =>\n          hooks?.onError?.({\n            mastra,\n            agentId,\n            schedule: scheduleRef,\n            trigger,\n            phase: 'run',\n            error: new Error(reason),\n            effective,\n          }),\n        );\n        return { status: 'thread-missing', outcome: 'failed', reason };\n      }\n    }\n\n    let signalResult;\n    try {\n      const signalType = effective.signalType ?? 'notification';\n      const signalBase = {\n        tagName: effective.tagName ?? 'schedule',\n        contents: effective.prompt,\n        ...(effective.attributes ? { attributes: effective.attributes } : {}),\n        providerOptions: mergeProviderOptions(effective.providerOptions, scheduleRunMeta),\n      };\n      const signal: AgentSignal =\n        signalType === 'state' ? { ...signalBase, type: 'state' } : { ...signalBase, type: signalType };\n      signalResult = agent.sendSignal(signal, {\n        resourceId: effective.resourceId,\n        threadId: effective.threadId,\n        ...(effective.ifActive ? { ifActive: effective.ifActive } : {}),\n        ...(effective.ifIdle ? { ifIdle: buildIfIdleOptions(effective.ifIdle) } : {}),\n      });\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n      await safeHookCall(log, () =>\n        hooks?.onError?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          phase: 'run',\n          error,\n          effective,\n        }),\n      );\n      return { status: 'invalid-input', outcome: 'failed', reason: error.message };\n    }\n\n    // The signal runtime resolves `accepted` at routing-decision time with the\n    // concrete action it took. It only *rejects* when the signal could not be\n    // routed at all (e.g. a misconfigured agent) — generation errors on a woken\n    // run surface through the run's own stream, never by rejecting here.\n    let settled;\n    try {\n      settled = await signalResult.accepted;\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n      await safeHookCall(log, () =>\n        hooks?.onError?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          phase: 'run',\n          error,\n          effective,\n        }),\n      );\n      return { status: 'invalid-input', outcome: 'failed', reason: error.message };\n    }\n\n    const action = settled.action;\n    // `runId` is present on `wake`/`deliver`/`blocked` — the actions that reference a\n    // concrete agent run. `persist`/`discard` never produce a run id.\n    const runId = 'runId' in settled ? settled.runId : undefined;\n\n    if (action === 'deliver') {\n      await safeHookCall(log, () =>\n        hooks?.onFinish?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          outcome: 'delivered',\n          runId,\n          joinedExistingRun: true,\n          effective,\n        }),\n      );\n      return { status: 'signal-accepted', outcome: 'delivered', runId };\n    }\n    if (action === 'persist') {\n      // Wait briefly for persist write so the trigger row reflects the truth.\n      if (signalResult.persisted) {\n        try {\n          await signalResult.persisted;\n        } catch {\n          // Persist write failure is surfaced via the signal's own machinery.\n        }\n      }\n      await safeHookCall(log, () =>\n        hooks?.onFinish?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          outcome: 'persisted',\n          runId,\n          effective,\n        }),\n      );\n      return { status: 'signal-accepted', outcome: 'persisted', runId };\n    }\n    if (action === 'discard') {\n      await safeHookCall(log, () =>\n        hooks?.onFinish?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          outcome: 'discarded',\n          runId,\n          effective,\n        }),\n      );\n      return { status: 'signal-accepted', outcome: 'discarded', runId };\n    }\n\n    if (action === 'blocked') {\n      // The thread was suspended and could not accept an idle wake. Nothing ran\n      // and nothing was stored; report as skipped so the trigger row is truthful.\n      await safeHookCall(log, () =>\n        hooks?.onFinish?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          outcome: 'skipped',\n          runId,\n          effective,\n        }),\n      );\n      return { status: 'skipped-thread-blocked', outcome: 'skipped', runId };\n    }\n\n    // action === 'wake' — a new run was started for this signal. The thread-stream\n    // runtime drives the run's stream to completion on its own (so the active-run\n    // record and thread lease release without requiring a consumer here); the\n    // schedule fire is fire-and-forget for trigger-row purposes.\n    await safeHookCall(log, () =>\n      hooks?.onFinish?.({\n        mastra,\n        agentId,\n        schedule: scheduleRef,\n        trigger,\n        outcome: 'succeeded',\n        runId,\n        effective,\n      }),\n    );\n    return { status: 'signal-accepted', outcome: 'succeeded', runId };\n  }\n\n  // 4. threadless path: agent.generate\n  try {\n    const result = await agent.generate(effective.prompt, {\n      providerOptions: mergeProviderOptions(effective.providerOptions, scheduleRunMeta),\n    });\n    const runId = extractRunId(result);\n    await safeHookCall(log, () =>\n      hooks?.onFinish?.({\n        mastra,\n        agentId,\n        schedule: scheduleRef,\n        trigger,\n        outcome: 'succeeded',\n        runId,\n        result: extractRunSnapshot(result),\n        effective,\n      }),\n    );\n    return { status: 'fired', outcome: 'succeeded', runId };\n  } catch (err) {\n    const error = err instanceof Error ? err : new Error(String(err));\n    if (isAbortError(error)) {\n      await safeHookCall(log, () =>\n        hooks?.onAbort?.({\n          mastra,\n          agentId,\n          schedule: scheduleRef,\n          trigger,\n          runId: extractRunId(error) ?? scheduleId,\n          effective,\n        }),\n      );\n      return { status: 'fired', outcome: 'aborted' };\n    }\n    await safeHookCall(log, () =>\n      hooks?.onError?.({\n        mastra,\n        agentId,\n        schedule: scheduleRef,\n        trigger,\n        phase: 'run',\n        error,\n        effective,\n      }),\n    );\n    return { status: 'invalid-input', outcome: 'failed', reason: error.message };\n  }\n}\n\nfunction buildEffectiveFromTarget(target: Extract<ScheduleTarget, { type: 'agent' }>): ScheduleEffective {\n  return {\n    threadId: target.threadId,\n    resourceId: target.resourceId,\n    prompt: target.prompt,\n    signalType: target.signalType,\n    tagName: target.tagName,\n    attributes: target.attributes,\n    providerOptions: target.providerOptions,\n    ifActive: target.ifActive,\n    ifIdle: target.ifIdle,\n  };\n}\n\n/**\n * Maps the stored, JSON-safe `ifIdle` config onto the signal API's\n * `AgentSignalIfIdleOptions`, rehydrating the plain `streamOptions.requestContext`\n * object into a live `RequestContext` before the wake signal runs.\n */\nfunction buildIfIdleOptions(ifIdle: ScheduleIfIdle): AgentSignalIfIdleOptions {\n  const requestContext = ifIdle.streamOptions?.requestContext;\n  return {\n    ...(ifIdle.behavior ? { behavior: ifIdle.behavior } : {}),\n    ...(ifIdle.attributes ? { attributes: ifIdle.attributes } : {}),\n    ...(requestContext\n      ? { streamOptions: { requestContext: new RequestContext(Object.entries(requestContext)) } }\n      : {}),\n  };\n}\n\nfunction mergeEffective(base: ScheduleEffective, overrides: SchedulePrepareResult | undefined): ScheduleEffective {\n  if (!overrides) return base;\n  return {\n    ...base,\n    ...overrides,\n  };\n}\n\nfunction mergeProviderOptions(\n  fromHook: Record<string, unknown> | undefined,\n  scheduleRunMeta: Record<string, unknown>,\n): Record<string, any> {\n  const base = (fromHook ?? {}) as Record<string, any>;\n  const baseMastra = (base.mastra ?? {}) as Record<string, unknown>;\n  return {\n    ...base,\n    mastra: {\n      ...baseMastra,\n      schedule: scheduleRunMeta,\n    },\n  };\n}\n\nasync function loadScheduleRef(\n  mastra: Mastra,\n  scheduleId: string,\n  target: Extract<ScheduleTarget, { type: 'agent' }>,\n  logger?: LooseLogger,\n): Promise<{ id: string; agentId: string; name?: string; [key: string]: unknown }> {\n  try {\n    const schedule = await mastra.schedules.get(scheduleId);\n    if (schedule && schedule.agentId !== undefined) return { ...schedule, agentId: schedule.agentId };\n  } catch (err) {\n    // Fall back to a minimal projection from the event target, but surface\n    // the failure so a persistently-broken schedules store isn't invisible.\n    logger?.debug?.('AgentScheduleWorker: failed to load schedule row for hook context', { scheduleId, error: err });\n  }\n  return scheduleRefFromTarget(scheduleId, target);\n}\n\n/** Minimal hook-context projection built from the fire event's target. */\nfunction scheduleRefFromTarget(\n  scheduleId: string,\n  target: Extract<ScheduleTarget, { type: 'agent' }>,\n): { id: string; agentId: string; name?: string } {\n  return {\n    id: scheduleId,\n    agentId: target.agentId,\n    ...(target.name !== undefined ? { name: target.name } : {}),\n  };\n}\n\nasync function safeHookCall(logger: LooseLogger | undefined, fn: () => unknown): Promise<void> {\n  try {\n    await fn();\n  } catch (err) {\n    logger?.error?.('AgentScheduleWorker: hook threw, ignoring', { error: err });\n  }\n}\n\nfunction isAbortError(err: unknown): boolean {\n  if (!err || typeof err !== 'object') return false;\n  const name = (err as { name?: unknown }).name;\n  return name === 'AbortError';\n}\n\nfunction extractRunId(value: unknown): string | undefined {\n  if (value && typeof value === 'object' && 'runId' in value) {\n    const runId = (value as { runId?: unknown }).runId;\n    if (typeof runId === 'string') return runId;\n  }\n  return undefined;\n}\n\nfunction extractRunSnapshot(\n  value: unknown,\n): { text?: string; usage?: Record<string, unknown>; finishReason?: string } | undefined {\n  if (!value || typeof value !== 'object') return undefined;\n  const v = value as { text?: unknown; usage?: unknown; finishReason?: unknown };\n  const snapshot: { text?: string; usage?: Record<string, unknown>; finishReason?: string } = {};\n  if (typeof v.text === 'string') snapshot.text = v.text;\n  if (v.usage && typeof v.usage === 'object') snapshot.usage = v.usage as Record<string, unknown>;\n  if (typeof v.finishReason === 'string') snapshot.finishReason = v.finishReason;\n  return Object.keys(snapshot).length > 0 ? snapshot : undefined;\n}\n"],"mappings":"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"}