type WorkflowEvent =
| {
audience?: string;
runId: string;
threadId?: string;
ts: number;
type: "RUN_STARTED";
}
| {
audience?: string;
output: unknown;
runId: string;
ts: number;
type: "RUN_FINISHED";
}
| {
audience?: string;
code: string;
error: SerializedError;
runId: string;
ts: number;
type: "RUN_ERRORED";
}
| {
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_STARTED";
}
| {
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
meta?: WorkflowMetadata;
result: unknown;
stepId: string;
ts: number;
type: "STEP_FINISHED";
}
| {
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
error: SerializedError;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_FAILED";
}
| {
audience?: string;
deadline?: number;
meta?: Record<string, unknown>;
name: string;
stepId: string;
ts: number;
type: "SIGNAL_AWAITED";
}
| {
audience?: string;
meta?: WorkflowMetadata;
name: string;
payload: unknown;
signalId?: string;
stepId: string;
ts: number;
type: "SIGNAL_RESOLVED";
}
| {
approvalId: string;
audience?: string;
description?: string;
meta?: WorkflowMetadata;
stepId: string;
title: string;
ts: number;
type: "APPROVAL_REQUESTED";
}
| {
approvalId: string;
approved: boolean;
audience?: string;
feedback?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "APPROVAL_RESOLVED";
}
| {
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "NOW_RECORDED";
value: number;
}
| {
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "UUID_RECORDED";
value: string;
}
| {
audience?: string;
delta: ReadonlyArray<Operation>;
ts: number;
type: "STATE_DELTA";
}
| {
audience?: string;
name: string;
ts: number;
type: "CUSTOM";
value: Record<string, unknown>;
};type WorkflowEvent =
| {
audience?: string;
runId: string;
threadId?: string;
ts: number;
type: "RUN_STARTED";
}
| {
audience?: string;
output: unknown;
runId: string;
ts: number;
type: "RUN_FINISHED";
}
| {
audience?: string;
code: string;
error: SerializedError;
runId: string;
ts: number;
type: "RUN_ERRORED";
}
| {
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_STARTED";
}
| {
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
meta?: WorkflowMetadata;
result: unknown;
stepId: string;
ts: number;
type: "STEP_FINISHED";
}
| {
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
error: SerializedError;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_FAILED";
}
| {
audience?: string;
deadline?: number;
meta?: Record<string, unknown>;
name: string;
stepId: string;
ts: number;
type: "SIGNAL_AWAITED";
}
| {
audience?: string;
meta?: WorkflowMetadata;
name: string;
payload: unknown;
signalId?: string;
stepId: string;
ts: number;
type: "SIGNAL_RESOLVED";
}
| {
approvalId: string;
audience?: string;
description?: string;
meta?: WorkflowMetadata;
stepId: string;
title: string;
ts: number;
type: "APPROVAL_REQUESTED";
}
| {
approvalId: string;
approved: boolean;
audience?: string;
feedback?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "APPROVAL_RESOLVED";
}
| {
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "NOW_RECORDED";
value: number;
}
| {
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "UUID_RECORDED";
value: string;
}
| {
audience?: string;
delta: ReadonlyArray<Operation>;
ts: number;
type: "STATE_DELTA";
}
| {
audience?: string;
name: string;
ts: number;
type: "CUSTOM";
value: Record<string, unknown>;
};Defined in: packages/workflow-core/src/types.ts:70
The shape of every event the engine appends to a run's log.
Two consumers, one shape:
Events fall into two categories internally:
Checkpoint events — replay uses these to skip already- completed work. Indexed by stepId. STEP_FINISHED, STEP_FAILED, SIGNAL_RESOLVED, APPROVAL_RESOLVED, NOW_RECORDED, UUID_RECORDED, RUN_FINISHED, RUN_ERRORED.
Coordination events — persisted so hosts and resume calls can identify the pending wait. SIGNAL_AWAITED, APPROVAL_REQUESTED.
Observability events — engine emits but replay ignores. RUN_STARTED, STEP_STARTED, STATE_DELTA, CUSTOM.
The optional audience field is engine-ignored. Adapters/views (e.g., a Durable Streams projection layer) may filter on it to produce internal vs client vs admin views of the same log.
{
audience?: string;
runId: string;
threadId?: string;
ts: number;
type: "RUN_STARTED";
}{
audience?: string;
runId: string;
threadId?: string;
ts: number;
type: "RUN_STARTED";
}optional audience: string;optional audience: string;runId: string;runId: string;optional threadId: string;optional threadId: string;ts: number;ts: number;type: "RUN_STARTED";type: "RUN_STARTED";{
audience?: string;
output: unknown;
runId: string;
ts: number;
type: "RUN_FINISHED";
}{
audience?: string;
output: unknown;
runId: string;
ts: number;
type: "RUN_FINISHED";
}optional audience: string;optional audience: string;output: unknown;output: unknown;runId: string;runId: string;ts: number;ts: number;type: "RUN_FINISHED";type: "RUN_FINISHED";{
audience?: string;
code: string;
error: SerializedError;
runId: string;
ts: number;
type: "RUN_ERRORED";
}{
audience?: string;
code: string;
error: SerializedError;
runId: string;
ts: number;
type: "RUN_ERRORED";
}optional audience: string;optional audience: string;code: string;code: string;error: SerializedError;error: SerializedError;runId: string;runId: string;ts: number;ts: number;type: "RUN_ERRORED";type: "RUN_ERRORED";{
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_STARTED";
}{
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_STARTED";
}optional audience: string;optional audience: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;stepId: string;stepId: string;ts: number;ts: number;type: "STEP_STARTED";type: "STEP_STARTED";{
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
meta?: WorkflowMetadata;
result: unknown;
stepId: string;
ts: number;
type: "STEP_FINISHED";
}{
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
meta?: WorkflowMetadata;
result: unknown;
stepId: string;
ts: number;
type: "STEP_FINISHED";
}optional attempts: ReadonlyArray<StepAttempt>;optional attempts: ReadonlyArray<StepAttempt>;optional audience: string;optional audience: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;result: unknown;result: unknown;stepId: string;stepId: string;ts: number;ts: number;type: "STEP_FINISHED";type: "STEP_FINISHED";{
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
error: SerializedError;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_FAILED";
}{
attempts?: ReadonlyArray<StepAttempt>;
audience?: string;
error: SerializedError;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "STEP_FAILED";
}optional attempts: ReadonlyArray<StepAttempt>;optional attempts: ReadonlyArray<StepAttempt>;optional audience: string;optional audience: string;error: SerializedError;error: SerializedError;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;stepId: string;stepId: string;ts: number;ts: number;type: "STEP_FAILED";type: "STEP_FAILED";{
audience?: string;
deadline?: number;
meta?: Record<string, unknown>;
name: string;
stepId: string;
ts: number;
type: "SIGNAL_AWAITED";
}{
audience?: string;
deadline?: number;
meta?: Record<string, unknown>;
name: string;
stepId: string;
ts: number;
type: "SIGNAL_AWAITED";
}optional audience: string;optional audience: string;optional deadline: number;optional deadline: number;optional meta: Record<string, unknown>;optional meta: Record<string, unknown>;name: string;name: string;stepId: string;stepId: string;ts: number;ts: number;type: "SIGNAL_AWAITED";type: "SIGNAL_AWAITED";{
audience?: string;
meta?: WorkflowMetadata;
name: string;
payload: unknown;
signalId?: string;
stepId: string;
ts: number;
type: "SIGNAL_RESOLVED";
}{
audience?: string;
meta?: WorkflowMetadata;
name: string;
payload: unknown;
signalId?: string;
stepId: string;
ts: number;
type: "SIGNAL_RESOLVED";
}optional audience: string;optional audience: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;name: string;name: string;payload: unknown;payload: unknown;optional signalId: string;optional signalId: string;Host-supplied idempotency token. Same signalId at the same stepId is a no-op (idempotent retry); different signalId is a lost race.
stepId: string;stepId: string;ts: number;ts: number;type: "SIGNAL_RESOLVED";type: "SIGNAL_RESOLVED";{
approvalId: string;
audience?: string;
description?: string;
meta?: WorkflowMetadata;
stepId: string;
title: string;
ts: number;
type: "APPROVAL_REQUESTED";
}{
approvalId: string;
audience?: string;
description?: string;
meta?: WorkflowMetadata;
stepId: string;
title: string;
ts: number;
type: "APPROVAL_REQUESTED";
}approvalId: string;approvalId: string;optional audience: string;optional audience: string;optional description: string;optional description: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;stepId: string;stepId: string;title: string;title: string;ts: number;ts: number;type: "APPROVAL_REQUESTED";type: "APPROVAL_REQUESTED";{
approvalId: string;
approved: boolean;
audience?: string;
feedback?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "APPROVAL_RESOLVED";
}{
approvalId: string;
approved: boolean;
audience?: string;
feedback?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "APPROVAL_RESOLVED";
}approvalId: string;approvalId: string;approved: boolean;approved: boolean;optional audience: string;optional audience: string;optional feedback: string;optional feedback: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;stepId: string;stepId: string;ts: number;ts: number;type: "APPROVAL_RESOLVED";type: "APPROVAL_RESOLVED";{
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "NOW_RECORDED";
value: number;
}{
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "NOW_RECORDED";
value: number;
}optional audience: string;optional audience: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;stepId: string;stepId: string;ts: number;ts: number;type: "NOW_RECORDED";type: "NOW_RECORDED";value: number;value: number;{
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "UUID_RECORDED";
value: string;
}{
audience?: string;
meta?: WorkflowMetadata;
stepId: string;
ts: number;
type: "UUID_RECORDED";
value: string;
}optional audience: string;optional audience: string;optional meta: WorkflowMetadata;optional meta: WorkflowMetadata;stepId: string;stepId: string;ts: number;ts: number;type: "UUID_RECORDED";type: "UUID_RECORDED";value: string;value: string;{
audience?: string;
delta: ReadonlyArray<Operation>;
ts: number;
type: "STATE_DELTA";
}{
audience?: string;
delta: ReadonlyArray<Operation>;
ts: number;
type: "STATE_DELTA";
}optional audience: string;optional audience: string;delta: ReadonlyArray<Operation>;delta: ReadonlyArray<Operation>;ts: number;ts: number;type: "STATE_DELTA";type: "STATE_DELTA";{
audience?: string;
name: string;
ts: number;
type: "CUSTOM";
value: Record<string, unknown>;
}{
audience?: string;
name: string;
ts: number;
type: "CUSTOM";
value: Record<string, unknown>;
}optional audience: string;optional audience: string;name: string;name: string;ts: number;ts: number;type: "CUSTOM";type: "CUSTOM";value: Record<string, unknown>;value: Record<string, unknown>;