@@ -32,6 +32,11 @@ export interface ExecuteWorkflowCoreOptions {
3232 callbacks : ExecutionCallbacks
3333 loggingSession : LoggingSession
3434 skipLogCreation ?: boolean // For resume executions - reuse existing log entry
35+ /**
36+ * AbortSignal for cancellation support.
37+ * When aborted (e.g., client disconnects from SSE), execution stops gracefully.
38+ */
39+ abortSignal ?: AbortSignal
3540}
3641
3742function parseVariableValueByType ( value : any , type : string ) : any {
@@ -98,11 +103,11 @@ function parseVariableValueByType(value: any, type: string): any {
98103export async function executeWorkflowCore (
99104 options : ExecuteWorkflowCoreOptions
100105) : Promise < ExecutionResult > {
101- const { snapshot, callbacks, loggingSession, skipLogCreation } = options
106+ const { snapshot, callbacks, loggingSession, skipLogCreation, abortSignal } = options
102107 const { metadata, workflow, input, workflowVariables, selectedOutputs } = snapshot
103108 const { requestId, workflowId, userId, triggerType, executionId, triggerBlockId, useDraftState } =
104109 metadata
105- const { onBlockStart, onBlockComplete, onStream, onExecutorCreated } = callbacks
110+ const { onBlockStart, onBlockComplete, onStream } = callbacks
106111
107112 const providedWorkspaceId = metadata . workspaceId
108113 if ( ! providedWorkspaceId ) {
@@ -326,6 +331,7 @@ export async function executeWorkflowCore(
326331 dagIncomingEdges : snapshot . state ?. dagIncomingEdges ,
327332 snapshotState : snapshot . state ,
328333 metadata,
334+ abortSignal,
329335 }
330336
331337 const executorInstance = new Executor ( {
@@ -349,10 +355,6 @@ export async function executeWorkflowCore(
349355 }
350356 }
351357
352- if ( onExecutorCreated ) {
353- onExecutorCreated ( executorInstance )
354- }
355-
356358 const result = ( await executorInstance . execute (
357359 workflowId ,
358360 resolvedTriggerBlockId
0 commit comments