@elaraai/e3-core 0.0.2-beta.11 → 0.0.2-beta.13

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.
Files changed (95) hide show
  1. package/dist/src/dataflow.d.ts +118 -9
  2. package/dist/src/dataflow.d.ts.map +1 -1
  3. package/dist/src/dataflow.js +283 -54
  4. package/dist/src/dataflow.js.map +1 -1
  5. package/dist/src/errors.d.ts +11 -6
  6. package/dist/src/errors.d.ts.map +1 -1
  7. package/dist/src/errors.js +10 -3
  8. package/dist/src/errors.js.map +1 -1
  9. package/dist/src/execution/index.d.ts +14 -0
  10. package/dist/src/execution/index.d.ts.map +1 -0
  11. package/dist/src/execution/index.js +6 -0
  12. package/dist/src/execution/index.js.map +1 -0
  13. package/dist/src/execution/interfaces.d.ts +244 -0
  14. package/dist/src/execution/interfaces.d.ts.map +1 -0
  15. package/dist/src/execution/interfaces.js +6 -0
  16. package/dist/src/execution/interfaces.js.map +1 -0
  17. package/dist/src/executions.d.ts +48 -38
  18. package/dist/src/executions.d.ts.map +1 -1
  19. package/dist/src/executions.js +117 -162
  20. package/dist/src/executions.js.map +1 -1
  21. package/dist/src/gc.d.ts +9 -2
  22. package/dist/src/gc.d.ts.map +1 -1
  23. package/dist/src/gc.js +19 -9
  24. package/dist/src/gc.js.map +1 -1
  25. package/dist/src/index.d.ts +8 -6
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +22 -5
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/objects.d.ts +6 -6
  30. package/dist/src/objects.js +6 -6
  31. package/dist/src/packages.d.ts +22 -14
  32. package/dist/src/packages.d.ts.map +1 -1
  33. package/dist/src/packages.js +45 -79
  34. package/dist/src/packages.js.map +1 -1
  35. package/dist/src/repository.d.ts +8 -4
  36. package/dist/src/repository.d.ts.map +1 -1
  37. package/dist/src/repository.js +25 -29
  38. package/dist/src/repository.js.map +1 -1
  39. package/dist/src/storage/index.d.ts +17 -0
  40. package/dist/src/storage/index.d.ts.map +1 -0
  41. package/dist/src/storage/index.js +8 -0
  42. package/dist/src/storage/index.js.map +1 -0
  43. package/dist/src/storage/interfaces.d.ts +299 -0
  44. package/dist/src/storage/interfaces.d.ts.map +1 -0
  45. package/dist/src/storage/interfaces.js +6 -0
  46. package/dist/src/storage/interfaces.js.map +1 -0
  47. package/dist/src/storage/local/LocalBackend.d.ts +51 -0
  48. package/dist/src/storage/local/LocalBackend.d.ts.map +1 -0
  49. package/dist/src/storage/local/LocalBackend.js +73 -0
  50. package/dist/src/storage/local/LocalBackend.js.map +1 -0
  51. package/dist/src/storage/local/LocalLockService.d.ts +22 -0
  52. package/dist/src/storage/local/LocalLockService.d.ts.map +1 -0
  53. package/dist/src/storage/local/LocalLockService.js +38 -0
  54. package/dist/src/storage/local/LocalLockService.js.map +1 -0
  55. package/dist/src/storage/local/LocalLogStore.d.ts +23 -0
  56. package/dist/src/storage/local/LocalLogStore.d.ts.map +1 -0
  57. package/dist/src/storage/local/LocalLogStore.js +66 -0
  58. package/dist/src/storage/local/LocalLogStore.js.map +1 -0
  59. package/dist/src/storage/local/LocalObjectStore.d.ts +19 -0
  60. package/dist/src/storage/local/LocalObjectStore.d.ts.map +1 -0
  61. package/dist/src/storage/local/LocalObjectStore.js +68 -0
  62. package/dist/src/storage/local/LocalObjectStore.js.map +1 -0
  63. package/dist/src/storage/local/LocalRefStore.d.ts +35 -0
  64. package/dist/src/storage/local/LocalRefStore.d.ts.map +1 -0
  65. package/dist/src/storage/local/LocalRefStore.js +233 -0
  66. package/dist/src/storage/local/LocalRefStore.js.map +1 -0
  67. package/dist/src/storage/local/index.d.ts +16 -0
  68. package/dist/src/storage/local/index.d.ts.map +1 -0
  69. package/dist/src/storage/local/index.js +16 -0
  70. package/dist/src/storage/local/index.js.map +1 -0
  71. package/dist/src/tasks.d.ts +16 -10
  72. package/dist/src/tasks.d.ts.map +1 -1
  73. package/dist/src/tasks.js +35 -41
  74. package/dist/src/tasks.js.map +1 -1
  75. package/dist/src/test-helpers.d.ts +4 -4
  76. package/dist/src/test-helpers.d.ts.map +1 -1
  77. package/dist/src/test-helpers.js +6 -20
  78. package/dist/src/test-helpers.js.map +1 -1
  79. package/dist/src/trees.d.ts +41 -29
  80. package/dist/src/trees.d.ts.map +1 -1
  81. package/dist/src/trees.js +112 -109
  82. package/dist/src/trees.js.map +1 -1
  83. package/dist/src/workspaceLock.d.ts +29 -7
  84. package/dist/src/workspaceLock.d.ts.map +1 -1
  85. package/dist/src/workspaceLock.js +130 -40
  86. package/dist/src/workspaceLock.js.map +1 -1
  87. package/dist/src/workspaceStatus.d.ts +6 -4
  88. package/dist/src/workspaceStatus.d.ts.map +1 -1
  89. package/dist/src/workspaceStatus.js +42 -58
  90. package/dist/src/workspaceStatus.js.map +1 -1
  91. package/dist/src/workspaces.d.ts +35 -26
  92. package/dist/src/workspaces.d.ts.map +1 -1
  93. package/dist/src/workspaces.js +93 -116
  94. package/dist/src/workspaces.js.map +1 -1
  95. package/package.json +4 -4
@@ -21,15 +21,58 @@
21
21
  * output is written to the workspace and dependents are notified only after the
22
22
  * write completes, ensuring downstream tasks see consistent state.
23
23
  */
24
- import { decodeBeast2For } from '@elaraai/east';
24
+ import { decodeBeast2For, variant } from '@elaraai/east';
25
25
  import { PackageObjectType, TaskObjectType, WorkspaceStateType, pathToString, } from '@elaraai/e3-types';
26
- import { objectRead } from './objects.js';
27
26
  import { taskExecute, executionGetOutput, inputsHash, } from './executions.js';
28
27
  import { workspaceGetDatasetHash, workspaceSetDatasetByHash, } from './trees.js';
29
- import { E3Error, WorkspaceNotFoundError, WorkspaceNotDeployedError, TaskNotFoundError, DataflowError, DataflowAbortedError, isNotFoundError, } from './errors.js';
30
- import { acquireWorkspaceLock, } from './workspaceLock.js';
31
- import * as fs from 'fs/promises';
32
- import * as path from 'path';
28
+ import { E3Error, WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceLockError, TaskNotFoundError, DataflowError, DataflowAbortedError, } from './errors.js';
29
+ // =============================================================================
30
+ // Path Parsing Helper
31
+ // =============================================================================
32
+ /**
33
+ * Parse a keypath string (from pathToString) back to TreePath.
34
+ *
35
+ * The keypath format is: .field1.field2 (dot-separated field names)
36
+ * Quoted identifiers use backticks: .field1.`complex/name`
37
+ *
38
+ * @param pathStr - The path string in keypath format
39
+ * @returns TreePath array of path segments
40
+ */
41
+ function parsePathString(pathStr) {
42
+ if (!pathStr.startsWith('.')) {
43
+ throw new Error(`Invalid path string: expected '.' prefix, got '${pathStr}'`);
44
+ }
45
+ const segments = [];
46
+ let i = 1; // Skip the leading '.'
47
+ while (i < pathStr.length) {
48
+ let fieldName;
49
+ if (pathStr[i] === '`') {
50
+ // Quoted identifier: find closing backtick
51
+ const endQuote = pathStr.indexOf('`', i + 1);
52
+ if (endQuote === -1) {
53
+ throw new Error(`Invalid path string: unclosed backtick at position ${i}`);
54
+ }
55
+ fieldName = pathStr.slice(i + 1, endQuote);
56
+ i = endQuote + 1;
57
+ }
58
+ else {
59
+ // Unquoted identifier: read until '.' or end
60
+ let end = pathStr.indexOf('.', i);
61
+ if (end === -1)
62
+ end = pathStr.length;
63
+ fieldName = pathStr.slice(i, end);
64
+ i = end;
65
+ }
66
+ if (fieldName) {
67
+ segments.push(variant('field', fieldName));
68
+ }
69
+ // Skip the '.' separator
70
+ if (i < pathStr.length && pathStr[i] === '.') {
71
+ i++;
72
+ }
73
+ }
74
+ return segments;
75
+ }
33
76
  // =============================================================================
34
77
  // Async Mutex for Workspace Updates
35
78
  // =============================================================================
@@ -81,27 +124,20 @@ class AsyncMutex {
81
124
  // Workspace State Reader
82
125
  // =============================================================================
83
126
  /**
84
- * Read workspace state from file.
127
+ * Read workspace state.
85
128
  * @throws {WorkspaceNotFoundError} If workspace doesn't exist
86
129
  * @throws {WorkspaceNotDeployedError} If workspace has no package deployed
87
130
  */
88
- async function readWorkspaceState(repoPath, ws) {
89
- const stateFile = path.join(repoPath, 'workspaces', `${ws}.beast2`);
90
- let data;
91
- try {
92
- data = await fs.readFile(stateFile);
93
- }
94
- catch (err) {
95
- if (isNotFoundError(err)) {
96
- throw new WorkspaceNotFoundError(ws);
97
- }
98
- throw err;
131
+ async function readWorkspaceState(storage, repo, ws) {
132
+ const data = await storage.refs.workspaceRead(repo, ws);
133
+ if (data === null) {
134
+ throw new WorkspaceNotFoundError(ws);
99
135
  }
100
136
  if (data.length === 0) {
101
137
  throw new WorkspaceNotDeployedError(ws);
102
138
  }
103
139
  const decoder = decodeBeast2For(WorkspaceStateType);
104
- return decoder(data);
140
+ return decoder(Buffer.from(data));
105
141
  }
106
142
  // =============================================================================
107
143
  // Dependency Graph Building
@@ -114,11 +150,11 @@ async function readWorkspaceState(repoPath, ws) {
114
150
  * - outputToTask: Map of output path string -> task name
115
151
  * - taskDependents: Map of task name -> set of dependent task names
116
152
  */
117
- async function buildDependencyGraph(repoPath, ws) {
153
+ async function buildDependencyGraph(storage, repo, ws) {
118
154
  // Read workspace state to get package hash
119
- const state = await readWorkspaceState(repoPath, ws);
155
+ const state = await readWorkspaceState(storage, repo, ws);
120
156
  // Read package object to get tasks map
121
- const pkgData = await objectRead(repoPath, state.packageHash);
157
+ const pkgData = await storage.objects.read(repo, state.packageHash);
122
158
  const pkgDecoder = decodeBeast2For(PackageObjectType);
123
159
  const pkgObject = pkgDecoder(Buffer.from(pkgData));
124
160
  const taskNodes = new Map();
@@ -126,7 +162,7 @@ async function buildDependencyGraph(repoPath, ws) {
126
162
  // First pass: load all tasks and build output->task map
127
163
  const taskDecoder = decodeBeast2For(TaskObjectType);
128
164
  for (const [taskName, taskHash] of pkgObject.tasks) {
129
- const taskData = await objectRead(repoPath, taskHash);
165
+ const taskData = await storage.objects.read(repo, taskHash);
130
166
  const task = taskDecoder(Buffer.from(taskData));
131
167
  const outputPathStr = pathToString(task.output);
132
168
  outputToTask.set(outputPathStr, taskName);
@@ -159,7 +195,7 @@ async function buildDependencyGraph(repoPath, ws) {
159
195
  }
160
196
  // If not produced by a task, it's an external input - check if assigned
161
197
  else {
162
- const { refType } = await workspaceGetDatasetHash(repoPath, ws, inputPath);
198
+ const { refType } = await workspaceGetDatasetHash(storage, repo, ws, inputPath);
163
199
  if (refType === 'unassigned') {
164
200
  // External input that is unassigned - this task can never run
165
201
  node.unresolvedCount++;
@@ -183,7 +219,8 @@ async function buildDependencyGraph(repoPath, ws) {
183
219
  * to prevent concurrent modifications. If options.lock is provided, uses that
184
220
  * lock instead (caller is responsible for releasing it).
185
221
  *
186
- * @param repoPath - Path to .e3 repository
222
+ * @param storage - Storage backend
223
+ * @param repo - Repository identifier (for local storage, the path to e3 repository directory)
187
224
  * @param ws - Workspace name
188
225
  * @param options - Execution options
189
226
  * @returns Result of the dataflow execution
@@ -193,12 +230,16 @@ async function buildDependencyGraph(repoPath, ws) {
193
230
  * @throws {TaskNotFoundError} If filter specifies a task that doesn't exist
194
231
  * @throws {DataflowError} If execution fails for other reasons
195
232
  */
196
- export async function dataflowExecute(repoPath, ws, options = {}) {
233
+ export async function dataflowExecute(storage, repo, ws, options = {}) {
197
234
  // Acquire lock if not provided externally
198
235
  const externalLock = options.lock;
199
- const lock = externalLock ?? await acquireWorkspaceLock(repoPath, ws);
236
+ const lock = externalLock ?? await storage.locks.acquire(repo, ws, variant('dataflow', null));
237
+ if (!lock) {
238
+ // Lock couldn't be acquired - the LockService returns null instead of throwing
239
+ throw new WorkspaceLockError(ws);
240
+ }
200
241
  try {
201
- return await dataflowExecuteWithLock(repoPath, ws, options);
242
+ return await dataflowExecuteWithLock(storage, repo, ws, options);
202
243
  }
203
244
  finally {
204
245
  // Only release the lock if we acquired it internally
@@ -213,7 +254,8 @@ export async function dataflowExecute(repoPath, ws, options = {}) {
213
254
  * Returns a promise immediately without awaiting execution. The lock is
214
255
  * released automatically when execution completes.
215
256
  *
216
- * @param repoPath - Path to .e3 repository
257
+ * @param storage - Storage backend
258
+ * @param repo - Repository identifier (for local storage, the path to e3 repository directory)
217
259
  * @param ws - Workspace name
218
260
  * @param options - Execution options (lock must be provided)
219
261
  * @returns Promise that resolves when execution completes
@@ -222,23 +264,25 @@ export async function dataflowExecute(repoPath, ws, options = {}) {
222
264
  * @throws {TaskNotFoundError} If filter specifies a task that doesn't exist
223
265
  * @throws {DataflowError} If execution fails for other reasons
224
266
  */
225
- export function dataflowStart(repoPath, ws, options) {
226
- return dataflowExecuteWithLock(repoPath, ws, options)
267
+ export function dataflowStart(storage, repo, ws, options) {
268
+ return dataflowExecuteWithLock(storage, repo, ws, options)
227
269
  .finally(() => options.lock.release());
228
270
  }
229
271
  /**
230
272
  * Internal: Execute dataflow with lock already held.
231
273
  */
232
- async function dataflowExecuteWithLock(repoPath, ws, options) {
274
+ async function dataflowExecuteWithLock(storage, repo, ws, options) {
233
275
  const startTime = Date.now();
234
276
  const concurrency = options.concurrency ?? 4;
235
277
  let taskNodes;
236
278
  let taskDependents;
279
+ let outputToTask;
237
280
  try {
238
281
  // Build dependency graph
239
- const graph = await buildDependencyGraph(repoPath, ws);
240
- taskNodes = graph.taskNodes;
241
- taskDependents = graph.taskDependents;
282
+ const graphResult = await buildDependencyGraph(storage, repo, ws);
283
+ taskNodes = graphResult.taskNodes;
284
+ taskDependents = graphResult.taskDependents;
285
+ outputToTask = graphResult.outputToTask;
242
286
  }
243
287
  catch (err) {
244
288
  // Re-throw E3Errors as-is
@@ -247,6 +291,26 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
247
291
  // Wrap unexpected errors
248
292
  throw new DataflowError(`Failed to build dependency graph: ${err instanceof Error ? err.message : err}`);
249
293
  }
294
+ // Build DataflowGraph for use with decomposed building blocks
295
+ const dataflowGraph = {
296
+ tasks: Array.from(taskNodes.entries()).map(([taskName, node]) => {
297
+ const dependsOn = [];
298
+ for (const inputPath of node.inputPaths) {
299
+ const inputPathStr = pathToString(inputPath);
300
+ const producerTask = outputToTask.get(inputPathStr);
301
+ if (producerTask) {
302
+ dependsOn.push(producerTask);
303
+ }
304
+ }
305
+ return {
306
+ name: taskName,
307
+ hash: node.hash,
308
+ inputs: node.inputPaths.map(pathToString),
309
+ output: pathToString(node.outputPath),
310
+ dependsOn,
311
+ };
312
+ }),
313
+ };
250
314
  // Apply filter if specified
251
315
  const filteredTaskNames = options.filter
252
316
  ? new Set([options.filter])
@@ -278,6 +342,7 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
278
342
  const readyQueue = [];
279
343
  const completed = new Set();
280
344
  const inProgress = new Set();
345
+ const skippedTasks = new Set(); // Track skipped tasks separately for dataflowGetDependentsToSkip
281
346
  // Initialize ready queue with tasks that have no unresolved dependencies
282
347
  // and pass the filter (if any)
283
348
  for (const [taskName, node] of taskNodes) {
@@ -294,7 +359,7 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
294
359
  // Gather current input hashes
295
360
  const currentInputHashes = [];
296
361
  for (const inputPath of node.inputPaths) {
297
- const { refType, hash } = await workspaceGetDatasetHash(repoPath, ws, inputPath);
362
+ const { refType, hash } = await workspaceGetDatasetHash(storage, repo, ws, inputPath);
298
363
  if (refType !== 'value' || hash === null) {
299
364
  // Input not assigned, can't be cached
300
365
  return null;
@@ -303,14 +368,14 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
303
368
  }
304
369
  // Check if there's a cached execution for these inputs
305
370
  const inHash = inputsHash(currentInputHashes);
306
- const cachedOutputHash = await executionGetOutput(repoPath, node.hash, inHash);
371
+ const cachedOutputHash = await executionGetOutput(storage, repo, node.hash, inHash);
307
372
  if (cachedOutputHash === null) {
308
373
  // No cached execution for current inputs
309
374
  return null;
310
375
  }
311
376
  // Also verify the workspace output matches the cached output
312
377
  // (in case the workspace was modified outside of execution)
313
- const { refType, hash: wsOutputHash } = await workspaceGetDatasetHash(repoPath, ws, node.outputPath);
378
+ const { refType, hash: wsOutputHash } = await workspaceGetDatasetHash(storage, repo, ws, node.outputPath);
314
379
  if (refType !== 'value' || wsOutputHash !== cachedOutputHash) {
315
380
  // Workspace output doesn't match cached output, need to re-execute
316
381
  // (or update workspace with cached value)
@@ -326,7 +391,7 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
326
391
  // Gather input hashes
327
392
  const inputHashes = [];
328
393
  for (const inputPath of node.inputPaths) {
329
- const { refType, hash } = await workspaceGetDatasetHash(repoPath, ws, inputPath);
394
+ const { refType, hash } = await workspaceGetDatasetHash(storage, repo, ws, inputPath);
330
395
  if (refType !== 'value' || hash === null) {
331
396
  // Input not available - should not happen if dependency tracking is correct
332
397
  return {
@@ -346,7 +411,7 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
346
411
  onStdout: options.onStdout ? (data) => options.onStdout(taskName, data) : undefined,
347
412
  onStderr: options.onStderr ? (data) => options.onStderr(taskName, data) : undefined,
348
413
  };
349
- const result = await taskExecute(repoPath, node.hash, inputHashes, execOptions);
414
+ const result = await taskExecute(storage, repo, node.hash, inputHashes, execOptions);
350
415
  // Build task result (NOTE: workspace update happens later, in mutex-protected section)
351
416
  const taskResult = {
352
417
  name: taskName,
@@ -383,17 +448,17 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
383
448
  }
384
449
  }
385
450
  }
386
- // Mark dependents as skipped when a task fails
451
+ // Mark dependents as skipped when a task fails.
452
+ // Uses dataflowGetDependentsToSkip to find all transitive dependents at once
453
+ // (shared with distributed execution in e3-aws).
387
454
  function skipDependents(taskName) {
388
- const dependents = taskDependents.get(taskName) ?? new Set();
389
- for (const depName of dependents) {
390
- if (completed.has(depName) || inProgress.has(depName))
391
- continue;
392
- // Skip dependents not in the filter
393
- if (filteredTaskNames && !filteredTaskNames.has(depName))
394
- continue;
395
- // Recursively skip
455
+ // Get all tasks to skip (excludes already completed, already skipped, and in-progress)
456
+ const toSkip = dataflowGetDependentsToSkip(dataflowGraph, taskName, completed, skippedTasks)
457
+ .filter(name => !inProgress.has(name)) // Also exclude in-progress tasks
458
+ .filter(name => !filteredTaskNames || filteredTaskNames.has(name)); // Apply filter
459
+ for (const depName of toSkip) {
396
460
  completed.add(depName);
461
+ skippedTasks.add(depName);
397
462
  skipped++;
398
463
  results.push({
399
464
  name: depName,
@@ -407,7 +472,6 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
407
472
  state: 'skipped',
408
473
  duration: 0,
409
474
  });
410
- skipDependents(depName);
411
475
  }
412
476
  }
413
477
  // Main execution loop using a work-stealing approach
@@ -456,7 +520,7 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
456
520
  // Write output to workspace BEFORE notifying dependents
457
521
  if (result.state === 'success' && result.outputHash) {
458
522
  const node = taskNodes.get(taskName);
459
- await workspaceSetDatasetByHash(repoPath, ws, node.outputPath, result.outputHash);
523
+ await workspaceSetDatasetByHash(storage, repo, ws, node.outputPath, result.outputHash);
460
524
  }
461
525
  // Now safe to update execution state and notify dependents
462
526
  inProgress.delete(taskName);
@@ -519,18 +583,19 @@ async function dataflowExecuteWithLock(repoPath, ws, options) {
519
583
  /**
520
584
  * Get the dependency graph for a workspace (for visualization/debugging).
521
585
  *
522
- * @param repoPath - Path to .e3 repository
586
+ * @param storage - Storage backend
587
+ * @param repo - Repository identifier (for local storage, the path to e3 repository directory)
523
588
  * @param ws - Workspace name
524
589
  * @returns Graph information
525
590
  * @throws {WorkspaceNotFoundError} If workspace doesn't exist
526
591
  * @throws {WorkspaceNotDeployedError} If workspace has no package deployed
527
592
  * @throws {DataflowError} If graph building fails for other reasons
528
593
  */
529
- export async function dataflowGetGraph(repoPath, ws) {
594
+ export async function dataflowGetGraph(storage, repo, ws) {
530
595
  let taskNodes;
531
596
  let outputToTask;
532
597
  try {
533
- const graph = await buildDependencyGraph(repoPath, ws);
598
+ const graph = await buildDependencyGraph(storage, repo, ws);
534
599
  taskNodes = graph.taskNodes;
535
600
  outputToTask = graph.outputToTask;
536
601
  }
@@ -559,4 +624,168 @@ export async function dataflowGetGraph(repoPath, ws) {
559
624
  }
560
625
  return { tasks };
561
626
  }
627
+ /**
628
+ * Get tasks that are ready to execute given the set of completed tasks.
629
+ *
630
+ * A task is ready when all tasks it depends on have completed.
631
+ * This is useful for distributed execution (e.g., AWS Step Functions)
632
+ * where a coordinator needs to determine which tasks can run next.
633
+ *
634
+ * @param graph - The dependency graph from dataflowGetGraph
635
+ * @param completedTasks - Set of task names that have completed
636
+ * @returns Array of task names that are ready to execute
637
+ *
638
+ * @example
639
+ * ```typescript
640
+ * const graph = await dataflowGetGraph(storage, repo, 'production');
641
+ * const ready = dataflowGetReadyTasks(graph, new Set()); // Initial ready tasks
642
+ * // Execute ready[0]...
643
+ * const nextReady = dataflowGetReadyTasks(graph, new Set([ready[0]]));
644
+ * ```
645
+ */
646
+ export function dataflowGetReadyTasks(graph, completedTasks) {
647
+ const ready = [];
648
+ for (const task of graph.tasks) {
649
+ // Skip already completed tasks
650
+ if (completedTasks.has(task.name)) {
651
+ continue;
652
+ }
653
+ // Check if all dependencies are satisfied
654
+ const allDepsCompleted = task.dependsOn.every(dep => completedTasks.has(dep));
655
+ if (allDepsCompleted) {
656
+ ready.push(task.name);
657
+ }
658
+ }
659
+ return ready;
660
+ }
661
+ /**
662
+ * Check if a task execution is cached for the given inputs.
663
+ *
664
+ * This is useful for distributed execution where a Lambda handler needs
665
+ * to check if a task can be skipped before spawning execution.
666
+ *
667
+ * @param storage - Storage backend
668
+ * @param repo - Repository path
669
+ * @param taskHash - Hash of the TaskObject
670
+ * @param inputHashes - Array of input dataset hashes (in order)
671
+ * @returns Output hash if cached, null if execution needed
672
+ *
673
+ * @example
674
+ * ```typescript
675
+ * const outputHash = await dataflowCheckCache(storage, repo, taskHash, inputHashes);
676
+ * if (outputHash) {
677
+ * // Task is cached, use outputHash directly
678
+ * } else {
679
+ * // Need to execute task
680
+ * }
681
+ * ```
682
+ */
683
+ export async function dataflowCheckCache(storage, repo, taskHash, inputHashes) {
684
+ const inHash = inputsHash(inputHashes);
685
+ return executionGetOutput(storage, repo, taskHash, inHash);
686
+ }
687
+ /**
688
+ * Find tasks that should be skipped when a task fails.
689
+ *
690
+ * Returns all tasks that transitively depend on the failed task
691
+ * (directly or through other tasks), excluding already completed
692
+ * or already skipped tasks.
693
+ *
694
+ * This is useful for distributed execution where the coordinator
695
+ * needs to mark downstream tasks as skipped after a failure.
696
+ *
697
+ * @param graph - The dependency graph from dataflowGetGraph
698
+ * @param failedTask - Name of the task that failed
699
+ * @param completedTasks - Set of task names already completed (won't be skipped)
700
+ * @param skippedTasks - Set of task names already skipped (won't be returned again)
701
+ * @returns Array of task names that should be skipped
702
+ *
703
+ * @example
704
+ * ```typescript
705
+ * const graph = await dataflowGetGraph(storage, repo, 'production');
706
+ * // Task 'etl' failed...
707
+ * const toSkip = dataflowGetDependentsToSkip(graph, 'etl', completed, skipped);
708
+ * // toSkip might be ['transform', 'aggregate', 'report'] - all downstream tasks
709
+ * ```
710
+ */
711
+ export function dataflowGetDependentsToSkip(graph, failedTask, completedTasks, skippedTasks) {
712
+ // Build reverse dependency map: task -> tasks that depend on it
713
+ const dependents = new Map();
714
+ for (const task of graph.tasks) {
715
+ dependents.set(task.name, []);
716
+ }
717
+ for (const task of graph.tasks) {
718
+ for (const dep of task.dependsOn) {
719
+ dependents.get(dep)?.push(task.name);
720
+ }
721
+ }
722
+ // BFS to find all transitive dependents
723
+ const toSkip = [];
724
+ const visited = new Set();
725
+ const queue = [failedTask];
726
+ while (queue.length > 0) {
727
+ const current = queue.shift();
728
+ const deps = dependents.get(current) ?? [];
729
+ for (const dep of deps) {
730
+ // Skip if already processed
731
+ if (visited.has(dep)) {
732
+ continue;
733
+ }
734
+ visited.add(dep);
735
+ // Skip if already completed (no need to explore further - completed tasks break the chain)
736
+ if (completedTasks.has(dep)) {
737
+ continue;
738
+ }
739
+ // If already skipped, still explore dependents but don't add to result again
740
+ if (skippedTasks.has(dep)) {
741
+ queue.push(dep);
742
+ continue;
743
+ }
744
+ // New task to skip
745
+ toSkip.push(dep);
746
+ queue.push(dep);
747
+ }
748
+ }
749
+ return toSkip;
750
+ }
751
+ /**
752
+ * Resolve input hashes for a task from current workspace state.
753
+ *
754
+ * Returns an array of hashes in the same order as the task's inputs.
755
+ * If any input is unassigned, returns null for that position.
756
+ *
757
+ * This is useful for distributed execution where the input hashes
758
+ * need to be resolved before checking cache or executing.
759
+ *
760
+ * @param storage - Storage backend
761
+ * @param repo - Repository path
762
+ * @param ws - Workspace name
763
+ * @param task - Task info from the graph (needs inputs array)
764
+ * @returns Array of hashes (null if input is unassigned)
765
+ *
766
+ * @example
767
+ * ```typescript
768
+ * const graph = await dataflowGetGraph(storage, repo, 'production');
769
+ * const task = graph.tasks.find(t => t.name === 'etl')!;
770
+ * const inputHashes = await dataflowResolveInputHashes(storage, repo, 'production', task);
771
+ * if (!inputHashes.includes(null)) {
772
+ * const cached = await dataflowCheckCache(storage, repo, task.hash, inputHashes);
773
+ * }
774
+ * ```
775
+ */
776
+ export async function dataflowResolveInputHashes(storage, repo, ws, task) {
777
+ const hashes = [];
778
+ for (const inputPathStr of task.inputs) {
779
+ // Parse the keypath string back to TreePath
780
+ const inputPath = parsePathString(inputPathStr);
781
+ const { refType, hash } = await workspaceGetDatasetHash(storage, repo, ws, inputPath);
782
+ if (refType === 'value' && hash !== null) {
783
+ hashes.push(hash);
784
+ }
785
+ else {
786
+ hashes.push(null);
787
+ }
788
+ }
789
+ return hashes;
790
+ }
562
791
  //# sourceMappingURL=dataflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../src/dataflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../src/dataflow.ts"],"names":[],"mappings":"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"}
@@ -30,13 +30,18 @@ export declare class WorkspaceExistsError extends E3Error {
30
30
  constructor(workspace: string);
31
31
  }
32
32
  /**
33
- * Information about the process holding a workspace lock.
33
+ * Information about a lock holder for error display.
34
+ *
35
+ * This is a simplified flat structure used in error messages.
36
+ * The actual lock state uses the structured LockState type from e3-types.
34
37
  */
35
- export interface LockHolder {
36
- /** Process ID of the lock holder */
37
- pid: number;
38
+ export interface LockHolderInfo {
39
+ /** Process ID of the lock holder (for local process locks) */
40
+ pid?: number;
38
41
  /** When the lock was acquired (ISO 8601) */
39
42
  acquiredAt: string;
43
+ /** What operation holds the lock */
44
+ operation?: string;
40
45
  /** System boot ID (to detect stale locks after reboot) */
41
46
  bootId?: string;
42
47
  /** Process start time in jiffies (to detect PID reuse) */
@@ -53,8 +58,8 @@ export interface LockHolder {
53
58
  */
54
59
  export declare class WorkspaceLockError extends E3Error {
55
60
  readonly workspace: string;
56
- readonly holder?: LockHolder | undefined;
57
- constructor(workspace: string, holder?: LockHolder | undefined);
61
+ readonly holder?: LockHolderInfo | undefined;
62
+ constructor(workspace: string, holder?: LockHolderInfo | undefined);
58
63
  }
59
64
  export declare class PackageNotFoundError extends E3Error {
60
65
  readonly packageName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}