@mastra/inngest 1.0.0-beta.4 → 1.0.0-beta.5
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 +42 -0
- package/dist/index.cjs +19 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -10
- package/dist/index.js.map +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# @mastra/inngest
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Internal code refactoring ([#10830](https://github.com/mastra-ai/mastra/pull/10830))
|
|
8
|
+
|
|
9
|
+
- Add support for typed structured output in agent workflow steps ([#11014](https://github.com/mastra-ai/mastra/pull/11014))
|
|
10
|
+
|
|
11
|
+
When wrapping an agent with `createStep()` and providing a `structuredOutput.schema`, the step's `outputSchema` is now correctly inferred from the provided schema instead of defaulting to `{ text: string }`.
|
|
12
|
+
|
|
13
|
+
This enables type-safe chaining of agent steps with structured output to subsequent steps:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
const articleSchema = z.object({
|
|
17
|
+
title: z.string(),
|
|
18
|
+
summary: z.string(),
|
|
19
|
+
tags: z.array(z.string()),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Agent step with structured output - outputSchema is now articleSchema
|
|
23
|
+
const agentStep = createStep(agent, {
|
|
24
|
+
structuredOutput: { schema: articleSchema },
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Next step can receive the structured output directly
|
|
28
|
+
const processStep = createStep({
|
|
29
|
+
id: 'process',
|
|
30
|
+
inputSchema: articleSchema, // Matches agent's outputSchema
|
|
31
|
+
outputSchema: z.object({ tagCount: z.number() }),
|
|
32
|
+
execute: async ({ inputData }) => ({
|
|
33
|
+
tagCount: inputData.tags.length, // Fully typed!
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
workflow.then(agentStep).then(processStep).commit();
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
When `structuredOutput` is not provided, the agent step continues to use the default `{ text: string }` output schema.
|
|
41
|
+
|
|
42
|
+
- Updated dependencies [[`edb07e4`](https://github.com/mastra-ai/mastra/commit/edb07e49283e0c28bd094a60e03439bf6ecf0221), [`b7e17d3`](https://github.com/mastra-ai/mastra/commit/b7e17d3f5390bb5a71efc112204413656fcdc18d), [`261473a`](https://github.com/mastra-ai/mastra/commit/261473ac637e633064a22076671e2e02b002214d), [`5d7000f`](https://github.com/mastra-ai/mastra/commit/5d7000f757cd65ea9dc5b05e662fd83dfd44e932), [`4f0331a`](https://github.com/mastra-ai/mastra/commit/4f0331a79bf6eb5ee598a5086e55de4b5a0ada03), [`8a000da`](https://github.com/mastra-ai/mastra/commit/8a000da0c09c679a2312f6b3aa05b2ca78ca7393)]:
|
|
43
|
+
- @mastra/core@1.0.0-beta.10
|
|
44
|
+
|
|
3
45
|
## 1.0.0-beta.4
|
|
4
46
|
|
|
5
47
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -5,9 +5,9 @@ var workflows = require('@mastra/core/workflows');
|
|
|
5
5
|
var _constants = require('@mastra/core/workflows/_constants');
|
|
6
6
|
var zod = require('zod');
|
|
7
7
|
var crypto = require('crypto');
|
|
8
|
-
var web = require('stream/web');
|
|
9
8
|
var di = require('@mastra/core/di');
|
|
10
9
|
var inngest = require('inngest');
|
|
10
|
+
var web = require('stream/web');
|
|
11
11
|
var realtime = require('@inngest/realtime');
|
|
12
12
|
var stream = require('@mastra/core/stream');
|
|
13
13
|
var hono = require('inngest/hono');
|
|
@@ -955,12 +955,10 @@ var InngestWorkflow = class _InngestWorkflow extends workflows.Workflow {
|
|
|
955
955
|
abortController: new AbortController(),
|
|
956
956
|
// currentSpan: undefined, // TODO: Pass actual parent Span from workflow execution context
|
|
957
957
|
outputOptions,
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
}
|
|
963
|
-
})
|
|
958
|
+
outputWriter: async (chunk) => {
|
|
959
|
+
void emitter.emit("watch", chunk).catch(() => {
|
|
960
|
+
});
|
|
961
|
+
}
|
|
964
962
|
});
|
|
965
963
|
await step.run(`workflow.${this.id}.finalize`, async () => {
|
|
966
964
|
if (result.status === "failed") {
|
|
@@ -1035,6 +1033,7 @@ function createStep(params, agentOptions) {
|
|
|
1035
1033
|
return params;
|
|
1036
1034
|
}
|
|
1037
1035
|
if (isAgent(params)) {
|
|
1036
|
+
const outputSchema = agentOptions?.structuredOutput?.schema ?? zod.z.object({ text: zod.z.string() });
|
|
1038
1037
|
return {
|
|
1039
1038
|
id: params.name,
|
|
1040
1039
|
description: params.getDescription(),
|
|
@@ -1043,9 +1042,7 @@ function createStep(params, agentOptions) {
|
|
|
1043
1042
|
// resourceId: z.string().optional(),
|
|
1044
1043
|
// threadId: z.string().optional(),
|
|
1045
1044
|
}),
|
|
1046
|
-
outputSchema
|
|
1047
|
-
text: zod.z.string()
|
|
1048
|
-
}),
|
|
1045
|
+
outputSchema,
|
|
1049
1046
|
execute: async ({
|
|
1050
1047
|
inputData,
|
|
1051
1048
|
[_constants.EMITTER_SYMBOL]: emitter,
|
|
@@ -1061,6 +1058,7 @@ function createStep(params, agentOptions) {
|
|
|
1061
1058
|
streamPromise.resolve = resolve;
|
|
1062
1059
|
streamPromise.reject = reject;
|
|
1063
1060
|
});
|
|
1061
|
+
let structuredResult = null;
|
|
1064
1062
|
const toolData = {
|
|
1065
1063
|
name: params.name,
|
|
1066
1064
|
args: inputData
|
|
@@ -1074,6 +1072,10 @@ function createStep(params, agentOptions) {
|
|
|
1074
1072
|
requestContext,
|
|
1075
1073
|
tracingContext,
|
|
1076
1074
|
onFinish: (result) => {
|
|
1075
|
+
const resultWithObject = result;
|
|
1076
|
+
if (agentOptions?.structuredOutput?.schema && resultWithObject.object) {
|
|
1077
|
+
structuredResult = resultWithObject.object;
|
|
1078
|
+
}
|
|
1077
1079
|
streamPromise.resolve(result.text);
|
|
1078
1080
|
void agentOptions?.onFinish?.(result);
|
|
1079
1081
|
},
|
|
@@ -1086,6 +1088,10 @@ function createStep(params, agentOptions) {
|
|
|
1086
1088
|
requestContext,
|
|
1087
1089
|
tracingContext,
|
|
1088
1090
|
onFinish: (result) => {
|
|
1091
|
+
const resultWithObject = result;
|
|
1092
|
+
if (agentOptions?.structuredOutput?.schema && resultWithObject.object) {
|
|
1093
|
+
structuredResult = resultWithObject.object;
|
|
1094
|
+
}
|
|
1089
1095
|
streamPromise.resolve(result.text);
|
|
1090
1096
|
void agentOptions?.onFinish?.(result);
|
|
1091
1097
|
},
|
|
@@ -1119,6 +1125,9 @@ function createStep(params, agentOptions) {
|
|
|
1119
1125
|
if (abortSignal.aborted) {
|
|
1120
1126
|
return abort();
|
|
1121
1127
|
}
|
|
1128
|
+
if (structuredResult !== null) {
|
|
1129
|
+
return structuredResult;
|
|
1130
|
+
}
|
|
1122
1131
|
return {
|
|
1123
1132
|
text: await streamPromise.promise
|
|
1124
1133
|
};
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/execution-engine.ts","../src/run.ts","../src/workflow.ts","../src/serve.ts","../src/types.ts","../src/index.ts"],"names":["DefaultExecutionEngine","RetryAfterError","randomUUID","createTimeTravelExecutionParams","Run","subscribe","stream","ReadableStream","ChunkFrom","WorkflowRunOutput","Workflow","event","RequestContext","WritableStream","NonRetriableError","inngestServe","Tool","z","EMITTER_SYMBOL","STREAM_FORMAT_SYMBOL"],"mappings":"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","file":"index.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { DefaultExecutionEngine, createTimeTravelExecutionParams } from '@mastra/core/workflows';\nimport type {\n ExecutionContext,\n Step,\n StepResult,\n StepFailure,\n Emitter,\n ExecutionEngineOptions,\n TimeTravelExecutionParams,\n WorkflowResult,\n} from '@mastra/core/workflows';\nimport { RetryAfterError } from 'inngest';\nimport type { Inngest, BaseContext } from 'inngest';\nimport { InngestWorkflow } from './workflow';\n\nexport class InngestExecutionEngine extends DefaultExecutionEngine {\n private inngestStep: BaseContext<Inngest>['step'];\n private inngestAttempts: number;\n\n constructor(\n mastra: Mastra,\n inngestStep: BaseContext<Inngest>['step'],\n inngestAttempts: number = 0,\n options: ExecutionEngineOptions,\n ) {\n super({ mastra, options });\n this.inngestStep = inngestStep;\n this.inngestAttempts = inngestAttempts;\n }\n\n // =============================================================================\n // Hook Overrides\n // =============================================================================\n\n /**\n * Format errors with stack traces for better debugging in Inngest\n */\n protected formatResultError(error: Error | string | undefined, lastOutput: StepResult<any, any, any, any>): string {\n if (error instanceof Error) {\n return error.stack ?? error.message;\n }\n const outputError = (lastOutput as StepFailure<any, any, any, any>)?.error;\n if (outputError instanceof Error) {\n return outputError.message;\n }\n return outputError ?? (error as string) ?? 'Unknown error';\n }\n\n /**\n * Detect InngestWorkflow instances for special nested workflow handling\n */\n isNestedWorkflowStep(step: Step<any, any, any>): boolean {\n return step instanceof InngestWorkflow;\n }\n\n /**\n * Inngest requires requestContext serialization for memoization.\n * When steps are replayed, the original function doesn't re-execute,\n * so requestContext modifications must be captured and restored.\n */\n requiresDurableContextSerialization(): boolean {\n return true;\n }\n\n /**\n * Execute a step with retry logic for Inngest.\n * Retries are handled via step-level retry (RetryAfterError thrown INSIDE step.run()).\n * After retries exhausted, error propagates here and we return a failed result.\n */\n async executeStepWithRetry<T>(\n stepId: string,\n runStep: () => Promise<T>,\n params: {\n retries: number;\n delay: number;\n stepSpan?: any;\n workflowId: string;\n runId: string;\n },\n ): Promise<{ ok: true; result: T } | { ok: false; error: { status: 'failed'; error: string; endedAt: number } }> {\n try {\n // Pass retry config to wrapDurableOperation so RetryAfterError is thrown INSIDE step.run()\n const result = await this.wrapDurableOperation(stepId, runStep, { delay: params.delay });\n return { ok: true, result };\n } catch (e) {\n // After step-level retries exhausted, extract failure from error cause\n const cause = (e as any)?.cause;\n if (cause?.status === 'failed') {\n params.stepSpan?.error({\n error: e,\n attributes: { status: 'failed' },\n });\n return { ok: false, error: cause };\n }\n\n // Fallback for other errors\n const errorMessage = e instanceof Error ? e.message : String(e);\n params.stepSpan?.error({\n error: e,\n attributes: { status: 'failed' },\n });\n return {\n ok: false,\n error: {\n status: 'failed',\n error: `Error: ${errorMessage}`,\n endedAt: Date.now(),\n },\n };\n }\n }\n\n /**\n * Use Inngest's sleep primitive for durability\n */\n async executeSleepDuration(duration: number, sleepId: string, workflowId: string): Promise<void> {\n await this.inngestStep.sleep(`workflow.${workflowId}.sleep.${sleepId}`, duration < 0 ? 0 : duration);\n }\n\n /**\n * Use Inngest's sleepUntil primitive for durability\n */\n async executeSleepUntilDate(date: Date, sleepUntilId: string, workflowId: string): Promise<void> {\n await this.inngestStep.sleepUntil(`workflow.${workflowId}.sleepUntil.${sleepUntilId}`, date);\n }\n\n /**\n * Wrap durable operations in Inngest step.run() for durability.\n * If retryConfig is provided, throws RetryAfterError INSIDE step.run() to trigger\n * Inngest's step-level retry mechanism (not function-level retry).\n */\n async wrapDurableOperation<T>(\n operationId: string,\n operationFn: () => Promise<T>,\n retryConfig?: { delay: number },\n ): Promise<T> {\n return this.inngestStep.run(operationId, async () => {\n try {\n return await operationFn();\n } catch (e) {\n if (retryConfig) {\n // Throw RetryAfterError INSIDE step.run() to trigger step-level retry\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new RetryAfterError(errorMessage, retryConfig.delay, {\n cause: {\n status: 'failed',\n error: `Error: ${errorMessage}`,\n endedAt: Date.now(),\n },\n });\n }\n throw e; // Re-throw if no retry config\n }\n }) as Promise<T>;\n }\n\n /**\n * Provide Inngest step primitive in engine context\n */\n getEngineContext(): Record<string, any> {\n return { step: this.inngestStep };\n }\n\n /**\n * Execute nested InngestWorkflow using inngestStep.invoke() for durability.\n * This MUST be called directly (not inside step.run()) due to Inngest constraints.\n */\n async executeWorkflowStep(params: {\n step: Step<string, any, any>;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n executionContext: ExecutionContext;\n resume?: {\n steps: string[];\n resumePayload: any;\n runId?: string;\n };\n timeTravel?: TimeTravelExecutionParams;\n prevOutput: any;\n inputData: any;\n emitter: Emitter;\n startedAt: number;\n }): Promise<StepResult<any, any, any, any> | null> {\n // Only handle InngestWorkflow instances\n if (!(params.step instanceof InngestWorkflow)) {\n return null;\n }\n\n const { step, stepResults, executionContext, resume, timeTravel, prevOutput, inputData, emitter, startedAt } =\n params;\n\n const isResume = !!resume?.steps?.length;\n let result: WorkflowResult<any, any, any, any>;\n let runId: string;\n\n const isTimeTravel = !!(timeTravel && timeTravel.steps?.length > 1 && timeTravel.steps[0] === step.id);\n\n try {\n if (isResume) {\n runId = stepResults[resume?.steps?.[0] ?? '']?.suspendPayload?.__workflow_meta?.runId ?? randomUUID();\n const snapshot: any = await this.mastra?.getStorage()?.loadWorkflowSnapshot({\n workflowName: step.id,\n runId: runId,\n });\n\n const invokeResp = (await this.inngestStep.invoke(`workflow.${executionContext.workflowId}.step.${step.id}`, {\n function: step.getFunction(),\n data: {\n inputData,\n initialState: executionContext.state ?? snapshot?.value ?? {},\n runId: runId,\n resume: {\n runId: runId,\n steps: resume.steps.slice(1),\n stepResults: snapshot?.context as any,\n resumePayload: resume.resumePayload,\n resumePath: resume.steps?.[1] ? (snapshot?.suspendedPaths?.[resume.steps?.[1]] as any) : undefined,\n },\n outputOptions: { includeState: true },\n },\n })) as any;\n result = invokeResp.result;\n runId = invokeResp.runId;\n executionContext.state = invokeResp.result.state;\n } else if (isTimeTravel) {\n const snapshot: any = (await this.mastra?.getStorage()?.loadWorkflowSnapshot({\n workflowName: step.id,\n runId: executionContext.runId,\n })) ?? { context: {} };\n const timeTravelParams = createTimeTravelExecutionParams({\n steps: timeTravel.steps.slice(1),\n inputData: timeTravel.inputData,\n resumeData: timeTravel.resumeData,\n context: (timeTravel.nestedStepResults?.[step.id] ?? {}) as any,\n nestedStepsContext: (timeTravel.nestedStepResults ?? {}) as any,\n snapshot,\n graph: step.buildExecutionGraph(),\n });\n const invokeResp = (await this.inngestStep.invoke(`workflow.${executionContext.workflowId}.step.${step.id}`, {\n function: step.getFunction(),\n data: {\n timeTravel: timeTravelParams,\n initialState: executionContext.state ?? {},\n runId: executionContext.runId,\n outputOptions: { includeState: true },\n },\n })) as any;\n result = invokeResp.result;\n runId = invokeResp.runId;\n executionContext.state = invokeResp.result.state;\n } else {\n const invokeResp = (await this.inngestStep.invoke(`workflow.${executionContext.workflowId}.step.${step.id}`, {\n function: step.getFunction(),\n data: {\n inputData,\n initialState: executionContext.state ?? {},\n outputOptions: { includeState: true },\n },\n })) as any;\n result = invokeResp.result;\n runId = invokeResp.runId;\n executionContext.state = invokeResp.result.state;\n }\n } catch (e) {\n // Nested workflow threw an error (likely from finalization step)\n // The error cause should contain the workflow result with runId\n const errorCause = (e as any)?.cause;\n\n // Try to extract runId from error cause or generate new one\n if (errorCause && typeof errorCause === 'object') {\n result = errorCause as WorkflowResult<any, any, any, any>;\n // The runId might be in the result's steps metadata\n runId = errorCause.runId || randomUUID();\n } else {\n // Fallback: if we can't get the result from error, construct a basic failed result\n runId = randomUUID();\n result = {\n status: 'failed',\n error: e instanceof Error ? e : new Error(String(e)),\n steps: {},\n input: inputData,\n } as WorkflowResult<any, any, any, any>;\n }\n }\n\n const res = await this.inngestStep.run(\n `workflow.${executionContext.workflowId}.step.${step.id}.nestedwf-results`,\n async () => {\n if (result.status === 'failed') {\n await emitter.emit('watch', {\n type: 'workflow-step-result',\n payload: {\n id: step.id,\n status: 'failed',\n error: result?.error,\n payload: prevOutput,\n },\n });\n\n return { executionContext, result: { status: 'failed', error: result?.error } };\n } else if (result.status === 'suspended') {\n const suspendedSteps = Object.entries(result.steps).filter(([_stepName, stepResult]) => {\n const stepRes: StepResult<any, any, any, any> = stepResult as StepResult<any, any, any, any>;\n return stepRes?.status === 'suspended';\n });\n\n for (const [stepName, stepResult] of suspendedSteps) {\n const suspendPath: string[] = [stepName, ...(stepResult?.suspendPayload?.__workflow_meta?.path ?? [])];\n executionContext.suspendedPaths[step.id] = executionContext.executionPath;\n\n await emitter.emit('watch', {\n type: 'workflow-step-suspended',\n payload: {\n id: step.id,\n status: 'suspended',\n },\n });\n\n return {\n executionContext,\n result: {\n status: 'suspended',\n payload: stepResult.payload,\n suspendPayload: {\n ...(stepResult as any)?.suspendPayload,\n __workflow_meta: { runId: runId, path: suspendPath },\n },\n },\n };\n }\n\n return {\n executionContext,\n result: {\n status: 'suspended',\n payload: {},\n },\n };\n }\n\n await emitter.emit('watch', {\n type: 'workflow-step-result',\n payload: {\n id: step.id,\n status: 'success',\n output: result?.result,\n },\n });\n\n await emitter.emit('watch', {\n type: 'workflow-step-finish',\n payload: {\n id: step.id,\n metadata: {},\n },\n });\n\n return { executionContext, result: { status: 'success', output: result?.result } };\n },\n );\n\n Object.assign(executionContext, res.executionContext);\n return {\n ...res.result,\n startedAt,\n endedAt: Date.now(),\n payload: inputData,\n resumedAt: resume?.steps[0] === step.id ? startedAt : undefined,\n resumePayload: resume?.steps[0] === step.id ? resume?.resumePayload : undefined,\n } as StepResult<any, any, any, any>;\n }\n}\n","import { ReadableStream } from 'node:stream/web';\nimport { subscribe } from '@inngest/realtime';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { TracingContext, TracingOptions } from '@mastra/core/observability';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { WorkflowRunOutput, ChunkFrom } from '@mastra/core/stream';\nimport { createTimeTravelExecutionParams, Run } from '@mastra/core/workflows';\nimport type {\n ExecutionEngine,\n ExecutionGraph,\n SerializedStepFlowEntry,\n Step,\n StepWithComponent,\n StreamEvent,\n TimeTravelContext,\n WorkflowEngineType,\n WorkflowResult,\n WorkflowStreamEvent,\n} from '@mastra/core/workflows';\nimport type { Inngest } from 'inngest';\nimport type z from 'zod';\nimport type { InngestEngineType } from './types';\n\nexport class InngestRun<\n TEngineType = InngestEngineType,\n TSteps extends Step<string, any, any, any, any, any, any>[] = Step<string, any, any, any, any, 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 private inngest: Inngest;\n serializedStepGraph: SerializedStepFlowEntry[];\n #mastra: Mastra;\n\n constructor(\n params: {\n workflowId: string;\n runId: string;\n resourceId?: 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 workflowEngineType: WorkflowEngineType;\n validateInputs?: boolean;\n },\n inngest: Inngest,\n ) {\n super(params);\n this.inngest = inngest;\n this.serializedStepGraph = params.serializedStepGraph;\n this.#mastra = params.mastra!;\n }\n\n async getRuns(eventId: string) {\n const response = await fetch(`${this.inngest.apiBaseUrl ?? 'https://api.inngest.com'}/v1/events/${eventId}/runs`, {\n headers: {\n Authorization: `Bearer ${process.env.INNGEST_SIGNING_KEY}`,\n },\n });\n const json = await response.json();\n return (json as any).data;\n }\n\n async getRunOutput(eventId: string) {\n let runs = await this.getRuns(eventId);\n const storage = this.#mastra?.getStorage();\n\n while (runs?.[0]?.status !== 'Completed' || runs?.[0]?.event_id !== eventId) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n runs = await this.getRuns(eventId);\n\n if (runs?.[0]?.status === 'Failed') {\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n return {\n output: { result: { steps: snapshot?.context, status: 'failed', error: runs?.[0]?.output?.message } },\n };\n }\n\n if (runs?.[0]?.status === 'Cancelled') {\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n return { output: { result: { steps: snapshot?.context, status: 'canceled' } } };\n }\n }\n return runs?.[0];\n }\n\n async cancel() {\n const storage = this.#mastra?.getStorage();\n\n await this.inngest.send({\n name: `cancel.workflow.${this.workflowId}`,\n data: {\n runId: this.runId,\n },\n });\n\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n if (snapshot) {\n await storage?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n resourceId: this.resourceId,\n snapshot: {\n ...snapshot,\n status: 'canceled' as any,\n value: snapshot.value,\n },\n });\n }\n }\n\n async start(params: {\n inputData?: z.infer<TInput>;\n requestContext?: RequestContext;\n initialState?: z.infer<TState>;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n return this._start(params);\n }\n\n async _start({\n inputData,\n initialState,\n outputOptions,\n tracingOptions,\n format,\n requestContext,\n }: {\n inputData?: z.infer<TInput>;\n requestContext?: RequestContext;\n initialState?: z.infer<TState>;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n format?: 'legacy' | 'vnext' | undefined;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n await this.#mastra.getStorage()?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n resourceId: this.resourceId,\n snapshot: {\n runId: this.runId,\n serializedStepGraph: this.serializedStepGraph,\n status: 'running',\n value: {},\n context: {} as any,\n activePaths: [],\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n waitingPaths: {},\n timestamp: Date.now(),\n },\n });\n\n const inputDataToUse = await this._validateInput(inputData);\n const initialStateToUse = await this._validateInitialState(initialState ?? {});\n\n const eventOutput = await this.inngest.send({\n name: `workflow.${this.workflowId}`,\n data: {\n inputData: inputDataToUse,\n initialState: initialStateToUse,\n runId: this.runId,\n resourceId: this.resourceId,\n outputOptions,\n tracingOptions,\n format,\n requestContext: requestContext ? Object.fromEntries(requestContext.entries()) : {},\n },\n });\n\n const eventId = eventOutput.ids[0];\n if (!eventId) {\n throw new Error('Event ID is not set');\n }\n const runOutput = await this.getRunOutput(eventId);\n const result = runOutput?.output?.result;\n\n if (result.status === 'failed') {\n result.error = new Error(result.error);\n }\n\n if (result.status !== 'suspended') {\n this.cleanup?.();\n }\n return result;\n }\n\n async resume<TResumeSchema extends z.ZodType<any>>(params: {\n resumeData?: z.infer<TResumeSchema>;\n step:\n | Step<string, any, any, TResumeSchema, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, any, TResumeSchema, any>]\n | string\n | string[];\n requestContext?: RequestContext;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const p = this._resume(params).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n this.executionResults = p;\n return p;\n }\n\n async _resume<TResumeSchema extends z.ZodType<any>>(params: {\n resumeData?: z.infer<TResumeSchema>;\n step:\n | Step<string, any, any, TResumeSchema, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, any, TResumeSchema, any>]\n | string\n | string[];\n requestContext?: RequestContext;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const storage = this.#mastra?.getStorage();\n\n let steps: string[] = [];\n if (typeof params.step === 'string') {\n steps = params.step.split('.');\n } else {\n steps = (Array.isArray(params.step) ? params.step : [params.step]).map(step =>\n typeof step === 'string' ? step : step?.id,\n );\n }\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n\n const suspendedStep = this.workflowSteps[steps?.[0] ?? ''];\n\n const resumeDataToUse = await this._validateResumeData(params.resumeData, suspendedStep);\n\n // Merge persisted requestContext from snapshot with any new values from params\n const persistedRequestContext = (snapshot as any)?.requestContext ?? {};\n const newRequestContext = params.requestContext ? Object.fromEntries(params.requestContext.entries()) : {};\n const mergedRequestContext = { ...persistedRequestContext, ...newRequestContext };\n\n const eventOutput = await this.inngest.send({\n name: `workflow.${this.workflowId}`,\n data: {\n inputData: resumeDataToUse,\n initialState: snapshot?.value ?? {},\n runId: this.runId,\n workflowId: this.workflowId,\n stepResults: snapshot?.context as any,\n resume: {\n steps,\n stepResults: snapshot?.context as any,\n resumePayload: resumeDataToUse,\n resumePath: steps?.[0] ? (snapshot?.suspendedPaths?.[steps?.[0]] as any) : undefined,\n },\n requestContext: mergedRequestContext,\n },\n });\n\n const eventId = eventOutput.ids[0];\n if (!eventId) {\n throw new Error('Event ID is not set');\n }\n const runOutput = await this.getRunOutput(eventId);\n const result = runOutput?.output?.result;\n if (result.status === 'failed') {\n result.error = new Error(result.error);\n }\n return result;\n }\n\n async timeTravel<TInputSchema extends z.ZodType<any>>(params: {\n inputData?: z.infer<TInputSchema>;\n resumeData?: any;\n initialState?: z.infer<TState>;\n step:\n | Step<string, any, TInputSchema, any, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, TInputSchema, any, any>]\n | string\n | string[];\n context?: TimeTravelContext<any, any, any, any>;\n nestedStepsContext?: Record<string, TimeTravelContext<any, any, any, any>>;\n requestContext?: RequestContext;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const p = this._timeTravel(params).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n this.executionResults = p;\n return p;\n }\n\n async _timeTravel<TInputSchema extends z.ZodType<any>>(params: {\n inputData?: z.infer<TInputSchema>;\n resumeData?: any;\n initialState?: z.infer<TState>;\n step:\n | Step<string, any, TInputSchema, any, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, TInputSchema, any, any>]\n | string\n | string[];\n context?: TimeTravelContext<any, any, any, any>;\n nestedStepsContext?: Record<string, TimeTravelContext<any, any, any, any>>;\n requestContext?: RequestContext;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n if (!params.step || (Array.isArray(params.step) && params.step?.length === 0)) {\n throw new Error('Step is required and must be a valid step or array of steps');\n }\n\n let steps: string[] = [];\n if (typeof params.step === 'string') {\n steps = params.step.split('.');\n } else {\n steps = (Array.isArray(params.step) ? params.step : [params.step]).map(step =>\n typeof step === 'string' ? step : step?.id,\n );\n }\n\n if (steps.length === 0) {\n throw new Error('No steps provided to timeTravel');\n }\n\n const storage = this.#mastra?.getStorage();\n\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n\n if (!snapshot) {\n await storage?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n resourceId: this.resourceId,\n snapshot: {\n runId: this.runId,\n serializedStepGraph: this.serializedStepGraph,\n status: 'pending',\n value: {},\n context: {} as any,\n activePaths: [],\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n waitingPaths: {},\n timestamp: Date.now(),\n },\n });\n }\n\n if (snapshot?.status === 'running') {\n throw new Error('This workflow run is still running, cannot time travel');\n }\n\n let inputDataToUse = params.inputData;\n\n if (inputDataToUse && steps.length === 1) {\n inputDataToUse = await this._validateTimetravelInputData(params.inputData, this.workflowSteps[steps[0]!]!);\n }\n\n const timeTravelData = createTimeTravelExecutionParams({\n steps,\n inputData: inputDataToUse,\n resumeData: params.resumeData,\n context: params.context,\n nestedStepsContext: params.nestedStepsContext,\n snapshot: (snapshot ?? { context: {} }) as any,\n graph: this.executionGraph,\n initialState: params.initialState,\n });\n\n const eventOutput = await this.inngest.send({\n name: `workflow.${this.workflowId}`,\n data: {\n initialState: timeTravelData.state,\n runId: this.runId,\n workflowId: this.workflowId,\n stepResults: timeTravelData.stepResults,\n timeTravel: timeTravelData,\n tracingOptions: params.tracingOptions,\n outputOptions: params.outputOptions,\n requestContext: params.requestContext ? Object.fromEntries(params.requestContext.entries()) : {},\n },\n });\n\n const eventId = eventOutput.ids[0];\n if (!eventId) {\n throw new Error('Event ID is not set');\n }\n const runOutput = await this.getRunOutput(eventId);\n const result = runOutput?.output?.result;\n if (result.status === 'failed') {\n result.error = new Error(result.error);\n }\n return result;\n }\n\n watch(cb: (event: WorkflowStreamEvent) => void): () => void {\n let active = true;\n const streamPromise = subscribe(\n {\n channel: `workflow:${this.workflowId}:${this.runId}`,\n topics: ['watch'],\n app: this.inngest,\n },\n (message: any) => {\n if (active) {\n cb(message.data);\n }\n },\n );\n\n return () => {\n active = false;\n streamPromise\n .then(async (stream: Awaited<typeof streamPromise>) => {\n return stream.cancel();\n })\n .catch(err => {\n console.error(err);\n });\n };\n }\n\n streamLegacy({ inputData, requestContext }: { inputData?: z.infer<TInput>; requestContext?: RequestContext } = {}): {\n stream: ReadableStream<StreamEvent>;\n getWorkflowState: () => Promise<WorkflowResult<TState, TInput, TOutput, TSteps>>;\n } {\n const { readable, writable } = new TransformStream<StreamEvent, StreamEvent>();\n\n const writer = writable.getWriter();\n void writer.write({\n // @ts-ignore\n type: 'start',\n // @ts-ignore\n payload: { runId: this.runId },\n });\n\n const unwatch = this.watch(async event => {\n try {\n const e: any = {\n ...event,\n type: event.type.replace('workflow-', ''),\n };\n\n if (e.type === 'step-output') {\n e.type = e.payload.output.type;\n e.payload = e.payload.output.payload;\n }\n // watch events are data stream events, so we need to cast them to the correct type\n await writer.write(e as any);\n } catch {}\n });\n\n this.closeStreamAction = async () => {\n await writer.write({\n type: 'finish',\n // @ts-ignore\n payload: { runId: this.runId },\n });\n unwatch();\n\n try {\n await writer.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n } finally {\n writer.releaseLock();\n }\n };\n\n this.executionResults = this._start({ inputData, requestContext, format: 'legacy' }).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n return {\n stream: readable as ReadableStream<StreamEvent>,\n getWorkflowState: () => this.executionResults!,\n };\n }\n\n stream({\n inputData,\n requestContext,\n tracingOptions,\n closeOnSuspend = true,\n initialState,\n outputOptions,\n }: {\n inputData?: z.input<TInput>;\n requestContext?: RequestContext;\n tracingContext?: TracingContext;\n tracingOptions?: TracingOptions;\n closeOnSuspend?: boolean;\n initialState?: z.input<TState>;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n } = {}): ReturnType<Run<InngestEngineType, TSteps, TState, TInput, TOutput>['stream']> {\n if (this.closeStreamAction && this.streamOutput) {\n return this.streamOutput;\n }\n\n this.closeStreamAction = async () => {};\n\n const self = this;\n const stream = new ReadableStream<WorkflowStreamEvent>({\n async start(controller) {\n // TODO: fix this, watch doesn't have a type\n // @ts-ignore\n const unwatch = self.watch(async ({ type, from = ChunkFrom.WORKFLOW, payload }) => {\n controller.enqueue({\n type,\n runId: self.runId,\n from,\n payload: {\n stepName: (payload as unknown as { id: string })?.id,\n ...payload,\n },\n } as WorkflowStreamEvent);\n });\n\n self.closeStreamAction = async () => {\n unwatch();\n\n try {\n await controller.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n }\n };\n\n const executionResultsPromise = self._start({\n inputData,\n requestContext,\n // tracingContext, // We are not able to pass a reference to a span here, what to do?\n initialState,\n tracingOptions,\n outputOptions,\n format: 'vnext',\n });\n let executionResults;\n try {\n executionResults = await executionResultsPromise;\n\n if (closeOnSuspend) {\n // always close stream, even if the workflow is suspended\n // this will trigger a finish event with workflow status set to suspended\n self.closeStreamAction?.().catch(() => {});\n } else if (executionResults.status !== 'suspended') {\n self.closeStreamAction?.().catch(() => {});\n }\n if (self.streamOutput) {\n self.streamOutput.updateResults(\n executionResults as unknown as WorkflowResult<TState, TInput, TOutput, TSteps>,\n );\n }\n } catch (err) {\n self.streamOutput?.rejectResults(err as unknown as Error);\n self.closeStreamAction?.().catch(() => {});\n }\n },\n });\n\n this.streamOutput = new WorkflowRunOutput<WorkflowResult<TState, TInput, TOutput, TSteps>>({\n runId: this.runId,\n workflowId: this.workflowId,\n stream,\n });\n\n return this.streamOutput;\n }\n\n streamVNext(\n args: {\n inputData?: z.input<TInput>;\n requestContext?: RequestContext;\n tracingContext?: TracingContext;\n tracingOptions?: TracingOptions;\n closeOnSuspend?: boolean;\n initialState?: z.input<TState>;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n } = {},\n ): ReturnType<Run<InngestEngineType, TSteps, TState, TInput, TOutput>['stream']> {\n return this.stream(args);\n }\n\n timeTravelStream<TInputSchema extends z.ZodType<any>>({\n inputData,\n resumeData,\n initialState,\n step,\n context,\n nestedStepsContext,\n requestContext,\n tracingOptions,\n outputOptions,\n }: {\n inputData?: z.input<TInputSchema>;\n initialState?: z.input<TState>;\n resumeData?: any;\n step:\n | Step<string, any, TInputSchema, any, any, any, TEngineType>\n | [\n ...Step<string, any, any, any, any, any, TEngineType>[],\n Step<string, any, TInputSchema, any, any, any, TEngineType>,\n ]\n | string\n | string[];\n context?: TimeTravelContext<any, any, any, any>;\n nestedStepsContext?: Record<string, TimeTravelContext<any, any, any, any>>;\n requestContext?: RequestContext;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }) {\n this.closeStreamAction = async () => {};\n\n const self = this;\n const stream = new ReadableStream<WorkflowStreamEvent>({\n async start(controller) {\n // TODO: fix this, watch doesn't have a type\n // @ts-ignore\n const unwatch = self.watch(async ({ type, from = ChunkFrom.WORKFLOW, payload }) => {\n controller.enqueue({\n type,\n runId: self.runId,\n from,\n payload: {\n stepName: (payload as unknown as { id: string })?.id,\n ...payload,\n },\n } as WorkflowStreamEvent);\n });\n\n self.closeStreamAction = async () => {\n unwatch();\n\n try {\n controller.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n }\n };\n const executionResultsPromise = self._timeTravel({\n inputData,\n step,\n context,\n nestedStepsContext,\n resumeData,\n initialState,\n requestContext,\n tracingOptions,\n outputOptions,\n });\n\n self.executionResults = executionResultsPromise;\n\n let executionResults;\n try {\n executionResults = await executionResultsPromise;\n self.closeStreamAction?.().catch(() => {});\n\n if (self.streamOutput) {\n self.streamOutput.updateResults(executionResults);\n }\n } catch (err) {\n self.streamOutput?.rejectResults(err as unknown as Error);\n self.closeStreamAction?.().catch(() => {});\n }\n },\n });\n\n this.streamOutput = new WorkflowRunOutput<WorkflowResult<TState, TInput, TOutput, TSteps>>({\n runId: this.runId,\n workflowId: this.workflowId,\n stream,\n });\n\n return this.streamOutput;\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { WritableStream } from 'node:stream/web';\nimport { RequestContext } from '@mastra/core/di';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport { Workflow } from '@mastra/core/workflows';\nimport type {\n Step,\n WorkflowConfig,\n StepFlowEntry,\n WorkflowResult,\n WorkflowStreamEvent,\n Run,\n} from '@mastra/core/workflows';\nimport { NonRetriableError } from 'inngest';\nimport type { Inngest } from 'inngest';\nimport type { z } from 'zod';\nimport { InngestExecutionEngine } from './execution-engine';\nimport { InngestRun } from './run';\nimport type { InngestEngineType, InngestFlowControlConfig, InngestWorkflowConfig } from './types';\n\nexport class InngestWorkflow<\n TEngineType = InngestEngineType,\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 #mastra: Mastra;\n public inngest: Inngest;\n\n private function: ReturnType<Inngest['createFunction']> | undefined;\n private readonly flowControlConfig?: InngestFlowControlConfig;\n\n constructor(params: InngestWorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>, inngest: Inngest) {\n const { concurrency, rateLimit, throttle, debounce, priority, ...workflowParams } = params;\n\n super(workflowParams as WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>);\n\n this.engineType = 'inngest';\n\n const flowControlEntries = Object.entries({ concurrency, rateLimit, throttle, debounce, priority }).filter(\n ([_, value]) => value !== undefined,\n );\n\n this.flowControlConfig = flowControlEntries.length > 0 ? Object.fromEntries(flowControlEntries) : undefined;\n\n this.#mastra = params.mastra!;\n this.inngest = inngest;\n }\n\n async listWorkflowRuns(args?: {\n fromDate?: Date;\n toDate?: Date;\n perPage?: number | false;\n page?: number;\n resourceId?: string;\n }) {\n const storage = this.#mastra?.getStorage();\n if (!storage) {\n this.logger.debug('Cannot get workflow runs. Mastra engine is not initialized');\n return { runs: [], total: 0 };\n }\n\n return storage.listWorkflowRuns({ workflowName: this.id, ...(args ?? {}) }) as unknown as WorkflowRuns;\n }\n\n async getWorkflowRunById(runId: string): Promise<WorkflowRun | null> {\n const storage = this.#mastra?.getStorage();\n if (!storage) {\n this.logger.debug('Cannot get workflow runs. Mastra engine is not initialized');\n //returning in memory run if no storage is initialized\n return this.runs.get(runId)\n ? ({ ...this.runs.get(runId), workflowName: this.id } as unknown as WorkflowRun)\n : null;\n }\n const run = (await storage.getWorkflowRunById({ runId, workflowName: this.id })) as unknown as WorkflowRun;\n\n return (\n run ??\n (this.runs.get(runId) ? ({ ...this.runs.get(runId), workflowName: this.id } as unknown as WorkflowRun) : null)\n );\n }\n\n __registerMastra(mastra: Mastra) {\n this.#mastra = mastra;\n this.executionEngine.__registerMastra(mastra);\n const updateNested = (step: StepFlowEntry) => {\n if (\n (step.type === 'step' || step.type === 'loop' || step.type === 'foreach') &&\n step.step instanceof InngestWorkflow\n ) {\n step.step.__registerMastra(mastra);\n } else if (step.type === 'parallel' || step.type === 'conditional') {\n for (const subStep of step.steps) {\n updateNested(subStep);\n }\n }\n };\n\n if (this.executionGraph.steps.length) {\n for (const step of this.executionGraph.steps) {\n updateNested(step);\n }\n }\n }\n\n async createRun(options?: {\n runId?: string;\n resourceId?: string;\n }): 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 InngestRun(\n {\n workflowId: this.id,\n runId: runIdToUse,\n resourceId: options?.resourceId,\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 workflowEngineType: this.engineType,\n validateInputs: this.options.validateInputs,\n },\n this.inngest,\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 resourceId: options?.resourceId,\n snapshot: {\n runId: runIdToUse,\n status: 'pending',\n value: {},\n context: {},\n activePaths: [],\n activeStepsPath: {},\n waitingPaths: {},\n serializedStepGraph: this.serializedStepGraph,\n suspendedPaths: {},\n resumeLabels: {},\n result: undefined,\n error: undefined,\n timestamp: Date.now(),\n },\n });\n }\n\n return run;\n }\n\n getFunction() {\n if (this.function) {\n return this.function;\n }\n this.function = this.inngest.createFunction(\n {\n id: `workflow.${this.id}`,\n retries: Math.min(this.retryConfig?.attempts ?? 0, 20) as\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20,\n cancelOn: [{ event: `cancel.workflow.${this.id}` }],\n // Spread flow control configuration\n ...this.flowControlConfig,\n },\n { event: `workflow.${this.id}` },\n async ({ event, step, attempt, publish }) => {\n let { inputData, initialState, runId, resourceId, resume, outputOptions, format, timeTravel } = event.data;\n\n if (!runId) {\n runId = await step.run(`workflow.${this.id}.runIdGen`, async () => {\n return randomUUID();\n });\n }\n\n const emitter = {\n emit: async (event: string, data: any) => {\n if (!publish) {\n return;\n }\n\n try {\n await publish({\n channel: `workflow:${this.id}:${runId}`,\n topic: event,\n data,\n });\n } catch (err: any) {\n this.logger.error('Error emitting event: ' + (err?.stack ?? err?.message ?? err));\n }\n },\n on: (_event: string, _callback: (data: any) => void) => {\n // no-op\n },\n off: (_event: string, _callback: (data: any) => void) => {\n // no-op\n },\n once: (_event: string, _callback: (data: any) => void) => {\n // no-op\n },\n };\n\n const engine = new InngestExecutionEngine(this.#mastra, step, attempt, this.options);\n const result = await engine.execute<\n z.infer<TState>,\n z.infer<TInput>,\n WorkflowResult<TState, TInput, TOutput, TSteps>\n >({\n workflowId: this.id,\n runId,\n resourceId,\n graph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n input: inputData,\n initialState,\n emitter,\n retryConfig: this.retryConfig,\n requestContext: new RequestContext(Object.entries(event.data.requestContext ?? {})),\n resume,\n timeTravel,\n format,\n abortController: new AbortController(),\n // currentSpan: undefined, // TODO: Pass actual parent Span from workflow execution context\n outputOptions,\n writableStream: new WritableStream<WorkflowStreamEvent>({\n write(chunk) {\n void emitter.emit('watch', chunk).catch(() => {});\n },\n }),\n });\n\n // Final step to check workflow status and throw NonRetriableError if failed\n // This is needed to ensure that the Inngest workflow run is marked as failed instead of success\n await step.run(`workflow.${this.id}.finalize`, async () => {\n if (result.status === 'failed') {\n throw new NonRetriableError(`Workflow failed`, {\n cause: result,\n });\n }\n return result;\n });\n\n return { result, runId };\n },\n );\n return this.function;\n }\n\n getNestedFunctions(steps: StepFlowEntry[]): ReturnType<Inngest['createFunction']>[] {\n return steps.flatMap(step => {\n if (step.type === 'step' || step.type === 'loop' || step.type === 'foreach') {\n if (step.step instanceof InngestWorkflow) {\n return [step.step.getFunction(), ...step.step.getNestedFunctions(step.step.executionGraph.steps)];\n }\n return [];\n } else if (step.type === 'parallel' || step.type === 'conditional') {\n return this.getNestedFunctions(step.steps);\n }\n\n return [];\n });\n }\n\n getFunctions() {\n return [this.getFunction(), ...this.getNestedFunctions(this.executionGraph.steps)];\n }\n}\n","import type { Mastra } from '@mastra/core/mastra';\nimport type { Inngest, InngestFunction, RegisterOptions } from 'inngest';\nimport { serve as inngestServe } from 'inngest/hono';\nimport { InngestWorkflow } from './workflow';\n\nexport function serve({\n mastra,\n inngest,\n functions: userFunctions = [],\n registerOptions,\n}: {\n mastra: Mastra;\n inngest: Inngest;\n /**\n * Optional array of additional functions to serve and register with Inngest.\n */\n functions?: InngestFunction.Like[];\n registerOptions?: RegisterOptions;\n}): ReturnType<typeof inngestServe> {\n const wfs = mastra.listWorkflows();\n const workflowFunctions = Array.from(\n new Set(\n Object.values(wfs).flatMap(wf => {\n if (wf instanceof InngestWorkflow) {\n wf.__registerMastra(mastra);\n return wf.getFunctions();\n }\n return [];\n }),\n ),\n );\n\n return inngestServe({\n ...registerOptions,\n client: inngest,\n functions: [...workflowFunctions, ...userFunctions],\n });\n}\n","import type { Step, WorkflowConfig } from '@mastra/core/workflows';\nimport type { Inngest } from 'inngest';\nimport type z from 'zod';\n\n// Extract Inngest's native flow control configuration types\nexport type InngestCreateFunctionConfig = Parameters<Inngest['createFunction']>[0];\n\n// Extract specific flow control properties (excluding batching)\nexport type InngestFlowControlConfig = Pick<\n InngestCreateFunctionConfig,\n 'concurrency' | 'rateLimit' | 'throttle' | 'debounce' | 'priority'\n>;\n\n// Union type for Inngest workflows with flow control\nexport type InngestWorkflowConfig<\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>[] = Step<string, any, any, any, any, any>[],\n> = WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps> & InngestFlowControlConfig;\n\n// Compile-time compatibility assertion\nexport type _AssertInngestCompatibility =\n InngestFlowControlConfig extends Pick<Parameters<Inngest['createFunction']>[0], keyof InngestFlowControlConfig>\n ? true\n : never;\nexport const _compatibilityCheck: _AssertInngestCompatibility = true;\n\nexport type InngestEngineType = {\n step: any;\n};\n","import type { ReadableStream } from 'node:stream/web';\nimport type { Agent } from '@mastra/core/agent';\nimport type { ToolExecutionContext } from '@mastra/core/tools';\nimport { Tool } from '@mastra/core/tools';\nimport type { Step, AgentStepOptions, StepParams, ToolStep } from '@mastra/core/workflows';\nimport { Workflow } from '@mastra/core/workflows';\nimport { EMITTER_SYMBOL, STREAM_FORMAT_SYMBOL } from '@mastra/core/workflows/_constants';\nimport type { Inngest } from 'inngest';\nimport { z } from 'zod';\nimport type { InngestEngineType, InngestWorkflowConfig } from './types';\nimport { InngestWorkflow } from './workflow';\n\nexport * from './workflow';\nexport * from './execution-engine';\nexport * from './run';\nexport * from './serve';\nexport * from './types';\n\nfunction isAgent(params: any): params is Agent<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\nfunction isInngestWorkflow(params: any): params is InngestWorkflow {\n return params instanceof InngestWorkflow;\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>(\n params: StepParams<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema>,\n): Step<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, InngestEngineType>;\n\nexport function createStep<\n TStepId extends string,\n TStepInput extends z.ZodObject<{ prompt: z.ZodString }>,\n TStepOutput extends z.ZodObject<{ text: z.ZodString }>,\n TResumeSchema extends z.ZodType<any>,\n TSuspendSchema extends z.ZodType<any>,\n>(\n agent: Agent<TStepId, any>,\n agentOptions?: AgentStepOptions,\n): Step<TStepId, any, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, InngestEngineType>;\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<TSuspendSchema, TResumeSchema>,\n>(\n tool: ToolStep<TSchemaIn, TSuspendSchema, TResumeSchema, TSchemaOut, TContext>,\n): Step<string, any, TSchemaIn, TSchemaOut, z.ZodType<any>, z.ZodType<any>, InngestEngineType>;\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 | StepParams<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema>\n | Agent<any, any>\n | ToolStep<TStepInput, TSuspendSchema, TResumeSchema, TStepOutput, any>,\n agentOptions?: AgentStepOptions,\n): Step<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, InngestEngineType> {\n // Issue #9965: Preserve InngestWorkflow identity when passed to createStep\n // This ensures nested workflows in foreach are properly detected by isNestedWorkflowStep()\n if (isInngestWorkflow(params)) {\n return params as unknown as Step<\n TStepId,\n TState,\n TStepInput,\n TStepOutput,\n TResumeSchema,\n TSuspendSchema,\n InngestEngineType\n >;\n }\n\n if (isAgent(params)) {\n return {\n id: params.name as TStepId,\n description: params.getDescription(),\n inputSchema: z.object({\n prompt: z.string(),\n // resourceId: z.string().optional(),\n // threadId: z.string().optional(),\n }) as unknown as TStepInput,\n outputSchema: z.object({\n text: z.string(),\n }) as unknown as TStepOutput,\n execute: async ({\n inputData,\n [EMITTER_SYMBOL]: emitter,\n [STREAM_FORMAT_SYMBOL]: streamFormat,\n requestContext,\n tracingContext,\n abortSignal,\n abort,\n writer,\n }) => {\n let streamPromise = {} as {\n promise: Promise<string>;\n resolve: (value: string) => void;\n reject: (reason?: any) => void;\n };\n\n streamPromise.promise = new Promise((resolve, reject) => {\n streamPromise.resolve = resolve;\n streamPromise.reject = reject;\n });\n const toolData = {\n name: params.name,\n args: inputData,\n };\n\n let stream: ReadableStream<any>;\n\n if ((await params.getModel()).specificationVersion === 'v1') {\n const { fullStream } = await params.streamLegacy(inputData.prompt, {\n ...(agentOptions ?? {}),\n // resourceId: inputData.resourceId,\n // threadId: inputData.threadId,\n requestContext,\n tracingContext,\n onFinish: result => {\n streamPromise.resolve(result.text);\n void agentOptions?.onFinish?.(result);\n },\n abortSignal,\n });\n stream = fullStream as any;\n } else {\n const modelOutput = await params.stream(inputData.prompt, {\n ...(agentOptions ?? {}),\n requestContext,\n tracingContext,\n onFinish: result => {\n streamPromise.resolve(result.text);\n void agentOptions?.onFinish?.(result);\n },\n abortSignal,\n });\n\n stream = modelOutput.fullStream;\n }\n\n if (streamFormat === 'legacy') {\n await emitter.emit('watch', {\n type: 'tool-call-streaming-start',\n ...(toolData ?? {}),\n });\n for await (const chunk of stream) {\n if (chunk.type === 'text-delta') {\n await emitter.emit('watch', {\n type: 'tool-call-delta',\n ...(toolData ?? {}),\n argsTextDelta: chunk.textDelta,\n });\n }\n }\n await emitter.emit('watch', {\n type: 'tool-call-streaming-finish',\n ...(toolData ?? {}),\n });\n } else {\n for await (const chunk of stream) {\n await writer.write(chunk as any);\n }\n }\n\n if (abortSignal.aborted) {\n return abort();\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 id: params.id as unknown as TStepId,\n description: params.description,\n inputSchema: params.inputSchema,\n outputSchema: params.outputSchema,\n suspendSchema: params.suspendSchema,\n resumeSchema: params.resumeSchema,\n execute: async ({\n inputData,\n mastra,\n requestContext,\n tracingContext,\n suspend,\n resumeData,\n runId,\n workflowId,\n state,\n setState,\n }) => {\n // BREAKING CHANGE v1.0: Pass raw input as first arg, context as second\n const toolContext = {\n mastra,\n requestContext,\n tracingContext,\n workflow: {\n runId,\n resumeData,\n suspend,\n workflowId,\n state,\n setState,\n },\n };\n return params.execute(inputData, toolContext);\n },\n component: 'TOOL',\n };\n }\n\n return {\n id: params.id as TStepId,\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 init(inngest: Inngest) {\n return {\n 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, InngestEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n any,\n InngestEngineType\n >[],\n >(params: InngestWorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>) {\n return new InngestWorkflow<InngestEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TInput>(\n params,\n inngest,\n );\n },\n createStep,\n cloneStep<TStepId extends string>(\n step: Step<TStepId, any, any, any, any, any, InngestEngineType>,\n opts: { id: TStepId },\n ): Step<TStepId, any, any, any, any, any, InngestEngineType> {\n return {\n id: opts.id,\n description: step.description,\n inputSchema: step.inputSchema,\n outputSchema: step.outputSchema,\n resumeSchema: step.resumeSchema,\n suspendSchema: step.suspendSchema,\n stateSchema: step.stateSchema,\n execute: step.execute,\n retries: step.retries,\n scorers: step.scorers,\n component: step.component,\n };\n },\n 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, InngestEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n any,\n InngestEngineType\n >[],\n TPrevSchema extends z.ZodType<any> = TInput,\n >(\n workflow: Workflow<InngestEngineType, TSteps, string, TState, TInput, TOutput, TPrevSchema>,\n opts: { id: TWorkflowId },\n ): Workflow<InngestEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TPrevSchema> {\n const wf: Workflow<InngestEngineType, 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 options: workflow.options,\n });\n\n wf.setStepFlow(workflow.stepGraph);\n wf.commit();\n return wf;\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/execution-engine.ts","../src/run.ts","../src/workflow.ts","../src/serve.ts","../src/types.ts","../src/index.ts"],"names":["DefaultExecutionEngine","RetryAfterError","randomUUID","createTimeTravelExecutionParams","Run","subscribe","stream","ReadableStream","ChunkFrom","WorkflowRunOutput","Workflow","event","RequestContext","NonRetriableError","inngestServe","Tool","z","EMITTER_SYMBOL","STREAM_FORMAT_SYMBOL"],"mappings":"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","file":"index.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { DefaultExecutionEngine, createTimeTravelExecutionParams } from '@mastra/core/workflows';\nimport type {\n ExecutionContext,\n Step,\n StepResult,\n StepFailure,\n Emitter,\n ExecutionEngineOptions,\n TimeTravelExecutionParams,\n WorkflowResult,\n} from '@mastra/core/workflows';\nimport { RetryAfterError } from 'inngest';\nimport type { Inngest, BaseContext } from 'inngest';\nimport { InngestWorkflow } from './workflow';\n\nexport class InngestExecutionEngine extends DefaultExecutionEngine {\n private inngestStep: BaseContext<Inngest>['step'];\n private inngestAttempts: number;\n\n constructor(\n mastra: Mastra,\n inngestStep: BaseContext<Inngest>['step'],\n inngestAttempts: number = 0,\n options: ExecutionEngineOptions,\n ) {\n super({ mastra, options });\n this.inngestStep = inngestStep;\n this.inngestAttempts = inngestAttempts;\n }\n\n // =============================================================================\n // Hook Overrides\n // =============================================================================\n\n /**\n * Format errors with stack traces for better debugging in Inngest\n */\n protected formatResultError(error: Error | string | undefined, lastOutput: StepResult<any, any, any, any>): string {\n if (error instanceof Error) {\n return error.stack ?? error.message;\n }\n const outputError = (lastOutput as StepFailure<any, any, any, any>)?.error;\n if (outputError instanceof Error) {\n return outputError.message;\n }\n return outputError ?? (error as string) ?? 'Unknown error';\n }\n\n /**\n * Detect InngestWorkflow instances for special nested workflow handling\n */\n isNestedWorkflowStep(step: Step<any, any, any>): boolean {\n return step instanceof InngestWorkflow;\n }\n\n /**\n * Inngest requires requestContext serialization for memoization.\n * When steps are replayed, the original function doesn't re-execute,\n * so requestContext modifications must be captured and restored.\n */\n requiresDurableContextSerialization(): boolean {\n return true;\n }\n\n /**\n * Execute a step with retry logic for Inngest.\n * Retries are handled via step-level retry (RetryAfterError thrown INSIDE step.run()).\n * After retries exhausted, error propagates here and we return a failed result.\n */\n async executeStepWithRetry<T>(\n stepId: string,\n runStep: () => Promise<T>,\n params: {\n retries: number;\n delay: number;\n stepSpan?: any;\n workflowId: string;\n runId: string;\n },\n ): Promise<{ ok: true; result: T } | { ok: false; error: { status: 'failed'; error: string; endedAt: number } }> {\n try {\n // Pass retry config to wrapDurableOperation so RetryAfterError is thrown INSIDE step.run()\n const result = await this.wrapDurableOperation(stepId, runStep, { delay: params.delay });\n return { ok: true, result };\n } catch (e) {\n // After step-level retries exhausted, extract failure from error cause\n const cause = (e as any)?.cause;\n if (cause?.status === 'failed') {\n params.stepSpan?.error({\n error: e,\n attributes: { status: 'failed' },\n });\n return { ok: false, error: cause };\n }\n\n // Fallback for other errors\n const errorMessage = e instanceof Error ? e.message : String(e);\n params.stepSpan?.error({\n error: e,\n attributes: { status: 'failed' },\n });\n return {\n ok: false,\n error: {\n status: 'failed',\n error: `Error: ${errorMessage}`,\n endedAt: Date.now(),\n },\n };\n }\n }\n\n /**\n * Use Inngest's sleep primitive for durability\n */\n async executeSleepDuration(duration: number, sleepId: string, workflowId: string): Promise<void> {\n await this.inngestStep.sleep(`workflow.${workflowId}.sleep.${sleepId}`, duration < 0 ? 0 : duration);\n }\n\n /**\n * Use Inngest's sleepUntil primitive for durability\n */\n async executeSleepUntilDate(date: Date, sleepUntilId: string, workflowId: string): Promise<void> {\n await this.inngestStep.sleepUntil(`workflow.${workflowId}.sleepUntil.${sleepUntilId}`, date);\n }\n\n /**\n * Wrap durable operations in Inngest step.run() for durability.\n * If retryConfig is provided, throws RetryAfterError INSIDE step.run() to trigger\n * Inngest's step-level retry mechanism (not function-level retry).\n */\n async wrapDurableOperation<T>(\n operationId: string,\n operationFn: () => Promise<T>,\n retryConfig?: { delay: number },\n ): Promise<T> {\n return this.inngestStep.run(operationId, async () => {\n try {\n return await operationFn();\n } catch (e) {\n if (retryConfig) {\n // Throw RetryAfterError INSIDE step.run() to trigger step-level retry\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new RetryAfterError(errorMessage, retryConfig.delay, {\n cause: {\n status: 'failed',\n error: `Error: ${errorMessage}`,\n endedAt: Date.now(),\n },\n });\n }\n throw e; // Re-throw if no retry config\n }\n }) as Promise<T>;\n }\n\n /**\n * Provide Inngest step primitive in engine context\n */\n getEngineContext(): Record<string, any> {\n return { step: this.inngestStep };\n }\n\n /**\n * Execute nested InngestWorkflow using inngestStep.invoke() for durability.\n * This MUST be called directly (not inside step.run()) due to Inngest constraints.\n */\n async executeWorkflowStep(params: {\n step: Step<string, any, any>;\n stepResults: Record<string, StepResult<any, any, any, any>>;\n executionContext: ExecutionContext;\n resume?: {\n steps: string[];\n resumePayload: any;\n runId?: string;\n };\n timeTravel?: TimeTravelExecutionParams;\n prevOutput: any;\n inputData: any;\n emitter: Emitter;\n startedAt: number;\n }): Promise<StepResult<any, any, any, any> | null> {\n // Only handle InngestWorkflow instances\n if (!(params.step instanceof InngestWorkflow)) {\n return null;\n }\n\n const { step, stepResults, executionContext, resume, timeTravel, prevOutput, inputData, emitter, startedAt } =\n params;\n\n const isResume = !!resume?.steps?.length;\n let result: WorkflowResult<any, any, any, any>;\n let runId: string;\n\n const isTimeTravel = !!(timeTravel && timeTravel.steps?.length > 1 && timeTravel.steps[0] === step.id);\n\n try {\n if (isResume) {\n runId = stepResults[resume?.steps?.[0] ?? '']?.suspendPayload?.__workflow_meta?.runId ?? randomUUID();\n const snapshot: any = await this.mastra?.getStorage()?.loadWorkflowSnapshot({\n workflowName: step.id,\n runId: runId,\n });\n\n const invokeResp = (await this.inngestStep.invoke(`workflow.${executionContext.workflowId}.step.${step.id}`, {\n function: step.getFunction(),\n data: {\n inputData,\n initialState: executionContext.state ?? snapshot?.value ?? {},\n runId: runId,\n resume: {\n runId: runId,\n steps: resume.steps.slice(1),\n stepResults: snapshot?.context as any,\n resumePayload: resume.resumePayload,\n resumePath: resume.steps?.[1] ? (snapshot?.suspendedPaths?.[resume.steps?.[1]] as any) : undefined,\n },\n outputOptions: { includeState: true },\n },\n })) as any;\n result = invokeResp.result;\n runId = invokeResp.runId;\n executionContext.state = invokeResp.result.state;\n } else if (isTimeTravel) {\n const snapshot: any = (await this.mastra?.getStorage()?.loadWorkflowSnapshot({\n workflowName: step.id,\n runId: executionContext.runId,\n })) ?? { context: {} };\n const timeTravelParams = createTimeTravelExecutionParams({\n steps: timeTravel.steps.slice(1),\n inputData: timeTravel.inputData,\n resumeData: timeTravel.resumeData,\n context: (timeTravel.nestedStepResults?.[step.id] ?? {}) as any,\n nestedStepsContext: (timeTravel.nestedStepResults ?? {}) as any,\n snapshot,\n graph: step.buildExecutionGraph(),\n });\n const invokeResp = (await this.inngestStep.invoke(`workflow.${executionContext.workflowId}.step.${step.id}`, {\n function: step.getFunction(),\n data: {\n timeTravel: timeTravelParams,\n initialState: executionContext.state ?? {},\n runId: executionContext.runId,\n outputOptions: { includeState: true },\n },\n })) as any;\n result = invokeResp.result;\n runId = invokeResp.runId;\n executionContext.state = invokeResp.result.state;\n } else {\n const invokeResp = (await this.inngestStep.invoke(`workflow.${executionContext.workflowId}.step.${step.id}`, {\n function: step.getFunction(),\n data: {\n inputData,\n initialState: executionContext.state ?? {},\n outputOptions: { includeState: true },\n },\n })) as any;\n result = invokeResp.result;\n runId = invokeResp.runId;\n executionContext.state = invokeResp.result.state;\n }\n } catch (e) {\n // Nested workflow threw an error (likely from finalization step)\n // The error cause should contain the workflow result with runId\n const errorCause = (e as any)?.cause;\n\n // Try to extract runId from error cause or generate new one\n if (errorCause && typeof errorCause === 'object') {\n result = errorCause as WorkflowResult<any, any, any, any>;\n // The runId might be in the result's steps metadata\n runId = errorCause.runId || randomUUID();\n } else {\n // Fallback: if we can't get the result from error, construct a basic failed result\n runId = randomUUID();\n result = {\n status: 'failed',\n error: e instanceof Error ? e : new Error(String(e)),\n steps: {},\n input: inputData,\n } as WorkflowResult<any, any, any, any>;\n }\n }\n\n const res = await this.inngestStep.run(\n `workflow.${executionContext.workflowId}.step.${step.id}.nestedwf-results`,\n async () => {\n if (result.status === 'failed') {\n await emitter.emit('watch', {\n type: 'workflow-step-result',\n payload: {\n id: step.id,\n status: 'failed',\n error: result?.error,\n payload: prevOutput,\n },\n });\n\n return { executionContext, result: { status: 'failed', error: result?.error } };\n } else if (result.status === 'suspended') {\n const suspendedSteps = Object.entries(result.steps).filter(([_stepName, stepResult]) => {\n const stepRes: StepResult<any, any, any, any> = stepResult as StepResult<any, any, any, any>;\n return stepRes?.status === 'suspended';\n });\n\n for (const [stepName, stepResult] of suspendedSteps) {\n const suspendPath: string[] = [stepName, ...(stepResult?.suspendPayload?.__workflow_meta?.path ?? [])];\n executionContext.suspendedPaths[step.id] = executionContext.executionPath;\n\n await emitter.emit('watch', {\n type: 'workflow-step-suspended',\n payload: {\n id: step.id,\n status: 'suspended',\n },\n });\n\n return {\n executionContext,\n result: {\n status: 'suspended',\n payload: stepResult.payload,\n suspendPayload: {\n ...(stepResult as any)?.suspendPayload,\n __workflow_meta: { runId: runId, path: suspendPath },\n },\n },\n };\n }\n\n return {\n executionContext,\n result: {\n status: 'suspended',\n payload: {},\n },\n };\n }\n\n await emitter.emit('watch', {\n type: 'workflow-step-result',\n payload: {\n id: step.id,\n status: 'success',\n output: result?.result,\n },\n });\n\n await emitter.emit('watch', {\n type: 'workflow-step-finish',\n payload: {\n id: step.id,\n metadata: {},\n },\n });\n\n return { executionContext, result: { status: 'success', output: result?.result } };\n },\n );\n\n Object.assign(executionContext, res.executionContext);\n return {\n ...res.result,\n startedAt,\n endedAt: Date.now(),\n payload: inputData,\n resumedAt: resume?.steps[0] === step.id ? startedAt : undefined,\n resumePayload: resume?.steps[0] === step.id ? resume?.resumePayload : undefined,\n } as StepResult<any, any, any, any>;\n }\n}\n","import { ReadableStream } from 'node:stream/web';\nimport { subscribe } from '@inngest/realtime';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { TracingContext, TracingOptions } from '@mastra/core/observability';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { WorkflowRunOutput, ChunkFrom } from '@mastra/core/stream';\nimport { createTimeTravelExecutionParams, Run } from '@mastra/core/workflows';\nimport type {\n ExecutionEngine,\n ExecutionGraph,\n SerializedStepFlowEntry,\n Step,\n StepWithComponent,\n StreamEvent,\n TimeTravelContext,\n WorkflowEngineType,\n WorkflowResult,\n WorkflowStreamEvent,\n} from '@mastra/core/workflows';\nimport type { Inngest } from 'inngest';\nimport type z from 'zod';\nimport type { InngestEngineType } from './types';\n\nexport class InngestRun<\n TEngineType = InngestEngineType,\n TSteps extends Step<string, any, any, any, any, any, any>[] = Step<string, any, any, any, any, 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 private inngest: Inngest;\n serializedStepGraph: SerializedStepFlowEntry[];\n #mastra: Mastra;\n\n constructor(\n params: {\n workflowId: string;\n runId: string;\n resourceId?: 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 workflowEngineType: WorkflowEngineType;\n validateInputs?: boolean;\n },\n inngest: Inngest,\n ) {\n super(params);\n this.inngest = inngest;\n this.serializedStepGraph = params.serializedStepGraph;\n this.#mastra = params.mastra!;\n }\n\n async getRuns(eventId: string) {\n const response = await fetch(`${this.inngest.apiBaseUrl ?? 'https://api.inngest.com'}/v1/events/${eventId}/runs`, {\n headers: {\n Authorization: `Bearer ${process.env.INNGEST_SIGNING_KEY}`,\n },\n });\n const json = await response.json();\n return (json as any).data;\n }\n\n async getRunOutput(eventId: string) {\n let runs = await this.getRuns(eventId);\n const storage = this.#mastra?.getStorage();\n\n while (runs?.[0]?.status !== 'Completed' || runs?.[0]?.event_id !== eventId) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n runs = await this.getRuns(eventId);\n\n if (runs?.[0]?.status === 'Failed') {\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n return {\n output: { result: { steps: snapshot?.context, status: 'failed', error: runs?.[0]?.output?.message } },\n };\n }\n\n if (runs?.[0]?.status === 'Cancelled') {\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n return { output: { result: { steps: snapshot?.context, status: 'canceled' } } };\n }\n }\n return runs?.[0];\n }\n\n async cancel() {\n const storage = this.#mastra?.getStorage();\n\n await this.inngest.send({\n name: `cancel.workflow.${this.workflowId}`,\n data: {\n runId: this.runId,\n },\n });\n\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n if (snapshot) {\n await storage?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n resourceId: this.resourceId,\n snapshot: {\n ...snapshot,\n status: 'canceled' as any,\n value: snapshot.value,\n },\n });\n }\n }\n\n async start(params: {\n inputData?: z.infer<TInput>;\n requestContext?: RequestContext;\n initialState?: z.infer<TState>;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n return this._start(params);\n }\n\n async _start({\n inputData,\n initialState,\n outputOptions,\n tracingOptions,\n format,\n requestContext,\n }: {\n inputData?: z.infer<TInput>;\n requestContext?: RequestContext;\n initialState?: z.infer<TState>;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n format?: 'legacy' | 'vnext' | undefined;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n await this.#mastra.getStorage()?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n resourceId: this.resourceId,\n snapshot: {\n runId: this.runId,\n serializedStepGraph: this.serializedStepGraph,\n status: 'running',\n value: {},\n context: {} as any,\n activePaths: [],\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n waitingPaths: {},\n timestamp: Date.now(),\n },\n });\n\n const inputDataToUse = await this._validateInput(inputData);\n const initialStateToUse = await this._validateInitialState(initialState ?? {});\n\n const eventOutput = await this.inngest.send({\n name: `workflow.${this.workflowId}`,\n data: {\n inputData: inputDataToUse,\n initialState: initialStateToUse,\n runId: this.runId,\n resourceId: this.resourceId,\n outputOptions,\n tracingOptions,\n format,\n requestContext: requestContext ? Object.fromEntries(requestContext.entries()) : {},\n },\n });\n\n const eventId = eventOutput.ids[0];\n if (!eventId) {\n throw new Error('Event ID is not set');\n }\n const runOutput = await this.getRunOutput(eventId);\n const result = runOutput?.output?.result;\n\n if (result.status === 'failed') {\n result.error = new Error(result.error);\n }\n\n if (result.status !== 'suspended') {\n this.cleanup?.();\n }\n return result;\n }\n\n async resume<TResumeSchema extends z.ZodType<any>>(params: {\n resumeData?: z.infer<TResumeSchema>;\n step:\n | Step<string, any, any, TResumeSchema, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, any, TResumeSchema, any>]\n | string\n | string[];\n requestContext?: RequestContext;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const p = this._resume(params).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n this.executionResults = p;\n return p;\n }\n\n async _resume<TResumeSchema extends z.ZodType<any>>(params: {\n resumeData?: z.infer<TResumeSchema>;\n step:\n | Step<string, any, any, TResumeSchema, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, any, TResumeSchema, any>]\n | string\n | string[];\n requestContext?: RequestContext;\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const storage = this.#mastra?.getStorage();\n\n let steps: string[] = [];\n if (typeof params.step === 'string') {\n steps = params.step.split('.');\n } else {\n steps = (Array.isArray(params.step) ? params.step : [params.step]).map(step =>\n typeof step === 'string' ? step : step?.id,\n );\n }\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n\n const suspendedStep = this.workflowSteps[steps?.[0] ?? ''];\n\n const resumeDataToUse = await this._validateResumeData(params.resumeData, suspendedStep);\n\n // Merge persisted requestContext from snapshot with any new values from params\n const persistedRequestContext = (snapshot as any)?.requestContext ?? {};\n const newRequestContext = params.requestContext ? Object.fromEntries(params.requestContext.entries()) : {};\n const mergedRequestContext = { ...persistedRequestContext, ...newRequestContext };\n\n const eventOutput = await this.inngest.send({\n name: `workflow.${this.workflowId}`,\n data: {\n inputData: resumeDataToUse,\n initialState: snapshot?.value ?? {},\n runId: this.runId,\n workflowId: this.workflowId,\n stepResults: snapshot?.context as any,\n resume: {\n steps,\n stepResults: snapshot?.context as any,\n resumePayload: resumeDataToUse,\n resumePath: steps?.[0] ? (snapshot?.suspendedPaths?.[steps?.[0]] as any) : undefined,\n },\n requestContext: mergedRequestContext,\n },\n });\n\n const eventId = eventOutput.ids[0];\n if (!eventId) {\n throw new Error('Event ID is not set');\n }\n const runOutput = await this.getRunOutput(eventId);\n const result = runOutput?.output?.result;\n if (result.status === 'failed') {\n result.error = new Error(result.error);\n }\n return result;\n }\n\n async timeTravel<TInputSchema extends z.ZodType<any>>(params: {\n inputData?: z.infer<TInputSchema>;\n resumeData?: any;\n initialState?: z.infer<TState>;\n step:\n | Step<string, any, TInputSchema, any, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, TInputSchema, any, any>]\n | string\n | string[];\n context?: TimeTravelContext<any, any, any, any>;\n nestedStepsContext?: Record<string, TimeTravelContext<any, any, any, any>>;\n requestContext?: RequestContext;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n const p = this._timeTravel(params).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n this.executionResults = p;\n return p;\n }\n\n async _timeTravel<TInputSchema extends z.ZodType<any>>(params: {\n inputData?: z.infer<TInputSchema>;\n resumeData?: any;\n initialState?: z.infer<TState>;\n step:\n | Step<string, any, TInputSchema, any, any>\n | [...Step<string, any, any, any, any>[], Step<string, any, TInputSchema, any, any>]\n | string\n | string[];\n context?: TimeTravelContext<any, any, any, any>;\n nestedStepsContext?: Record<string, TimeTravelContext<any, any, any, any>>;\n requestContext?: RequestContext;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }): Promise<WorkflowResult<TState, TInput, TOutput, TSteps>> {\n if (!params.step || (Array.isArray(params.step) && params.step?.length === 0)) {\n throw new Error('Step is required and must be a valid step or array of steps');\n }\n\n let steps: string[] = [];\n if (typeof params.step === 'string') {\n steps = params.step.split('.');\n } else {\n steps = (Array.isArray(params.step) ? params.step : [params.step]).map(step =>\n typeof step === 'string' ? step : step?.id,\n );\n }\n\n if (steps.length === 0) {\n throw new Error('No steps provided to timeTravel');\n }\n\n const storage = this.#mastra?.getStorage();\n\n const snapshot = await storage?.loadWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n });\n\n if (!snapshot) {\n await storage?.persistWorkflowSnapshot({\n workflowName: this.workflowId,\n runId: this.runId,\n resourceId: this.resourceId,\n snapshot: {\n runId: this.runId,\n serializedStepGraph: this.serializedStepGraph,\n status: 'pending',\n value: {},\n context: {} as any,\n activePaths: [],\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n waitingPaths: {},\n timestamp: Date.now(),\n },\n });\n }\n\n if (snapshot?.status === 'running') {\n throw new Error('This workflow run is still running, cannot time travel');\n }\n\n let inputDataToUse = params.inputData;\n\n if (inputDataToUse && steps.length === 1) {\n inputDataToUse = await this._validateTimetravelInputData(params.inputData, this.workflowSteps[steps[0]!]!);\n }\n\n const timeTravelData = createTimeTravelExecutionParams({\n steps,\n inputData: inputDataToUse,\n resumeData: params.resumeData,\n context: params.context,\n nestedStepsContext: params.nestedStepsContext,\n snapshot: (snapshot ?? { context: {} }) as any,\n graph: this.executionGraph,\n initialState: params.initialState,\n });\n\n const eventOutput = await this.inngest.send({\n name: `workflow.${this.workflowId}`,\n data: {\n initialState: timeTravelData.state,\n runId: this.runId,\n workflowId: this.workflowId,\n stepResults: timeTravelData.stepResults,\n timeTravel: timeTravelData,\n tracingOptions: params.tracingOptions,\n outputOptions: params.outputOptions,\n requestContext: params.requestContext ? Object.fromEntries(params.requestContext.entries()) : {},\n },\n });\n\n const eventId = eventOutput.ids[0];\n if (!eventId) {\n throw new Error('Event ID is not set');\n }\n const runOutput = await this.getRunOutput(eventId);\n const result = runOutput?.output?.result;\n if (result.status === 'failed') {\n result.error = new Error(result.error);\n }\n return result;\n }\n\n watch(cb: (event: WorkflowStreamEvent) => void): () => void {\n let active = true;\n const streamPromise = subscribe(\n {\n channel: `workflow:${this.workflowId}:${this.runId}`,\n topics: ['watch'],\n app: this.inngest,\n },\n (message: any) => {\n if (active) {\n cb(message.data);\n }\n },\n );\n\n return () => {\n active = false;\n streamPromise\n .then(async (stream: Awaited<typeof streamPromise>) => {\n return stream.cancel();\n })\n .catch(err => {\n console.error(err);\n });\n };\n }\n\n streamLegacy({ inputData, requestContext }: { inputData?: z.infer<TInput>; requestContext?: RequestContext } = {}): {\n stream: ReadableStream<StreamEvent>;\n getWorkflowState: () => Promise<WorkflowResult<TState, TInput, TOutput, TSteps>>;\n } {\n const { readable, writable } = new TransformStream<StreamEvent, StreamEvent>();\n\n const writer = writable.getWriter();\n void writer.write({\n // @ts-ignore\n type: 'start',\n // @ts-ignore\n payload: { runId: this.runId },\n });\n\n const unwatch = this.watch(async event => {\n try {\n const e: any = {\n ...event,\n type: event.type.replace('workflow-', ''),\n };\n\n if (e.type === 'step-output') {\n e.type = e.payload.output.type;\n e.payload = e.payload.output.payload;\n }\n // watch events are data stream events, so we need to cast them to the correct type\n await writer.write(e as any);\n } catch {}\n });\n\n this.closeStreamAction = async () => {\n await writer.write({\n type: 'finish',\n // @ts-ignore\n payload: { runId: this.runId },\n });\n unwatch();\n\n try {\n await writer.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n } finally {\n writer.releaseLock();\n }\n };\n\n this.executionResults = this._start({ inputData, requestContext, format: 'legacy' }).then(result => {\n if (result.status !== 'suspended') {\n this.closeStreamAction?.().catch(() => {});\n }\n\n return result;\n });\n\n return {\n stream: readable as ReadableStream<StreamEvent>,\n getWorkflowState: () => this.executionResults!,\n };\n }\n\n stream({\n inputData,\n requestContext,\n tracingOptions,\n closeOnSuspend = true,\n initialState,\n outputOptions,\n }: {\n inputData?: z.input<TInput>;\n requestContext?: RequestContext;\n tracingContext?: TracingContext;\n tracingOptions?: TracingOptions;\n closeOnSuspend?: boolean;\n initialState?: z.input<TState>;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n } = {}): ReturnType<Run<InngestEngineType, TSteps, TState, TInput, TOutput>['stream']> {\n if (this.closeStreamAction && this.streamOutput) {\n return this.streamOutput;\n }\n\n this.closeStreamAction = async () => {};\n\n const self = this;\n const stream = new ReadableStream<WorkflowStreamEvent>({\n async start(controller) {\n // TODO: fix this, watch doesn't have a type\n // @ts-ignore\n const unwatch = self.watch(async ({ type, from = ChunkFrom.WORKFLOW, payload }) => {\n controller.enqueue({\n type,\n runId: self.runId,\n from,\n payload: {\n stepName: (payload as unknown as { id: string })?.id,\n ...payload,\n },\n } as WorkflowStreamEvent);\n });\n\n self.closeStreamAction = async () => {\n unwatch();\n\n try {\n await controller.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n }\n };\n\n const executionResultsPromise = self._start({\n inputData,\n requestContext,\n // tracingContext, // We are not able to pass a reference to a span here, what to do?\n initialState,\n tracingOptions,\n outputOptions,\n format: 'vnext',\n });\n let executionResults;\n try {\n executionResults = await executionResultsPromise;\n\n if (closeOnSuspend) {\n // always close stream, even if the workflow is suspended\n // this will trigger a finish event with workflow status set to suspended\n self.closeStreamAction?.().catch(() => {});\n } else if (executionResults.status !== 'suspended') {\n self.closeStreamAction?.().catch(() => {});\n }\n if (self.streamOutput) {\n self.streamOutput.updateResults(\n executionResults as unknown as WorkflowResult<TState, TInput, TOutput, TSteps>,\n );\n }\n } catch (err) {\n self.streamOutput?.rejectResults(err as unknown as Error);\n self.closeStreamAction?.().catch(() => {});\n }\n },\n });\n\n this.streamOutput = new WorkflowRunOutput<WorkflowResult<TState, TInput, TOutput, TSteps>>({\n runId: this.runId,\n workflowId: this.workflowId,\n stream,\n });\n\n return this.streamOutput;\n }\n\n streamVNext(\n args: {\n inputData?: z.input<TInput>;\n requestContext?: RequestContext;\n tracingContext?: TracingContext;\n tracingOptions?: TracingOptions;\n closeOnSuspend?: boolean;\n initialState?: z.input<TState>;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n } = {},\n ): ReturnType<Run<InngestEngineType, TSteps, TState, TInput, TOutput>['stream']> {\n return this.stream(args);\n }\n\n timeTravelStream<TInputSchema extends z.ZodType<any>>({\n inputData,\n resumeData,\n initialState,\n step,\n context,\n nestedStepsContext,\n requestContext,\n tracingOptions,\n outputOptions,\n }: {\n inputData?: z.input<TInputSchema>;\n initialState?: z.input<TState>;\n resumeData?: any;\n step:\n | Step<string, any, TInputSchema, any, any, any, TEngineType>\n | [\n ...Step<string, any, any, any, any, any, TEngineType>[],\n Step<string, any, TInputSchema, any, any, any, TEngineType>,\n ]\n | string\n | string[];\n context?: TimeTravelContext<any, any, any, any>;\n nestedStepsContext?: Record<string, TimeTravelContext<any, any, any, any>>;\n requestContext?: RequestContext;\n tracingOptions?: TracingOptions;\n outputOptions?: {\n includeState?: boolean;\n includeResumeLabels?: boolean;\n };\n }) {\n this.closeStreamAction = async () => {};\n\n const self = this;\n const stream = new ReadableStream<WorkflowStreamEvent>({\n async start(controller) {\n // TODO: fix this, watch doesn't have a type\n // @ts-ignore\n const unwatch = self.watch(async ({ type, from = ChunkFrom.WORKFLOW, payload }) => {\n controller.enqueue({\n type,\n runId: self.runId,\n from,\n payload: {\n stepName: (payload as unknown as { id: string })?.id,\n ...payload,\n },\n } as WorkflowStreamEvent);\n });\n\n self.closeStreamAction = async () => {\n unwatch();\n\n try {\n controller.close();\n } catch (err) {\n console.error('Error closing stream:', err);\n }\n };\n const executionResultsPromise = self._timeTravel({\n inputData,\n step,\n context,\n nestedStepsContext,\n resumeData,\n initialState,\n requestContext,\n tracingOptions,\n outputOptions,\n });\n\n self.executionResults = executionResultsPromise;\n\n let executionResults;\n try {\n executionResults = await executionResultsPromise;\n self.closeStreamAction?.().catch(() => {});\n\n if (self.streamOutput) {\n self.streamOutput.updateResults(executionResults);\n }\n } catch (err) {\n self.streamOutput?.rejectResults(err as unknown as Error);\n self.closeStreamAction?.().catch(() => {});\n }\n },\n });\n\n this.streamOutput = new WorkflowRunOutput<WorkflowResult<TState, TInput, TOutput, TSteps>>({\n runId: this.runId,\n workflowId: this.workflowId,\n stream,\n });\n\n return this.streamOutput;\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { RequestContext } from '@mastra/core/di';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport { Workflow } from '@mastra/core/workflows';\nimport type {\n Step,\n WorkflowConfig,\n StepFlowEntry,\n WorkflowResult,\n WorkflowStreamEvent,\n Run,\n} from '@mastra/core/workflows';\nimport { NonRetriableError } from 'inngest';\nimport type { Inngest } from 'inngest';\nimport type { z } from 'zod';\nimport { InngestExecutionEngine } from './execution-engine';\nimport { InngestRun } from './run';\nimport type { InngestEngineType, InngestFlowControlConfig, InngestWorkflowConfig } from './types';\n\nexport class InngestWorkflow<\n TEngineType = InngestEngineType,\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 #mastra: Mastra;\n public inngest: Inngest;\n\n private function: ReturnType<Inngest['createFunction']> | undefined;\n private readonly flowControlConfig?: InngestFlowControlConfig;\n\n constructor(params: InngestWorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>, inngest: Inngest) {\n const { concurrency, rateLimit, throttle, debounce, priority, ...workflowParams } = params;\n\n super(workflowParams as WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>);\n\n this.engineType = 'inngest';\n\n const flowControlEntries = Object.entries({ concurrency, rateLimit, throttle, debounce, priority }).filter(\n ([_, value]) => value !== undefined,\n );\n\n this.flowControlConfig = flowControlEntries.length > 0 ? Object.fromEntries(flowControlEntries) : undefined;\n\n this.#mastra = params.mastra!;\n this.inngest = inngest;\n }\n\n async listWorkflowRuns(args?: {\n fromDate?: Date;\n toDate?: Date;\n perPage?: number | false;\n page?: number;\n resourceId?: string;\n }) {\n const storage = this.#mastra?.getStorage();\n if (!storage) {\n this.logger.debug('Cannot get workflow runs. Mastra engine is not initialized');\n return { runs: [], total: 0 };\n }\n\n return storage.listWorkflowRuns({ workflowName: this.id, ...(args ?? {}) }) as unknown as WorkflowRuns;\n }\n\n async getWorkflowRunById(runId: string): Promise<WorkflowRun | null> {\n const storage = this.#mastra?.getStorage();\n if (!storage) {\n this.logger.debug('Cannot get workflow runs. Mastra engine is not initialized');\n //returning in memory run if no storage is initialized\n return this.runs.get(runId)\n ? ({ ...this.runs.get(runId), workflowName: this.id } as unknown as WorkflowRun)\n : null;\n }\n const run = (await storage.getWorkflowRunById({ runId, workflowName: this.id })) as unknown as WorkflowRun;\n\n return (\n run ??\n (this.runs.get(runId) ? ({ ...this.runs.get(runId), workflowName: this.id } as unknown as WorkflowRun) : null)\n );\n }\n\n __registerMastra(mastra: Mastra) {\n this.#mastra = mastra;\n this.executionEngine.__registerMastra(mastra);\n const updateNested = (step: StepFlowEntry) => {\n if (\n (step.type === 'step' || step.type === 'loop' || step.type === 'foreach') &&\n step.step instanceof InngestWorkflow\n ) {\n step.step.__registerMastra(mastra);\n } else if (step.type === 'parallel' || step.type === 'conditional') {\n for (const subStep of step.steps) {\n updateNested(subStep);\n }\n }\n };\n\n if (this.executionGraph.steps.length) {\n for (const step of this.executionGraph.steps) {\n updateNested(step);\n }\n }\n }\n\n async createRun(options?: {\n runId?: string;\n resourceId?: string;\n }): 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 InngestRun(\n {\n workflowId: this.id,\n runId: runIdToUse,\n resourceId: options?.resourceId,\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 workflowEngineType: this.engineType,\n validateInputs: this.options.validateInputs,\n },\n this.inngest,\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 resourceId: options?.resourceId,\n snapshot: {\n runId: runIdToUse,\n status: 'pending',\n value: {},\n context: {},\n activePaths: [],\n activeStepsPath: {},\n waitingPaths: {},\n serializedStepGraph: this.serializedStepGraph,\n suspendedPaths: {},\n resumeLabels: {},\n result: undefined,\n error: undefined,\n timestamp: Date.now(),\n },\n });\n }\n\n return run;\n }\n\n getFunction() {\n if (this.function) {\n return this.function;\n }\n this.function = this.inngest.createFunction(\n {\n id: `workflow.${this.id}`,\n retries: Math.min(this.retryConfig?.attempts ?? 0, 20) as\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20,\n cancelOn: [{ event: `cancel.workflow.${this.id}` }],\n // Spread flow control configuration\n ...this.flowControlConfig,\n },\n { event: `workflow.${this.id}` },\n async ({ event, step, attempt, publish }) => {\n let { inputData, initialState, runId, resourceId, resume, outputOptions, format, timeTravel } = event.data;\n\n if (!runId) {\n runId = await step.run(`workflow.${this.id}.runIdGen`, async () => {\n return randomUUID();\n });\n }\n\n const emitter = {\n emit: async (event: string, data: any) => {\n if (!publish) {\n return;\n }\n\n try {\n await publish({\n channel: `workflow:${this.id}:${runId}`,\n topic: event,\n data,\n });\n } catch (err: any) {\n this.logger.error('Error emitting event: ' + (err?.stack ?? err?.message ?? err));\n }\n },\n on: (_event: string, _callback: (data: any) => void) => {\n // no-op\n },\n off: (_event: string, _callback: (data: any) => void) => {\n // no-op\n },\n once: (_event: string, _callback: (data: any) => void) => {\n // no-op\n },\n };\n\n const engine = new InngestExecutionEngine(this.#mastra, step, attempt, this.options);\n const result = await engine.execute<\n z.infer<TState>,\n z.infer<TInput>,\n WorkflowResult<TState, TInput, TOutput, TSteps>\n >({\n workflowId: this.id,\n runId,\n resourceId,\n graph: this.executionGraph,\n serializedStepGraph: this.serializedStepGraph,\n input: inputData,\n initialState,\n emitter,\n retryConfig: this.retryConfig,\n requestContext: new RequestContext(Object.entries(event.data.requestContext ?? {})),\n resume,\n timeTravel,\n format,\n abortController: new AbortController(),\n // currentSpan: undefined, // TODO: Pass actual parent Span from workflow execution context\n outputOptions,\n outputWriter: async (chunk: WorkflowStreamEvent) => {\n void emitter.emit('watch', chunk).catch(() => {});\n },\n });\n\n // Final step to check workflow status and throw NonRetriableError if failed\n // This is needed to ensure that the Inngest workflow run is marked as failed instead of success\n await step.run(`workflow.${this.id}.finalize`, async () => {\n if (result.status === 'failed') {\n throw new NonRetriableError(`Workflow failed`, {\n cause: result,\n });\n }\n return result;\n });\n\n return { result, runId };\n },\n );\n return this.function;\n }\n\n getNestedFunctions(steps: StepFlowEntry[]): ReturnType<Inngest['createFunction']>[] {\n return steps.flatMap(step => {\n if (step.type === 'step' || step.type === 'loop' || step.type === 'foreach') {\n if (step.step instanceof InngestWorkflow) {\n return [step.step.getFunction(), ...step.step.getNestedFunctions(step.step.executionGraph.steps)];\n }\n return [];\n } else if (step.type === 'parallel' || step.type === 'conditional') {\n return this.getNestedFunctions(step.steps);\n }\n\n return [];\n });\n }\n\n getFunctions() {\n return [this.getFunction(), ...this.getNestedFunctions(this.executionGraph.steps)];\n }\n}\n","import type { Mastra } from '@mastra/core/mastra';\nimport type { Inngest, InngestFunction, RegisterOptions } from 'inngest';\nimport { serve as inngestServe } from 'inngest/hono';\nimport { InngestWorkflow } from './workflow';\n\nexport function serve({\n mastra,\n inngest,\n functions: userFunctions = [],\n registerOptions,\n}: {\n mastra: Mastra;\n inngest: Inngest;\n /**\n * Optional array of additional functions to serve and register with Inngest.\n */\n functions?: InngestFunction.Like[];\n registerOptions?: RegisterOptions;\n}): ReturnType<typeof inngestServe> {\n const wfs = mastra.listWorkflows();\n const workflowFunctions = Array.from(\n new Set(\n Object.values(wfs).flatMap(wf => {\n if (wf instanceof InngestWorkflow) {\n wf.__registerMastra(mastra);\n return wf.getFunctions();\n }\n return [];\n }),\n ),\n );\n\n return inngestServe({\n ...registerOptions,\n client: inngest,\n functions: [...workflowFunctions, ...userFunctions],\n });\n}\n","import type { Step, WorkflowConfig } from '@mastra/core/workflows';\nimport type { Inngest } from 'inngest';\nimport type z from 'zod';\n\n// Extract Inngest's native flow control configuration types\nexport type InngestCreateFunctionConfig = Parameters<Inngest['createFunction']>[0];\n\n// Extract specific flow control properties (excluding batching)\nexport type InngestFlowControlConfig = Pick<\n InngestCreateFunctionConfig,\n 'concurrency' | 'rateLimit' | 'throttle' | 'debounce' | 'priority'\n>;\n\n// Union type for Inngest workflows with flow control\nexport type InngestWorkflowConfig<\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>[] = Step<string, any, any, any, any, any>[],\n> = WorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps> & InngestFlowControlConfig;\n\n// Compile-time compatibility assertion\nexport type _AssertInngestCompatibility =\n InngestFlowControlConfig extends Pick<Parameters<Inngest['createFunction']>[0], keyof InngestFlowControlConfig>\n ? true\n : never;\nexport const _compatibilityCheck: _AssertInngestCompatibility = true;\n\nexport type InngestEngineType = {\n step: any;\n};\n","import type { ReadableStream } from 'node:stream/web';\nimport type { Agent } from '@mastra/core/agent';\nimport type { ToolExecutionContext } from '@mastra/core/tools';\nimport { Tool } from '@mastra/core/tools';\nimport type { Step, AgentStepOptions, StepParams, ToolStep } from '@mastra/core/workflows';\nimport { Workflow } from '@mastra/core/workflows';\nimport { EMITTER_SYMBOL, STREAM_FORMAT_SYMBOL } from '@mastra/core/workflows/_constants';\nimport type { Inngest } from 'inngest';\nimport { z } from 'zod';\nimport type { InngestEngineType, InngestWorkflowConfig } from './types';\nimport { InngestWorkflow } from './workflow';\n\nexport * from './workflow';\nexport * from './execution-engine';\nexport * from './run';\nexport * from './serve';\nexport * from './types';\n\nfunction isAgent(params: any): params is Agent<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\nfunction isInngestWorkflow(params: any): params is InngestWorkflow {\n return params instanceof InngestWorkflow;\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>(\n params: StepParams<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema>,\n): Step<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, InngestEngineType>;\n\n// Overload for agent WITH structured output schema\nexport function createStep<TStepId extends string, TStepOutput extends z.ZodType<any>>(\n agent: Agent<TStepId, any>,\n agentOptions: AgentStepOptions<TStepOutput> & { structuredOutput: { schema: TStepOutput } },\n): Step<\n TStepId,\n any,\n z.ZodObject<{ prompt: z.ZodString }>,\n TStepOutput,\n z.ZodType<any>,\n z.ZodType<any>,\n InngestEngineType\n>;\n\n// Overload for agent WITHOUT structured output (default { text: string })\nexport function createStep<\n TStepId extends string,\n TStepInput extends z.ZodObject<{ prompt: z.ZodString }>,\n TStepOutput extends z.ZodObject<{ text: z.ZodString }>,\n TResumeSchema extends z.ZodType<any>,\n TSuspendSchema extends z.ZodType<any>,\n>(\n agent: Agent<TStepId, any>,\n agentOptions?: AgentStepOptions,\n): Step<TStepId, any, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, InngestEngineType>;\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<TSuspendSchema, TResumeSchema>,\n>(\n tool: ToolStep<TSchemaIn, TSuspendSchema, TResumeSchema, TSchemaOut, TContext>,\n): Step<string, any, TSchemaIn, TSchemaOut, z.ZodType<any>, z.ZodType<any>, InngestEngineType>;\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 | StepParams<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema>\n | Agent<any, any>\n | ToolStep<TStepInput, TSuspendSchema, TResumeSchema, TStepOutput, any>,\n agentOptions?: AgentStepOptions,\n): Step<TStepId, TState, TStepInput, TStepOutput, TResumeSchema, TSuspendSchema, InngestEngineType> {\n // Issue #9965: Preserve InngestWorkflow identity when passed to createStep\n // This ensures nested workflows in foreach are properly detected by isNestedWorkflowStep()\n if (isInngestWorkflow(params)) {\n return params as unknown as Step<\n TStepId,\n TState,\n TStepInput,\n TStepOutput,\n TResumeSchema,\n TSuspendSchema,\n InngestEngineType\n >;\n }\n\n if (isAgent(params)) {\n // Determine output schema based on structuredOutput option\n const outputSchema = agentOptions?.structuredOutput?.schema ?? z.object({ text: z.string() });\n\n return {\n id: params.name as TStepId,\n description: params.getDescription(),\n inputSchema: z.object({\n prompt: z.string(),\n // resourceId: z.string().optional(),\n // threadId: z.string().optional(),\n }) as unknown as TStepInput,\n outputSchema: outputSchema as unknown as TStepOutput,\n execute: async ({\n inputData,\n [EMITTER_SYMBOL]: emitter,\n [STREAM_FORMAT_SYMBOL]: streamFormat,\n requestContext,\n tracingContext,\n abortSignal,\n abort,\n writer,\n }) => {\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\n // Track structured output result\n let structuredResult: any = null;\n\n const toolData = {\n name: params.name,\n args: inputData,\n };\n\n let stream: ReadableStream<any>;\n\n if ((await params.getModel()).specificationVersion === 'v1') {\n const { fullStream } = await params.streamLegacy(inputData.prompt, {\n ...(agentOptions ?? {}),\n // resourceId: inputData.resourceId,\n // threadId: inputData.threadId,\n requestContext,\n tracingContext,\n onFinish: result => {\n // Capture structured output if available\n const resultWithObject = result as typeof result & { object?: unknown };\n if (agentOptions?.structuredOutput?.schema && resultWithObject.object) {\n structuredResult = resultWithObject.object;\n }\n streamPromise.resolve(result.text);\n void agentOptions?.onFinish?.(result);\n },\n abortSignal,\n });\n stream = fullStream as any;\n } else {\n const modelOutput = await params.stream(inputData.prompt, {\n ...(agentOptions ?? {}),\n requestContext,\n tracingContext,\n onFinish: result => {\n // Capture structured output if available\n const resultWithObject = result as typeof result & { object?: unknown };\n if (agentOptions?.structuredOutput?.schema && resultWithObject.object) {\n structuredResult = resultWithObject.object;\n }\n streamPromise.resolve(result.text);\n void agentOptions?.onFinish?.(result);\n },\n abortSignal,\n });\n\n stream = modelOutput.fullStream;\n }\n\n if (streamFormat === 'legacy') {\n await emitter.emit('watch', {\n type: 'tool-call-streaming-start',\n ...(toolData ?? {}),\n });\n for await (const chunk of stream) {\n if (chunk.type === 'text-delta') {\n await emitter.emit('watch', {\n type: 'tool-call-delta',\n ...(toolData ?? {}),\n argsTextDelta: chunk.textDelta,\n });\n }\n }\n await emitter.emit('watch', {\n type: 'tool-call-streaming-finish',\n ...(toolData ?? {}),\n });\n } else {\n for await (const chunk of stream) {\n await writer.write(chunk as any);\n }\n }\n\n if (abortSignal.aborted) {\n return abort();\n }\n\n // Return structured output if available, otherwise default text\n if (structuredResult !== null) {\n return structuredResult;\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 id: params.id as unknown as TStepId,\n description: params.description,\n inputSchema: params.inputSchema,\n outputSchema: params.outputSchema,\n suspendSchema: params.suspendSchema,\n resumeSchema: params.resumeSchema,\n execute: async ({\n inputData,\n mastra,\n requestContext,\n tracingContext,\n suspend,\n resumeData,\n runId,\n workflowId,\n state,\n setState,\n }) => {\n // BREAKING CHANGE v1.0: Pass raw input as first arg, context as second\n const toolContext = {\n mastra,\n requestContext,\n tracingContext,\n workflow: {\n runId,\n resumeData,\n suspend,\n workflowId,\n state,\n setState,\n },\n };\n return params.execute(inputData, toolContext);\n },\n component: 'TOOL',\n };\n }\n\n return {\n id: params.id as TStepId,\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 init(inngest: Inngest) {\n return {\n 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, InngestEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n any,\n InngestEngineType\n >[],\n >(params: InngestWorkflowConfig<TWorkflowId, TState, TInput, TOutput, TSteps>) {\n return new InngestWorkflow<InngestEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TInput>(\n params,\n inngest,\n );\n },\n createStep,\n cloneStep<TStepId extends string>(\n step: Step<TStepId, any, any, any, any, any, InngestEngineType>,\n opts: { id: TStepId },\n ): Step<TStepId, any, any, any, any, any, InngestEngineType> {\n return {\n id: opts.id,\n description: step.description,\n inputSchema: step.inputSchema,\n outputSchema: step.outputSchema,\n resumeSchema: step.resumeSchema,\n suspendSchema: step.suspendSchema,\n stateSchema: step.stateSchema,\n execute: step.execute,\n retries: step.retries,\n scorers: step.scorers,\n component: step.component,\n };\n },\n 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, InngestEngineType>[] = Step<\n string,\n any,\n any,\n any,\n any,\n any,\n InngestEngineType\n >[],\n TPrevSchema extends z.ZodType<any> = TInput,\n >(\n workflow: Workflow<InngestEngineType, TSteps, string, TState, TInput, TOutput, TPrevSchema>,\n opts: { id: TWorkflowId },\n ): Workflow<InngestEngineType, TSteps, TWorkflowId, TState, TInput, TOutput, TPrevSchema> {\n const wf: Workflow<InngestEngineType, 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 options: workflow.options,\n });\n\n wf.setStepFlow(workflow.stepGraph);\n wf.commit();\n return wf;\n },\n };\n}\n"]}
|