Portal Community

State Fields

FieldTypePurpose
currentModeCanvasMode"design" | "execution" | "readonly"
executionIdstring | nullActive execution being observed (null in design mode)
nodeStatusesRecord<string, NodeExecutionStatus>Per-node execution status map (keyed by nodeId)
runProgressRunProgresstotalNodes, completedNodes, failedNodes, progressPct
isReadonlybooleanTrue when currentMode is "execution" or "readonly"

NodeExecutionStatus Type

// executionMode.types.ts
export interface NodeExecutionStatus {
    nodeId       : string;
    status       : 'pending' | 'running' | 'success' | 'failed' | 'skipped' | 'suspended';
    startedAt    : DateTimeOffset | null;
    completedAt  : DateTimeOffset | null;
    durationMs   : number | null;
    errorMessage : string | null;
    retryCount   : number;
}

RunProgress Type

export interface RunProgress {
    totalNodes     : number;  // Total nodes in the workflow graph
    completedNodes : number;  // Nodes that have reached success or failed
    failedNodes    : number;  // Nodes that failed
    progressPct    : number;  // Computed: completedNodes / totalNodes * 100
}

Example State Snapshot (Execution Mode)

{
  "currentMode" : "execution",
  "executionId" : "exec-abc-123",
  "isReadonly"  : true,
  "runProgress" : { "totalNodes": 5, "completedNodes": 3, "failedNodes": 0, "progressPct": 60 },
  "nodeStatuses": {
    "node-trigger"  : { "status": "success",   "durationMs": 12 },
    "node-approval" : { "status": "suspended",  "durationMs": null },
    "node-email"    : { "status": "pending",    "durationMs": null }
  }
}
isReadonly is derived: It is true whenever currentMode is "execution" or "readonly". Components read isReadonly directly rather than checking the mode string — this ensures they respond correctly to both modes that disable editing.