Skip to content

Commit 1029231

Browse files
committed
feat: Add workflow architecture and sequence diagram to documentation
- Introduced a new section for Workflow Architecture in README.md with a mermaid sequence diagram illustrating the standardized workflow logging pattern. - Added a sequence diagram in AGENTS.md to visualize the workflow execution process, detailing interactions between User, BrowserApp, WorkflowProvider, AIBackend, WorkflowStep, and Writer.
1 parent 44267f4 commit 1029231

2 files changed

Lines changed: 190 additions & 29 deletions

File tree

README.md

Lines changed: 133 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,49 @@ graph TB
134134
style UI stroke:#58a6ff
135135
```
136136

137+
## 🔍 **Workflow Architecture**
138+
139+
```mermaid
140+
%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#58a6ff', 'primaryTextColor': '#c9d1d9', 'primaryBorderColor': '#30363d', 'lineColor': '#58a6ff', 'sectionBkgColor': '#161b22', 'altSectionBkgColor': '#0d1117', 'sectionTextColor': '#c9d1d9', 'gridColor': '#30363d', 'tertiaryColor': '#161b22' }}}%%
141+
sequenceDiagram
142+
participant W as Workflow Step
143+
participant Writer as Writer (custom)
144+
participant UI as UI/Frontend
145+
146+
Note over W,UI: Standardized Workflow Logging Pattern
147+
148+
W->>Writer: step-start event
149+
Writer->>UI: data-workflow-step-start
150+
Note right of UI: {type: "workflow", data: "step-id", id: "step-id"}
151+
152+
W->>Writer: progress update (20%)
153+
Writer->>UI: data-workflow-progress
154+
Note right of UI: {status: "20%", message: "...", stage: "workflow"}
155+
156+
W->>W: Execute step logic
157+
158+
W->>Writer: progress update (50%)
159+
Writer->>UI: data-workflow-progress
160+
Note right of UI: {status: "50%", message: "...", stage: "workflow"}
161+
162+
W->>W: Continue execution
163+
164+
W->>Writer: progress update (100%)
165+
Writer->>UI: data-workflow-progress
166+
Note right of UI: {status: "100%", message: "...", stage: "workflow"}
167+
168+
W->>Writer: step-complete event
169+
Writer->>UI: data-workflow-step-complete
170+
Note right of UI: {stepId: "step-id", success: true, duration: ms}
171+
172+
Note over W,UI: Error Handling Pattern
173+
174+
W->>W: Error occurs
175+
W->>Writer: step-error event
176+
Writer->>UI: data-workflow-step-error
177+
Note right of UI: {stepId: "step-id", error: "error message"}
178+
```
179+
137180
## 📊 **System Flowchart**
138181

139182
```mermaid
@@ -989,56 +1032,117 @@ _Last updated: 2025-12-05 | v1.1.0_
9891032
```mermaid
9901033
%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#58a6ff', 'primaryTextColor': '#c9d1d9', 'primaryBorderColor': '#30363d', 'lineColor': '#58a6ff', 'sectionBkgColor': '#161b22', 'altSectionBkgColor': '#0d1117', 'sectionTextColor': '#c9d1d9', 'gridColor': '#30363d', 'tertiaryColor': '#161b22' }}}%%
9911034
classDiagram
992-
class Message {
1035+
class WorkflowRun {
9931036
+string id
994-
+string role
995-
+MessagePart[] parts
1037+
+string workflowId
1038+
+string status
1039+
+Date startedAt
1040+
+Date finishedAt
1041+
+string error
9961042
}
9971043

998-
class MessagePart {
999-
+string type
1000-
+AgentDataPart data
1044+
class WorkflowDataPart {
1045+
+string messageId
1046+
+number partIndex
1047+
+DataPart part
10011048
}
10021049

1003-
class AgentDataPart {
1004-
+string text
1005-
+string status
1006-
+string stage
1007-
+string stepId
1008-
+string message
1009-
+string agentId
1010-
+string workflowId
1050+
class DataPart {
1051+
+string type
1052+
+unknown data
10111053
}
10121054

1013-
class ProgressEvent {
1055+
class WorkflowProgressEvent {
10141056
+string id
10151057
+string stage
10161058
+string status
10171059
+string message
1018-
+string agentId
1019-
+string workflowId
1060+
+string stepId
1061+
+Date timestamp
1062+
+unknown data
1063+
}
1064+
1065+
class WorkflowSuspendPayload {
1066+
+string message
1067+
+string requestId
1068+
+string stepId
10201069
}
10211070

1022-
class NetworkProvider {
1023-
+ProgressEvent[] extractProgressEvents(messages)
1071+
class WorkflowContextValue {
1072+
+string selectedWorkflow
1073+
+WorkflowRun currentRun
1074+
+string status
1075+
+number activeStepIndex
1076+
+WorkflowProgressEvent[] progressEvents
1077+
+WorkflowSuspendPayload suspendPayload
1078+
+WorkflowDataPart[] dataParts
1079+
+selectWorkflow(workflowId)
1080+
+runWorkflow(inputData)
1081+
+pauseWorkflow()
1082+
+resumeWorkflow()
1083+
+stopWorkflow()
1084+
+runStep(stepId)
10241085
}
10251086

10261087
class WorkflowProvider {
1027-
+ProgressEvent[] extractProgressEvents(messages)
1088+
-WorkflowRun currentRun
1089+
-WorkflowProgressEvent[] progressEvents
1090+
-WorkflowDataPart[] dataParts
1091+
-WorkflowSuspendPayload suspendPayload
1092+
+useEffect_parseMessages()
1093+
+useEffect_syncStatus()
1094+
+runWorkflow(inputData)
1095+
+pauseWorkflow()
1096+
+resumeWorkflow()
1097+
+stopWorkflow()
1098+
+runStep(stepId)
10281099
}
10291100

1030-
class ProgressPanel {
1031-
+void render(progressEvents)
1101+
class WriterCustomPayload {
1102+
+string type
1103+
+unknown data
1104+
+string id
10321105
}
10331106

1034-
Message "1" --> "*" MessagePart : has
1035-
MessagePart "1" --> "0..1" AgentDataPart : data
1107+
class Writer {
1108+
+custom(payload)
1109+
}
1110+
1111+
class StepExecutionContext {
1112+
+unknown inputData
1113+
+Writer writer
1114+
+unknown mastra
1115+
}
1116+
1117+
class WorkflowStep {
1118+
+string id
1119+
+execute(context)
1120+
}
1121+
1122+
class UpstashVector {
1123+
+createIndex(indexName, dimension, metric)
1124+
}
1125+
1126+
class UpstashConfig {
1127+
+initializeUpstashVector()
1128+
+UpstashVector upstashVector
1129+
}
1130+
1131+
WorkflowProvider ..> WorkflowContextValue : provides
1132+
WorkflowProvider --> WorkflowRun : manages
1133+
WorkflowProvider --> WorkflowProgressEvent : aggregates
1134+
WorkflowProvider --> WorkflowDataPart : collects
1135+
WorkflowProvider --> WorkflowSuspendPayload : handles
1136+
1137+
WorkflowContextValue o--> WorkflowRun
1138+
WorkflowContextValue o--> WorkflowProgressEvent
1139+
WorkflowContextValue o--> WorkflowDataPart
1140+
WorkflowContextValue o--> WorkflowSuspendPayload
10361141

1037-
NetworkProvider --> Message : reads
1038-
WorkflowProvider --> Message : reads
1142+
WorkflowStep --> StepExecutionContext : uses
1143+
StepExecutionContext o--> Writer
10391144

1040-
NetworkProvider --> ProgressEvent : creates_with_id_messageId_partType_partIndex
1041-
WorkflowProvider --> ProgressEvent : creates_with_id_messageId_partType_partIndex
1145+
Writer --> WriterCustomPayload : sends
10421146

1043-
ProgressPanel "1" --> "*" ProgressEvent : renders
1147+
UpstashConfig o--> UpstashVector
10441148
```

src/mastra/workflows/AGENTS.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,63 @@ execute: async ({ inputData, writer }) => {
180180
}
181181
```
182182

183+
# Sequence Diagram
184+
185+
```mermaid
186+
sequenceDiagram
187+
actor User
188+
participant BrowserApp
189+
participant WorkflowProvider
190+
participant AIBackend
191+
participant WorkflowStep
192+
participant Writer
193+
194+
User->>BrowserApp: Click run workflow
195+
BrowserApp->>WorkflowProvider: runWorkflow(inputData)
196+
WorkflowProvider->>AIBackend: send workflow start message
197+
198+
AIBackend->>WorkflowStep: execute({ inputData, writer })
199+
activate WorkflowStep
200+
201+
note over WorkflowStep: Step start
202+
WorkflowStep->>Writer: custom(type: data-workflow-step-start, id: stepId)
203+
Writer-->>AIBackend: stream message part (data-workflow-step-start)
204+
AIBackend-->>WorkflowProvider: assistant message with data-workflow-step-start
205+
WorkflowProvider->>WorkflowProvider: extract dataParts
206+
207+
note over WorkflowStep: Progress updates
208+
WorkflowStep->>Writer: custom(type: data-workflow-progress, status: 20%)
209+
Writer-->>AIBackend: stream progress part
210+
AIBackend-->>WorkflowProvider: assistant message with data-workflow-progress
211+
WorkflowProvider->>WorkflowProvider: add WorkflowProgressEvent
212+
213+
WorkflowStep->>WorkflowStep: perform main logic
214+
215+
alt success
216+
WorkflowStep->>Writer: custom(type: data-workflow-progress, status: 100%)
217+
Writer-->>AIBackend: final progress part
218+
AIBackend-->>WorkflowProvider: assistant message with data-workflow-progress
219+
WorkflowProvider->>WorkflowProvider: update progressEvents
220+
221+
WorkflowStep->>Writer: custom(type: data-workflow-step-complete, success: true)
222+
Writer-->>AIBackend: step complete part
223+
AIBackend-->>WorkflowProvider: assistant message with data-workflow-step-complete
224+
WorkflowProvider->>WorkflowProvider: update activeStepIndex
225+
else error
226+
WorkflowStep->>Writer: custom(type: data-workflow-step-error, error)
227+
Writer-->>AIBackend: step error part
228+
AIBackend-->>WorkflowProvider: assistant message with data-workflow-step-error
229+
WorkflowProvider->>WorkflowProvider: add error progressEvent
230+
end
231+
232+
WorkflowStep-->>AIBackend: return result or throw
233+
deactivate WorkflowStep
234+
235+
AIBackend-->>WorkflowProvider: final completion message
236+
WorkflowProvider-->>BrowserApp: updated context (progressEvents, dataParts)
237+
BrowserApp-->>User: render workflow progress UI
238+
```
239+
183240
---
184241
## Change Log
185242

0 commit comments

Comments
 (0)