@workglow/task-graph 0.0.88 → 0.0.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +1789 -266
- package/dist/browser.js.map +19 -11
- package/dist/bun.js +1789 -266
- package/dist/bun.js.map +19 -11
- package/dist/node.js +1789 -266
- package/dist/node.js.map +19 -11
- package/dist/task/ConditionUtils.d.ts +47 -0
- package/dist/task/ConditionUtils.d.ts.map +1 -0
- package/dist/task/ConditionalTask.d.ts +15 -0
- package/dist/task/ConditionalTask.d.ts.map +1 -1
- package/dist/task/GraphAsTask.d.ts.map +1 -1
- package/dist/task/GraphAsTaskRunner.d.ts +3 -4
- package/dist/task/GraphAsTaskRunner.d.ts.map +1 -1
- package/dist/task/IteratorTask.d.ts +177 -0
- package/dist/task/IteratorTask.d.ts.map +1 -0
- package/dist/task/IteratorTaskRunner.d.ts +36 -0
- package/dist/task/IteratorTaskRunner.d.ts.map +1 -0
- package/dist/task/MapTask.d.ts +82 -0
- package/dist/task/MapTask.d.ts.map +1 -0
- package/dist/task/ReduceTask.d.ts +61 -0
- package/dist/task/ReduceTask.d.ts.map +1 -0
- package/dist/task/Task.d.ts +2 -2
- package/dist/task/Task.d.ts.map +1 -1
- package/dist/task/WhileTask.d.ts +214 -0
- package/dist/task/WhileTask.d.ts.map +1 -0
- package/dist/task/WhileTaskRunner.d.ts +29 -0
- package/dist/task/WhileTaskRunner.d.ts.map +1 -0
- package/dist/task/index.d.ts +12 -1
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/iterationSchema.d.ts +70 -0
- package/dist/task/iterationSchema.d.ts.map +1 -0
- package/dist/task-graph/ITaskGraph.d.ts +1 -1
- package/dist/task-graph/ITaskGraph.d.ts.map +1 -1
- package/dist/task-graph/TaskGraph.d.ts +1 -1
- package/dist/task-graph/TaskGraph.d.ts.map +1 -1
- package/dist/task-graph/TaskGraphRunner.d.ts +2 -1
- package/dist/task-graph/TaskGraphRunner.d.ts.map +1 -1
- package/dist/task-graph/Workflow.d.ts +112 -8
- package/dist/task-graph/Workflow.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/EXECUTION_MODEL.md +433 -0
- package/dist/task/TaskJSON.test.d.ts +0 -7
- package/dist/task/TaskJSON.test.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.d.ts","sourceRoot":"","sources":["../../src/task-graph/Workflow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"Workflow.d.ts","sourceRoot":"","sources":["../../src/task-graph/Workflow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workglow/task-graph",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.90",
|
|
5
5
|
"description": "Task graph management for Workglow, providing DAG construction, execution planning, and workflow orchestration.",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"watch": "concurrently -c 'auto' 'bun:watch-*'",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@workglow/job-queue": "0.0.
|
|
40
|
-
"@workglow/storage": "0.0.
|
|
41
|
-
"@workglow/util": "0.0.
|
|
39
|
+
"@workglow/job-queue": "0.0.90",
|
|
40
|
+
"@workglow/storage": "0.0.90",
|
|
41
|
+
"@workglow/util": "0.0.90"
|
|
42
42
|
},
|
|
43
43
|
"peerDependenciesMeta": {
|
|
44
44
|
"@workglow/job-queue": {
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@workglow/job-queue": "0.0.
|
|
56
|
-
"@workglow/storage": "0.0.
|
|
57
|
-
"@workglow/util": "0.0.
|
|
55
|
+
"@workglow/job-queue": "0.0.90",
|
|
56
|
+
"@workglow/storage": "0.0.90",
|
|
57
|
+
"@workglow/util": "0.0.90"
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
# Task Graph Execution Model
|
|
2
|
+
|
|
3
|
+
This document explains the internal execution model of the task graph system. It is intended for developers (human or AI) who need to understand or modify the execution logic.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Overview](#overview)
|
|
8
|
+
- [Task Lifecycle](#task-lifecycle)
|
|
9
|
+
- [Normal Execution (run)](#normal-execution-run)
|
|
10
|
+
- [Reactive Execution (runReactive)](#reactive-execution-runreactive)
|
|
11
|
+
- [Dataflow and Input Propagation](#dataflow-and-input-propagation)
|
|
12
|
+
- [GraphAsTask (Subgraphs)](#graphastask-subgraphs)
|
|
13
|
+
- [Key Invariants](#key-invariants)
|
|
14
|
+
- [Common Pitfalls](#common-pitfalls)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
The task graph system has two execution modes:
|
|
21
|
+
|
|
22
|
+
1. **`run()`** - Full execution that produces cached, immutable results
|
|
23
|
+
2. **`runReactive()`** - Lightweight execution for UI updates and previews
|
|
24
|
+
|
|
25
|
+
These modes serve different purposes and have different semantics regarding task state and data flow.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Task Lifecycle
|
|
30
|
+
|
|
31
|
+
### Task Statuses
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
PENDING → PROCESSING → COMPLETED
|
|
35
|
+
↘ FAILED
|
|
36
|
+
↘ ABORTED
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
| Status | Description |
|
|
40
|
+
| ------------ | ------------------------------------------------------------------- |
|
|
41
|
+
| `PENDING` | Task has not been executed yet. Inputs can be modified. |
|
|
42
|
+
| `PROCESSING` | Task is currently executing. |
|
|
43
|
+
| `COMPLETED` | Task has finished successfully. **Output is locked and immutable.** |
|
|
44
|
+
| `FAILED` | Task execution threw an error. |
|
|
45
|
+
| `ABORTED` | Task was cancelled via `abort()`. |
|
|
46
|
+
|
|
47
|
+
### Key Properties
|
|
48
|
+
|
|
49
|
+
Each task maintains:
|
|
50
|
+
|
|
51
|
+
- `defaults` - Default input values set at construction time
|
|
52
|
+
- `runInputData` - The actual input used for execution (defaults + overrides)
|
|
53
|
+
- `runOutputData` - The output produced by execution
|
|
54
|
+
- `status` - Current lifecycle status
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Normal Execution (run)
|
|
59
|
+
|
|
60
|
+
### Purpose
|
|
61
|
+
|
|
62
|
+
Full execution that:
|
|
63
|
+
|
|
64
|
+
- Runs the task's `execute()` method
|
|
65
|
+
- Produces cached, deterministic results
|
|
66
|
+
- Transitions task to `COMPLETED` status
|
|
67
|
+
- Makes output immutable
|
|
68
|
+
|
|
69
|
+
### Flow
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Task.run(overrides)
|
|
73
|
+
↓
|
|
74
|
+
TaskRunner.run(overrides)
|
|
75
|
+
↓
|
|
76
|
+
1. setInput(overrides) # Merge overrides into runInputData
|
|
77
|
+
2. resolveSchemaInputs() # Resolve model/repository strings to instances
|
|
78
|
+
3. validateInput() # Validate against input schema
|
|
79
|
+
4. Check cache # If cacheable, check for cached result
|
|
80
|
+
5. executeTask() # Call task.execute(input, context)
|
|
81
|
+
6. Store in cache # If cacheable, cache the result
|
|
82
|
+
7. handleComplete() # Set status = COMPLETED
|
|
83
|
+
↓
|
|
84
|
+
Return runOutputData (locked)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Graph-Level Execution
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
TaskGraph.run(input)
|
|
91
|
+
↓
|
|
92
|
+
TaskGraphRunner.runGraph(input)
|
|
93
|
+
↓
|
|
94
|
+
For each task (in topological order):
|
|
95
|
+
1. copyInputFromEdgesToNode() # Pull data from incoming dataflows
|
|
96
|
+
2. runTask(task, input) # Execute the task
|
|
97
|
+
3. pushOutputFromNodeToEdges() # Push output to outgoing dataflows
|
|
98
|
+
↓
|
|
99
|
+
Return results from ending nodes (no outgoing dataflows)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Reactive Execution (runReactive)
|
|
105
|
+
|
|
106
|
+
### Purpose
|
|
107
|
+
|
|
108
|
+
Lightweight execution for:
|
|
109
|
+
|
|
110
|
+
- UI previews and updates
|
|
111
|
+
- Fast transformations (e.g., image filters)
|
|
112
|
+
- Propagating intermediate results through PENDING tasks
|
|
113
|
+
|
|
114
|
+
**Important:** Reactive execution only affects `PENDING` tasks. `COMPLETED` tasks return their cached output unchanged.
|
|
115
|
+
|
|
116
|
+
### Use Case Example
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
User edits an InputNode default → Task is PENDING
|
|
120
|
+
↓
|
|
121
|
+
runReactive() is called
|
|
122
|
+
↓
|
|
123
|
+
InputTask (PENDING) receives new value
|
|
124
|
+
↓
|
|
125
|
+
Downstream tasks (PENDING) get reactive updates
|
|
126
|
+
↓
|
|
127
|
+
Tasks run their executeReactive() for quick previews
|
|
128
|
+
↓
|
|
129
|
+
Eventually run() is called → All tasks become COMPLETED (locked)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Task-Level Flow
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Task.runReactive(overrides)
|
|
136
|
+
↓
|
|
137
|
+
TaskRunner.runReactive(overrides)
|
|
138
|
+
↓
|
|
139
|
+
1. If status == PROCESSING: return existing output (no re-entry)
|
|
140
|
+
2. setInput(overrides) # Update runInputData
|
|
141
|
+
3. resolveSchemaInputs() # Resolve strings to instances
|
|
142
|
+
4. handleStartReactive() # Status → PROCESSING
|
|
143
|
+
5. validateInput()
|
|
144
|
+
6. executeTaskReactive(input, output) # Call task.executeReactive()
|
|
145
|
+
7. runOutputData = merge(output, result) # Merge with previous output
|
|
146
|
+
8. handleCompleteReactive() # Status → back to previous
|
|
147
|
+
↓
|
|
148
|
+
Return runOutputData
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Graph-Level Flow
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
TaskGraph.runReactive(input)
|
|
155
|
+
↓
|
|
156
|
+
TaskGraphRunner.runGraphReactive(input)
|
|
157
|
+
↓
|
|
158
|
+
For each task (in topological order):
|
|
159
|
+
↓
|
|
160
|
+
┌─ If status == PENDING:
|
|
161
|
+
│ resetInputData() # Reset to defaults
|
|
162
|
+
│ copyInputFromEdgesToNode() # Pull from incoming dataflows
|
|
163
|
+
└─ Else (COMPLETED):
|
|
164
|
+
Skip input modification # Output is locked
|
|
165
|
+
↓
|
|
166
|
+
If isRootTask (no incoming dataflows):
|
|
167
|
+
taskInput = input # Pass graph input to root tasks
|
|
168
|
+
Else:
|
|
169
|
+
taskInput = {}
|
|
170
|
+
↓
|
|
171
|
+
task.runReactive(taskInput)
|
|
172
|
+
↓
|
|
173
|
+
pushOutputFromNodeToEdges() # Push output to dataflows
|
|
174
|
+
↓
|
|
175
|
+
Return results from ending nodes
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### The executeReactive Method
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
// Default implementation - just returns existing output
|
|
182
|
+
async executeReactive(input, output, context): Promise<Output | undefined> {
|
|
183
|
+
return output;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Custom implementation for quick transformations
|
|
187
|
+
async executeReactive(input, output, context): Promise<Output | undefined> {
|
|
188
|
+
// Lightweight operation (e.g., < 1ms)
|
|
189
|
+
return { ...output, preview: this.quickTransform(input) };
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Dataflow and Input Propagation
|
|
196
|
+
|
|
197
|
+
### How Data Flows Between Tasks
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
TaskA (source) TaskB (target)
|
|
201
|
+
↓ ↓
|
|
202
|
+
outputSchema: { inputSchema: {
|
|
203
|
+
result: number value: number
|
|
204
|
+
} }
|
|
205
|
+
↓ ↓
|
|
206
|
+
Dataflow("taskA", "result", "taskB", "value")
|
|
207
|
+
↓
|
|
208
|
+
TaskA.runOutputData.result → TaskB.runInputData.value
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Key Methods
|
|
212
|
+
|
|
213
|
+
| Method | Purpose |
|
|
214
|
+
| ----------------------------------------- | ---------------------------------------------------------------- |
|
|
215
|
+
| `copyInputFromEdgesToNode(task)` | Pull data from all incoming dataflows into task's `runInputData` |
|
|
216
|
+
| `pushOutputFromNodeToEdges(task, output)` | Push task's output to all outgoing dataflows |
|
|
217
|
+
| `addInputData(task, data)` | Merge data into task's `runInputData` |
|
|
218
|
+
|
|
219
|
+
### When Input is Copied
|
|
220
|
+
|
|
221
|
+
| Execution Mode | Task Status | Input Copied? |
|
|
222
|
+
| --------------- | ----------- | ------------------------- |
|
|
223
|
+
| `run()` | Any | Yes (always) |
|
|
224
|
+
| `runReactive()` | PENDING | Yes |
|
|
225
|
+
| `runReactive()` | COMPLETED | **No** (output is locked) |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## GraphAsTask (Subgraphs)
|
|
230
|
+
|
|
231
|
+
### What is GraphAsTask?
|
|
232
|
+
|
|
233
|
+
A `GraphAsTask` is a task that contains an internal `TaskGraph` (subgraph). This enables:
|
|
234
|
+
|
|
235
|
+
- Hierarchical workflow composition
|
|
236
|
+
- Encapsulation of complex logic
|
|
237
|
+
- Reusable workflow components
|
|
238
|
+
|
|
239
|
+
### Execution Flow
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
GraphAsTask.run(input)
|
|
243
|
+
↓
|
|
244
|
+
GraphAsTaskRunner.executeTask(input)
|
|
245
|
+
↓
|
|
246
|
+
executeTaskChildren(input)
|
|
247
|
+
↓
|
|
248
|
+
subGraph.run(input) # Execute the entire subgraph
|
|
249
|
+
↓
|
|
250
|
+
mergeExecuteOutputsToRunOutput() # Combine results from ending nodes
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Reactive Execution with Subgraphs
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
GraphAsTask.runReactive(input)
|
|
257
|
+
↓
|
|
258
|
+
GraphAsTaskRunner.executeTaskReactive(input, output)
|
|
259
|
+
↓
|
|
260
|
+
executeTaskChildrenReactive()
|
|
261
|
+
↓
|
|
262
|
+
subGraph.runReactive(this.task.runInputData) # ← IMPORTANT: Pass parent's input
|
|
263
|
+
↓
|
|
264
|
+
mergeExecuteOutputsToRunOutput()
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**Critical:** The parent's `runInputData` is passed to `subGraph.runReactive()` so that root tasks in the subgraph (like InputTask) receive the input values.
|
|
268
|
+
|
|
269
|
+
### Root Task Input Propagation
|
|
270
|
+
|
|
271
|
+
In `runGraphReactive()`:
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
const isRootTask = this.graph.getSourceDataflows(task.config.id).length === 0;
|
|
275
|
+
|
|
276
|
+
// For root tasks, pass the input parameter (from parent GraphAsTask)
|
|
277
|
+
const taskInput = isRootTask ? input : {};
|
|
278
|
+
|
|
279
|
+
const taskResult = await task.runReactive(taskInput);
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
This ensures:
|
|
283
|
+
|
|
284
|
+
1. Root tasks (no incoming dataflows) receive input from the parent
|
|
285
|
+
2. Non-root tasks receive input from their upstream dataflows
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Key Invariants
|
|
290
|
+
|
|
291
|
+
### 1. COMPLETED Tasks Are Immutable
|
|
292
|
+
|
|
293
|
+
Once a task's `run()` completes and status becomes `COMPLETED`:
|
|
294
|
+
|
|
295
|
+
- `runOutputData` is **locked** and **cacheable**
|
|
296
|
+
- `runInputData` should not be modified
|
|
297
|
+
- `runReactive()` returns the cached output unchanged
|
|
298
|
+
|
|
299
|
+
### 2. Only PENDING Tasks Receive Dataflow Updates in Reactive Mode
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
if (task.status === TaskStatus.PENDING) {
|
|
303
|
+
task.resetInputData();
|
|
304
|
+
this.copyInputFromEdgesToNode(task);
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 3. Root Tasks Receive Parent Input
|
|
309
|
+
|
|
310
|
+
In subgraphs, root tasks (no incoming dataflows) receive the parent's input:
|
|
311
|
+
|
|
312
|
+
```typescript
|
|
313
|
+
const taskInput = isRootTask ? input : {};
|
|
314
|
+
task.runReactive(taskInput);
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### 4. executeReactive is Lightweight
|
|
318
|
+
|
|
319
|
+
The `executeReactive()` method should:
|
|
320
|
+
|
|
321
|
+
- Complete quickly (< 1ms ideally)
|
|
322
|
+
- Not perform heavy computation
|
|
323
|
+
- Return UI preview data
|
|
324
|
+
|
|
325
|
+
Heavy computation belongs in `execute()`.
|
|
326
|
+
|
|
327
|
+
### 5. Reactive Execution Respects Task Order
|
|
328
|
+
|
|
329
|
+
Tasks are executed in topological order (via `reactiveScheduler`), ensuring:
|
|
330
|
+
|
|
331
|
+
- Upstream tasks run before downstream tasks
|
|
332
|
+
- Data is available when needed
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Common Pitfalls
|
|
337
|
+
|
|
338
|
+
### 1. Modifying COMPLETED Task Input
|
|
339
|
+
|
|
340
|
+
**Wrong:**
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
// Trying to update a COMPLETED task's input
|
|
344
|
+
task.setInput({ newValue: 42 }); // ❌ Violates immutability
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Correct:**
|
|
348
|
+
Only modify input for PENDING tasks, or reset the entire graph first.
|
|
349
|
+
|
|
350
|
+
### 2. Missing Root Task Input Propagation
|
|
351
|
+
|
|
352
|
+
**Wrong:**
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
protected async executeTaskChildrenReactive() {
|
|
356
|
+
return this.task.subGraph!.runReactive(); // ❌ No input passed
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Correct:**
|
|
361
|
+
|
|
362
|
+
```typescript
|
|
363
|
+
protected async executeTaskChildrenReactive() {
|
|
364
|
+
return this.task.subGraph!.runReactive(this.task.runInputData); // ✓
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### 3. Copying Input to COMPLETED Tasks
|
|
369
|
+
|
|
370
|
+
**Wrong:**
|
|
371
|
+
|
|
372
|
+
```typescript
|
|
373
|
+
// In runGraphReactive
|
|
374
|
+
this.copyInputFromEdgesToNode(task); // ❌ Always copies, even for COMPLETED
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
**Correct:**
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
if (task.status === TaskStatus.PENDING) {
|
|
381
|
+
task.resetInputData();
|
|
382
|
+
this.copyInputFromEdgesToNode(task); // ✓ Only for PENDING
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### 4. Heavy Computation in executeReactive
|
|
387
|
+
|
|
388
|
+
**Wrong:**
|
|
389
|
+
|
|
390
|
+
```typescript
|
|
391
|
+
async executeReactive(input, output) {
|
|
392
|
+
// ❌ Takes 30 seconds
|
|
393
|
+
const result = await this.trainNeuralNetwork(input);
|
|
394
|
+
return { result };
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Correct:**
|
|
399
|
+
|
|
400
|
+
```typescript
|
|
401
|
+
async executeReactive(input, output) {
|
|
402
|
+
// ✓ Quick preview (< 1ms)
|
|
403
|
+
return { preview: this.quickPreview(input) };
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
async execute(input) {
|
|
407
|
+
// Heavy work belongs here
|
|
408
|
+
const result = await this.trainNeuralNetwork(input);
|
|
409
|
+
return { result };
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Summary
|
|
416
|
+
|
|
417
|
+
| Aspect | `run()` | `runReactive()` |
|
|
418
|
+
| -------------------- | ----------------- | ------------------- |
|
|
419
|
+
| **Purpose** | Full execution | UI previews |
|
|
420
|
+
| **Method called** | `execute()` | `executeReactive()` |
|
|
421
|
+
| **Final status** | COMPLETED | Unchanged |
|
|
422
|
+
| **Output** | Locked/cached | Temporary |
|
|
423
|
+
| **Dataflow updates** | Always | Only PENDING tasks |
|
|
424
|
+
| **Performance** | Can be slow | Should be < 1ms |
|
|
425
|
+
| **User edits** | Before run starts | Before run starts |
|
|
426
|
+
|
|
427
|
+
### Key Takeaways
|
|
428
|
+
|
|
429
|
+
1. Users only edit inputs on PENDING tasks
|
|
430
|
+
2. Once `run()` completes, the task is COMPLETED and immutable
|
|
431
|
+
3. `runReactive()` propagates lightweight updates through PENDING tasks
|
|
432
|
+
4. COMPLETED tasks return cached results in reactive mode
|
|
433
|
+
5. Root tasks in subgraphs receive input from the parent GraphAsTask
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TaskJSON.test.d.ts","sourceRoot":"","sources":["../../src/task/TaskJSON.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|