跳至主要內容

Workflow state reader

Workflow state reader 輔助函式可檢查 workflow.getWorkflowRunById() 回傳的公開 WorkflowState。可用它們復原已暫停的 run,並檢查 resume label。它們也能讀取步驟 payload 或輸出,而不必解析原始 Workflow 快照。

使用範例
「使用範例」的直接連結

src/mastra/workflows/recover-run.ts
import { createWorkflowStateReader } from '@mastra/core/workflows'

const state = await workflow.getWorkflowRunById('run-123')

if (state) {
const reader = createWorkflowStateReader(state)
const suspendedStep = reader.getSuspendedStep()
const labels = reader.getResumeLabels()

console.log(reader.getStatus())
console.log(reader.getStepOutput('extract-data'))
console.log(suspendedStep?.path)
console.log(labels.approve)
}

函式
「函式」的直接連結

createWorkflowStateReader(state)
「createworkflowstatereaderstate」的直接連結

建立 reader 物件,其中的方法會繫結至一個 WorkflowState

const reader = createWorkflowStateReader(state)
const suspendedStep = reader.getSuspendedStep()

getWorkflowStepOutput(state, stepId)
「getworkflowstepoutputstate-stepid」的直接連結

回傳步驟 ID 的輸出,包括 parent.child 等巢狀 Workflow 點號路徑。針對 foreach 步驟,會為每次迭代回傳一個項目。已暫停迭代的輸出項目可能是 undefined

const output = getWorkflowStepOutput(state, 'extract-data')

getWorkflowStepPayload(state, stepId)
「getworkflowsteppayloadstate-stepid」的直接連結

回傳傳給步驟的 payload。針對 foreach 步驟,會為每次迭代回傳一個項目。

const payload = getWorkflowStepPayload(state, 'extract-data')

getWorkflowSuspendedStep(state)
「getworkflowsuspendedstepstate」的直接連結

回傳 Workflow 狀態中的第一個已暫停步驟。多個步驟暫停時,順序會依照 suspendedPaths 中儲存的順序。

const suspendedStep = getWorkflowSuspendedStep(state)

getWorkflowSuspendedSteps(state)
「getworkflowsuspendedstepsstate」的直接連結

回傳 Workflow 狀態中的所有已暫停步驟。每個結果都包含頂層步驟 ID、繼續路徑、執行路徑、暫停 payload、暫停輸出及相符的 resume label。

const suspendedSteps = getWorkflowSuspendedSteps(state)

getWorkflowResumeLabel(state, label)
「getworkflowresumelabelstate-label」的直接連結

依名稱回傳 resume label。

const label = getWorkflowResumeLabel(state, 'approve')

getWorkflowResumeLabels(state)
「getworkflowresumelabelsstate」的直接連結

回傳 Workflow 狀態中的所有 resume label。

const labels = getWorkflowResumeLabels(state)

Reader 方法
「Reader 方法」的直接連結

createWorkflowStateReader(state) 會回傳下列方法:

getStatus:

() => WorkflowRunStatus
回傳 Workflow run 狀態。

getResult:

() => WorkflowState["result"]
若存在終止狀態的 Workflow 結果,則予以回傳。

getError:

() => WorkflowState["error"]
若存在終止狀態的 Workflow 錯誤,則予以回傳。

getStepOutput:

(stepId: string) => any | Array<any | undefined> | undefined
回傳步驟 ID 或巢狀 Workflow 點號路徑的輸出。

getStepPayload:

(stepId: string) => any | Array<any | undefined> | undefined
回傳步驟 ID 或巢狀 Workflow 點號路徑的 payload。

getSuspendedStep:

() => { stepId: string; path: string[]; executionPath?: number[]; step?: NonNullable<WorkflowState["steps"]>[string]; payload?: any; suspendPayload?: any; suspendOutput?: any; resumeLabels: Record<string, { stepId: string; foreachIndex?: number }> } | undefined
回傳第一個已暫停步驟。

getSuspendedSteps:

() => Array<{ stepId: string; path: string[]; executionPath?: number[]; step?: NonNullable<WorkflowState["steps"]>[string]; payload?: any; suspendPayload?: any; suspendOutput?: any; resumeLabels: Record<string, { stepId: string; foreachIndex?: number }> }>
回傳所有已暫停步驟。

getResumeLabel:

(label: string) => { stepId: string; foreachIndex?: number } | undefined
依名稱回傳 resume label。

getResumeLabels:

() => Record<string, { stepId: string; foreachIndex?: number }>
回傳所有 resume label。

注意事項
「注意事項」的直接連結

只有在 workflow.getWorkflowRunById() 透過 fields 明確要求時,才會回傳 requestContexttracingContext