@mastra/core 0.15.3 → 0.16.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/agent/index.cjs +8 -8
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +1 -1
  5. package/dist/agent/input-processor/index.cjs +6 -6
  6. package/dist/agent/input-processor/index.js +1 -1
  7. package/dist/chunk-2BFCQRWV.cjs +673 -0
  8. package/dist/chunk-2BFCQRWV.cjs.map +1 -0
  9. package/dist/{chunk-K6UMYGK5.cjs → chunk-3CJXUAA2.cjs} +2 -2
  10. package/dist/{chunk-K6UMYGK5.cjs.map → chunk-3CJXUAA2.cjs.map} +1 -1
  11. package/dist/{chunk-EZCMCWSC.cjs → chunk-7GYN2OE3.cjs} +131 -61
  12. package/dist/chunk-7GYN2OE3.cjs.map +1 -0
  13. package/dist/{chunk-AWES6LTC.cjs → chunk-7NKIBBCV.cjs} +4 -4
  14. package/dist/{chunk-AWES6LTC.cjs.map → chunk-7NKIBBCV.cjs.map} +1 -1
  15. package/dist/{chunk-PDODMDSQ.js → chunk-A5VGUE2H.js} +3 -3
  16. package/dist/{chunk-PDODMDSQ.js.map → chunk-A5VGUE2H.js.map} +1 -1
  17. package/dist/chunk-ABJOUEVA.cjs +10 -0
  18. package/dist/chunk-ABJOUEVA.cjs.map +1 -0
  19. package/dist/{chunk-VZYIKGJ6.cjs → chunk-AHJY7RHO.cjs} +4 -4
  20. package/dist/{chunk-VZYIKGJ6.cjs.map → chunk-AHJY7RHO.cjs.map} +1 -1
  21. package/dist/{chunk-Z637KSJF.cjs → chunk-BHB4PDNV.cjs} +4 -4
  22. package/dist/{chunk-Z637KSJF.cjs.map → chunk-BHB4PDNV.cjs.map} +1 -1
  23. package/dist/{chunk-AEE54ND4.js → chunk-D2Y5SXZN.js} +13 -7
  24. package/dist/chunk-D2Y5SXZN.js.map +1 -0
  25. package/dist/{chunk-65ZPZGFH.cjs → chunk-DRMT4EQA.cjs} +4 -4
  26. package/dist/{chunk-65ZPZGFH.cjs.map → chunk-DRMT4EQA.cjs.map} +1 -1
  27. package/dist/chunk-IHVB4C5U.cjs +4 -0
  28. package/dist/{chunk-X4RMXTXF.cjs.map → chunk-IHVB4C5U.cjs.map} +1 -1
  29. package/dist/{chunk-QQO4SF3C.js → chunk-JT2QXHUD.js} +16 -6
  30. package/dist/chunk-JT2QXHUD.js.map +1 -0
  31. package/dist/{chunk-YGW2WEJ5.js → chunk-JTU7FZ5O.js} +2 -2
  32. package/dist/{chunk-YGW2WEJ5.js.map → chunk-JTU7FZ5O.js.map} +1 -1
  33. package/dist/chunk-MMYGYTJK.js +665 -0
  34. package/dist/chunk-MMYGYTJK.js.map +1 -0
  35. package/dist/chunk-NLNKQD2T.js +7 -0
  36. package/dist/chunk-NLNKQD2T.js.map +1 -0
  37. package/dist/{chunk-4VU6A5XE.js → chunk-QQIBOVFQ.js} +3 -3
  38. package/dist/{chunk-4VU6A5XE.js.map → chunk-QQIBOVFQ.js.map} +1 -1
  39. package/dist/chunk-S43VACTO.js +3 -0
  40. package/dist/{chunk-GXSERFAG.js.map → chunk-S43VACTO.js.map} +1 -1
  41. package/dist/{chunk-FTAXL6TR.cjs → chunk-SLDGELU7.cjs} +25 -15
  42. package/dist/chunk-SLDGELU7.cjs.map +1 -0
  43. package/dist/{chunk-R7K2QO7M.js → chunk-TLJPVRO5.js} +4 -4
  44. package/dist/{chunk-R7K2QO7M.js.map → chunk-TLJPVRO5.js.map} +1 -1
  45. package/dist/{chunk-ZHFYYSVY.cjs → chunk-YEZD4ZLX.cjs} +17 -11
  46. package/dist/chunk-YEZD4ZLX.cjs.map +1 -0
  47. package/dist/{chunk-VZS4UVKF.js → chunk-YFAHGS45.js} +3 -3
  48. package/dist/{chunk-VZS4UVKF.js.map → chunk-YFAHGS45.js.map} +1 -1
  49. package/dist/{chunk-AVPW677Z.js → chunk-YILDTNQM.js} +117 -47
  50. package/dist/chunk-YILDTNQM.js.map +1 -0
  51. package/dist/index.cjs +31 -31
  52. package/dist/index.js +8 -8
  53. package/dist/loop/index.cjs +2 -2
  54. package/dist/loop/index.js +1 -1
  55. package/dist/loop/workflow/llm-execution.d.ts +4 -4
  56. package/dist/loop/workflow/outer-llm-step.d.ts +2 -2
  57. package/dist/loop/workflow/schema.d.ts +2 -2
  58. package/dist/mastra/hooks.d.ts +3 -1
  59. package/dist/mastra/hooks.d.ts.map +1 -1
  60. package/dist/mastra/index.cjs +2 -2
  61. package/dist/mastra/index.js +1 -1
  62. package/dist/network/index.cjs +2 -2
  63. package/dist/network/index.js +1 -1
  64. package/dist/network/vNext/index.cjs +15 -15
  65. package/dist/network/vNext/index.js +2 -2
  66. package/dist/processors/index.cjs +8 -8
  67. package/dist/processors/index.js +2 -2
  68. package/dist/relevance/index.cjs +4 -4
  69. package/dist/relevance/index.js +1 -1
  70. package/dist/scores/hooks.d.ts +3 -1
  71. package/dist/scores/hooks.d.ts.map +1 -1
  72. package/dist/scores/index.cjs +29 -638
  73. package/dist/scores/index.cjs.map +1 -1
  74. package/dist/scores/index.js +1 -636
  75. package/dist/scores/index.js.map +1 -1
  76. package/dist/scores/types.d.ts +80 -0
  77. package/dist/scores/types.d.ts.map +1 -1
  78. package/dist/server/index.cjs +2 -2
  79. package/dist/server/index.js +1 -1
  80. package/dist/storage/base.d.ts +2 -2
  81. package/dist/storage/base.d.ts.map +1 -1
  82. package/dist/storage/domains/memory/inmemory.d.ts.map +1 -1
  83. package/dist/storage/index.cjs +8 -6
  84. package/dist/storage/index.cjs.map +1 -1
  85. package/dist/storage/index.js +4 -2
  86. package/dist/storage/index.js.map +1 -1
  87. package/dist/stream/base/output.d.ts.map +1 -1
  88. package/dist/stream/index.cjs +3 -3
  89. package/dist/stream/index.js +1 -1
  90. package/dist/telemetry/index.cjs +7 -7
  91. package/dist/telemetry/index.js +1 -1
  92. package/dist/tools/index.d.ts +1 -0
  93. package/dist/tools/index.d.ts.map +1 -1
  94. package/dist/tools/ui-types.d.ts +39 -0
  95. package/dist/tools/ui-types.d.ts.map +1 -0
  96. package/dist/tts/index.cjs +2 -2
  97. package/dist/tts/index.js +1 -1
  98. package/dist/voice/index.cjs +4 -4
  99. package/dist/voice/index.js +1 -1
  100. package/dist/workflows/constants.cjs +6 -2
  101. package/dist/workflows/constants.d.ts +1 -0
  102. package/dist/workflows/constants.d.ts.map +1 -1
  103. package/dist/workflows/constants.js +1 -1
  104. package/dist/workflows/default.d.ts +6 -3
  105. package/dist/workflows/default.d.ts.map +1 -1
  106. package/dist/workflows/evented/execution-engine.d.ts +1 -0
  107. package/dist/workflows/evented/execution-engine.d.ts.map +1 -1
  108. package/dist/workflows/evented/index.cjs +10 -10
  109. package/dist/workflows/evented/index.js +1 -1
  110. package/dist/workflows/evented/step-executor.d.ts.map +1 -1
  111. package/dist/workflows/execution-engine.d.ts +1 -0
  112. package/dist/workflows/execution-engine.d.ts.map +1 -1
  113. package/dist/workflows/index.cjs +10 -10
  114. package/dist/workflows/index.js +1 -1
  115. package/dist/workflows/legacy/index.cjs +22 -22
  116. package/dist/workflows/legacy/index.js +1 -1
  117. package/dist/workflows/step.d.ts +2 -1
  118. package/dist/workflows/step.d.ts.map +1 -1
  119. package/dist/workflows/types.d.ts +13 -1
  120. package/dist/workflows/types.d.ts.map +1 -1
  121. package/dist/workflows/workflow.d.ts +9 -1
  122. package/dist/workflows/workflow.d.ts.map +1 -1
  123. package/package.json +3 -3
  124. package/dist/chunk-AEE54ND4.js.map +0 -1
  125. package/dist/chunk-AVPW677Z.js.map +0 -1
  126. package/dist/chunk-EZCMCWSC.cjs.map +0 -1
  127. package/dist/chunk-FTAXL6TR.cjs.map +0 -1
  128. package/dist/chunk-GK5V7YTQ.js +0 -6
  129. package/dist/chunk-GK5V7YTQ.js.map +0 -1
  130. package/dist/chunk-GXSERFAG.js +0 -3
  131. package/dist/chunk-NFXTYMWZ.cjs +0 -8
  132. package/dist/chunk-NFXTYMWZ.cjs.map +0 -1
  133. package/dist/chunk-QQO4SF3C.js.map +0 -1
  134. package/dist/chunk-X4RMXTXF.cjs +0 -4
  135. package/dist/chunk-ZHFYYSVY.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/workflows/evented/step-executor.ts","../src/events/processor.ts","../src/workflows/evented/workflow-event-processor/loop.ts","../src/workflows/evented/workflow-event-processor/parallel.ts","../src/workflows/evented/workflow-event-processor/sleep.ts","../src/workflows/evented/workflow-event-processor/index.ts","../src/workflows/evented/workflow.ts","../src/workflows/evented/workflow-event-processor/utils.ts","../src/workflows/evented/execution-engine.ts"],"names":["step","result","EventEmitter","randomUUID"],"mappings":"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","file":"chunk-JT2QXHUD.js","sourcesContent":["import EventEmitter from 'events';\nimport type { Emitter, ExecuteFunction, Mastra, Step, StepFlowEntry, StepResult } from '../..';\nimport { MastraBase } from '../../base';\nimport type { RuntimeContext } from '../../di';\nimport type { PubSub } from '../../events';\nimport { RegisteredLogger } from '../../logger';\nimport { EMITTER_SYMBOL, STREAM_FORMAT_SYMBOL } from '../constants';\n\nexport class StepExecutor extends MastraBase {\n protected mastra?: Mastra;\n constructor({ mastra }: { mastra?: Mastra }) {\n super({ name: 'StepExecutor', component: RegisteredLogger.WORKFLOW });\n this.mastra = mastra;\n }\n\n __registerMastra(mastra: Mastra) {\n this.mastra = mastra;\n }\n\n async execute(params: {\n workflowId: string;\n step: Step<any, any, any, any>;\n runId: string;\n input?: any;\n resumeData?: any;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n emitter: EventEmitter;\n runtimeContext: RuntimeContext;\n runCount?: number;\n foreachIdx?: number;\n }): Promise<StepResult<any, any, any, any>> {\n const { step, stepResults, runId, runtimeContext, runCount = 0 } = params;\n\n const abortController = new AbortController();\n\n let suspended: { payload: any } | undefined;\n let bailed: { payload: any } | undefined;\n const startedAt = Date.now();\n let stepInfo: {\n startedAt: number;\n payload: any;\n resumePayload?: any;\n resumedAt?: number;\n [key: string]: any;\n } = {\n ...stepResults[step.id],\n startedAt,\n payload: params.input ?? {},\n };\n\n if (params.resumeData) {\n delete stepInfo.suspendPayload?.['__workflow_meta'];\n stepInfo.resumePayload = params.resumeData;\n stepInfo.resumedAt = Date.now();\n }\n\n try {\n const stepResult = await step.execute({\n workflowId: params.workflowId,\n runId,\n mastra: this.mastra!,\n runtimeContext,\n inputData: typeof params.foreachIdx === 'number' ? params.input?.[params.foreachIdx] : params.input,\n runCount,\n resumeData: params.resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: (step: any) => {\n if (!step?.id) {\n return null;\n }\n\n const result = stepResults[step.id];\n if (result?.status === 'success') {\n return result.output;\n }\n\n return null;\n },\n suspend: async (suspendPayload: any): Promise<any> => {\n suspended = { payload: { ...suspendPayload, __workflow_meta: { runId, path: [step.id] } } };\n },\n bail: (result: any) => {\n bailed = { payload: result };\n },\n // TODO\n writer: undefined as any,\n abort: () => {\n abortController?.abort();\n },\n [EMITTER_SYMBOL]: params.emitter as unknown as Emitter, // TODO: refactor this to use our PubSub actually\n [STREAM_FORMAT_SYMBOL]: undefined, // TODO\n engine: {},\n abortSignal: abortController?.signal,\n // TODO\n tracingContext: {},\n });\n\n const endedAt = Date.now();\n\n let finalResult: StepResult<any, any, any, any>;\n if (suspended) {\n finalResult = {\n ...stepInfo,\n status: 'suspended',\n suspendedAt: endedAt,\n };\n\n if (suspended.payload) {\n finalResult.suspendPayload = suspended.payload;\n }\n } else if (bailed) {\n finalResult = {\n ...stepInfo,\n // @ts-ignore\n status: 'bailed',\n endedAt,\n output: bailed.payload,\n };\n } else {\n finalResult = {\n ...stepInfo,\n status: 'success',\n endedAt,\n output: stepResult,\n };\n }\n\n return finalResult;\n } catch (error: any) {\n const endedAt = Date.now();\n\n return {\n ...stepInfo,\n status: 'failed',\n endedAt,\n error: error instanceof Error ? (error?.stack ?? error.message) : error,\n };\n }\n }\n\n async evaluateConditions(params: {\n workflowId: string;\n step: Extract<StepFlowEntry, { type: 'conditional' }>;\n runId: string;\n input?: any;\n resumeData?: any;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n emitter: { runtime: PubSub; events: PubSub };\n runtimeContext: RuntimeContext;\n runCount?: number;\n }): Promise<number[]> {\n const { step, stepResults, runId, runtimeContext, runCount = 0 } = params;\n\n const abortController = new AbortController();\n const ee = new EventEmitter();\n\n const results = await Promise.all(\n step.conditions.map(condition => {\n try {\n return this.evaluateCondition({\n workflowId: params.workflowId,\n condition,\n runId,\n runtimeContext,\n inputData: params.input,\n runCount,\n resumeData: params.resumeData,\n abortController,\n stepResults,\n emitter: ee,\n });\n } catch (e) {\n console.error('error evaluating condition', e);\n return false;\n }\n }),\n );\n\n const idxs = results.reduce((acc, result, idx) => {\n if (result) {\n acc.push(idx);\n }\n\n return acc;\n }, [] as number[]);\n\n return idxs;\n }\n\n async evaluateCondition({\n workflowId,\n condition,\n runId,\n inputData,\n resumeData,\n stepResults,\n runtimeContext,\n emitter,\n abortController,\n runCount = 0,\n }: {\n workflowId: string;\n condition: ExecuteFunction<any, any, any, any, any>;\n runId: string;\n inputData?: any;\n resumeData?: any;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n emitter: EventEmitter;\n runtimeContext: RuntimeContext;\n abortController: AbortController;\n runCount?: number;\n }): Promise<boolean> {\n return condition({\n workflowId,\n runId,\n mastra: this.mastra!,\n runtimeContext,\n inputData,\n runCount,\n resumeData: resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: (step: any) => {\n if (!step?.id) {\n return null;\n }\n\n const result = stepResults[step.id];\n if (result?.status === 'success') {\n return result.output;\n }\n\n return null;\n },\n suspend: async (_suspendPayload: any): Promise<any> => {\n throw new Error('Not implemented');\n },\n bail: (_result: any) => {\n throw new Error('Not implemented');\n },\n // TODO\n writer: undefined as any,\n abort: () => {\n abortController?.abort();\n },\n [EMITTER_SYMBOL]: emitter as unknown as Emitter, // TODO: refactor this to use our PubSub actually\n [STREAM_FORMAT_SYMBOL]: undefined, // TODO\n engine: {},\n abortSignal: abortController?.signal,\n // TODO\n tracingContext: {},\n });\n }\n\n async resolveSleep(params: {\n workflowId: string;\n step: Extract<StepFlowEntry, { type: 'sleep' }>;\n runId: string;\n input?: any;\n resumeData?: any;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n emitter: { runtime: PubSub; events: PubSub };\n runtimeContext: RuntimeContext;\n runCount?: number;\n }): Promise<number> {\n const { step, stepResults, runId, runtimeContext, runCount = 0 } = params;\n\n const abortController = new AbortController();\n const ee = new EventEmitter();\n\n if (step.duration) {\n return step.duration;\n }\n\n if (!step.fn) {\n return 0;\n }\n\n try {\n return await step.fn({\n workflowId: params.workflowId,\n runId,\n mastra: this.mastra!,\n runtimeContext,\n inputData: params.input,\n runCount,\n resumeData: params.resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: (step: any) => {\n if (!step?.id) {\n return null;\n }\n\n const result = stepResults[step.id];\n if (result?.status === 'success') {\n return result.output;\n }\n\n return null;\n },\n suspend: async (_suspendPayload: any): Promise<any> => {\n throw new Error('Not implemented');\n },\n bail: (_result: any) => {\n throw new Error('Not implemented');\n },\n abort: () => {\n abortController?.abort();\n },\n // TODO\n writer: undefined as any,\n [EMITTER_SYMBOL]: ee as unknown as Emitter, // TODO: refactor this to use our PubSub actually\n [STREAM_FORMAT_SYMBOL]: undefined, // TODO\n engine: {},\n abortSignal: abortController?.signal,\n // TODO\n tracingContext: {},\n });\n } catch (e) {\n console.error('error evaluating condition', e);\n return 0;\n }\n }\n\n async resolveSleepUntil(params: {\n workflowId: string;\n step: Extract<StepFlowEntry, { type: 'sleepUntil' }>;\n runId: string;\n input?: any;\n resumeData?: any;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n emitter: { runtime: PubSub; events: PubSub };\n runtimeContext: RuntimeContext;\n runCount?: number;\n }): Promise<number> {\n const { step, stepResults, runId, runtimeContext, runCount = 0 } = params;\n\n const abortController = new AbortController();\n const ee = new EventEmitter();\n\n if (step.date) {\n return step.date.getTime() - Date.now();\n }\n\n if (!step.fn) {\n return 0;\n }\n\n try {\n const result = await step.fn({\n workflowId: params.workflowId,\n runId,\n mastra: this.mastra!,\n runtimeContext,\n inputData: params.input,\n runCount,\n resumeData: params.resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: (step: any) => {\n if (!step?.id) {\n return null;\n }\n\n const result = stepResults[step.id];\n if (result?.status === 'success') {\n return result.output;\n }\n\n return null;\n },\n suspend: async (_suspendPayload: any): Promise<any> => {\n throw new Error('Not implemented');\n },\n bail: (_result: any) => {\n throw new Error('Not implemented');\n },\n abort: () => {\n abortController?.abort();\n },\n // TODO\n writer: undefined as any,\n [EMITTER_SYMBOL]: ee as unknown as Emitter, // TODO: refactor this to use our PubSub actually\n [STREAM_FORMAT_SYMBOL]: undefined, // TODO\n engine: {},\n abortSignal: abortController?.signal,\n // TODO\n tracingContext: {},\n });\n\n return result.getTime() - Date.now();\n } catch (e) {\n console.error('error evaluating condition', e);\n return 0;\n }\n }\n}\n","import type { Mastra } from '../mastra';\nimport type { Event } from './types';\n\nexport abstract class EventProcessor {\n protected mastra: Mastra;\n\n __registerMastra(mastra: Mastra) {\n this.mastra = mastra;\n }\n\n constructor({ mastra }: { mastra: Mastra }) {\n this.mastra = mastra;\n }\n\n protected abstract process(event: Event): Promise<void>;\n}\n","import EventEmitter from 'events';\nimport type { StepFlowEntry, StepResult } from '../..';\nimport type { Mastra } from '../../..';\nimport { RuntimeContext } from '../../../di';\nimport type { PubSub } from '../../../events';\nimport type { StepExecutor } from '../step-executor';\nimport type { ProcessorArgs } from '.';\n\nexport async function processWorkflowLoop(\n {\n workflowId,\n prevResult,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n resumeData,\n parentWorkflow,\n runtimeContext,\n runCount = 0,\n }: ProcessorArgs,\n {\n pubsub,\n stepExecutor,\n step,\n stepResult,\n }: {\n pubsub: PubSub;\n stepExecutor: StepExecutor;\n step: Extract<StepFlowEntry, { type: 'loop' }>;\n stepResult: StepResult<any, any, any, any>;\n },\n) {\n const loopCondition = await stepExecutor.evaluateCondition({\n workflowId,\n condition: step.condition,\n runId,\n stepResults,\n emitter: new EventEmitter() as any, // TODO\n runtimeContext: new RuntimeContext(), // TODO\n inputData: prevResult?.status === 'success' ? prevResult.output : undefined,\n resumeData,\n abortController: new AbortController(),\n runCount,\n });\n\n if (step.loopType === 'dountil') {\n if (loopCondition) {\n await pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult: stepResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n } else {\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult: stepResult,\n resumeData,\n activeSteps,\n runtimeContext,\n runCount,\n },\n });\n }\n } else {\n if (loopCondition) {\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult: stepResult,\n resumeData,\n activeSteps,\n runtimeContext,\n runCount,\n },\n });\n } else {\n await pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult: stepResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n }\n }\n}\n\nexport async function processWorkflowForEach(\n {\n workflowId,\n prevResult,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n resumeData,\n parentWorkflow,\n runtimeContext,\n }: ProcessorArgs,\n {\n pubsub,\n mastra,\n step,\n }: {\n pubsub: PubSub;\n mastra: Mastra;\n step: Extract<StepFlowEntry, { type: 'foreach' }>;\n },\n) {\n const currentResult: Extract<StepResult<any, any, any, any>, { status: 'success' }> = stepResults[\n step.step.id\n ] as any;\n\n const idx = currentResult?.output?.length ?? 0;\n const targetLen = (prevResult as any)?.output?.length ?? 0;\n\n if (idx >= targetLen && currentResult.output.filter((r: any) => r !== null).length >= targetLen) {\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath: executionPath.slice(0, -1).concat([executionPath[executionPath.length - 1]! + 1]),\n resumeSteps,\n stepResults,\n prevResult: currentResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n\n return;\n } else if (idx >= targetLen) {\n // wait for the 'null' values to be filled from the concurrent run\n return;\n }\n\n if (executionPath.length === 1 && idx === 0) {\n // on first iteratation we need to kick off up to the set concurrency\n const concurrency = Math.min(step.opts.concurrency ?? 1, targetLen);\n const dummyResult = Array.from({ length: concurrency }, () => null);\n\n await mastra.getStorage()?.updateWorkflowResults({\n workflowName: workflowId,\n runId,\n stepId: step.step.id,\n result: {\n status: 'succcess',\n output: dummyResult as any,\n startedAt: Date.now(),\n payload: (prevResult as any)?.output,\n } as any,\n runtimeContext,\n });\n\n for (let i = 0; i < concurrency; i++) {\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath: [executionPath[0]!, i],\n resumeSteps,\n stepResults,\n prevResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n }\n\n return;\n }\n\n (currentResult as any).output.push(null);\n await mastra.getStorage()?.updateWorkflowResults({\n workflowName: workflowId,\n runId,\n stepId: step.step.id,\n result: {\n status: 'succcess',\n output: (currentResult as any).output,\n startedAt: Date.now(),\n payload: (prevResult as any)?.output,\n } as any,\n runtimeContext,\n });\n\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath: [executionPath[0]!, idx],\n resumeSteps,\n stepResults,\n prevResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n}\n","import EventEmitter from 'events';\nimport type { StepFlowEntry } from '../..';\nimport { RuntimeContext } from '../../../di';\nimport type { PubSub } from '../../../events';\nimport type { StepExecutor } from '../step-executor';\nimport type { ProcessorArgs } from '.';\n\nexport async function processWorkflowParallel(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n }: ProcessorArgs,\n {\n pubsub,\n step,\n }: {\n pubsub: PubSub;\n step: Extract<StepFlowEntry, { type: 'parallel' }>;\n },\n) {\n for (let i = 0; i < step.steps.length; i++) {\n const nestedStep = step.steps[i];\n if (nestedStep?.type === 'step') {\n activeSteps[nestedStep.step.id] = true;\n }\n }\n\n await Promise.all(\n step.steps.map(async (_step, idx) => {\n return pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.concat([idx]),\n resumeSteps,\n stepResults,\n prevResult,\n resumeData,\n parentWorkflow,\n activeSteps,\n runtimeContext,\n },\n });\n }),\n );\n}\n\nexport async function processWorkflowConditional(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n }: ProcessorArgs,\n {\n pubsub,\n stepExecutor,\n step,\n }: {\n pubsub: PubSub;\n stepExecutor: StepExecutor;\n step: Extract<StepFlowEntry, { type: 'conditional' }>;\n },\n) {\n const idxs = await stepExecutor.evaluateConditions({\n workflowId,\n step,\n runId,\n stepResults,\n emitter: new EventEmitter() as any, // TODO\n runtimeContext: new RuntimeContext(), // TODO\n input: prevResult?.status === 'success' ? prevResult.output : undefined,\n resumeData,\n });\n\n const truthyIdxs: Record<number, boolean> = {};\n for (let i = 0; i < idxs.length; i++) {\n truthyIdxs[idxs[i]!] = true;\n }\n\n await Promise.all(\n step.steps.map(async (step, idx) => {\n if (truthyIdxs[idx]) {\n if (step?.type === 'step') {\n activeSteps[step.step.id] = true;\n }\n return pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.concat([idx]),\n resumeSteps,\n stepResults,\n prevResult,\n resumeData,\n parentWorkflow,\n activeSteps,\n runtimeContext,\n },\n });\n } else {\n return pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.concat([idx]),\n resumeSteps,\n stepResults,\n prevResult: { status: 'skipped' },\n resumeData,\n parentWorkflow,\n activeSteps,\n runtimeContext,\n },\n });\n }\n }),\n );\n}\n","import EventEmitter from 'events';\nimport type { StepFlowEntry, WorkflowRunState } from '../..';\nimport { RuntimeContext } from '../../../di';\nimport type { PubSub } from '../../../events';\nimport type { StepExecutor } from '../step-executor';\nimport { getStep } from './utils';\nimport type { ProcessorArgs } from '.';\n\nexport async function processWorkflowWaitForEvent(\n workflowData: ProcessorArgs,\n {\n pubsub,\n eventName,\n currentState,\n }: {\n pubsub: PubSub;\n eventName: string;\n currentState: WorkflowRunState;\n },\n) {\n const executionPath = currentState?.waitingPaths[eventName];\n if (!executionPath) {\n return;\n }\n\n const currentStep = getStep(workflowData.workflow, executionPath);\n const prevResult = {\n status: 'success',\n output: currentState?.context[currentStep?.id ?? 'input']?.payload,\n };\n\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId: workflowData.runId,\n data: {\n workflowId: workflowData.workflowId,\n runId: workflowData.runId,\n executionPath,\n resumeSteps: [],\n resumeData: workflowData.resumeData,\n parentWorkflow: workflowData.parentWorkflow,\n stepResults: currentState?.context,\n prevResult,\n activeSteps: [],\n runtimeContext: currentState?.runtimeContext,\n },\n });\n}\n\nexport async function processWorkflowSleep(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n }: ProcessorArgs,\n {\n pubsub,\n stepExecutor,\n step,\n }: {\n pubsub: PubSub;\n stepExecutor: StepExecutor;\n step: Extract<StepFlowEntry, { type: 'sleep' }>;\n },\n) {\n const startedAt = Date.now();\n await pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-waiting',\n payload: {\n id: step.id,\n status: 'waiting',\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n startedAt,\n },\n },\n });\n\n const duration = await stepExecutor.resolveSleep({\n workflowId,\n step,\n runId,\n stepResults,\n emitter: new EventEmitter() as any, // TODO\n runtimeContext: new RuntimeContext(), // TODO\n input: prevResult?.status === 'success' ? prevResult.output : undefined,\n resumeData,\n });\n\n setTimeout(\n async () => {\n await pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-result',\n payload: {\n id: step.id,\n status: 'success',\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n output: prevResult.status === 'success' ? prevResult.output : undefined,\n startedAt,\n endedAt: Date.now(),\n },\n },\n });\n\n await pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-finish',\n payload: {\n id: step.id,\n metadata: {},\n },\n },\n });\n\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.slice(0, -1).concat([executionPath[executionPath.length - 1]! + 1]),\n resumeSteps,\n stepResults,\n prevResult,\n resumeData,\n parentWorkflow,\n activeSteps,\n runtimeContext,\n },\n });\n },\n duration < 0 ? 0 : duration,\n );\n}\n\nexport async function processWorkflowSleepUntil(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n }: ProcessorArgs,\n {\n pubsub,\n stepExecutor,\n step,\n }: {\n pubsub: PubSub;\n stepExecutor: StepExecutor;\n step: Extract<StepFlowEntry, { type: 'sleepUntil' }>;\n },\n) {\n const startedAt = Date.now();\n const duration = await stepExecutor.resolveSleepUntil({\n workflowId,\n step,\n runId,\n stepResults,\n emitter: new EventEmitter() as any, // TODO\n runtimeContext: new RuntimeContext(), // TODO\n input: prevResult?.status === 'success' ? prevResult.output : undefined,\n resumeData,\n });\n\n await pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-waiting',\n payload: {\n id: step.id,\n status: 'waiting',\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n startedAt,\n },\n },\n });\n\n setTimeout(\n async () => {\n await pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-result',\n payload: {\n id: step.id,\n status: 'success',\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n output: prevResult.status === 'success' ? prevResult.output : undefined,\n startedAt,\n endedAt: Date.now(),\n },\n },\n });\n\n await pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-finish',\n payload: {\n id: step.id,\n metadata: {},\n },\n },\n });\n\n await pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.slice(0, -1).concat([executionPath[executionPath.length - 1]! + 1]),\n resumeSteps,\n stepResults,\n prevResult,\n resumeData,\n parentWorkflow,\n activeSteps,\n runtimeContext,\n },\n });\n },\n duration < 0 ? 0 : duration,\n );\n}\n","import { randomUUID } from 'crypto';\nimport EventEmitter from 'events';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../../error';\nimport { EventProcessor } from '../../../events/processor';\nimport type { Event } from '../../../events/types';\nimport type { Mastra } from '../../../mastra';\nimport { RuntimeContext } from '../../../runtime-context/';\nimport type { StepFlowEntry, StepResult, WorkflowRunState } from '../../../workflows/types';\nimport type { Workflow } from '../../../workflows/workflow';\nimport { StepExecutor } from '../step-executor';\nimport { EventedWorkflow } from '../workflow';\nimport { processWorkflowForEach, processWorkflowLoop } from './loop';\nimport { processWorkflowConditional, processWorkflowParallel } from './parallel';\nimport { processWorkflowSleep, processWorkflowSleepUntil, processWorkflowWaitForEvent } from './sleep';\nimport { getNestedWorkflow, getStep, isExecutableStep } from './utils';\n\nexport type ProcessorArgs = {\n activeSteps: Record<string, boolean>;\n workflow: Workflow;\n workflowId: string;\n runId: string;\n executionPath: number[];\n stepResults: Record<string, StepResult<any, any, any, any>>;\n resumeSteps: string[];\n prevResult: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n resumeData?: any;\n parentWorkflow?: ParentWorkflow;\n parentContext?: {\n workflowId: string;\n input: any;\n };\n runCount?: number;\n};\n\nexport type ParentWorkflow = {\n workflowId: string;\n runId: string;\n executionPath: number[];\n resume: boolean;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n parentWorkflow?: ParentWorkflow;\n stepId: string;\n};\n\nexport class WorkflowEventProcessor extends EventProcessor {\n private stepExecutor: StepExecutor;\n\n constructor({ mastra }: { mastra: Mastra }) {\n super({ mastra });\n this.stepExecutor = new StepExecutor({ mastra });\n }\n\n __registerMastra(mastra: Mastra) {\n super.__registerMastra(mastra);\n this.stepExecutor.__registerMastra(mastra);\n }\n\n private async errorWorkflow(\n {\n parentWorkflow,\n workflowId,\n runId,\n resumeSteps,\n stepResults,\n resumeData,\n runtimeContext,\n }: Omit<ProcessorArgs, 'workflow'>,\n e: Error,\n ) {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.fail',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: [],\n resumeSteps,\n stepResults,\n prevResult: { status: 'failed', error: e.stack ?? e.message },\n runtimeContext,\n resumeData,\n activeSteps: {},\n parentWorkflow: parentWorkflow,\n },\n });\n }\n\n protected async processWorkflowCancel({ workflowId, runId }: ProcessorArgs) {\n const currentState = await this.mastra.getStorage()?.updateWorkflowState({\n workflowName: workflowId,\n runId,\n opts: {\n status: 'canceled',\n },\n });\n\n await this.endWorkflow({\n workflow: undefined as any,\n workflowId,\n runId,\n stepResults: currentState?.context as any,\n prevResult: { status: 'canceled' } as any,\n runtimeContext: currentState?.runtimeContext as any,\n executionPath: [],\n activeSteps: {},\n resumeSteps: [],\n resumeData: undefined,\n parentWorkflow: undefined,\n });\n }\n\n protected async processWorkflowStart({\n workflow,\n parentWorkflow,\n workflowId,\n runId,\n resumeSteps,\n prevResult,\n resumeData,\n executionPath,\n stepResults,\n runtimeContext,\n }: ProcessorArgs) {\n await this.mastra.getStorage()?.persistWorkflowSnapshot({\n workflowName: workflow.id,\n runId,\n snapshot: {\n activePaths: [],\n suspendedPaths: {},\n waitingPaths: {},\n serializedStepGraph: workflow.serializedStepGraph,\n timestamp: Date.now(),\n runId,\n status: 'running',\n context: stepResults ?? {\n input: prevResult?.status === 'success' ? prevResult.output : undefined,\n },\n value: {},\n },\n });\n\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath: executionPath ?? [0],\n resumeSteps,\n stepResults: stepResults ?? {\n input: prevResult?.status === 'success' ? prevResult.output : undefined,\n },\n prevResult,\n runtimeContext,\n resumeData,\n activeSteps: {},\n },\n });\n }\n\n protected async endWorkflow(args: ProcessorArgs) {\n const { stepResults, workflowId, runId, prevResult } = args;\n await this.mastra.getStorage()?.updateWorkflowState({\n workflowName: workflowId,\n runId,\n opts: {\n status: 'success',\n result: prevResult,\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'watch',\n payload: {\n currentStep: undefined,\n workflowState: {\n status: prevResult.status,\n steps: stepResults,\n result: prevResult.status === 'success' ? prevResult.output : null,\n error: (prevResult as any).error ?? null,\n },\n },\n eventTimestamp: Date.now(),\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-finish',\n payload: {\n runId,\n },\n },\n });\n\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.end',\n runId,\n data: { ...args, workflow: undefined },\n });\n }\n\n protected async processWorkflowEnd(args: ProcessorArgs) {\n const { resumeSteps, prevResult, resumeData, parentWorkflow, activeSteps, runtimeContext, runId } = args;\n\n // handle nested workflow\n if (parentWorkflow) {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n workflowId: parentWorkflow.workflowId,\n runId: parentWorkflow.runId,\n executionPath: parentWorkflow.executionPath,\n resumeSteps,\n stepResults: parentWorkflow.stepResults,\n prevResult,\n resumeData,\n activeSteps,\n parentWorkflow: parentWorkflow.parentWorkflow,\n parentContext: parentWorkflow,\n runtimeContext,\n },\n });\n }\n\n await this.mastra.pubsub.publish('workflows-finish', {\n type: 'workflow.end',\n runId,\n data: { ...args, workflow: undefined },\n });\n }\n\n protected async processWorkflowSuspend(args: ProcessorArgs) {\n const { resumeSteps, prevResult, resumeData, parentWorkflow, activeSteps, runId, runtimeContext } = args;\n\n // TODO: if there are still active paths don't end the workflow yet\n // handle nested workflow\n if (parentWorkflow) {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n workflowId: parentWorkflow.workflowId,\n runId: parentWorkflow.runId,\n executionPath: parentWorkflow.executionPath,\n resumeSteps,\n stepResults: parentWorkflow.stepResults,\n prevResult: {\n ...prevResult,\n suspendPayload: {\n ...prevResult.suspendPayload,\n __workflow_meta: {\n runId: runId,\n path: parentWorkflow?.stepId\n ? [parentWorkflow.stepId].concat(prevResult.suspendPayload?.__workflow_meta?.path ?? [])\n : (prevResult.suspendPayload?.__workflow_meta?.path ?? []),\n },\n },\n },\n resumeData,\n activeSteps,\n runtimeContext,\n parentWorkflow: parentWorkflow.parentWorkflow,\n parentContext: parentWorkflow,\n },\n });\n }\n\n await this.mastra.pubsub.publish('workflows-finish', {\n type: 'workflow.suspend',\n runId,\n data: { ...args, workflow: undefined },\n });\n }\n\n protected async processWorkflowFail(args: ProcessorArgs) {\n const { workflowId, runId, resumeSteps, prevResult, resumeData, parentWorkflow, activeSteps, runtimeContext } =\n args;\n\n await this.mastra.getStorage()?.updateWorkflowState({\n workflowName: workflowId,\n runId,\n opts: {\n status: 'failed',\n error: (prevResult as any).error,\n },\n });\n\n // handle nested workflow\n if (parentWorkflow) {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n workflowId: parentWorkflow.workflowId,\n runId: parentWorkflow.runId,\n executionPath: parentWorkflow.executionPath,\n resumeSteps,\n stepResults: parentWorkflow.stepResults,\n prevResult,\n resumeData,\n activeSteps,\n runtimeContext,\n parentWorkflow: parentWorkflow.parentWorkflow,\n parentContext: parentWorkflow,\n },\n });\n }\n\n await this.mastra.pubsub.publish('workflows-finish', {\n type: 'workflow.fail',\n runId,\n data: { ...args, workflow: undefined },\n });\n }\n\n protected async processWorkflowStepRun({\n workflow,\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n runCount = 0,\n }: ProcessorArgs) {\n let stepGraph: StepFlowEntry[] = workflow.stepGraph;\n\n if (!executionPath?.length) {\n return this.errorWorkflow(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n new MastraError({\n id: 'MASTRA_WORKFLOW',\n text: `Execution path is empty: ${JSON.stringify(executionPath)}`,\n domain: ErrorDomain.MASTRA_WORKFLOW,\n category: ErrorCategory.SYSTEM,\n }),\n );\n }\n\n let step: StepFlowEntry | undefined = stepGraph[executionPath[0]!];\n\n if (!step) {\n return this.errorWorkflow(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n new MastraError({\n id: 'MASTRA_WORKFLOW',\n text: `Step not found in step graph: ${JSON.stringify(executionPath)}`,\n domain: ErrorDomain.MASTRA_WORKFLOW,\n category: ErrorCategory.SYSTEM,\n }),\n );\n }\n\n if ((step.type === 'parallel' || step.type === 'conditional') && executionPath.length > 1) {\n step = step.steps[executionPath[1]!] as StepFlowEntry;\n } else if (step.type === 'parallel') {\n return processWorkflowParallel(\n {\n workflow,\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n {\n pubsub: this.mastra.pubsub,\n step,\n },\n );\n } else if (step?.type === 'conditional') {\n return processWorkflowConditional(\n {\n workflow,\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n {\n pubsub: this.mastra.pubsub,\n stepExecutor: this.stepExecutor,\n step,\n },\n );\n } else if (step?.type === 'sleep') {\n return processWorkflowSleep(\n {\n workflow,\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n {\n pubsub: this.mastra.pubsub,\n stepExecutor: this.stepExecutor,\n step,\n },\n );\n } else if (step?.type === 'sleepUntil') {\n return processWorkflowSleepUntil(\n {\n workflow,\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n {\n pubsub: this.mastra.pubsub,\n stepExecutor: this.stepExecutor,\n step,\n },\n );\n } else if (step?.type === 'waitForEvent' && !resumeData) {\n // wait for event to arrive externally (with resumeData)\n await this.mastra.getStorage()?.updateWorkflowResults({\n workflowName: workflowId,\n runId,\n stepId: step.step.id,\n result: {\n startedAt: Date.now(),\n status: 'waiting',\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n },\n runtimeContext,\n });\n await this.mastra.getStorage()?.updateWorkflowState({\n workflowName: workflowId,\n runId,\n opts: {\n status: 'waiting',\n waitingPaths: {\n [step.event]: executionPath,\n },\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-waiting',\n payload: {\n id: step.step.id,\n status: 'waiting',\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n startedAt: Date.now(),\n },\n },\n });\n\n return;\n } else if (step?.type === 'foreach' && executionPath.length === 1) {\n return processWorkflowForEach(\n {\n workflow,\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n {\n pubsub: this.mastra.pubsub,\n mastra: this.mastra,\n step,\n },\n );\n }\n\n if (!isExecutableStep(step)) {\n return this.errorWorkflow(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n new MastraError({\n id: 'MASTRA_WORKFLOW',\n text: `Step is not executable: ${step?.type} -- ${JSON.stringify(executionPath)}`,\n domain: ErrorDomain.MASTRA_WORKFLOW,\n category: ErrorCategory.SYSTEM,\n }),\n );\n }\n\n activeSteps[step.step.id] = true;\n\n // Run nested workflow\n if (step.step instanceof EventedWorkflow) {\n if (resumeSteps?.length > 1) {\n const stepData = stepResults[step.step.id];\n const nestedRunId = stepData?.suspendPayload?.__workflow_meta?.runId;\n if (!nestedRunId) {\n return this.errorWorkflow(\n {\n workflowId,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n prevResult,\n resumeData,\n parentWorkflow,\n runtimeContext,\n },\n new MastraError({\n id: 'MASTRA_WORKFLOW',\n text: `Nested workflow run id not found: ${JSON.stringify(stepResults)}`,\n domain: ErrorDomain.MASTRA_WORKFLOW,\n category: ErrorCategory.SYSTEM,\n }),\n );\n }\n\n const snapshot = await this.mastra?.getStorage()?.loadWorkflowSnapshot({\n workflowName: step.step.id,\n runId: nestedRunId,\n });\n\n const nestedStepResults = snapshot?.context;\n const nestedSteps = resumeSteps.slice(1);\n\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.resume',\n runId,\n data: {\n workflowId: step.step.id,\n parentWorkflow: {\n stepId: step.step.id,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n input: prevResult,\n parentWorkflow,\n },\n executionPath: snapshot?.suspendedPaths?.[nestedSteps[0]!] as any,\n runId: nestedRunId,\n resumeSteps: nestedSteps,\n stepResults: nestedStepResults,\n prevResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n } else {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.start',\n runId,\n data: {\n workflowId: step.step.id,\n parentWorkflow: {\n stepId: step.step.id,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n input: prevResult,\n parentWorkflow,\n },\n executionPath: [0],\n runId: randomUUID(),\n resumeSteps,\n prevResult,\n resumeData,\n activeSteps,\n runtimeContext,\n },\n });\n }\n\n return;\n }\n\n if (step.type === 'step' || step.type === 'waitForEvent') {\n await this.mastra.pubsub.publish(`workflow.events.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'watch',\n payload: {\n currentStep: { id: step.step.id, status: 'running' },\n workflowState: {\n status: 'running',\n steps: stepResults,\n error: null,\n result: null,\n },\n },\n eventTimestamp: Date.now(),\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-start',\n payload: {\n id: step.step.id,\n startedAt: Date.now(),\n payload: prevResult.status === 'success' ? prevResult.output : undefined,\n status: 'running',\n },\n },\n });\n }\n\n const ee = new EventEmitter();\n ee.on('watch-v2', async (event: any) => {\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: event,\n });\n });\n const rc = new RuntimeContext();\n for (const [key, value] of Object.entries(runtimeContext)) {\n rc.set(key, value);\n }\n const stepResult = await this.stepExecutor.execute({\n workflowId,\n step: step.step,\n runId,\n stepResults,\n emitter: ee,\n runtimeContext: rc,\n input: (prevResult as any)?.output,\n resumeData:\n step.type === 'waitForEvent' || (resumeSteps?.length === 1 && resumeSteps?.[0] === step.step.id)\n ? resumeData\n : undefined,\n runCount,\n foreachIdx: step.type === 'foreach' ? executionPath[1] : undefined,\n });\n runtimeContext = Object.fromEntries(rc.entries());\n\n // @ts-ignore\n if (stepResult.status === 'bailed') {\n // @ts-ignore\n stepResult.status = 'success';\n\n await this.endWorkflow({\n workflow,\n resumeData,\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults: {\n ...stepResults,\n [step.step.id]: stepResult,\n },\n prevResult: stepResult,\n activeSteps,\n runtimeContext,\n });\n return;\n }\n\n if (stepResult.status === 'failed') {\n if (runCount >= (workflow.retryConfig.attempts ?? 0)) {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult: stepResult,\n activeSteps,\n runtimeContext,\n },\n });\n } else {\n return this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult,\n activeSteps,\n runtimeContext,\n runCount: runCount + 1,\n },\n });\n }\n }\n\n if (step.type === 'loop') {\n await processWorkflowLoop(\n {\n workflow,\n workflowId,\n prevResult: stepResult,\n runId,\n executionPath,\n stepResults,\n activeSteps,\n resumeSteps,\n resumeData,\n parentWorkflow,\n runtimeContext,\n runCount: runCount + 1,\n },\n {\n pubsub: this.mastra.pubsub,\n stepExecutor: this.stepExecutor,\n step,\n stepResult,\n },\n );\n } else {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult: stepResult,\n activeSteps,\n runtimeContext,\n },\n });\n }\n }\n\n protected async processWorkflowStepEnd({\n workflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n prevResult,\n parentWorkflow,\n stepResults,\n activeSteps,\n parentContext,\n runtimeContext,\n }: ProcessorArgs) {\n let step = workflow.stepGraph[executionPath[0]!];\n\n if ((step?.type === 'parallel' || step?.type === 'conditional') && executionPath.length > 1) {\n step = step.steps[executionPath[1]!];\n }\n\n if (!step) {\n return this.errorWorkflow(\n {\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n prevResult,\n stepResults,\n activeSteps,\n runtimeContext,\n },\n new MastraError({\n id: 'MASTRA_WORKFLOW',\n text: `Step not found: ${JSON.stringify(executionPath)}`,\n domain: ErrorDomain.MASTRA_WORKFLOW,\n category: ErrorCategory.SYSTEM,\n }),\n );\n }\n\n if (step.type === 'foreach') {\n const snapshot = await this.mastra.getStorage()?.loadWorkflowSnapshot({\n workflowName: workflowId,\n runId,\n });\n\n const currentIdx = executionPath[1];\n const currentResult = (snapshot?.context?.[step.step.id] as any)?.output;\n\n let newResult = prevResult;\n if (currentIdx !== undefined) {\n if (currentResult) {\n currentResult[currentIdx] = (prevResult as any).output;\n newResult = { ...prevResult, output: currentResult } as any;\n } else {\n newResult = { ...prevResult, output: [(prevResult as any).output] } as any;\n }\n }\n const newStepResults = await this.mastra.getStorage()?.updateWorkflowResults({\n workflowName: workflow.id,\n runId,\n stepId: step.step.id,\n result: newResult,\n runtimeContext,\n });\n\n if (!newStepResults) {\n return;\n }\n\n stepResults = newStepResults;\n } else if (isExecutableStep(step)) {\n // clear from activeSteps\n delete activeSteps[step.step.id];\n\n // handle nested workflow\n if (parentContext) {\n prevResult = stepResults[step.step.id] = {\n ...prevResult,\n payload: parentContext.input?.output ?? {},\n };\n }\n\n const newStepResults = await this.mastra.getStorage()?.updateWorkflowResults({\n workflowName: workflow.id,\n runId,\n stepId: step.step.id,\n result: prevResult,\n runtimeContext,\n });\n\n if (!newStepResults) {\n return;\n }\n\n stepResults = newStepResults;\n }\n\n if (!prevResult?.status || prevResult.status === 'failed') {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.fail',\n runId,\n data: {\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n parentWorkflow,\n stepResults,\n prevResult,\n activeSteps,\n runtimeContext,\n },\n });\n\n return;\n } else if (prevResult.status === 'suspended') {\n const suspendedPaths: Record<string, number[]> = {};\n const suspendedStep = getStep(workflow, executionPath);\n if (suspendedStep) {\n suspendedPaths[suspendedStep.id] = executionPath;\n }\n\n await this.mastra.getStorage()?.updateWorkflowState({\n workflowName: workflowId,\n runId,\n opts: {\n status: 'suspended',\n result: prevResult,\n suspendedPaths,\n },\n });\n\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.suspend',\n runId,\n data: {\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n parentWorkflow,\n stepResults,\n prevResult,\n activeSteps,\n runtimeContext,\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'watch',\n payload: {\n currentStep: { ...prevResult, id: (step as any)?.step?.id },\n workflowState: {\n status: 'suspended',\n steps: stepResults,\n suspendPayload: prevResult.suspendPayload,\n },\n },\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-suspended',\n payload: {\n id: (step as any)?.step?.id,\n ...prevResult,\n suspendedAt: Date.now(),\n suspendPayload: prevResult.suspendPayload,\n },\n },\n });\n\n return;\n }\n\n if (step?.type === 'step' || step?.type === 'waitForEvent') {\n await this.mastra.pubsub.publish(`workflow.events.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'watch',\n payload: {\n currentStep: { ...prevResult, id: step.step.id },\n workflowState: {\n status: 'running',\n steps: stepResults,\n error: null,\n result: null,\n },\n },\n eventTimestamp: Date.now(),\n },\n });\n\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-result',\n payload: {\n id: step.step.id,\n ...prevResult,\n },\n },\n });\n\n if (prevResult.status === 'success') {\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-step-finish',\n payload: {\n id: step.step.id,\n metadata: {},\n },\n },\n });\n }\n }\n\n step = workflow.stepGraph[executionPath[0]!];\n if ((step?.type === 'parallel' || step?.type === 'conditional') && executionPath.length > 1) {\n let skippedCount = 0;\n const allResults: Record<string, any> = step.steps.reduce(\n (acc, step) => {\n if (isExecutableStep(step)) {\n const res = stepResults?.[step.step.id];\n if (res && res.status === 'success') {\n acc[step.step.id] = res?.output;\n // @ts-ignore\n } else if (res?.status === 'skipped') {\n skippedCount++;\n }\n }\n\n return acc;\n },\n {} as Record<string, StepResult<any, any, any, any>>,\n );\n\n const keys = Object.keys(allResults);\n if (keys.length + skippedCount < step.steps.length) {\n return;\n }\n\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.end',\n runId,\n data: {\n parentWorkflow,\n workflowId,\n runId,\n executionPath: executionPath.slice(0, -1),\n resumeSteps,\n stepResults,\n prevResult: { status: 'success', output: allResults },\n activeSteps,\n runtimeContext,\n },\n });\n } else if (step?.type === 'foreach') {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.slice(0, -1),\n resumeSteps,\n parentWorkflow,\n stepResults,\n prevResult: { ...prevResult, output: prevResult?.payload },\n activeSteps,\n runtimeContext,\n },\n });\n } else if (executionPath[0]! >= workflow.stepGraph.length - 1) {\n await this.endWorkflow({\n workflow,\n parentWorkflow,\n workflowId,\n runId,\n executionPath,\n resumeSteps,\n stepResults,\n prevResult,\n activeSteps,\n runtimeContext,\n });\n } else {\n await this.mastra.pubsub.publish('workflows', {\n type: 'workflow.step.run',\n runId,\n data: {\n workflowId,\n runId,\n executionPath: executionPath.slice(0, -1).concat([executionPath[executionPath.length - 1]! + 1]),\n resumeSteps,\n parentWorkflow,\n stepResults,\n prevResult,\n activeSteps,\n runtimeContext,\n },\n });\n }\n }\n\n async loadData({\n workflowId,\n runId,\n }: {\n workflowId: string;\n runId: string;\n }): Promise<WorkflowRunState | null | undefined> {\n const snapshot = await this.mastra.getStorage()?.loadWorkflowSnapshot({\n workflowName: workflowId,\n runId,\n });\n\n return snapshot;\n }\n\n async process(event: Event, ack?: () => Promise<void>) {\n const { type, data } = event;\n\n const workflowData = data as Omit<ProcessorArgs, 'workflow'>;\n\n const currentState = await this.loadData({\n workflowId: workflowData.workflowId,\n runId: workflowData.runId,\n });\n\n if (currentState?.status === 'canceled' && type !== 'workflow.end') {\n return;\n }\n\n if (type.startsWith('workflow.user-event.')) {\n await processWorkflowWaitForEvent(\n {\n ...workflowData,\n workflow: this.mastra.getWorkflow(workflowData.workflowId),\n },\n {\n pubsub: this.mastra.pubsub,\n eventName: type.split('.').slice(2).join('.'),\n currentState: currentState!,\n },\n );\n return;\n }\n\n const workflow = workflowData.parentWorkflow\n ? getNestedWorkflow(this.mastra, workflowData.parentWorkflow)\n : this.mastra.getWorkflow(workflowData.workflowId);\n\n if (!workflow) {\n return this.errorWorkflow(\n workflowData,\n new MastraError({\n id: 'MASTRA_WORKFLOW',\n text: `Workflow not found: ${workflowData.workflowId}`,\n domain: ErrorDomain.MASTRA_WORKFLOW,\n category: ErrorCategory.SYSTEM,\n }),\n );\n }\n\n if (type === 'workflow.start' || type === 'workflow.resume') {\n const { runId } = workflowData;\n await this.mastra.pubsub.publish(`workflow.events.v2.${runId}`, {\n type: 'watch',\n runId,\n data: {\n type: 'workflow-start',\n payload: {\n runId,\n },\n },\n });\n }\n\n switch (type) {\n case 'workflow.cancel':\n await this.processWorkflowCancel({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.start':\n await this.processWorkflowStart({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.resume':\n await this.processWorkflowStart({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.end':\n await this.processWorkflowEnd({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.step.end':\n await this.processWorkflowStepEnd({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.step.run':\n await this.processWorkflowStepRun({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.suspend':\n await this.processWorkflowSuspend({\n workflow,\n ...workflowData,\n });\n break;\n case 'workflow.fail':\n await this.processWorkflowFail({\n workflow,\n ...workflowData,\n });\n break;\n default:\n break;\n }\n\n try {\n await ack?.();\n } catch (e) {\n console.error('Error acking event', e);\n }\n }\n}\n","import { randomUUID } from 'crypto';\nimport type { ReadableStream } from 'stream/web';\nimport z from 'zod';\nimport type { Agent } from '../../agent';\nimport { RuntimeContext } from '../../di';\nimport type { Mastra } from '../../mastra';\nimport { Tool } from '../../tools';\nimport type { ToolExecutionContext } from '../../tools/types';\nimport { Workflow, Run } from '../../workflows';\nimport type { ExecutionEngine, ExecutionGraph } from '../../workflows/execution-engine';\nimport type { ExecuteFunction, Step } from '../../workflows/step';\nimport type {\n SerializedStepFlowEntry,\n WorkflowConfig,\n WorkflowResult,\n StreamEvent,\n WatchEvent,\n} from '../../workflows/types';\nimport { EMITTER_SYMBOL } from '../constants';\nimport { EventedExecutionEngine } from './execution-engine';\nimport { WorkflowEventProcessor } from './workflow-event-processor';\n\nexport type EventedEngineType = {};\n\nexport function cloneWorkflow<\n TWorkflowId extends string = string,\n TInput extends z.ZodType<any> = z.ZodType<any>,\n TOutput extends z.ZodType<any> = z.ZodType<any>,\n TSteps extends Step<string, any, any, any, any, EventedEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n EventedEngineType\n >[],\n TPrevSchema extends z.ZodType<any> = TInput,\n>(\n workflow: Workflow<EventedEngineType, TSteps, string, TInput, TOutput, TPrevSchema>,\n opts: { id: TWorkflowId },\n): Workflow<EventedEngineType, TSteps, TWorkflowId, TInput, TOutput, TPrevSchema> {\n const wf: Workflow<EventedEngineType, TSteps, TWorkflowId, TInput, TOutput, TPrevSchema> = new Workflow({\n id: opts.id,\n inputSchema: workflow.inputSchema,\n outputSchema: workflow.outputSchema,\n steps: workflow.stepDefs,\n mastra: workflow.mastra,\n });\n\n wf.setStepFlow(workflow.stepGraph);\n wf.commit();\n return wf;\n}\n\nexport function cloneStep<TStepId extends string>(\n step: Step<string, any, any, any, any, EventedEngineType>,\n opts: { id: TStepId },\n): Step<TStepId, any, any, any, any, EventedEngineType> {\n return {\n id: opts.id,\n description: step.description,\n inputSchema: step.inputSchema,\n outputSchema: step.outputSchema,\n execute: step.execute,\n };\n}\n\nfunction isAgent(params: any): params is Agent<any, any, any> {\n return params?.component === 'AGENT';\n}\n\nfunction isTool(params: any): params is Tool<any, any, any> {\n return params instanceof Tool;\n}\n\nexport function createStep<\n TStepId extends string,\n TStepInput extends z.ZodType<any>,\n TStepOutput extends z.ZodType<any>,\n TResumeSchema extends z.ZodType<any>,\n TSuspendSchema extends z.ZodType<any>,\n>(params: {\n id: TStepId;\n description?: string;\n inputSchema: TStepInput;\n outputSchema: TStepOutput;\n resumeSchema?: TResumeSchema;\n suspendSchema?: TSuspendSchema;\n execute: ExecuteFunction<\n z.infer<TStepInput>,\n z.infer<TStepOutput>,\n z.infer<TResumeSchema>,\n z.infer<TSuspendSchema>,\n EventedEngineType\n >;\n}): Step<TStepId, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, EventedEngineType>;\n\nexport function createStep<\n TStepId extends string,\n TStepInput extends z.ZodObject<{ prompt: z.ZodString }>,\n TStepOutput extends z.ZodObject<{ text: z.ZodString }>,\n TResumeSchema extends z.ZodType<any>,\n TSuspendSchema extends z.ZodType<any>,\n>(\n agent: Agent<TStepId, any, any>,\n): Step<TStepId, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, EventedEngineType>;\n\nexport function createStep<\n TSchemaIn extends z.ZodType<any>,\n TSchemaOut extends z.ZodType<any>,\n TContext extends ToolExecutionContext<TSchemaIn>,\n>(\n tool: Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext) => Promise<any>;\n },\n): Step<string, TSchemaIn, TSchemaOut, z.ZodType<any>, z.ZodType<any>, EventedEngineType>;\n\nexport function createStep<\n TStepId extends string,\n TStepInput extends z.ZodType<any>,\n TStepOutput extends z.ZodType<any>,\n TResumeSchema extends z.ZodType<any>,\n TSuspendSchema extends z.ZodType<any>,\n>(\n params:\n | {\n id: TStepId;\n description?: string;\n inputSchema: TStepInput;\n outputSchema: TStepOutput;\n resumeSchema?: TResumeSchema;\n suspendSchema?: TSuspendSchema;\n execute: ExecuteFunction<\n z.infer<TStepInput>,\n z.infer<TStepOutput>,\n z.infer<TResumeSchema>,\n z.infer<TSuspendSchema>,\n EventedEngineType\n >;\n }\n | Agent<any, any, any>\n | (Tool<TStepInput, TStepOutput, any> & {\n inputSchema: TStepInput;\n outputSchema: TStepOutput;\n execute: (context: ToolExecutionContext<TStepInput>) => Promise<any>;\n }),\n): Step<TStepId, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, EventedEngineType> {\n if (isAgent(params)) {\n return {\n id: params.name,\n // @ts-ignore\n inputSchema: z.object({\n prompt: z.string(),\n // resourceId: z.string().optional(),\n // threadId: z.string().optional(),\n }),\n // @ts-ignore\n outputSchema: z.object({\n text: z.string(),\n }),\n execute: async ({ inputData, [EMITTER_SYMBOL]: emitter, runtimeContext, abortSignal, abort }) => {\n let streamPromise = {} as {\n promise: Promise<string>;\n resolve: (value: string) => void;\n reject: (reason?: any) => void;\n };\n\n streamPromise.promise = new Promise((resolve, reject) => {\n streamPromise.resolve = resolve;\n streamPromise.reject = reject;\n });\n const toolData = {\n name: params.name,\n args: inputData,\n };\n await emitter.emit('watch-v2', {\n type: 'workflow-agent-call-start',\n payload: toolData,\n });\n const { fullStream } = await params.stream(inputData.prompt, {\n // resourceId: inputData.resourceId,\n // threadId: inputData.threadId,\n runtimeContext,\n onFinish: result => {\n streamPromise.resolve(result.text);\n },\n abortSignal,\n });\n\n if (abortSignal.aborted) {\n return abort();\n }\n\n for await (const chunk of fullStream) {\n await emitter.emit('watch-v2', chunk);\n }\n\n await emitter.emit('watch-v2', {\n type: 'workflow-agent-call-finish',\n payload: toolData,\n });\n\n return {\n text: await streamPromise.promise,\n };\n },\n };\n }\n\n if (isTool(params)) {\n if (!params.inputSchema || !params.outputSchema) {\n throw new Error('Tool must have input and output schemas defined');\n }\n\n return {\n // TODO: tool probably should have strong id type\n // @ts-ignore\n id: params.id,\n inputSchema: params.inputSchema,\n outputSchema: params.outputSchema,\n execute: async ({ inputData, mastra, runtimeContext }) => {\n return params.execute({\n context: inputData,\n mastra,\n runtimeContext,\n // TODO: Pass proper tracing context when evented workflows support tracing\n tracingContext: { currentSpan: undefined },\n });\n },\n };\n }\n\n return {\n id: params.id,\n description: params.description,\n inputSchema: params.inputSchema,\n outputSchema: params.outputSchema,\n resumeSchema: params.resumeSchema,\n suspendSchema: params.suspendSchema,\n execute: params.execute,\n };\n}\n\nexport function createWorkflow<\n TWorkflowId extends string = string,\n TInput extends z.ZodType<any> = z.ZodType<any>,\n TOutput extends z.ZodType<any> = z.ZodType<any>,\n TSteps extends Step<string, any, any, any, any, EventedEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n EventedEngineType\n >[],\n>(params: WorkflowConfig<TWorkflowId, TInput, TOutput, TSteps>) {\n const eventProcessor = new WorkflowEventProcessor({ mastra: params.mastra! });\n const executionEngine = new EventedExecutionEngine({ mastra: params.mastra!, eventProcessor });\n return new EventedWorkflow<EventedEngineType, TSteps, TWorkflowId, TInput, TOutput, TInput>({\n ...params,\n executionEngine,\n });\n}\n\nexport class EventedWorkflow<\n TEngineType = EventedEngineType,\n TSteps extends Step<string, any, any>[] = Step<string, any, any>[],\n TWorkflowId extends string = string,\n TInput extends z.ZodType<any> = z.ZodType<any>,\n TOutput extends z.ZodType<any> = z.ZodType<any>,\n TPrevSchema extends z.ZodType<any> = TInput,\n> extends Workflow<TEngineType, TSteps, TWorkflowId, TInput, TOutput, TPrevSchema> {\n constructor(params: WorkflowConfig<TWorkflowId, TInput, TOutput, TSteps>) {\n super(params);\n }\n\n __registerMastra(mastra: Mastra) {\n super.__registerMastra(mastra);\n this.executionEngine.__registerMastra(mastra);\n }\n\n async createRunAsync(options?: { runId?: string }): Promise<Run<TEngineType, TSteps, TInput, TOutput>> {\n const runIdToUse = options?.runId || randomUUID();\n\n // Return a new Run instance with object parameters\n const run: Run<TEngineType, TSteps, TInput, TOutput> =\n this.runs.get(runIdToUse) ??\n new EventedRun({\n workflowId: this.id,\n runId: runIdToUse,\n executionEngine: this.executionEngine,\n executionGraph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n mastra: this.mastra,\n retryConfig: this.retryConfig,\n cleanup: () => this.runs.delete(runIdToUse),\n });\n\n this.runs.set(runIdToUse, run);\n\n const workflowSnapshotInStorage = await this.getWorkflowRunExecutionResult(runIdToUse, false);\n\n if (!workflowSnapshotInStorage) {\n await this.mastra?.getStorage()?.persistWorkflowSnapshot({\n workflowName: this.id,\n runId: runIdToUse,\n snapshot: {\n runId: runIdToUse,\n status: 'pending',\n value: {},\n context: {},\n activePaths: [],\n serializedStepGraph: this.serializedStepGraph,\n suspendedPaths: {},\n waitingPaths: {},\n result: undefined,\n error: undefined,\n // @ts-ignore\n timestamp: Date.now(),\n },\n });\n }\n\n return run;\n }\n}\n\nexport class EventedRun<\n TEngineType = EventedEngineType,\n TSteps extends Step<string, any, any>[] = Step<string, any, any>[],\n TInput extends z.ZodType<any> = z.ZodType<any>,\n TOutput extends z.ZodType<any> = z.ZodType<any>,\n> extends Run<TEngineType, TSteps, TInput, TOutput> {\n constructor(params: {\n workflowId: string;\n runId: string;\n executionEngine: ExecutionEngine;\n executionGraph: ExecutionGraph;\n serializedStepGraph: SerializedStepFlowEntry[];\n mastra?: Mastra;\n retryConfig?: {\n attempts?: number;\n delay?: number;\n };\n cleanup?: () => void;\n }) {\n super(params);\n this.serializedStepGraph = params.serializedStepGraph;\n }\n\n async start({\n inputData,\n runtimeContext,\n }: {\n inputData?: z.infer<TInput>;\n runtimeContext?: RuntimeContext;\n }): Promise<WorkflowResult<TOutput, TSteps>> {\n runtimeContext = runtimeContext ?? new RuntimeContext();\n\n await this.mastra?.getStorage()?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n snapshot: {\n runId: this.runId,\n serializedStepGraph: this.serializedStepGraph,\n value: {},\n context: {} as any,\n runtimeContext: Object.fromEntries(runtimeContext.entries()),\n activePaths: [],\n suspendedPaths: {},\n waitingPaths: {},\n timestamp: Date.now(),\n status: 'running',\n },\n });\n\n const result = await this.executionEngine.execute<z.infer<TInput>, WorkflowResult<TOutput, TSteps>>({\n workflowId: this.workflowId,\n runId: this.runId,\n graph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n input: inputData,\n emitter: {\n emit: async (event: string, data: any) => {\n this.emitter.emit(event, data);\n },\n on: (event: string, callback: (data: any) => void) => {\n this.emitter.on(event, callback);\n },\n off: (event: string, callback: (data: any) => void) => {\n this.emitter.off(event, callback);\n },\n once: (event: string, callback: (data: any) => void) => {\n this.emitter.once(event, callback);\n },\n },\n retryConfig: this.retryConfig,\n runtimeContext,\n abortController: this.abortController,\n });\n\n console.dir({ startResult: result }, { depth: null });\n\n if (result.status !== 'suspended') {\n this.cleanup?.();\n }\n\n return result;\n }\n\n /**\n * Starts the workflow execution with the provided input as a stream\n * @param input The input data for the workflow\n * @returns A promise that resolves to the workflow output\n */\n stream({ inputData, runtimeContext }: { inputData?: z.infer<TInput>; runtimeContext?: RuntimeContext } = {}): {\n stream: ReadableStream<StreamEvent>;\n getWorkflowState: () => Promise<WorkflowResult<TOutput, TSteps>>;\n } {\n const { readable, writable } = new TransformStream<StreamEvent, StreamEvent>();\n\n let currentToolData: { name: string; args: any } | undefined = undefined;\n\n const writer = writable.getWriter();\n const unwatch = this.watch(async event => {\n console.log('raw_event', event);\n if ((event as any).type === 'workflow-agent-call-start') {\n currentToolData = {\n name: (event as any).payload.name,\n args: (event as any).payload.args,\n };\n await writer.write({\n ...event.payload,\n type: 'tool-call-streaming-start',\n } as any);\n\n return;\n }\n\n try {\n if ((event as any).type === 'workflow-agent-call-finish') {\n return;\n } else if (!(event as any).type.startsWith('workflow-')) {\n if ((event as any).type === 'text-delta') {\n await writer.write({\n type: 'tool-call-delta',\n ...(currentToolData ?? {}),\n argsTextDelta: (event as any).textDelta,\n } as any);\n }\n return;\n }\n\n const e: any = {\n ...event,\n type: event.type.replace('workflow-', ''),\n };\n // watch-v2 events are data stream events, so we need to cast them to the correct type\n\n await writer.write(e as any);\n } catch {}\n }, 'watch-v2');\n\n this.closeStreamAction = async () => {\n unwatch();\n\n try {\n await writer.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n } finally {\n writer.releaseLock();\n }\n };\n\n this.executionResults = this.start({ inputData, runtimeContext }).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n return {\n stream: readable as ReadableStream<StreamEvent>,\n getWorkflowState: () => this.executionResults!,\n };\n }\n\n async streamAsync({\n inputData,\n runtimeContext,\n }: { inputData?: z.infer<TInput>; runtimeContext?: RuntimeContext } = {}): Promise<{\n stream: ReadableStream<StreamEvent>;\n getWorkflowState: () => Promise<WorkflowResult<TOutput, TSteps>>;\n }> {\n const { readable, writable } = new TransformStream<StreamEvent, StreamEvent>();\n\n let currentToolData: { name: string; args: any } | undefined = undefined;\n\n const writer = writable.getWriter();\n const unwatch = await this.watchAsync(async event => {\n if ((event as any).type === 'workflow-agent-call-start') {\n currentToolData = {\n name: (event as any).payload.name,\n args: (event as any).payload.args,\n };\n await writer.write({\n ...event.payload,\n type: 'tool-call-streaming-start',\n } as any);\n\n return;\n }\n\n try {\n if ((event as any).type === 'workflow-agent-call-finish') {\n return;\n } else if (!(event as any).type.startsWith('workflow-')) {\n if ((event as any).type === 'text-delta') {\n await writer.write({\n type: 'tool-call-delta',\n ...(currentToolData ?? {}),\n argsTextDelta: (event as any).textDelta,\n } as any);\n }\n return;\n }\n\n const e: any = {\n ...event,\n type: event.type.replace('workflow-', ''),\n };\n // watch-v2 events are data stream events, so we need to cast them to the correct type\n await writer.write(e as any);\n } catch {}\n }, 'watch-v2');\n\n this.closeStreamAction = async () => {\n await unwatch();\n\n try {\n await writer.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n } finally {\n writer.releaseLock();\n }\n };\n\n this.executionResults = this.start({ inputData, runtimeContext }).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n return {\n stream: readable as ReadableStream<StreamEvent>,\n getWorkflowState: () => this.executionResults!,\n };\n }\n\n async resume<TResumeSchema extends z.ZodType<any>>(params: {\n resumeData?: z.infer<TResumeSchema>;\n step:\n | Step<string, any, any, TResumeSchema, any, TEngineType>\n | [...Step<string, any, any, any, any, TEngineType>[], Step<string, any, any, TResumeSchema, any, TEngineType>]\n | string\n | string[];\n runtimeContext?: RuntimeContext;\n }): Promise<WorkflowResult<TOutput, TSteps>> {\n const steps: string[] = (Array.isArray(params.step) ? params.step : [params.step]).map(step =>\n typeof step === 'string' ? step : step?.id,\n );\n\n if (steps.length === 0) {\n throw new Error('No steps provided to resume');\n }\n\n const snapshot = await this.mastra?.getStorage()?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n\n const resumePath = snapshot?.suspendedPaths?.[steps[0]!] as any;\n if (!resumePath) {\n throw new Error(\n `No resume path found for step ${JSON.stringify(steps)}, currently suspended paths are ${JSON.stringify(snapshot?.suspendedPaths)}`,\n );\n }\n\n console.dir(\n { resume: { runtimeContextObj: snapshot?.runtimeContext, runtimeContext: params.runtimeContext } },\n { depth: null },\n );\n const runtimeContextObj = snapshot?.runtimeContext ?? {};\n const runtimeContext = params.runtimeContext ?? new RuntimeContext();\n for (const [key, value] of Object.entries(runtimeContextObj)) {\n runtimeContext.set(key, value);\n }\n\n const executionResultPromise = this.executionEngine\n .execute<z.infer<TInput>, WorkflowResult<TOutput, TSteps>>({\n workflowId: this.workflowId,\n runId: this.runId,\n graph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n input: params.resumeData,\n resume: {\n steps,\n stepResults: snapshot?.context as any,\n resumePayload: params.resumeData,\n resumePath,\n },\n emitter: {\n emit: (event: string, data: any) => {\n this.emitter.emit(event, data);\n return Promise.resolve();\n },\n on: (event: string, callback: (data: any) => void) => {\n this.emitter.on(event, callback);\n },\n off: (event: string, callback: (data: any) => void) => {\n this.emitter.off(event, callback);\n },\n once: (event: string, callback: (data: any) => void) => {\n this.emitter.once(event, callback);\n },\n },\n runtimeContext,\n abortController: this.abortController,\n })\n .then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n this.executionResults = executionResultPromise;\n\n return executionResultPromise;\n }\n\n watch(cb: (event: WatchEvent) => void, type: 'watch' | 'watch-v2' = 'watch'): () => void {\n const watchCb = async (event: any, ack?: () => Promise<void>) => {\n if (event.runId !== this.runId) {\n return;\n }\n\n cb(event.data);\n await ack?.();\n };\n\n if (type === 'watch-v2') {\n this.mastra?.pubsub.subscribe(`workflow.events.v2.${this.runId}`, watchCb).catch(() => {});\n } else {\n this.mastra?.pubsub.subscribe(`workflow.events.${this.runId}`, watchCb).catch(() => {});\n }\n\n return () => {\n if (type === 'watch-v2') {\n this.mastra?.pubsub.unsubscribe(`workflow.events.v2.${this.runId}`, watchCb).catch(() => {});\n } else {\n this.mastra?.pubsub.unsubscribe(`workflow.events.${this.runId}`, watchCb).catch(() => {});\n }\n };\n }\n\n async watchAsync(\n cb: (event: WatchEvent) => void,\n type: 'watch' | 'watch-v2' = 'watch',\n ): Promise<() => Promise<void>> {\n const watchCb = async (event: any, ack?: () => Promise<void>) => {\n if (event.runId !== this.runId) {\n return;\n }\n\n cb(event.data);\n await ack?.();\n };\n\n if (type === 'watch-v2') {\n await this.mastra?.pubsub.subscribe(`workflow.events.v2.${this.runId}`, watchCb).catch(() => {});\n } else {\n await this.mastra?.pubsub.subscribe(`workflow.events.${this.runId}`, watchCb).catch(() => {});\n }\n\n return async () => {\n if (type === 'watch-v2') {\n await this.mastra?.pubsub.unsubscribe(`workflow.events.v2.${this.runId}`, watchCb).catch(() => {});\n } else {\n await this.mastra?.pubsub.unsubscribe(`workflow.events.${this.runId}`, watchCb).catch(() => {});\n }\n };\n }\n\n async cancel() {\n await this.mastra?.pubsub.publish('workflows', {\n type: 'workflow.cancel',\n runId: this.runId,\n data: {\n workflowId: this.workflowId,\n runId: this.runId,\n },\n });\n }\n\n async sendEvent(eventName: string, data: any) {\n await this.mastra?.pubsub.publish('workflows', {\n type: `workflow.user-event.${eventName}`,\n runId: this.runId,\n data: {\n workflowId: this.workflowId,\n runId: this.runId,\n resumeData: data,\n },\n });\n }\n}\n","import type { Workflow } from '../..';\nimport type { Mastra, Step, StepFlowEntry } from '../../..';\nimport { EventedWorkflow } from '../workflow';\nimport type { ParentWorkflow } from '.';\n\nexport function getNestedWorkflow(\n mastra: Mastra,\n { workflowId, executionPath, parentWorkflow }: ParentWorkflow,\n): Workflow | null {\n let workflow: Workflow | null = null;\n\n if (parentWorkflow) {\n const nestedWorkflow = getNestedWorkflow(mastra, parentWorkflow);\n if (!nestedWorkflow) {\n return null;\n }\n\n workflow = nestedWorkflow;\n }\n\n workflow = workflow ?? mastra.getWorkflow(workflowId);\n const stepGraph = workflow.stepGraph;\n let parentStep = stepGraph[executionPath[0]!];\n if (parentStep?.type === 'parallel' || parentStep?.type === 'conditional') {\n parentStep = parentStep.steps[executionPath[1]!];\n }\n\n if (parentStep?.type === 'step' || parentStep?.type === 'loop') {\n return parentStep.step as Workflow;\n }\n\n return null;\n}\n\nexport function getStep(workflow: Workflow, executionPath: number[]): Step<string, any, any, any, any, any> | null {\n let idx = 0;\n const stepGraph = workflow.stepGraph;\n let parentStep = stepGraph[executionPath[0]!];\n if (parentStep?.type === 'parallel' || parentStep?.type === 'conditional') {\n parentStep = parentStep.steps[executionPath[1]!];\n idx++;\n } else if (parentStep?.type === 'foreach') {\n return parentStep.step;\n }\n\n if (!(parentStep?.type === 'step' || parentStep?.type === 'loop' || parentStep?.type === 'waitForEvent')) {\n return null;\n }\n\n if (parentStep instanceof EventedWorkflow) {\n return getStep(parentStep, executionPath.slice(idx + 1));\n }\n\n return parentStep.step;\n}\n\nexport function isExecutableStep(step: StepFlowEntry<any>) {\n return step.type === 'step' || step.type === 'loop' || step.type === 'waitForEvent' || step.type === 'foreach';\n}\n","import type { Emitter, ExecutionGraph, SerializedStepFlowEntry, StepResult, Mastra } from '../..';\nimport type { RuntimeContext } from '../../di';\nimport type { Event } from '../../events/types';\nimport { ExecutionEngine } from '../../workflows/execution-engine';\nimport type { WorkflowEventProcessor } from './workflow-event-processor';\nimport { getStep } from './workflow-event-processor/utils';\n\nexport class EventedExecutionEngine extends ExecutionEngine {\n protected eventProcessor: WorkflowEventProcessor;\n\n constructor({ mastra, eventProcessor }: { mastra?: Mastra; eventProcessor: WorkflowEventProcessor }) {\n super({ mastra });\n this.eventProcessor = eventProcessor;\n }\n\n __registerMastra(mastra: Mastra) {\n this.mastra = mastra;\n this.eventProcessor.__registerMastra(mastra);\n }\n\n /**\n * Executes a workflow run with the provided execution graph and input\n * @param graph The execution graph to execute\n * @param input The input data for the workflow\n * @returns A promise that resolves to the workflow output\n */\n async execute<TInput, TOutput>(params: {\n workflowId: string;\n runId: string;\n graph: ExecutionGraph;\n serializedStepGraph: SerializedStepFlowEntry[];\n input?: TInput;\n resume?: {\n steps: string[];\n stepResults: Record<string, StepResult<any, any, any, any>>;\n resumePayload: any;\n resumePath: number[];\n };\n emitter: Emitter;\n runtimeContext: RuntimeContext;\n retryConfig?: {\n attempts?: number;\n delay?: number;\n };\n abortController: AbortController;\n format?: 'aisdk' | 'mastra' | undefined;\n }): Promise<TOutput> {\n const pubsub = this.mastra?.pubsub;\n if (!pubsub) {\n throw new Error('No Pubsub adapter configured on the Mastra instance');\n }\n\n if (params.resume) {\n const prevStep = getStep(this.mastra!.getWorkflow(params.workflowId), params.resume.resumePath);\n const prevResult = params.resume.stepResults[prevStep?.id ?? 'input'];\n\n await pubsub.publish('workflows', {\n type: 'workflow.resume',\n runId: params.runId,\n data: {\n workflowId: params.workflowId,\n runId: params.runId,\n executionPath: params.resume.resumePath,\n stepResults: params.resume.stepResults,\n resumeSteps: params.resume.steps,\n prevResult: { status: 'success', output: prevResult?.payload },\n resumeData: params.resume.resumePayload,\n runtimeContext: Object.fromEntries(params.runtimeContext.entries()),\n format: params.format,\n },\n });\n } else {\n await pubsub.publish('workflows', {\n type: 'workflow.start',\n runId: params.runId,\n data: {\n workflowId: params.workflowId,\n runId: params.runId,\n prevResult: { status: 'success', output: params.input },\n runtimeContext: Object.fromEntries(params.runtimeContext.entries()),\n format: params.format,\n },\n });\n }\n\n const resultData: any = await new Promise(resolve => {\n const finishCb = async (event: Event, ack?: () => Promise<void>) => {\n if (event.runId !== params.runId) {\n await ack?.();\n return;\n }\n\n if (['workflow.end', 'workflow.fail', 'workflow.suspend'].includes(event.type)) {\n await ack?.();\n await pubsub.unsubscribe('workflows-finish', finishCb);\n resolve(event.data);\n return;\n }\n\n await ack?.();\n };\n\n pubsub.subscribe('workflows-finish', finishCb).catch(() => {});\n });\n\n if (resultData.prevResult.status === 'failed') {\n return {\n status: 'failed',\n error: resultData.prevResult.error,\n steps: resultData.stepResults,\n } as TOutput;\n } else if (resultData.prevResult.status === 'suspended') {\n const suspendedSteps = Object.entries(resultData.stepResults)\n .map(([_stepId, stepResult]: [string, any]) => {\n if (stepResult.status === 'suspended') {\n return stepResult.suspendPayload?.__workflow_meta?.path ?? [];\n }\n\n return null;\n })\n .filter(Boolean);\n return {\n status: 'suspended',\n steps: resultData.stepResults,\n suspended: suspendedSteps,\n } as TOutput;\n }\n\n return {\n status: resultData.prevResult.status,\n result: resultData.prevResult?.output,\n steps: resultData.stepResults,\n } as TOutput;\n }\n}\n"]}
@@ -338,5 +338,5 @@ var MastraStorage = class extends MastraBase {
338
338
  };
339
339
 
340
340
  export { MastraStorage, ensureDate, resolveMessageLimit, serializeDate };
341
- //# sourceMappingURL=chunk-YGW2WEJ5.js.map
342
- //# sourceMappingURL=chunk-YGW2WEJ5.js.map
341
+ //# sourceMappingURL=chunk-JTU7FZ5O.js.map
342
+ //# sourceMappingURL=chunk-JTU7FZ5O.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/base.ts"],"names":[],"mappings":"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","file":"chunk-YGW2WEJ5.js","sourcesContent":["import type { MastraMessageContentV2, MastraMessageV2 } from '../agent';\nimport type { TracingStrategy } from '../ai-tracing';\nimport { MastraBase } from '../base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport type { MastraMessageV1, StorageThreadType } from '../memory/types';\nimport type { ScoreRowData, ScoringSource } from '../scores';\nimport type { Trace } from '../telemetry';\nimport type { StepResult, WorkflowRunState } from '../workflows/types';\n\nimport {\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_TRACES,\n TABLE_RESOURCES,\n TABLE_SCORERS,\n TABLE_SCHEMAS,\n TABLE_AI_SPANS,\n} from './constants';\nimport type { TABLE_NAMES } from './constants';\nimport type {\n ScoresStorage,\n StoreOperations,\n WorkflowsStorage,\n TracesStorage,\n MemoryStorage,\n LegacyEvalsStorage,\n ObservabilityStorage,\n} from './domains';\nimport type {\n EvalRow,\n PaginationInfo,\n StorageColumn,\n StorageGetMessagesArg,\n StorageResourceType,\n StoragePagination,\n ThreadSortOptions,\n WorkflowRun,\n WorkflowRuns,\n StorageGetTracesArg,\n PaginationArgs,\n StorageGetTracesPaginatedArg,\n AISpanRecord,\n AITraceRecord,\n AITracesPaginatedArg,\n} from './types';\n\nexport type StorageDomains = {\n legacyEvals: LegacyEvalsStorage;\n operations: StoreOperations;\n workflows: WorkflowsStorage;\n scores: ScoresStorage;\n traces: TracesStorage;\n memory: MemoryStorage;\n observability?: ObservabilityStorage;\n};\n\nexport function ensureDate(date: Date | string | undefined): Date | undefined {\n if (!date) return undefined;\n return date instanceof Date ? date : new Date(date);\n}\n\nexport function serializeDate(date: Date | string | undefined): string | undefined {\n if (!date) return undefined;\n const dateObj = ensureDate(date);\n return dateObj?.toISOString();\n}\n\nexport function resolveMessageLimit({\n last,\n defaultLimit,\n}: {\n last: number | false | undefined;\n defaultLimit: number;\n}): number {\n // TODO: Figure out consistent default limit for all stores as some stores use 40 and some use no limit (Number.MAX_SAFE_INTEGER)\n if (typeof last === 'number') return Math.max(0, last);\n if (last === false) return 0;\n return defaultLimit;\n}\nexport abstract class MastraStorage extends MastraBase {\n /** @deprecated import from { TABLE_WORKFLOW_SNAPSHOT } '@mastra/core/storage' instead */\n static readonly TABLE_WORKFLOW_SNAPSHOT = TABLE_WORKFLOW_SNAPSHOT;\n /** @deprecated import from { TABLE_EVALS } '@mastra/core/storage' instead */\n static readonly TABLE_EVALS = TABLE_EVALS;\n /** @deprecated import from { TABLE_MESSAGES } '@mastra/core/storage' instead */\n static readonly TABLE_MESSAGES = TABLE_MESSAGES;\n /** @deprecated import from { TABLE_THREADS } '@mastra/core/storage' instead */\n static readonly TABLE_THREADS = TABLE_THREADS;\n /** @deprecated import { TABLE_TRACES } from '@mastra/core/storage' instead */\n static readonly TABLE_TRACES = TABLE_TRACES;\n\n protected hasInitialized: null | Promise<boolean> = null;\n protected shouldCacheInit = true;\n\n stores?: StorageDomains;\n\n constructor({ name }: { name: string }) {\n super({\n component: 'STORAGE',\n name,\n });\n }\n\n public get supports(): {\n selectByIncludeResourceScope: boolean;\n resourceWorkingMemory: boolean;\n hasColumn: boolean;\n createTable: boolean;\n deleteMessages: boolean;\n aiTracing?: boolean;\n } {\n return {\n selectByIncludeResourceScope: false,\n resourceWorkingMemory: false,\n hasColumn: false,\n createTable: false,\n deleteMessages: false,\n aiTracing: false,\n };\n }\n\n protected ensureDate(date: Date | string | undefined): Date | undefined {\n return ensureDate(date);\n }\n\n protected serializeDate(date: Date | string | undefined): string | undefined {\n return serializeDate(date);\n }\n\n /**\n * Resolves limit for how many messages to fetch\n *\n * @param last The number of messages to fetch\n * @param defaultLimit The default limit to use if last is not provided\n * @returns The resolved limit\n */\n protected resolveMessageLimit({\n last,\n defaultLimit,\n }: {\n last: number | false | undefined;\n defaultLimit: number;\n }): number {\n return resolveMessageLimit({ last, defaultLimit });\n }\n\n protected getSqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n return 'TEXT';\n case 'timestamp':\n return 'TIMESTAMP';\n case 'float':\n return 'FLOAT';\n case 'integer':\n return 'INTEGER';\n case 'bigint':\n return 'BIGINT';\n case 'jsonb':\n return 'JSONB';\n case 'float':\n return 'FLOAT';\n default:\n return 'TEXT';\n }\n }\n\n protected getDefaultValue(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n case 'uuid':\n return \"DEFAULT ''\";\n case 'timestamp':\n return \"DEFAULT '1970-01-01 00:00:00'\";\n case 'integer':\n case 'float':\n case 'bigint':\n return 'DEFAULT 0';\n case 'jsonb':\n return \"DEFAULT '{}'\";\n default:\n return \"DEFAULT ''\";\n }\n }\n\n abstract createTable({ tableName }: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void>;\n\n abstract clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void>;\n\n abstract dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void>;\n\n abstract alterTable(args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void>;\n\n abstract insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void>;\n\n abstract batchInsert({\n tableName,\n records,\n }: {\n tableName: TABLE_NAMES;\n records: Record<string, any>[];\n }): Promise<void>;\n\n batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n if (this.stores?.traces) {\n return this.stores.traces.batchTraceInsert({ records });\n }\n return this.batchInsert({ tableName: TABLE_TRACES, records });\n }\n\n abstract load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null>;\n\n abstract getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null>;\n\n abstract getThreadsByResourceId({\n resourceId,\n orderBy,\n sortDirection,\n }: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]>;\n\n abstract saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType>;\n\n abstract updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType>;\n\n abstract deleteThread({ threadId }: { threadId: string }): Promise<void>;\n\n async getResourceById(_: { resourceId: string }): Promise<StorageResourceType | null> {\n throw new Error(\n `Resource working memory is not supported by this storage adapter (${this.constructor.name}). ` +\n `Supported storage adapters: LibSQL (@mastra/libsql), PostgreSQL (@mastra/pg), Upstash (@mastra/upstash). ` +\n `To use per-resource working memory, switch to one of these supported storage adapters.`,\n );\n }\n\n async saveResource(_: { resource: StorageResourceType }): Promise<StorageResourceType> {\n throw new Error(\n `Resource working memory is not supported by this storage adapter (${this.constructor.name}). ` +\n `Supported storage adapters: LibSQL (@mastra/libsql), PostgreSQL (@mastra/pg), Upstash (@mastra/upstash). ` +\n `To use per-resource working memory, switch to one of these supported storage adapters.`,\n );\n }\n\n async updateResource(_: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n throw new Error(\n `Resource working memory is not supported by this storage adapter (${this.constructor.name}). ` +\n `Supported storage adapters: LibSQL (@mastra/libsql), PostgreSQL (@mastra/pg), Upstash (@mastra/upstash). ` +\n `To use per-resource working memory, switch to one of these supported storage adapters.`,\n );\n }\n\n abstract getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n abstract getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n abstract getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]>;\n abstract getMessagesById({ messageIds }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n abstract getMessagesById({ messageIds }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n abstract getMessagesById({\n messageIds,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]>;\n\n abstract saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n abstract saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n abstract saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]>;\n\n abstract updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]>;\n\n async deleteMessages(_messageIds: string[]): Promise<void> {\n throw new Error(\n `Message deletion is not supported by this storage adapter (${this.constructor.name}). ` +\n `The deleteMessages method needs to be implemented in the storage adapter.`,\n );\n }\n\n abstract getTraces(args: StorageGetTracesArg): Promise<Trace[]>;\n\n abstract getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }>;\n\n async init(): Promise<void> {\n // to prevent race conditions, await any current init\n if (this.shouldCacheInit && (await this.hasInitialized)) {\n return;\n }\n\n const tableCreationTasks = [\n this.createTable({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT],\n }),\n\n this.createTable({\n tableName: TABLE_EVALS,\n schema: TABLE_SCHEMAS[TABLE_EVALS],\n }),\n\n this.createTable({\n tableName: TABLE_THREADS,\n schema: TABLE_SCHEMAS[TABLE_THREADS],\n }),\n\n this.createTable({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n }),\n\n this.createTable({\n tableName: TABLE_TRACES,\n schema: TABLE_SCHEMAS[TABLE_TRACES],\n }),\n\n this.createTable({\n tableName: TABLE_SCORERS,\n schema: TABLE_SCHEMAS[TABLE_SCORERS],\n }),\n ];\n\n // Only create resources table for storage adapters that support it\n if (this.supports.resourceWorkingMemory) {\n tableCreationTasks.push(\n this.createTable({\n tableName: TABLE_RESOURCES,\n schema: TABLE_SCHEMAS[TABLE_RESOURCES],\n }),\n );\n }\n\n if (this.supports.aiTracing) {\n tableCreationTasks.push(\n this.createTable({\n tableName: TABLE_AI_SPANS,\n schema: TABLE_SCHEMAS[TABLE_AI_SPANS],\n }),\n );\n }\n\n this.hasInitialized = Promise.all(tableCreationTasks).then(() => true);\n\n await this.hasInitialized;\n\n await this?.alterTable?.({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n ifNotExists: ['resourceId'],\n });\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n await this.init();\n\n const data = {\n workflow_name: workflowName,\n run_id: runId,\n snapshot,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n this.logger.debug('Persisting workflow snapshot', { workflowName, runId, data });\n await this.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: data,\n });\n }\n\n abstract updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>>;\n\n abstract updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined>;\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n if (!this.hasInitialized) {\n await this.init();\n }\n this.logger.debug('Loading workflow snapshot', { workflowName, runId });\n const d = await this.load<{ snapshot: WorkflowRunState }>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n return d ? d.snapshot : null;\n }\n\n /**\n * SCORERS\n */\n\n abstract getScoreById({ id }: { id: string }): Promise<ScoreRowData | null>;\n\n abstract saveScore(score: Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }>;\n\n abstract getScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }>;\n\n abstract getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }>;\n\n abstract getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }>;\n\n abstract getEvals(\n options: {\n agentName?: string;\n type?: 'test' | 'live';\n } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }>;\n\n abstract getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]>;\n\n abstract getWorkflowRuns(args?: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n resourceId?: string;\n }): Promise<WorkflowRuns>;\n\n abstract getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<WorkflowRun | null>;\n\n abstract getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n page: number;\n perPage: number;\n } & ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }>;\n\n abstract getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }>;\n\n /**\n * OBSERVABILITY\n */\n\n /**\n * Provides hints for AI tracing strategy selection by the DefaultExporter.\n * Storage adapters can override this to specify their preferred and supported strategies.\n */\n public get aiTracingStrategy(): {\n preferred: TracingStrategy;\n supported: TracingStrategy[];\n } {\n if (this.stores?.observability) {\n return this.stores.observability.aiTracingStrategy;\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_TRACING_STRATEGY_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Creates a single AI span record in the storage provider.\n */\n async createAISpan(span: AISpanRecord): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.createAISpan(span);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_CREATE_AI_SPAN_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Updates a single AI span with partial data. Primarily used for realtime trace creation.\n */\n async updateAISpan(params: {\n spanId: string;\n traceId: string;\n updates: Partial<Omit<AISpanRecord, 'spanId' | 'traceId'>>;\n }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.updateAISpan(params);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_UPDATE_AI_SPAN_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Retrieves a single AI trace with all its associated spans.\n */\n async getAITrace(traceId: string): Promise<AITraceRecord | null> {\n if (this.stores?.observability) {\n return this.stores.observability.getAITrace(traceId);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_GET_AI_TRACE_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Retrieves a paginated list of AI traces with optional filtering.\n */\n async getAITracesPaginated(\n args: AITracesPaginatedArg,\n ): Promise<{ pagination: PaginationInfo; spans: AISpanRecord[] }> {\n if (this.stores?.observability) {\n return this.stores.observability.getAITracesPaginated(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_GET_AI_TRACES_PAGINATED_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Creates multiple AI spans in a single batch.\n */\n async batchCreateAISpans(args: { records: AISpanRecord[] }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.batchCreateAISpans(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_BATCH_CREATE_AI_SPANS_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Updates multiple AI spans in a single batch.\n */\n async batchUpdateAISpans(args: {\n records: {\n traceId: string;\n spanId: string;\n updates: Partial<Omit<AISpanRecord, 'spanId' | 'traceId'>>;\n }[];\n }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.batchUpdateAISpans(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_BATCH_UPDATE_AI_SPANS_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Deletes multiple AI traces and all their associated spans in a single batch operation.\n */\n async batchDeleteAITraces(args: { traceIds: string[] }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.batchDeleteAITraces(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_BATCH_DELETE_AI_TRACES_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/storage/base.ts"],"names":[],"mappings":"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","file":"chunk-JTU7FZ5O.js","sourcesContent":["import type { MastraMessageContentV2, MastraMessageV2 } from '../agent';\nimport type { TracingStrategy } from '../ai-tracing';\nimport { MastraBase } from '../base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport type { MastraMessageV1, StorageThreadType } from '../memory/types';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '../scores';\nimport type { Trace } from '../telemetry';\nimport type { StepResult, WorkflowRunState } from '../workflows/types';\n\nimport {\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_TRACES,\n TABLE_RESOURCES,\n TABLE_SCORERS,\n TABLE_SCHEMAS,\n TABLE_AI_SPANS,\n} from './constants';\nimport type { TABLE_NAMES } from './constants';\nimport type {\n ScoresStorage,\n StoreOperations,\n WorkflowsStorage,\n TracesStorage,\n MemoryStorage,\n LegacyEvalsStorage,\n ObservabilityStorage,\n} from './domains';\nimport type {\n EvalRow,\n PaginationInfo,\n StorageColumn,\n StorageGetMessagesArg,\n StorageResourceType,\n StoragePagination,\n ThreadSortOptions,\n WorkflowRun,\n WorkflowRuns,\n StorageGetTracesArg,\n PaginationArgs,\n StorageGetTracesPaginatedArg,\n AISpanRecord,\n AITraceRecord,\n AITracesPaginatedArg,\n} from './types';\n\nexport type StorageDomains = {\n legacyEvals: LegacyEvalsStorage;\n operations: StoreOperations;\n workflows: WorkflowsStorage;\n scores: ScoresStorage;\n traces: TracesStorage;\n memory: MemoryStorage;\n observability?: ObservabilityStorage;\n};\n\nexport function ensureDate(date: Date | string | undefined): Date | undefined {\n if (!date) return undefined;\n return date instanceof Date ? date : new Date(date);\n}\n\nexport function serializeDate(date: Date | string | undefined): string | undefined {\n if (!date) return undefined;\n const dateObj = ensureDate(date);\n return dateObj?.toISOString();\n}\n\nexport function resolveMessageLimit({\n last,\n defaultLimit,\n}: {\n last: number | false | undefined;\n defaultLimit: number;\n}): number {\n // TODO: Figure out consistent default limit for all stores as some stores use 40 and some use no limit (Number.MAX_SAFE_INTEGER)\n if (typeof last === 'number') return Math.max(0, last);\n if (last === false) return 0;\n return defaultLimit;\n}\nexport abstract class MastraStorage extends MastraBase {\n /** @deprecated import from { TABLE_WORKFLOW_SNAPSHOT } '@mastra/core/storage' instead */\n static readonly TABLE_WORKFLOW_SNAPSHOT = TABLE_WORKFLOW_SNAPSHOT;\n /** @deprecated import from { TABLE_EVALS } '@mastra/core/storage' instead */\n static readonly TABLE_EVALS = TABLE_EVALS;\n /** @deprecated import from { TABLE_MESSAGES } '@mastra/core/storage' instead */\n static readonly TABLE_MESSAGES = TABLE_MESSAGES;\n /** @deprecated import from { TABLE_THREADS } '@mastra/core/storage' instead */\n static readonly TABLE_THREADS = TABLE_THREADS;\n /** @deprecated import { TABLE_TRACES } from '@mastra/core/storage' instead */\n static readonly TABLE_TRACES = TABLE_TRACES;\n\n protected hasInitialized: null | Promise<boolean> = null;\n protected shouldCacheInit = true;\n\n stores?: StorageDomains;\n\n constructor({ name }: { name: string }) {\n super({\n component: 'STORAGE',\n name,\n });\n }\n\n public get supports(): {\n selectByIncludeResourceScope: boolean;\n resourceWorkingMemory: boolean;\n hasColumn: boolean;\n createTable: boolean;\n deleteMessages: boolean;\n aiTracing?: boolean;\n } {\n return {\n selectByIncludeResourceScope: false,\n resourceWorkingMemory: false,\n hasColumn: false,\n createTable: false,\n deleteMessages: false,\n aiTracing: false,\n };\n }\n\n protected ensureDate(date: Date | string | undefined): Date | undefined {\n return ensureDate(date);\n }\n\n protected serializeDate(date: Date | string | undefined): string | undefined {\n return serializeDate(date);\n }\n\n /**\n * Resolves limit for how many messages to fetch\n *\n * @param last The number of messages to fetch\n * @param defaultLimit The default limit to use if last is not provided\n * @returns The resolved limit\n */\n protected resolveMessageLimit({\n last,\n defaultLimit,\n }: {\n last: number | false | undefined;\n defaultLimit: number;\n }): number {\n return resolveMessageLimit({ last, defaultLimit });\n }\n\n protected getSqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n return 'TEXT';\n case 'timestamp':\n return 'TIMESTAMP';\n case 'float':\n return 'FLOAT';\n case 'integer':\n return 'INTEGER';\n case 'bigint':\n return 'BIGINT';\n case 'jsonb':\n return 'JSONB';\n case 'float':\n return 'FLOAT';\n default:\n return 'TEXT';\n }\n }\n\n protected getDefaultValue(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n case 'uuid':\n return \"DEFAULT ''\";\n case 'timestamp':\n return \"DEFAULT '1970-01-01 00:00:00'\";\n case 'integer':\n case 'float':\n case 'bigint':\n return 'DEFAULT 0';\n case 'jsonb':\n return \"DEFAULT '{}'\";\n default:\n return \"DEFAULT ''\";\n }\n }\n\n abstract createTable({ tableName }: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void>;\n\n abstract clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void>;\n\n abstract dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void>;\n\n abstract alterTable(args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void>;\n\n abstract insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void>;\n\n abstract batchInsert({\n tableName,\n records,\n }: {\n tableName: TABLE_NAMES;\n records: Record<string, any>[];\n }): Promise<void>;\n\n batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n if (this.stores?.traces) {\n return this.stores.traces.batchTraceInsert({ records });\n }\n return this.batchInsert({ tableName: TABLE_TRACES, records });\n }\n\n abstract load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null>;\n\n abstract getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null>;\n\n abstract getThreadsByResourceId({\n resourceId,\n orderBy,\n sortDirection,\n }: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]>;\n\n abstract saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType>;\n\n abstract updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType>;\n\n abstract deleteThread({ threadId }: { threadId: string }): Promise<void>;\n\n async getResourceById(_: { resourceId: string }): Promise<StorageResourceType | null> {\n throw new Error(\n `Resource working memory is not supported by this storage adapter (${this.constructor.name}). ` +\n `Supported storage adapters: LibSQL (@mastra/libsql), PostgreSQL (@mastra/pg), Upstash (@mastra/upstash). ` +\n `To use per-resource working memory, switch to one of these supported storage adapters.`,\n );\n }\n\n async saveResource(_: { resource: StorageResourceType }): Promise<StorageResourceType> {\n throw new Error(\n `Resource working memory is not supported by this storage adapter (${this.constructor.name}). ` +\n `Supported storage adapters: LibSQL (@mastra/libsql), PostgreSQL (@mastra/pg), Upstash (@mastra/upstash). ` +\n `To use per-resource working memory, switch to one of these supported storage adapters.`,\n );\n }\n\n async updateResource(_: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n throw new Error(\n `Resource working memory is not supported by this storage adapter (${this.constructor.name}). ` +\n `Supported storage adapters: LibSQL (@mastra/libsql), PostgreSQL (@mastra/pg), Upstash (@mastra/upstash). ` +\n `To use per-resource working memory, switch to one of these supported storage adapters.`,\n );\n }\n\n abstract getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n abstract getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n abstract getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]>;\n abstract getMessagesById({ messageIds }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n abstract getMessagesById({ messageIds }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n abstract getMessagesById({\n messageIds,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]>;\n\n abstract saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n abstract saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n abstract saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]>;\n\n abstract updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]>;\n\n async deleteMessages(_messageIds: string[]): Promise<void> {\n throw new Error(\n `Message deletion is not supported by this storage adapter (${this.constructor.name}). ` +\n `The deleteMessages method needs to be implemented in the storage adapter.`,\n );\n }\n\n abstract getTraces(args: StorageGetTracesArg): Promise<Trace[]>;\n\n abstract getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }>;\n\n async init(): Promise<void> {\n // to prevent race conditions, await any current init\n if (this.shouldCacheInit && (await this.hasInitialized)) {\n return;\n }\n\n const tableCreationTasks = [\n this.createTable({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT],\n }),\n\n this.createTable({\n tableName: TABLE_EVALS,\n schema: TABLE_SCHEMAS[TABLE_EVALS],\n }),\n\n this.createTable({\n tableName: TABLE_THREADS,\n schema: TABLE_SCHEMAS[TABLE_THREADS],\n }),\n\n this.createTable({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n }),\n\n this.createTable({\n tableName: TABLE_TRACES,\n schema: TABLE_SCHEMAS[TABLE_TRACES],\n }),\n\n this.createTable({\n tableName: TABLE_SCORERS,\n schema: TABLE_SCHEMAS[TABLE_SCORERS],\n }),\n ];\n\n // Only create resources table for storage adapters that support it\n if (this.supports.resourceWorkingMemory) {\n tableCreationTasks.push(\n this.createTable({\n tableName: TABLE_RESOURCES,\n schema: TABLE_SCHEMAS[TABLE_RESOURCES],\n }),\n );\n }\n\n if (this.supports.aiTracing) {\n tableCreationTasks.push(\n this.createTable({\n tableName: TABLE_AI_SPANS,\n schema: TABLE_SCHEMAS[TABLE_AI_SPANS],\n }),\n );\n }\n\n this.hasInitialized = Promise.all(tableCreationTasks).then(() => true);\n\n await this.hasInitialized;\n\n await this?.alterTable?.({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n ifNotExists: ['resourceId'],\n });\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n await this.init();\n\n const data = {\n workflow_name: workflowName,\n run_id: runId,\n snapshot,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n this.logger.debug('Persisting workflow snapshot', { workflowName, runId, data });\n await this.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: data,\n });\n }\n\n abstract updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>>;\n\n abstract updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined>;\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n if (!this.hasInitialized) {\n await this.init();\n }\n this.logger.debug('Loading workflow snapshot', { workflowName, runId });\n const d = await this.load<{ snapshot: WorkflowRunState }>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n return d ? d.snapshot : null;\n }\n\n /**\n * SCORERS\n */\n\n abstract getScoreById({ id }: { id: string }): Promise<ScoreRowData | null>;\n\n abstract saveScore(score: ValidatedSaveScorePayload): Promise<{ score: ScoreRowData }>;\n\n abstract getScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }>;\n\n abstract getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }>;\n\n abstract getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }>;\n\n abstract getEvals(\n options: {\n agentName?: string;\n type?: 'test' | 'live';\n } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }>;\n\n abstract getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]>;\n\n abstract getWorkflowRuns(args?: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n resourceId?: string;\n }): Promise<WorkflowRuns>;\n\n abstract getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<WorkflowRun | null>;\n\n abstract getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n page: number;\n perPage: number;\n } & ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }>;\n\n abstract getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }>;\n\n /**\n * OBSERVABILITY\n */\n\n /**\n * Provides hints for AI tracing strategy selection by the DefaultExporter.\n * Storage adapters can override this to specify their preferred and supported strategies.\n */\n public get aiTracingStrategy(): {\n preferred: TracingStrategy;\n supported: TracingStrategy[];\n } {\n if (this.stores?.observability) {\n return this.stores.observability.aiTracingStrategy;\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_TRACING_STRATEGY_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Creates a single AI span record in the storage provider.\n */\n async createAISpan(span: AISpanRecord): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.createAISpan(span);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_CREATE_AI_SPAN_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Updates a single AI span with partial data. Primarily used for realtime trace creation.\n */\n async updateAISpan(params: {\n spanId: string;\n traceId: string;\n updates: Partial<Omit<AISpanRecord, 'spanId' | 'traceId'>>;\n }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.updateAISpan(params);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_UPDATE_AI_SPAN_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Retrieves a single AI trace with all its associated spans.\n */\n async getAITrace(traceId: string): Promise<AITraceRecord | null> {\n if (this.stores?.observability) {\n return this.stores.observability.getAITrace(traceId);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_GET_AI_TRACE_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Retrieves a paginated list of AI traces with optional filtering.\n */\n async getAITracesPaginated(\n args: AITracesPaginatedArg,\n ): Promise<{ pagination: PaginationInfo; spans: AISpanRecord[] }> {\n if (this.stores?.observability) {\n return this.stores.observability.getAITracesPaginated(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_GET_AI_TRACES_PAGINATED_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Creates multiple AI spans in a single batch.\n */\n async batchCreateAISpans(args: { records: AISpanRecord[] }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.batchCreateAISpans(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_BATCH_CREATE_AI_SPANS_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Updates multiple AI spans in a single batch.\n */\n async batchUpdateAISpans(args: {\n records: {\n traceId: string;\n spanId: string;\n updates: Partial<Omit<AISpanRecord, 'spanId' | 'traceId'>>;\n }[];\n }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.batchUpdateAISpans(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_BATCH_UPDATE_AI_SPANS_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n\n /**\n * Deletes multiple AI traces and all their associated spans in a single batch operation.\n */\n async batchDeleteAITraces(args: { traceIds: string[] }): Promise<void> {\n if (this.stores?.observability) {\n return this.stores.observability.batchDeleteAITraces(args);\n }\n throw new MastraError({\n id: 'MASTRA_STORAGE_BATCH_DELETE_AI_TRACES_NOT_SUPPORTED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `AI tracing is not supported by this storage adapter (${this.constructor.name})`,\n });\n }\n}\n"]}