@elaraai/e3-core 0.0.2-beta.36 → 0.0.2-beta.37
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/src/dataflow/api-compat.d.ts.map +1 -1
- package/dist/src/dataflow/api-compat.js +6 -1
- package/dist/src/dataflow/api-compat.js.map +1 -1
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.d.ts +22 -4
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.d.ts.map +1 -1
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.js +353 -79
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.js.map +1 -1
- package/dist/src/dataflow/orchestrator/interfaces.d.ts +6 -0
- package/dist/src/dataflow/orchestrator/interfaces.d.ts.map +1 -1
- package/dist/src/dataflow/orchestrator/interfaces.js +1 -0
- package/dist/src/dataflow/orchestrator/interfaces.js.map +1 -1
- package/dist/src/dataflow/steps.d.ts +74 -28
- package/dist/src/dataflow/steps.d.ts.map +1 -1
- package/dist/src/dataflow/steps.js +221 -42
- package/dist/src/dataflow/steps.js.map +1 -1
- package/dist/src/dataflow/types.d.ts +13 -2
- package/dist/src/dataflow/types.d.ts.map +1 -1
- package/dist/src/dataflow.d.ts +37 -95
- package/dist/src/dataflow.d.ts.map +1 -1
- package/dist/src/dataflow.js +121 -631
- package/dist/src/dataflow.js.map +1 -1
- package/dist/src/dataset-refs.d.ts +124 -0
- package/dist/src/dataset-refs.d.ts.map +1 -0
- package/dist/src/dataset-refs.js +319 -0
- package/dist/src/dataset-refs.js.map +1 -0
- package/dist/src/execution/MockTaskRunner.d.ts +1 -1
- package/dist/src/execution/MockTaskRunner.d.ts.map +1 -1
- package/dist/src/execution/MockTaskRunner.js +1 -2
- package/dist/src/execution/MockTaskRunner.js.map +1 -1
- package/dist/src/index.d.ts +5 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/packages.d.ts.map +1 -1
- package/dist/src/packages.js +20 -7
- package/dist/src/packages.js.map +1 -1
- package/dist/src/storage/in-memory/InMemoryStorage.d.ts +26 -4
- package/dist/src/storage/in-memory/InMemoryStorage.d.ts.map +1 -1
- package/dist/src/storage/in-memory/InMemoryStorage.js +104 -21
- package/dist/src/storage/in-memory/InMemoryStorage.js.map +1 -1
- package/dist/src/storage/index.d.ts +2 -2
- package/dist/src/storage/index.d.ts.map +1 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/index.js.map +1 -1
- package/dist/src/storage/interfaces.d.ts +52 -1
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/local/LocalBackend.d.ts +3 -1
- package/dist/src/storage/local/LocalBackend.d.ts.map +1 -1
- package/dist/src/storage/local/LocalBackend.js +5 -1
- package/dist/src/storage/local/LocalBackend.js.map +1 -1
- package/dist/src/storage/local/LocalDatasetRefStore.d.ts +22 -0
- package/dist/src/storage/local/LocalDatasetRefStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalDatasetRefStore.js +118 -0
- package/dist/src/storage/local/LocalDatasetRefStore.js.map +1 -0
- package/dist/src/storage/local/LocalLockService.d.ts +6 -0
- package/dist/src/storage/local/LocalLockService.d.ts.map +1 -1
- package/dist/src/storage/local/LocalLockService.js +17 -4
- package/dist/src/storage/local/LocalLockService.js.map +1 -1
- package/dist/src/storage/local/LocalRepoStore.d.ts +4 -2
- package/dist/src/storage/local/LocalRepoStore.d.ts.map +1 -1
- package/dist/src/storage/local/LocalRepoStore.js +14 -2
- package/dist/src/storage/local/LocalRepoStore.js.map +1 -1
- package/dist/src/storage/local/gc.d.ts.map +1 -1
- package/dist/src/storage/local/gc.js +8 -1
- package/dist/src/storage/local/gc.js.map +1 -1
- package/dist/src/storage/local/index.d.ts +1 -0
- package/dist/src/storage/local/index.d.ts.map +1 -1
- package/dist/src/storage/local/index.js +1 -0
- package/dist/src/storage/local/index.js.map +1 -1
- package/dist/src/trees.d.ts +35 -43
- package/dist/src/trees.d.ts.map +1 -1
- package/dist/src/trees.js +228 -449
- package/dist/src/trees.js.map +1 -1
- package/dist/src/workspaces.d.ts +6 -27
- package/dist/src/workspaces.d.ts.map +1 -1
- package/dist/src/workspaces.js +42 -55
- package/dist/src/workspaces.js.map +1 -1
- package/package.json +1 -1
package/dist/src/dataflow.d.ts
CHANGED
|
@@ -50,6 +50,8 @@ export interface DataflowResult {
|
|
|
50
50
|
failed: number;
|
|
51
51
|
/** Number of tasks skipped due to upstream failure */
|
|
52
52
|
skipped: number;
|
|
53
|
+
/** Number of tasks re-executed due to input changes */
|
|
54
|
+
reexecuted: number;
|
|
53
55
|
/** Per-task results */
|
|
54
56
|
tasks: TaskExecutionResult[];
|
|
55
57
|
/** Total duration in milliseconds */
|
|
@@ -65,29 +67,11 @@ export interface DataflowOptions {
|
|
|
65
67
|
force?: boolean;
|
|
66
68
|
/** Filter to run only specific task(s) by exact name */
|
|
67
69
|
filter?: string;
|
|
68
|
-
/**
|
|
69
|
-
* External workspace lock to use. If provided, the caller is responsible
|
|
70
|
-
* for releasing the lock after execution. If not provided, dataflowExecute
|
|
71
|
-
* will acquire and release a lock internally.
|
|
72
|
-
*
|
|
73
|
-
* Use an external lock when you need to hold the lock across multiple
|
|
74
|
-
* operations (e.g., API server that cancels and restarts dataflow on writes).
|
|
75
|
-
*/
|
|
70
|
+
/** External workspace lock to use. */
|
|
76
71
|
lock?: LockHandle;
|
|
77
|
-
/**
|
|
78
|
-
* AbortSignal for cancellation. When aborted:
|
|
79
|
-
* - No new tasks will be started
|
|
80
|
-
* - Running tasks will be killed (SIGTERM, then SIGKILL)
|
|
81
|
-
* - DataflowAbortedError will be thrown with partial results
|
|
82
|
-
*/
|
|
72
|
+
/** AbortSignal for cancellation. */
|
|
83
73
|
signal?: AbortSignal;
|
|
84
|
-
/**
|
|
85
|
-
* Task runner to use for executing individual tasks.
|
|
86
|
-
* Defaults to using taskExecute() directly if not provided.
|
|
87
|
-
*
|
|
88
|
-
* Use MockTaskRunner for testing dataflow orchestration logic
|
|
89
|
-
* without spawning real processes.
|
|
90
|
-
*/
|
|
74
|
+
/** Task runner for executing individual tasks. */
|
|
91
75
|
runner?: TaskRunner;
|
|
92
76
|
/** Callback when a task starts */
|
|
93
77
|
onTaskStart?: (name: string) => void;
|
|
@@ -97,23 +81,26 @@ export interface DataflowOptions {
|
|
|
97
81
|
onStdout?: (taskName: string, data: string) => void;
|
|
98
82
|
/** Callback for task stderr */
|
|
99
83
|
onStderr?: (taskName: string, data: string) => void;
|
|
84
|
+
/** Callback when an input dataset changes during execution (reactive dataflow) */
|
|
85
|
+
onInputChanged?: (path: string, previousHash: string, newHash: string) => void;
|
|
86
|
+
/** Callback when a task is invalidated due to input change */
|
|
87
|
+
onTaskInvalidated?: (taskName: string, reason: string) => void;
|
|
88
|
+
/** Callback when a task is deferred due to inconsistent input versions */
|
|
89
|
+
onTaskDeferred?: (taskName: string, conflictPath: string) => void;
|
|
100
90
|
}
|
|
101
91
|
/**
|
|
102
92
|
* Execute all tasks in a workspace according to the dependency graph.
|
|
103
93
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* Acquires an exclusive lock on the workspace for the duration of execution
|
|
109
|
-
* to prevent concurrent modifications. If options.lock is provided, uses that
|
|
110
|
-
* lock instead (caller is responsible for releasing it).
|
|
94
|
+
* Delegates to `LocalOrchestrator` which implements reactive fixpoint
|
|
95
|
+
* execution using step functions. After each task completes, input changes
|
|
96
|
+
* are detected and affected tasks are invalidated and re-executed.
|
|
111
97
|
*
|
|
112
98
|
* @param storage - Storage backend
|
|
113
|
-
* @param repo - Repository identifier
|
|
99
|
+
* @param repo - Repository identifier
|
|
114
100
|
* @param ws - Workspace name
|
|
115
101
|
* @param options - Execution options
|
|
116
102
|
* @returns Result of the dataflow execution
|
|
103
|
+
*
|
|
117
104
|
* @throws {WorkspaceLockError} If workspace is locked by another process
|
|
118
105
|
* @throws {WorkspaceNotFoundError} If workspace doesn't exist
|
|
119
106
|
* @throws {WorkspaceNotDeployedError} If workspace has no package deployed
|
|
@@ -122,20 +109,14 @@ export interface DataflowOptions {
|
|
|
122
109
|
*/
|
|
123
110
|
export declare function dataflowExecute(storage: StorageBackend, repo: string, ws: string, options?: DataflowOptions): Promise<DataflowResult>;
|
|
124
111
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* Returns a promise immediately without awaiting execution. The lock is
|
|
128
|
-
* released automatically when execution completes.
|
|
112
|
+
* Execute dataflow with an externally-held lock.
|
|
113
|
+
* The lock is released automatically when execution completes or fails.
|
|
129
114
|
*
|
|
130
115
|
* @param storage - Storage backend
|
|
131
|
-
* @param repo - Repository identifier
|
|
116
|
+
* @param repo - Repository identifier
|
|
132
117
|
* @param ws - Workspace name
|
|
133
118
|
* @param options - Execution options (lock must be provided)
|
|
134
119
|
* @returns Promise that resolves when execution completes
|
|
135
|
-
* @throws {WorkspaceNotFoundError} If workspace doesn't exist
|
|
136
|
-
* @throws {WorkspaceNotDeployedError} If workspace has no package deployed
|
|
137
|
-
* @throws {TaskNotFoundError} If filter specifies a task that doesn't exist
|
|
138
|
-
* @throws {DataflowError} If execution fails for other reasons
|
|
139
120
|
*/
|
|
140
121
|
export declare function dataflowStart(storage: StorageBackend, repo: string, ws: string, options: DataflowOptions & {
|
|
141
122
|
lock: LockHandle;
|
|
@@ -144,9 +125,10 @@ export declare function dataflowStart(storage: StorageBackend, repo: string, ws:
|
|
|
144
125
|
* Get the dependency graph for a workspace (for visualization/debugging).
|
|
145
126
|
*
|
|
146
127
|
* @param storage - Storage backend
|
|
147
|
-
* @param repo - Repository identifier
|
|
128
|
+
* @param repo - Repository identifier
|
|
148
129
|
* @param ws - Workspace name
|
|
149
130
|
* @returns Graph information
|
|
131
|
+
*
|
|
150
132
|
* @throws {WorkspaceNotFoundError} If workspace doesn't exist
|
|
151
133
|
* @throws {WorkspaceNotDeployedError} If workspace has no package deployed
|
|
152
134
|
* @throws {DataflowError} If graph building fails for other reasons
|
|
@@ -172,98 +154,58 @@ export interface DataflowGraph {
|
|
|
172
154
|
dependsOn: string[];
|
|
173
155
|
}>;
|
|
174
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Find all tasks affected by input changes (transitive dependents).
|
|
159
|
+
* An affected task is one whose output could change due to the input change.
|
|
160
|
+
*
|
|
161
|
+
* @param graph - The dependency graph
|
|
162
|
+
* @param changes - Array of changed input paths
|
|
163
|
+
* @returns Array of affected task names
|
|
164
|
+
*/
|
|
165
|
+
export declare function findAffectedTasks(graph: DataflowGraph, changes: Array<{
|
|
166
|
+
path: string;
|
|
167
|
+
}>): string[];
|
|
175
168
|
/**
|
|
176
169
|
* Get tasks that are ready to execute given the set of completed tasks.
|
|
177
170
|
*
|
|
178
171
|
* A task is ready when all tasks it depends on have completed.
|
|
179
|
-
* This is useful for distributed execution (e.g., AWS Step Functions)
|
|
180
|
-
* where a coordinator needs to determine which tasks can run next.
|
|
181
172
|
*
|
|
182
173
|
* @param graph - The dependency graph from dataflowGetGraph
|
|
183
174
|
* @param completedTasks - Set of task names that have completed
|
|
184
175
|
* @returns Array of task names that are ready to execute
|
|
185
|
-
*
|
|
186
|
-
* @example
|
|
187
|
-
* ```typescript
|
|
188
|
-
* const graph = await dataflowGetGraph(storage, repo, 'production');
|
|
189
|
-
* const ready = dataflowGetReadyTasks(graph, new Set()); // Initial ready tasks
|
|
190
|
-
* // Execute ready[0]...
|
|
191
|
-
* const nextReady = dataflowGetReadyTasks(graph, new Set([ready[0]]));
|
|
192
|
-
* ```
|
|
193
176
|
*/
|
|
194
177
|
export declare function dataflowGetReadyTasks(graph: DataflowGraph, completedTasks: Set<string>): string[];
|
|
195
178
|
/**
|
|
196
179
|
* Check if a task execution is cached for the given inputs.
|
|
197
180
|
*
|
|
198
|
-
* This is useful for distributed execution where a Lambda handler needs
|
|
199
|
-
* to check if a task can be skipped before spawning execution.
|
|
200
|
-
*
|
|
201
181
|
* @param storage - Storage backend
|
|
202
182
|
* @param repo - Repository path
|
|
203
183
|
* @param taskHash - Hash of the TaskObject
|
|
204
184
|
* @param inputHashes - Array of input dataset hashes (in order)
|
|
205
185
|
* @returns Output hash if cached, null if execution needed
|
|
206
|
-
*
|
|
207
|
-
* @example
|
|
208
|
-
* ```typescript
|
|
209
|
-
* const outputHash = await dataflowCheckCache(storage, repo, taskHash, inputHashes);
|
|
210
|
-
* if (outputHash) {
|
|
211
|
-
* // Task is cached, use outputHash directly
|
|
212
|
-
* } else {
|
|
213
|
-
* // Need to execute task
|
|
214
|
-
* }
|
|
215
|
-
* ```
|
|
216
186
|
*/
|
|
217
187
|
export declare function dataflowCheckCache(storage: StorageBackend, repo: string, taskHash: string, inputHashes: string[]): Promise<string | null>;
|
|
218
188
|
/**
|
|
219
189
|
* Find tasks that should be skipped when a task fails.
|
|
220
190
|
*
|
|
221
|
-
* Returns all tasks that transitively depend on the failed task
|
|
222
|
-
*
|
|
223
|
-
* or already skipped tasks.
|
|
224
|
-
*
|
|
225
|
-
* This is useful for distributed execution where the coordinator
|
|
226
|
-
* needs to mark downstream tasks as skipped after a failure.
|
|
191
|
+
* Returns all tasks that transitively depend on the failed task,
|
|
192
|
+
* excluding already completed or already skipped tasks.
|
|
227
193
|
*
|
|
228
194
|
* @param graph - The dependency graph from dataflowGetGraph
|
|
229
195
|
* @param failedTask - Name of the task that failed
|
|
230
|
-
* @param completedTasks - Set of task names already completed
|
|
231
|
-
* @param skippedTasks - Set of task names already skipped
|
|
196
|
+
* @param completedTasks - Set of task names already completed
|
|
197
|
+
* @param skippedTasks - Set of task names already skipped
|
|
232
198
|
* @returns Array of task names that should be skipped
|
|
233
|
-
*
|
|
234
|
-
* @example
|
|
235
|
-
* ```typescript
|
|
236
|
-
* const graph = await dataflowGetGraph(storage, repo, 'production');
|
|
237
|
-
* // Task 'etl' failed...
|
|
238
|
-
* const toSkip = dataflowGetDependentsToSkip(graph, 'etl', completed, skipped);
|
|
239
|
-
* // toSkip might be ['transform', 'aggregate', 'report'] - all downstream tasks
|
|
240
|
-
* ```
|
|
241
199
|
*/
|
|
242
200
|
export declare function dataflowGetDependentsToSkip(graph: DataflowGraph, failedTask: string, completedTasks: Set<string>, skippedTasks: Set<string>): string[];
|
|
243
201
|
/**
|
|
244
202
|
* Resolve input hashes for a task from current workspace state.
|
|
245
203
|
*
|
|
246
|
-
* Returns an array of hashes in the same order as the task's inputs.
|
|
247
|
-
* If any input is unassigned, returns null for that position.
|
|
248
|
-
*
|
|
249
|
-
* This is useful for distributed execution where the input hashes
|
|
250
|
-
* need to be resolved before checking cache or executing.
|
|
251
|
-
*
|
|
252
204
|
* @param storage - Storage backend
|
|
253
205
|
* @param repo - Repository path
|
|
254
206
|
* @param ws - Workspace name
|
|
255
|
-
* @param task - Task info from the graph
|
|
207
|
+
* @param task - Task info from the graph
|
|
256
208
|
* @returns Array of hashes (null if input is unassigned)
|
|
257
|
-
*
|
|
258
|
-
* @example
|
|
259
|
-
* ```typescript
|
|
260
|
-
* const graph = await dataflowGetGraph(storage, repo, 'production');
|
|
261
|
-
* const task = graph.tasks.find(t => t.name === 'etl')!;
|
|
262
|
-
* const inputHashes = await dataflowResolveInputHashes(storage, repo, 'production', task);
|
|
263
|
-
* if (!inputHashes.includes(null)) {
|
|
264
|
-
* const cached = await dataflowCheckCache(storage, repo, task.hash, inputHashes);
|
|
265
|
-
* }
|
|
266
|
-
* ```
|
|
267
209
|
*/
|
|
268
210
|
export declare function dataflowResolveInputHashes(storage: StorageBackend, repo: string, ws: string, task: DataflowGraph['tasks'][0]): Promise<Array<string | null>>;
|
|
269
211
|
//# sourceMappingURL=dataflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../src/dataflow.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../src/dataflow.ts"],"names":[],"mappings":"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"}
|