diff --git a/packages/contracts/src/workflows.ts b/packages/contracts/src/workflows.ts index 2e6ba8686..0ac459145 100644 --- a/packages/contracts/src/workflows.ts +++ b/packages/contracts/src/workflows.ts @@ -1396,6 +1396,8 @@ export interface ChannelWorkflowStepMutationResponse { } export interface ChannelWorkflowStepStartResponse { + readonly status: "started" | "blocked"; + readonly mode: ChannelWorkflowStepStartMode; readonly workflowStep: ChannelWorkflowStep; readonly workflow?: ChannelWorkflow; readonly task?: Task; diff --git a/packages/daemon/src/features/channels/workflows.ts b/packages/daemon/src/features/channels/workflows.ts index d6a13bdd2..ed8ccd747 100644 --- a/packages/daemon/src/features/channels/workflows.ts +++ b/packages/daemon/src/features/channels/workflows.ts @@ -629,6 +629,8 @@ async function handleChannelWorkflowStepStart( const started = await prepareWorkflowStepStart(store, workflowStepId, input, cwd, validateRunRequest, secretResolver); if (started.kind === "blocked") { writeJson(response, 200, { + status: "blocked", + mode: input.mode, workflow: store.getChannelWorkflow(started.workflowId), workflowStep: store.getChannelWorkflowStep(workflowStepId), blocker: started.blocker, @@ -651,6 +653,8 @@ async function handleChannelWorkflowStepStart( } completeWorkflowIfStepsFinished(store, started.workflowId, finishedAt); writeJson(response, 200, { + status: "started", + mode: "create_task", workflow: store.getChannelWorkflow(started.workflowId), workflowStep: store.getChannelWorkflowStep(workflowStepId), task: started.task, diff --git a/packages/daemon/test/channel-workspace.test.mjs b/packages/daemon/test/channel-workspace.test.mjs index c829e50da..ddc421a42 100644 --- a/packages/daemon/test/channel-workspace.test.mjs +++ b/packages/daemon/test/channel-workspace.test.mjs @@ -9351,6 +9351,8 @@ test("channel handoff workflows start steps, create tasks, and expose blockers", mode: "create_task", taskTitle: "Workflow generated task", }); + assert.equal(started.status, "started"); + assert.equal(started.mode, "create_task"); assert.equal(started.workflow.status, "succeeded"); assert.equal(started.workflowStep.status, "succeeded"); assert.equal(started.task.title, "Workflow generated task"); @@ -9379,6 +9381,8 @@ test("channel handoff workflows start steps, create tasks, and expose blockers", const blocked = await postJson(`${daemon.url}/workflow-steps/${encodeURIComponent(blockedWorkflow.workflowStep.id)}/start?cwd=${encodeURIComponent(cwd)}`, { mode: "create_and_run_task", }); + assert.equal(blocked.status, "blocked"); + assert.equal(blocked.mode, "create_and_run_task"); assert.equal(blocked.workflowStep.status, "blocked"); assert.match(blocked.blocker, /provider preset/i);