@mastra/core 0.21.2-alpha.0 → 0.22.0
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.
- package/CHANGELOG.md +194 -0
- package/dist/agent/agent.d.ts +1 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +13 -13
- package/dist/agent/index.js +2 -2
- package/dist/agent/input-processor/index.cjs +6 -6
- package/dist/agent/input-processor/index.js +1 -1
- package/dist/agent/message-list/index.d.ts +14 -1
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/test-utils.d.ts +1 -0
- package/dist/agent/test-utils.d.ts.map +1 -1
- package/dist/agent/types.d.ts +6 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/utils.d.ts +1 -1
- package/dist/agent/utils.d.ts.map +1 -1
- package/dist/ai-tracing/chunk-tracing.d.ts +76 -0
- package/dist/ai-tracing/chunk-tracing.d.ts.map +1 -0
- package/dist/ai-tracing/exporters/base.d.ts +111 -0
- package/dist/ai-tracing/exporters/base.d.ts.map +1 -0
- package/dist/ai-tracing/exporters/cloud.d.ts +6 -8
- package/dist/ai-tracing/exporters/cloud.d.ts.map +1 -1
- package/dist/ai-tracing/exporters/console.d.ts +6 -6
- package/dist/ai-tracing/exporters/console.d.ts.map +1 -1
- package/dist/ai-tracing/exporters/index.d.ts +1 -0
- package/dist/ai-tracing/exporters/index.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +48 -32
- package/dist/ai-tracing/index.d.ts +1 -0
- package/dist/ai-tracing/index.d.ts.map +1 -1
- package/dist/ai-tracing/index.js +1 -1
- package/dist/ai-tracing/spans/base.d.ts +4 -1
- package/dist/ai-tracing/spans/base.d.ts.map +1 -1
- package/dist/ai-tracing/spans/default.d.ts.map +1 -1
- package/dist/ai-tracing/tracers/base.d.ts +15 -1
- package/dist/ai-tracing/tracers/base.d.ts.map +1 -1
- package/dist/ai-tracing/types.d.ts +85 -11
- package/dist/ai-tracing/types.d.ts.map +1 -1
- package/dist/ai-tracing/utils.d.ts +14 -0
- package/dist/ai-tracing/utils.d.ts.map +1 -1
- package/dist/{chunk-D3IOLHNB.cjs → chunk-34L2Z6PH.cjs} +12 -12
- package/dist/{chunk-D3IOLHNB.cjs.map → chunk-34L2Z6PH.cjs.map} +1 -1
- package/dist/{chunk-BLVB2IJK.js → chunk-3CVE7NQC.js} +728 -267
- package/dist/chunk-3CVE7NQC.js.map +1 -0
- package/dist/{chunk-URQI7RJ3.cjs → chunk-5GIAZ3CH.cjs} +734 -269
- package/dist/chunk-5GIAZ3CH.cjs.map +1 -0
- package/dist/{chunk-XYNSPEJO.js → chunk-5NYWRAJN.js} +3 -3
- package/dist/{chunk-XYNSPEJO.js.map → chunk-5NYWRAJN.js.map} +1 -1
- package/dist/{chunk-URVM3Y4T.cjs → chunk-634YFL42.cjs} +44 -7
- package/dist/chunk-634YFL42.cjs.map +1 -0
- package/dist/{chunk-NIESGYOH.js → chunk-A3TQYIIR.js} +1392 -1416
- package/dist/chunk-A3TQYIIR.js.map +1 -0
- package/dist/{chunk-EGNHIPGJ.cjs → chunk-A4B6IAKN.cjs} +4 -4
- package/dist/{chunk-EGNHIPGJ.cjs.map → chunk-A4B6IAKN.cjs.map} +1 -1
- package/dist/{chunk-LMP5KMU3.js → chunk-AGD5B3FB.js} +43 -6
- package/dist/chunk-AGD5B3FB.js.map +1 -0
- package/dist/{chunk-V5WDWSQ5.cjs → chunk-CAZTWPDK.cjs} +11 -11
- package/dist/{chunk-V5WDWSQ5.cjs.map → chunk-CAZTWPDK.cjs.map} +1 -1
- package/dist/{chunk-N3ZSX5OS.js → chunk-F7OMDF5K.js} +72 -36
- package/dist/chunk-F7OMDF5K.js.map +1 -0
- package/dist/{chunk-ZMPSVDDO.cjs → chunk-FMNZ3BPT.cjs} +1393 -1417
- package/dist/chunk-FMNZ3BPT.cjs.map +1 -0
- package/dist/{chunk-4ZFVJA3A.js → chunk-HZIF7HQC.js} +3 -3
- package/dist/{chunk-4ZFVJA3A.js.map → chunk-HZIF7HQC.js.map} +1 -1
- package/dist/{chunk-KLWDUSBX.js → chunk-ITFEGBP2.js} +4 -4
- package/dist/{chunk-KLWDUSBX.js.map → chunk-ITFEGBP2.js.map} +1 -1
- package/dist/{chunk-GKTRUHKB.js → chunk-KQBF5ZEN.js} +5 -5
- package/dist/{chunk-GKTRUHKB.js.map → chunk-KQBF5ZEN.js.map} +1 -1
- package/dist/{chunk-R35PINKN.js → chunk-MHICZASQ.js} +5 -5
- package/dist/{chunk-R35PINKN.js.map → chunk-MHICZASQ.js.map} +1 -1
- package/dist/{chunk-H4KO46HZ.js → chunk-MKCC5K77.js} +3 -3
- package/dist/{chunk-H4KO46HZ.js.map → chunk-MKCC5K77.js.map} +1 -1
- package/dist/{chunk-UN653TND.cjs → chunk-O4KVF3MI.cjs} +4 -4
- package/dist/{chunk-UN653TND.cjs.map → chunk-O4KVF3MI.cjs.map} +1 -1
- package/dist/{chunk-WI2YMBNG.cjs → chunk-QBPTDMR7.cjs} +102 -64
- package/dist/chunk-QBPTDMR7.cjs.map +1 -0
- package/dist/{chunk-7P5FMQQK.cjs → chunk-RWWOJXMF.cjs} +6 -6
- package/dist/{chunk-7P5FMQQK.cjs.map → chunk-RWWOJXMF.cjs.map} +1 -1
- package/dist/{chunk-XBJP7THY.js → chunk-RXBG6UV2.js} +4 -4
- package/dist/chunk-RXBG6UV2.js.map +1 -0
- package/dist/{chunk-NL3P7IFI.js → chunk-SF75RENF.js} +3 -3
- package/dist/{chunk-NL3P7IFI.js.map → chunk-SF75RENF.js.map} +1 -1
- package/dist/{chunk-SE4PA467.cjs → chunk-VF676YCO.cjs} +2 -2
- package/dist/chunk-VF676YCO.cjs.map +1 -0
- package/dist/{chunk-6OLRLZJ3.js → chunk-WM4RO23J.js} +2 -2
- package/dist/chunk-WM4RO23J.js.map +1 -0
- package/dist/{chunk-MVVMHOAC.cjs → chunk-YOVX3R5U.cjs} +14 -14
- package/dist/chunk-YOVX3R5U.cjs.map +1 -0
- package/dist/{chunk-L5A4MRCK.cjs → chunk-ZABG3SZ2.cjs} +4 -4
- package/dist/{chunk-L5A4MRCK.cjs.map → chunk-ZABG3SZ2.cjs.map} +1 -1
- package/dist/{chunk-YKVVW65D.cjs → chunk-ZDW322JC.cjs} +8 -8
- package/dist/{chunk-YKVVW65D.cjs.map → chunk-ZDW322JC.cjs.map} +1 -1
- package/dist/index.cjs +53 -53
- package/dist/index.js +11 -11
- package/dist/integration/index.cjs +3 -3
- package/dist/integration/index.js +1 -1
- package/dist/llm/index.cjs +7 -7
- package/dist/llm/index.js +1 -1
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/provider-types.generated.d.ts +585 -597
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/loop.d.ts.map +1 -1
- package/dist/loop/test-utils/mock-server-response.d.ts +7 -2
- package/dist/loop/test-utils/mock-server-response.d.ts.map +1 -1
- package/dist/loop/test-utils/options.d.ts.map +1 -1
- package/dist/loop/types.d.ts +2 -1
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +1 -1
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/memory/memory.d.ts +3 -2
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/processors/index.cjs +11 -11
- package/dist/processors/index.js +1 -1
- package/dist/provider-registry.json +1390 -1414
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/index.cjs +9 -9
- package/dist/scores/index.js +2 -2
- package/dist/scores/scoreTraces/index.cjs +8 -8
- package/dist/scores/scoreTraces/index.js +3 -3
- package/dist/storage/index.cjs +3 -3
- package/dist/storage/index.js +1 -1
- package/dist/stream/RunOutput.d.ts +72 -0
- package/dist/stream/RunOutput.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/output.d.ts +2 -2
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/base/base.d.ts +7 -0
- package/dist/stream/base/base.d.ts.map +1 -0
- package/dist/stream/base/consume-stream.d.ts +5 -0
- package/dist/stream/base/consume-stream.d.ts.map +1 -0
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +14 -10
- package/dist/stream/index.d.ts +2 -1
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +2 -2
- package/dist/stream/types.d.ts +1 -1
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +2 -2
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tools/index.cjs +4 -4
- package/dist/tools/index.js +1 -1
- package/dist/tools/is-vercel-tool.cjs +2 -2
- package/dist/tools/is-vercel-tool.js +1 -1
- package/dist/tools/tool-builder/builder.d.ts +75 -2
- package/dist/tools/tool-builder/builder.d.ts.map +1 -1
- package/dist/tools/tool.d.ts +2 -2
- package/dist/tools/tool.d.ts.map +1 -1
- package/dist/tools/types.d.ts +17 -12
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils.cjs +17 -17
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/evented/workflow.d.ts +5 -3
- package/dist/workflows/evented/workflow.d.ts.map +1 -1
- package/dist/workflows/index.cjs +12 -12
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/legacy/index.cjs +22 -22
- package/dist/workflows/legacy/index.js +1 -1
- package/dist/workflows/workflow.d.ts +30 -23
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +12 -10
- package/src/llm/model/provider-types.generated.d.ts +585 -597
- package/dist/chunk-6OLRLZJ3.js.map +0 -1
- package/dist/chunk-BLVB2IJK.js.map +0 -1
- package/dist/chunk-LMP5KMU3.js.map +0 -1
- package/dist/chunk-MVVMHOAC.cjs.map +0 -1
- package/dist/chunk-N3ZSX5OS.js.map +0 -1
- package/dist/chunk-NIESGYOH.js.map +0 -1
- package/dist/chunk-SE4PA467.cjs.map +0 -1
- package/dist/chunk-URQI7RJ3.cjs.map +0 -1
- package/dist/chunk-URVM3Y4T.cjs.map +0 -1
- package/dist/chunk-WI2YMBNG.cjs.map +0 -1
- package/dist/chunk-XBJP7THY.js.map +0 -1
- package/dist/chunk-ZMPSVDDO.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":["EventEmitter","step","randomUUID"],"mappings":"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","file":"chunk-RXBG6UV2.js","sourcesContent":["import EventEmitter from 'events';\nimport type { Emitter, LoopConditionFunction, 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';\nimport { getStepResult } from '../step';\nimport { validateStepInput } from '../utils';\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 state: Record<string, any>;\n emitter: EventEmitter;\n runtimeContext: RuntimeContext;\n runCount?: number;\n foreachIdx?: number;\n validateInputs?: boolean;\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 const { inputData, validationError } = await validateStepInput({\n prevOutput: typeof params.foreachIdx === 'number' ? params.input?.[params.foreachIdx] : params.input,\n step,\n validateInputs: params.validateInputs ?? false,\n });\n\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: (typeof params.foreachIdx === 'number' ? params.input : inputData) ?? {},\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 if (validationError) {\n throw validationError;\n }\n\n const stepResult = await step.execute({\n workflowId: params.workflowId,\n runId,\n mastra: this.mastra!,\n runtimeContext,\n inputData,\n state: params.state,\n setState: (state: any) => {\n // TODO\n params.state = state;\n },\n runCount,\n resumeData: params.resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: getStepResult.bind(this, stepResults),\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 state: Record<string, 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 state: params.state,\n runCount,\n resumeData: params.resumeData,\n abortController,\n stepResults,\n emitter: ee,\n iterationCount: 0,\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 state,\n runtimeContext,\n emitter,\n abortController,\n runCount = 0,\n iterationCount,\n }: {\n workflowId: string;\n condition: LoopConditionFunction<any, any, any, any, any>;\n runId: string;\n inputData?: any;\n resumeData?: any;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n state: Record<string, any>;\n emitter: EventEmitter;\n runtimeContext: RuntimeContext;\n abortController: AbortController;\n runCount?: number;\n iterationCount: number;\n }): Promise<boolean> {\n return condition({\n workflowId,\n runId,\n mastra: this.mastra!,\n runtimeContext,\n inputData,\n state,\n setState: (_state: any) => {\n // TODO\n },\n runCount,\n resumeData: resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: getStepResult.bind(this, stepResults),\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 iterationCount,\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 // TODO: implement state\n state: {},\n setState: (_state: any) => {\n // TODO\n },\n runCount,\n resumeData: params.resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: getStepResult.bind(this, stepResults),\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 // TODO: implement state\n state: {},\n setState: (_state: any) => {\n // TODO\n },\n runCount,\n resumeData: params.resumeData,\n getInitData: () => stepResults?.input as any,\n getStepResult: getStepResult.bind(this, stepResults),\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 // TODO: implement state\n state: {},\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 iterationCount: 0, //TODO: implement\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 // TODO: implement state\n state: {},\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 resumeLabels: {},\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 // TODO: implement state\n state: {},\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 validateInputs: workflow.options.validateInputs,\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 let workflow;\n if (this.mastra.__hasInternalWorkflow(workflowData.workflowId)) {\n workflow = this.mastra.__getInternalWorkflow(workflowData.workflowId);\n } else if (workflowData.parentWorkflow) {\n workflow = getNestedWorkflow(this.mastra, workflowData.parentWorkflow);\n } else {\n workflow = this.mastra.getWorkflow(workflowData.workflowId);\n }\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 z from 'zod';\nimport type { Agent } from '../../agent';\nimport { RuntimeContext } from '../../di';\nimport type { Event } from '../../events';\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 WatchEvent,\n StepWithComponent,\n WorkflowStreamEvent,\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 TState extends z.ZodObject<any> = z.ZodObject<any>,\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, any, EventedEngineType>[] = Step<\n string,\n any,\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, TState, TInput, TOutput, TPrevSchema>,\n opts: { id: TWorkflowId },\n): Workflow<EventedEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TPrevSchema> {\n const wf: Workflow<EventedEngineType, TSteps, TWorkflowId, TState, 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, any, EventedEngineType>,\n opts: { id: TStepId },\n): Step<TStepId, any, 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 component: step.component,\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 TState extends z.ZodObject<any>,\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<TState>,\n z.infer<TStepInput>,\n z.infer<TStepOutput>,\n z.infer<TResumeSchema>,\n z.infer<TSuspendSchema>,\n EventedEngineType\n >;\n}): Step<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, EventedEngineType>;\n\nexport function createStep<\n TStepId extends string,\n TState extends z.ZodObject<any>,\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, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, EventedEngineType>;\n\nexport function createStep<\n TSchemaIn extends z.ZodType<any>,\n TSuspendSchema extends z.ZodType<any>,\n TResumeSchema extends z.ZodType<any>,\n TSchemaOut extends z.ZodType<any>,\n TContext extends ToolExecutionContext<TSchemaIn, TSuspendSchema, TResumeSchema>,\n>(\n tool: Tool<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext) => Promise<any>;\n },\n): Step<string, any, TSchemaIn, TSchemaOut, z.ZodType<any>, z.ZodType<any>, EventedEngineType>;\n\nexport function createStep<\n TStepId extends string,\n TState extends z.ZodObject<any>,\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<TState>,\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, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, EventedEngineType> {\n if (isAgent(params)) {\n return {\n id: params.name,\n description: params.getDescription(),\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 // TODO: support stream\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 // TODO: should use regular .stream()\n const { fullStream } = await params.streamLegacy(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 const toolData = {\n name: params.name,\n args: inputData,\n };\n\n await emitter.emit('watch-v2', {\n type: 'tool-call-streaming-start',\n ...(toolData ?? {}),\n });\n for await (const chunk of fullStream) {\n if (chunk.type === 'text-delta') {\n await emitter.emit('watch-v2', {\n type: 'tool-call-delta',\n ...(toolData ?? {}),\n argsTextDelta: chunk.textDelta,\n });\n }\n }\n await emitter.emit('watch-v2', {\n type: 'tool-call-streaming-finish',\n ...(toolData ?? {}),\n });\n\n return {\n text: await streamPromise.promise,\n };\n },\n component: params.component,\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 description: params.description,\n inputSchema: params.inputSchema,\n outputSchema: params.outputSchema,\n suspendSchema: params.suspendSchema,\n resumeSchema: params.resumeSchema,\n execute: async ({ inputData, mastra, runtimeContext, suspend, resumeData }) => {\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 suspend,\n resumeData,\n });\n },\n component: 'TOOL',\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 TState extends z.ZodObject<any> = z.ZodObject<any>,\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, any, EventedEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n any,\n EventedEngineType\n >[],\n>(params: WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>) {\n const eventProcessor = new WorkflowEventProcessor({ mastra: params.mastra! });\n const executionEngine = new EventedExecutionEngine({\n mastra: params.mastra!,\n eventProcessor,\n options: {\n validateInputs: params.options?.validateInputs ?? false,\n shouldPersistSnapshot: params.options?.shouldPersistSnapshot ?? (() => true),\n tracingPolicy: params.options?.tracingPolicy,\n },\n });\n return new EventedWorkflow<EventedEngineType, TSteps, TWorkflowId, TState, 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 TState extends z.ZodObject<any> = z.ZodObject<any>,\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, TState, TInput, TOutput, TPrevSchema> {\n constructor(params: WorkflowConfig<TWorkflowId, TState, 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, TState, TInput, TOutput>> {\n const runIdToUse = options?.runId || randomUUID();\n\n // Return a new Run instance with object parameters\n const run: Run<TEngineType, TSteps, TState, 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 workflowSteps: this.steps,\n });\n\n this.runs.set(runIdToUse, run);\n\n const shouldPersistSnapshot = this.options?.shouldPersistSnapshot?.({\n workflowStatus: run.workflowRunStatus,\n stepResults: {},\n });\n\n const workflowSnapshotInStorage = await this.getWorkflowRunExecutionResult(runIdToUse, false);\n\n if (!workflowSnapshotInStorage && shouldPersistSnapshot) {\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 resumeLabels: {},\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 TState extends z.ZodObject<any> = z.ZodObject<any>,\n TInput extends z.ZodType<any> = z.ZodType<any>,\n TOutput extends z.ZodType<any> = z.ZodType<any>,\n> extends Run<TEngineType, TSteps, TState, 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 workflowSteps: Record<string, StepWithComponent>;\n validateInputs?: boolean;\n }) {\n super(params);\n this.serializedStepGraph = params.serializedStepGraph;\n }\n\n async start({\n inputData,\n initialState,\n runtimeContext,\n }: {\n inputData?: z.infer<TInput>;\n runtimeContext?: RuntimeContext;\n initialState?: z.infer<TState>;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n // Add validation checks\n if (this.serializedStepGraph.length === 0) {\n throw new Error(\n 'Execution flow of workflow is not defined. Add steps to the workflow via .then(), .branch(), etc.',\n );\n }\n if (!this.executionGraph.steps) {\n throw new Error('Uncommitted step flow changes detected. Call .commit() to register the steps.');\n }\n\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 resumeLabels: {},\n waitingPaths: {},\n timestamp: Date.now(),\n status: 'running',\n },\n });\n\n const inputDataToUse = await this._validateInput(inputData);\n const initialStateToUse = await this._validateInitialState(initialState ?? {});\n\n const result = await this.executionEngine.execute<\n z.infer<TState>,\n z.infer<TInput>,\n WorkflowResult<TState, TInput, TOutput, TSteps>\n >({\n workflowId: this.workflowId,\n runId: this.runId,\n graph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n input: inputDataToUse,\n initialState: initialStateToUse,\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 // TODO: stream\n\n async resume<TResumeSchema extends z.ZodType<any>>(params: {\n resumeData?: z.infer<TResumeSchema>;\n step:\n | Step<string, any, any, TResumeSchema, any, any, TEngineType>\n | [\n ...Step<string, any, any, any, any, any, TEngineType>[],\n Step<string, any, any, TResumeSchema, any, any, TEngineType>,\n ]\n | string\n | string[];\n runtimeContext?: RuntimeContext;\n }): Promise<WorkflowResult<TState, TInput, 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 // Start with the snapshot's runtime context (old values)\n const runtimeContextObj = snapshot?.runtimeContext ?? {};\n const runtimeContext = new RuntimeContext();\n\n // First, set values from the snapshot\n for (const [key, value] of Object.entries(runtimeContextObj)) {\n runtimeContext.set(key, value);\n }\n\n // Then, override with any values from the passed runtime context (new values take precedence)\n if (params.runtimeContext) {\n for (const [key, value] of params.runtimeContext.entries()) {\n runtimeContext.set(key, value);\n }\n }\n\n const suspendedStep = this.workflowSteps[steps?.[0] ?? ''];\n\n const resumeDataToUse = await this._validateResumeData(params.resumeData, suspendedStep);\n\n const executionResultPromise = this.executionEngine\n .execute<z.infer<TState>, z.infer<TInput>, WorkflowResult<TState, TInput, TOutput, TSteps>>({\n workflowId: this.workflowId,\n runId: this.runId,\n graph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n input: resumeDataToUse,\n resume: {\n steps,\n stepResults: snapshot?.context as any,\n resumePayload: resumeDataToUse,\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'): () => void;\n watch(cb: (event: WorkflowStreamEvent) => void, type: 'watch-v2'): () => void;\n watch(\n cb: ((event: WatchEvent) => void) | ((event: WorkflowStreamEvent) => void),\n type: 'watch' | 'watch-v2' = 'watch',\n ): () => void {\n const watchCb = async (event: Event, 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(cb: (event: WatchEvent) => void, type: 'watch'): Promise<() => void>;\n async watchAsync(cb: (event: WorkflowStreamEvent) => void, type: 'watch-v2'): Promise<() => void>;\n async watchAsync(\n cb: ((event: WatchEvent) => void) | ((event: WorkflowStreamEvent) => void),\n type: 'watch' | 'watch-v2' = 'watch',\n ): Promise<() => void> {\n const watchCb = async (event: Event, 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 {\n Emitter,\n ExecutionGraph,\n SerializedStepFlowEntry,\n StepResult,\n Mastra,\n ExecutionEngineOptions,\n} 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({\n mastra,\n eventProcessor,\n options,\n }: {\n mastra?: Mastra;\n eventProcessor: WorkflowEventProcessor;\n options: ExecutionEngineOptions;\n }) {\n super({ mastra, options });\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?: 'legacy' | 'vnext' | 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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Agent } from './chunk-
|
|
1
|
+
import { Agent } from './chunk-F7OMDF5K.js';
|
|
2
2
|
|
|
3
3
|
// src/relevance/cohere/index.ts
|
|
4
4
|
var CohereRelevanceScorer = class {
|
|
@@ -83,5 +83,5 @@ Always return just the number, no explanation.`,
|
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt };
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
86
|
+
//# sourceMappingURL=chunk-SF75RENF.js.map
|
|
87
|
+
//# sourceMappingURL=chunk-SF75RENF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/relevance/cohere/index.ts","../src/relevance/relevance-score-provider.ts","../src/relevance/mastra-agent/index.ts"],"names":[],"mappings":";;;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACR,WAAA,CAAY,OAAe,MAAA,EAAiB;AAC1C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EACA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACR;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,eAAA;AAExC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACpDO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAsB;AAC1E,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;;AAAA,MAAA,EAEN,IAAI;;AAAA,sBAAA,CAAA;AAGZ;;;ACRO,IAAM,6BAAN,MAAmE;AAAA,EAChE,KAAA;AAAA,EAER,WAAA,CAAY,MAAc,KAAA,EAA0B;AAClD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACrB,IAAA,EAAM,oBAAoB,IAAI,CAAA,CAAA;AAAA,MAC9B,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAAA,CAAA;AAAA,MAUd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AAEjD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAExC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,CAAM,yBAAyB,IAAA,EAAM;AACvC,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AACrD,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3D,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/relevance/cohere/index.ts","../src/relevance/relevance-score-provider.ts","../src/relevance/mastra-agent/index.ts"],"names":[],"mappings":";;;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACR,WAAA,CAAY,OAAe,MAAA,EAAiB;AAC1C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EACA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACR;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,eAAA;AAExC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACpDO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAsB;AAC1E,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;;AAAA,MAAA,EAEN,IAAI;;AAAA,sBAAA,CAAA;AAGZ;;;ACRO,IAAM,6BAAN,MAAmE;AAAA,EAChE,KAAA;AAAA,EAER,WAAA,CAAY,MAAc,KAAA,EAA0B;AAClD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACrB,IAAA,EAAM,oBAAoB,IAAI,CAAA,CAAA;AAAA,MAC9B,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAAA,CAAA;AAAA,MAUd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AAEjD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAExC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,CAAM,yBAAyB,IAAA,EAAM;AACvC,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AACrD,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3D,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AACF","file":"chunk-SF75RENF.js","sourcesContent":["import type { RelevanceScoreProvider } from '../relevance-score-provider';\n\ninterface CohereRerankingResponse {\n results: Array<{\n index: number;\n relevance_score: number;\n }>;\n id: string;\n meta: {\n api_version: {\n version: string;\n is_experimental: boolean;\n };\n billed_units: {\n search_units: number;\n };\n };\n}\n\n/** @deprecated Import from `@mastra/rag` instead */\nexport class CohereRelevanceScorer implements RelevanceScoreProvider {\n private model: string;\n private apiKey?: string;\n constructor(model: string, apiKey?: string) {\n console.warn(\n 'CohereRelevanceScorer exported from @mastra/core is deprecated. Please import from \"@mastra/rag\" instead.',\n );\n this.apiKey = apiKey;\n this.model = model;\n }\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const response = await fetch(`https://api.cohere.com/v2/rerank`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n query,\n documents: [text],\n model: this.model,\n top_n: 1,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Cohere API error: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as CohereRerankingResponse;\n const relevanceScore = data.results[0]?.relevance_score;\n\n if (!relevanceScore) {\n throw new Error('No relevance score found on Cohere response');\n }\n\n return relevanceScore;\n }\n}\n","// Provider interfaces\nexport interface RelevanceScoreProvider {\n getRelevanceScore(text1: string, text2: string): Promise<number>;\n}\n\n// Helper function used by providers\nexport function createSimilarityPrompt(query: string, text: string): string {\n return `Rate the semantic similarity between the following the query and the text on a scale from 0 to 1 (decimals allowed), where 1 means exactly the same meaning and 0 means completely different:\n\nQuery: ${query}\n\nText: ${text}\n\nRelevance score (0-1):`;\n}\n","import { Agent } from '../../agent';\nimport type { MastraModelConfig } from '../../llm/model/shared.types';\nimport { createSimilarityPrompt } from '../relevance-score-provider';\nimport type { RelevanceScoreProvider } from '../relevance-score-provider';\n\n// Mastra Agent implementation\nexport class MastraAgentRelevanceScorer implements RelevanceScoreProvider {\n private agent: Agent;\n\n constructor(name: string, model: MastraModelConfig) {\n this.agent = new Agent({\n name: `Relevance Scorer ${name}`,\n instructions: `You are a specialized agent for evaluating the relevance of text to queries.\nYour task is to rate how well a text passage answers a given query.\nOutput only a number between 0 and 1, where:\n1.0 = Perfectly relevant, directly answers the query\n0.0 = Completely irrelevant\nConsider:\n- Direct relevance to the question\n- Completeness of information\n- Quality and specificity\nAlways return just the number, no explanation.`,\n model,\n });\n }\n\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const prompt = createSimilarityPrompt(query, text);\n\n const model = await this.agent.getModel();\n\n let response: string;\n if (model.specificationVersion === 'v2') {\n const responseText = await this.agent.generate(prompt);\n response = responseText.text;\n } else {\n const responseText = await this.agent.generateLegacy(prompt);\n response = responseText.text;\n }\n return parseFloat(response);\n }\n}\n"]}
|
|
@@ -146,5 +146,5 @@ exports.Tool = Tool;
|
|
|
146
146
|
exports.createTool = createTool;
|
|
147
147
|
exports.isVercelTool = isVercelTool;
|
|
148
148
|
exports.validateToolInput = validateToolInput;
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
150
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-VF676YCO.cjs.map
|
|
150
|
+
//# sourceMappingURL=chunk-VF676YCO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-VF676YCO.cjs","sourcesContent":["import type { z } from 'zod';\nimport type { ZodLikeSchema } from '../types/zod-compat';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: ZodLikeSchema | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: { success: boolean; data?: any; error?: any };\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { Mastra } from '../mastra';\nimport type { ZodLikeSchema } from '../types/zod-compat';\nimport type { ToolAction, ToolExecutionContext, MastraToolInvocationOptions } from './types';\nimport { validateToolInput } from './validation';\n\n/**\n * A type-safe tool that agents and workflows can call to perform specific actions.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n *\n * @example Basic tool with validation\n * ```typescript\n * const weatherTool = createTool({\n * id: 'get-weather',\n * description: 'Get weather for a location',\n * inputSchema: z.object({\n * location: z.string(),\n * units: z.enum(['celsius', 'fahrenheit']).optional()\n * }),\n * execute: async ({ context }) => {\n * return await fetchWeather(context.location, context.units);\n * }\n * });\n * ```\n *\n * @example Tool requiring approval\n * ```typescript\n * const deleteFileTool = createTool({\n * id: 'delete-file',\n * description: 'Delete a file',\n * requireApproval: true,\n * inputSchema: z.object({ filepath: z.string() }),\n * execute: async ({ context }) => {\n * await fs.unlink(context.filepath);\n * return { deleted: true };\n * }\n * });\n * ```\n *\n * @example Tool with Mastra integration\n * ```typescript\n * const saveTool = createTool({\n * id: 'save-data',\n * description: 'Save data to storage',\n * inputSchema: z.object({ key: z.string(), value: z.any() }),\n * execute: async ({ context, mastra }) => {\n * const storage = mastra?.getStorage();\n * await storage?.set(context.key, context.value);\n * return { saved: true };\n * }\n * });\n * ```\n */\nexport class Tool<\n TSchemaIn extends ZodLikeSchema | undefined = undefined,\n TSchemaOut extends ZodLikeSchema | undefined = undefined,\n TSuspendSchema extends ZodLikeSchema = any,\n TResumeSchema extends ZodLikeSchema = any,\n TContext extends ToolExecutionContext<TSchemaIn, TSuspendSchema, TResumeSchema> = ToolExecutionContext<\n TSchemaIn,\n TSuspendSchema,\n TResumeSchema\n >,\n> implements ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>\n{\n /** Unique identifier for the tool */\n id: string;\n\n /** Description of what the tool does */\n description: string;\n\n /** Schema for validating input parameters */\n inputSchema?: TSchemaIn;\n\n /** Schema for validating output structure */\n outputSchema?: TSchemaOut;\n\n /** Schema for suspend operation data */\n suspendSchema?: TSuspendSchema;\n\n /** Schema for resume operation data */\n resumeSchema?: TResumeSchema;\n\n /**\n * Function that performs the tool's action\n * @param context - Execution context with validated input\n * @param options - Invocation options including suspend/resume data\n * @returns Promise resolving to tool output\n */\n execute?: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>['execute'];\n\n /** Parent Mastra instance for accessing shared resources */\n mastra?: Mastra;\n\n /**\n * Whether the tool requires explicit user approval before execution\n * @example\n * ```typescript\n * // For destructive operations\n * requireApproval: true\n * ```\n */\n requireApproval?: boolean;\n\n /**\n * Creates a new Tool instance with input validation wrapper.\n *\n * @param opts - Tool configuration and execute function\n * @example\n * ```typescript\n * const tool = new Tool({\n * id: 'my-tool',\n * description: 'Does something useful',\n * inputSchema: z.object({ name: z.string() }),\n * execute: async ({ context }) => ({ greeting: `Hello ${context.name}` })\n * });\n * ```\n */\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.suspendSchema = opts.suspendSchema;\n this.resumeSchema = opts.resumeSchema;\n this.mastra = opts.mastra;\n this.requireApproval = opts.requireApproval || false;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: MastraToolInvocationOptions) => {\n const { resumeData, suspend } = options ?? {};\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute({ ...(data as TContext), suspend, resumeData } as TContext, options);\n };\n }\n }\n}\n\n/**\n * Creates a type-safe tool with automatic input validation.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n * @template TExecute - Execute function type\n *\n * @param opts - Tool configuration including schemas and execute function\n * @returns Type-safe Tool instance with conditional typing based on schemas\n *\n * @example Simple tool\n * ```typescript\n * const greetTool = createTool({\n * id: 'greet',\n * description: 'Say hello',\n * execute: async () => ({ message: 'Hello!' })\n * });\n * ```\n *\n * @example Tool with input validation\n * ```typescript\n * const calculateTool = createTool({\n * id: 'calculate',\n * description: 'Perform calculations',\n * inputSchema: z.object({\n * operation: z.enum(['add', 'subtract']),\n * a: z.number(),\n * b: z.number()\n * }),\n * execute: async ({ context }) => {\n * const result = context.operation === 'add'\n * ? context.a + context.b\n * : context.a - context.b;\n * return { result };\n * }\n * });\n * ```\n *\n * @example Tool with output schema\n * ```typescript\n * const userTool = createTool({\n * id: 'get-user',\n * description: 'Get user data',\n * inputSchema: z.object({ userId: z.string() }),\n * outputSchema: z.object({\n * id: z.string(),\n * name: z.string(),\n * email: z.string()\n * }),\n * execute: async ({ context }) => {\n * return await fetchUser(context.userId);\n * }\n * });\n * ```\n *\n * @example Tool with external API\n * ```typescript\n * const weatherTool = createTool({\n * id: 'weather',\n * description: 'Get weather data',\n * inputSchema: z.object({\n * city: z.string(),\n * units: z.enum(['metric', 'imperial']).default('metric')\n * }),\n * execute: async ({ context }) => {\n * const response = await fetch(\n * `https://api.weather.com/v1/weather?q=${context.city}&units=${context.units}`\n * );\n * return response.json();\n * }\n * });\n * ```\n */\nexport function createTool<\n TSchemaIn extends ZodLikeSchema | undefined = undefined,\n TSchemaOut extends ZodLikeSchema | undefined = undefined,\n TSuspendSchema extends ZodLikeSchema = any,\n TResumeSchema extends ZodLikeSchema = any,\n TContext extends ToolExecutionContext<TSchemaIn, TSuspendSchema, TResumeSchema> = ToolExecutionContext<\n TSchemaIn,\n TSuspendSchema,\n TResumeSchema\n >,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [ZodLikeSchema, ZodLikeSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext, options: MastraToolInvocationOptions) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
|
|
@@ -141,5 +141,5 @@ function isVercelTool(tool) {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
export { Tool, createTool, isVercelTool, validateToolInput };
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
145
|
-
//# sourceMappingURL=chunk-
|
|
144
|
+
//# sourceMappingURL=chunk-WM4RO23J.js.map
|
|
145
|
+
//# sourceMappingURL=chunk-WM4RO23J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-WM4RO23J.js","sourcesContent":["import type { z } from 'zod';\nimport type { ZodLikeSchema } from '../types/zod-compat';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: ZodLikeSchema | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: { success: boolean; data?: any; error?: any };\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { Mastra } from '../mastra';\nimport type { ZodLikeSchema } from '../types/zod-compat';\nimport type { ToolAction, ToolExecutionContext, MastraToolInvocationOptions } from './types';\nimport { validateToolInput } from './validation';\n\n/**\n * A type-safe tool that agents and workflows can call to perform specific actions.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n *\n * @example Basic tool with validation\n * ```typescript\n * const weatherTool = createTool({\n * id: 'get-weather',\n * description: 'Get weather for a location',\n * inputSchema: z.object({\n * location: z.string(),\n * units: z.enum(['celsius', 'fahrenheit']).optional()\n * }),\n * execute: async ({ context }) => {\n * return await fetchWeather(context.location, context.units);\n * }\n * });\n * ```\n *\n * @example Tool requiring approval\n * ```typescript\n * const deleteFileTool = createTool({\n * id: 'delete-file',\n * description: 'Delete a file',\n * requireApproval: true,\n * inputSchema: z.object({ filepath: z.string() }),\n * execute: async ({ context }) => {\n * await fs.unlink(context.filepath);\n * return { deleted: true };\n * }\n * });\n * ```\n *\n * @example Tool with Mastra integration\n * ```typescript\n * const saveTool = createTool({\n * id: 'save-data',\n * description: 'Save data to storage',\n * inputSchema: z.object({ key: z.string(), value: z.any() }),\n * execute: async ({ context, mastra }) => {\n * const storage = mastra?.getStorage();\n * await storage?.set(context.key, context.value);\n * return { saved: true };\n * }\n * });\n * ```\n */\nexport class Tool<\n TSchemaIn extends ZodLikeSchema | undefined = undefined,\n TSchemaOut extends ZodLikeSchema | undefined = undefined,\n TSuspendSchema extends ZodLikeSchema = any,\n TResumeSchema extends ZodLikeSchema = any,\n TContext extends ToolExecutionContext<TSchemaIn, TSuspendSchema, TResumeSchema> = ToolExecutionContext<\n TSchemaIn,\n TSuspendSchema,\n TResumeSchema\n >,\n> implements ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>\n{\n /** Unique identifier for the tool */\n id: string;\n\n /** Description of what the tool does */\n description: string;\n\n /** Schema for validating input parameters */\n inputSchema?: TSchemaIn;\n\n /** Schema for validating output structure */\n outputSchema?: TSchemaOut;\n\n /** Schema for suspend operation data */\n suspendSchema?: TSuspendSchema;\n\n /** Schema for resume operation data */\n resumeSchema?: TResumeSchema;\n\n /**\n * Function that performs the tool's action\n * @param context - Execution context with validated input\n * @param options - Invocation options including suspend/resume data\n * @returns Promise resolving to tool output\n */\n execute?: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>['execute'];\n\n /** Parent Mastra instance for accessing shared resources */\n mastra?: Mastra;\n\n /**\n * Whether the tool requires explicit user approval before execution\n * @example\n * ```typescript\n * // For destructive operations\n * requireApproval: true\n * ```\n */\n requireApproval?: boolean;\n\n /**\n * Creates a new Tool instance with input validation wrapper.\n *\n * @param opts - Tool configuration and execute function\n * @example\n * ```typescript\n * const tool = new Tool({\n * id: 'my-tool',\n * description: 'Does something useful',\n * inputSchema: z.object({ name: z.string() }),\n * execute: async ({ context }) => ({ greeting: `Hello ${context.name}` })\n * });\n * ```\n */\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.suspendSchema = opts.suspendSchema;\n this.resumeSchema = opts.resumeSchema;\n this.mastra = opts.mastra;\n this.requireApproval = opts.requireApproval || false;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: MastraToolInvocationOptions) => {\n const { resumeData, suspend } = options ?? {};\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute({ ...(data as TContext), suspend, resumeData } as TContext, options);\n };\n }\n }\n}\n\n/**\n * Creates a type-safe tool with automatic input validation.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n * @template TExecute - Execute function type\n *\n * @param opts - Tool configuration including schemas and execute function\n * @returns Type-safe Tool instance with conditional typing based on schemas\n *\n * @example Simple tool\n * ```typescript\n * const greetTool = createTool({\n * id: 'greet',\n * description: 'Say hello',\n * execute: async () => ({ message: 'Hello!' })\n * });\n * ```\n *\n * @example Tool with input validation\n * ```typescript\n * const calculateTool = createTool({\n * id: 'calculate',\n * description: 'Perform calculations',\n * inputSchema: z.object({\n * operation: z.enum(['add', 'subtract']),\n * a: z.number(),\n * b: z.number()\n * }),\n * execute: async ({ context }) => {\n * const result = context.operation === 'add'\n * ? context.a + context.b\n * : context.a - context.b;\n * return { result };\n * }\n * });\n * ```\n *\n * @example Tool with output schema\n * ```typescript\n * const userTool = createTool({\n * id: 'get-user',\n * description: 'Get user data',\n * inputSchema: z.object({ userId: z.string() }),\n * outputSchema: z.object({\n * id: z.string(),\n * name: z.string(),\n * email: z.string()\n * }),\n * execute: async ({ context }) => {\n * return await fetchUser(context.userId);\n * }\n * });\n * ```\n *\n * @example Tool with external API\n * ```typescript\n * const weatherTool = createTool({\n * id: 'weather',\n * description: 'Get weather data',\n * inputSchema: z.object({\n * city: z.string(),\n * units: z.enum(['metric', 'imperial']).default('metric')\n * }),\n * execute: async ({ context }) => {\n * const response = await fetch(\n * `https://api.weather.com/v1/weather?q=${context.city}&units=${context.units}`\n * );\n * return response.json();\n * }\n * });\n * ```\n */\nexport function createTool<\n TSchemaIn extends ZodLikeSchema | undefined = undefined,\n TSchemaOut extends ZodLikeSchema | undefined = undefined,\n TSuspendSchema extends ZodLikeSchema = any,\n TResumeSchema extends ZodLikeSchema = any,\n TContext extends ToolExecutionContext<TSchemaIn, TSuspendSchema, TResumeSchema> = ToolExecutionContext<\n TSchemaIn,\n TSuspendSchema,\n TResumeSchema\n >,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [ZodLikeSchema, ZodLikeSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext, options: MastraToolInvocationOptions) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
|