@elsium-ai/workflows 0.7.0 → 0.9.0

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/README.md CHANGED
@@ -492,6 +492,83 @@ const result = await router.run({ type: 'text', content: 'Hello world' })
492
492
 
493
493
  ---
494
494
 
495
+ ## Resumable Workflows
496
+
497
+ ### `defineResumableWorkflow`
498
+
499
+ Creates a workflow that persists its progress to a checkpoint store after each step. If the process crashes or is interrupted, the workflow can be resumed from the last successful checkpoint.
500
+
501
+ ```ts
502
+ function defineResumableWorkflow(config: {
503
+ name: string
504
+ checkpointStore: CheckpointStore
505
+ steps: StepConfig[]
506
+ onStepComplete?: (result: StepResult) => void | Promise<void>
507
+ onComplete?: (result: WorkflowResult) => void | Promise<void>
508
+ }): ResumableWorkflow
509
+ ```
510
+
511
+ | Parameter | Type | Description |
512
+ | --- | --- | --- |
513
+ | `config.name` | `string` | Identifier for the workflow. |
514
+ | `config.checkpointStore` | `CheckpointStore` | Storage backend for persisting step results. |
515
+ | `config.steps` | `StepConfig[]` | Ordered list of steps to execute sequentially. |
516
+ | `config.onStepComplete` | `(result: StepResult) => void \| Promise<void>` | Optional callback fired after each step completes. |
517
+ | `config.onComplete` | `(result: WorkflowResult) => void \| Promise<void>` | Optional callback fired when the workflow finishes. |
518
+
519
+ **Returns:** `ResumableWorkflow`
520
+
521
+ ```ts
522
+ interface ResumableWorkflow extends Workflow {
523
+ resume(workflowId: string, options?: WorkflowRunOptions): Promise<WorkflowResult>
524
+ }
525
+ ```
526
+
527
+ The `resume(workflowId)` method reloads the checkpoint for the given workflow run and continues execution from the first incomplete step, reusing outputs from previously completed steps.
528
+
529
+ ### `createInMemoryCheckpointStore`
530
+
531
+ Creates an in-memory checkpoint store for development and testing.
532
+
533
+ ```ts
534
+ function createInMemoryCheckpointStore(): CheckpointStore
535
+ ```
536
+
537
+ ```ts
538
+ import { defineResumableWorkflow, createInMemoryCheckpointStore, step } from '@elsium-ai/workflows'
539
+
540
+ const checkpointStore = createInMemoryCheckpointStore()
541
+
542
+ const workflow = defineResumableWorkflow({
543
+ name: 'data-pipeline',
544
+ checkpointStore,
545
+ steps: [
546
+ step('fetch', {
547
+ handler: async (input: { url: string }) => {
548
+ return await fetch(input.url).then((r) => r.json())
549
+ },
550
+ }),
551
+ step('transform', {
552
+ handler: async (data: unknown) => {
553
+ return transformData(data)
554
+ },
555
+ }),
556
+ step('store', {
557
+ handler: async (transformed: unknown) => {
558
+ await saveToDatabase(transformed)
559
+ return { stored: true }
560
+ },
561
+ }),
562
+ ],
563
+ })
564
+
565
+ const result = await workflow.run({ url: 'https://api.example.com/data' })
566
+
567
+ const resumed = await workflow.resume(result.name)
568
+ ```
569
+
570
+ ---
571
+
495
572
  ## Part of ElsiumAI
496
573
 
497
574
  This package is the workflow layer of the [ElsiumAI](https://github.com/elsium-ai/elsium-ai) framework. See the [full documentation](https://github.com/elsium-ai/elsium-ai) for guides and examples.
@@ -0,0 +1,34 @@
1
+ import type { StepResult, WorkflowConfig, WorkflowResult, WorkflowRunOptions } from './types';
2
+ export interface WorkflowCheckpoint {
3
+ workflowId: string;
4
+ workflowName: string;
5
+ status: 'running' | 'completed' | 'failed' | 'paused';
6
+ input: unknown;
7
+ currentStepIndex: number;
8
+ stepResults: StepResult[];
9
+ outputs: Record<string, unknown>;
10
+ createdAt: number;
11
+ updatedAt: number;
12
+ }
13
+ export interface CheckpointStore {
14
+ save(checkpoint: WorkflowCheckpoint): Promise<void>;
15
+ load(workflowId: string): Promise<WorkflowCheckpoint | null>;
16
+ delete(workflowId: string): Promise<void>;
17
+ list(workflowName?: string): Promise<WorkflowCheckpoint[]>;
18
+ }
19
+ export declare function createInMemoryCheckpointStore(): CheckpointStore;
20
+ export interface ResumableWorkflowConfig extends WorkflowConfig {
21
+ checkpointStore: CheckpointStore;
22
+ }
23
+ export interface ResumableWorkflow {
24
+ readonly name: string;
25
+ run(input: unknown, options?: ResumableWorkflowRunOptions): Promise<WorkflowResult>;
26
+ resume(workflowId: string, options?: WorkflowRunOptions): Promise<WorkflowResult>;
27
+ getCheckpoint(workflowId: string): Promise<WorkflowCheckpoint | null>;
28
+ listCheckpoints(): Promise<WorkflowCheckpoint[]>;
29
+ }
30
+ export interface ResumableWorkflowRunOptions extends WorkflowRunOptions {
31
+ workflowId?: string;
32
+ }
33
+ export declare function defineResumableWorkflow(config: ResumableWorkflowConfig): ResumableWorkflow;
34
+ //# sourceMappingURL=checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACrD,KAAK,EAAE,OAAO,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IAC5D,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;CAC1D;AAED,wBAAgB,6BAA6B,IAAI,eAAe,CAuB/D;AAED,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC9D,eAAe,EAAE,eAAe,CAAA;CAChC;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACnF,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACjF,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IACrE,eAAe,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,2BAA4B,SAAQ,kBAAkB;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAOD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAsJ1F"}
package/dist/index.d.ts CHANGED
@@ -2,5 +2,7 @@ export { step, executeStep } from './step';
2
2
  export { defineWorkflow, defineParallelWorkflow, defineBranchWorkflow } from './workflow';
3
3
  export type { Workflow, ParallelWorkflowConfig, BranchConfig } from './workflow';
4
4
  export { defineDagWorkflow } from './dag';
5
+ export { defineResumableWorkflow, createInMemoryCheckpointStore } from './checkpoint';
6
+ export type { ResumableWorkflow, ResumableWorkflowConfig, ResumableWorkflowRunOptions, WorkflowCheckpoint, CheckpointStore, } from './checkpoint';
5
7
  export type { StepConfig, StepContext, StepResult, StepStatus, RetryConfig, WorkflowConfig, WorkflowResult, WorkflowStatus, WorkflowRunOptions, DagStepConfig, DagWorkflowConfig, } from './types';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACzF,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,YAAY,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GACjB,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACzF,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAA;AACrF,YAAY,EACX,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,GACf,MAAM,cAAc,CAAA;AAGrB,YAAY,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GACjB,MAAM,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -88,6 +88,15 @@ class ElsiumError extends Error {
88
88
  }
89
89
  }
90
90
  // ../core/src/utils.ts
91
+ import { randomBytes } from "node:crypto";
92
+ function cryptoHex(bytes) {
93
+ return randomBytes(bytes).toString("hex");
94
+ }
95
+ function generateId(prefix = "els") {
96
+ const timestamp = Date.now().toString(36);
97
+ const random = cryptoHex(4);
98
+ return `${prefix}_${timestamp}_${random}`;
99
+ }
91
100
  async function sleep(ms) {
92
101
  return new Promise((resolve) => setTimeout(resolve, ms));
93
102
  }
@@ -489,11 +498,153 @@ function defineDagWorkflow(config) {
489
498
  }
490
499
  };
491
500
  }
501
+ // src/checkpoint.ts
502
+ function createInMemoryCheckpointStore() {
503
+ const store = new Map;
504
+ return {
505
+ async save(checkpoint) {
506
+ store.set(checkpoint.workflowId, { ...checkpoint });
507
+ },
508
+ async load(workflowId) {
509
+ const cp = store.get(workflowId);
510
+ return cp ? { ...cp } : null;
511
+ },
512
+ async delete(workflowId) {
513
+ store.delete(workflowId);
514
+ },
515
+ async list(workflowName) {
516
+ const all = Array.from(store.values());
517
+ if (workflowName)
518
+ return all.filter((c) => c.workflowName === workflowName);
519
+ return all;
520
+ }
521
+ };
522
+ }
523
+ async function getCreatedAt(store, workflowId) {
524
+ const existing = await store.load(workflowId);
525
+ return existing?.createdAt ?? Date.now();
526
+ }
527
+ function defineResumableWorkflow(config) {
528
+ const { checkpointStore } = config;
529
+ async function executeFromStep(workflowId, input, startIndex, existingResults, existingOutputs, options) {
530
+ const startTime = performance.now();
531
+ const stepResults = [...existingResults];
532
+ const outputs = { ...existingOutputs };
533
+ let currentInput = startIndex > 0 ? outputs[config.steps[startIndex - 1].name] ?? input : input;
534
+ const createdAt = await getCreatedAt(checkpointStore, workflowId);
535
+ for (let i = startIndex;i < config.steps.length; i++) {
536
+ const stepConfig = config.steps[i];
537
+ await checkpointStore.save({
538
+ workflowId,
539
+ workflowName: config.name,
540
+ status: "running",
541
+ input,
542
+ currentStepIndex: i,
543
+ stepResults: [...stepResults],
544
+ outputs: { ...outputs },
545
+ createdAt,
546
+ updatedAt: Date.now()
547
+ });
548
+ const context = {
549
+ workflowName: config.name,
550
+ stepIndex: i,
551
+ previousOutputs: { ...outputs },
552
+ signal: options?.signal
553
+ };
554
+ const result = await executeStep(stepConfig, currentInput, context);
555
+ stepResults.push(result);
556
+ if (result.status === "completed" && result.data !== undefined) {
557
+ outputs[stepConfig.name] = result.data;
558
+ currentInput = result.data;
559
+ }
560
+ await config.onStepComplete?.(result);
561
+ if (result.status === "failed") {
562
+ await config.onStepError?.(new Error(result.error ?? "Step failed"), stepConfig.name);
563
+ await checkpointStore.save({
564
+ workflowId,
565
+ workflowName: config.name,
566
+ status: "failed",
567
+ input,
568
+ currentStepIndex: i,
569
+ stepResults: [...stepResults],
570
+ outputs: { ...outputs },
571
+ createdAt,
572
+ updatedAt: Date.now()
573
+ });
574
+ const workflowResult2 = {
575
+ name: config.name,
576
+ status: "failed",
577
+ steps: stepResults,
578
+ totalDurationMs: Math.round(performance.now() - startTime),
579
+ outputs
580
+ };
581
+ await config.onComplete?.(workflowResult2);
582
+ return workflowResult2;
583
+ }
584
+ }
585
+ await checkpointStore.save({
586
+ workflowId,
587
+ workflowName: config.name,
588
+ status: "completed",
589
+ input,
590
+ currentStepIndex: config.steps.length,
591
+ stepResults: [...stepResults],
592
+ outputs: { ...outputs },
593
+ createdAt,
594
+ updatedAt: Date.now()
595
+ });
596
+ const workflowResult = {
597
+ name: config.name,
598
+ status: "completed",
599
+ steps: stepResults,
600
+ totalDurationMs: Math.round(performance.now() - startTime),
601
+ outputs
602
+ };
603
+ await config.onComplete?.(workflowResult);
604
+ return workflowResult;
605
+ }
606
+ return {
607
+ name: config.name,
608
+ async run(input, options = {}) {
609
+ const workflowId = options.workflowId ?? generateId("wf");
610
+ return executeFromStep(workflowId, input, 0, [], {}, options);
611
+ },
612
+ async resume(workflowId, options = {}) {
613
+ const checkpoint = await checkpointStore.load(workflowId);
614
+ if (!checkpoint) {
615
+ throw new ElsiumError({
616
+ code: "VALIDATION_ERROR",
617
+ message: `No checkpoint found for workflow "${workflowId}"`,
618
+ retryable: false
619
+ });
620
+ }
621
+ if (checkpoint.status === "completed") {
622
+ return {
623
+ name: config.name,
624
+ status: "completed",
625
+ steps: checkpoint.stepResults,
626
+ totalDurationMs: 0,
627
+ outputs: checkpoint.outputs
628
+ };
629
+ }
630
+ const resumeIndex = checkpoint.currentStepIndex;
631
+ return executeFromStep(workflowId, checkpoint.input, resumeIndex, checkpoint.stepResults.slice(0, resumeIndex), checkpoint.outputs, options);
632
+ },
633
+ async getCheckpoint(workflowId) {
634
+ return checkpointStore.load(workflowId);
635
+ },
636
+ async listCheckpoints() {
637
+ return checkpointStore.list(config.name);
638
+ }
639
+ };
640
+ }
492
641
  export {
493
642
  step,
494
643
  executeStep,
495
644
  defineWorkflow,
645
+ defineResumableWorkflow,
496
646
  defineParallelWorkflow,
497
647
  defineDagWorkflow,
498
- defineBranchWorkflow
648
+ defineBranchWorkflow,
649
+ createInMemoryCheckpointStore
499
650
  };
package/dist/types.d.ts CHANGED
@@ -29,7 +29,7 @@ export interface RetryConfig {
29
29
  maxDelayMs?: number;
30
30
  shouldRetry?: (error: Error) => boolean;
31
31
  }
32
- export type WorkflowStatus = 'pending' | 'running' | 'completed' | 'failed';
32
+ export type WorkflowStatus = 'pending' | 'running' | 'completed' | 'failed' | 'paused';
33
33
  export interface WorkflowConfig {
34
34
  name: string;
35
35
  steps: StepConfig[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elsium-ai/workflows",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Multi-step workflow pipelines and DAG execution for ElsiumAI",
5
5
  "license": "MIT",
6
6
  "author": "Eric Utrera <ebutrera9103@gmail.com>",
@@ -26,7 +26,7 @@
26
26
  "dev": "bun --watch src/index.ts"
27
27
  },
28
28
  "dependencies": {
29
- "@elsium-ai/core": "^0.7.0",
29
+ "@elsium-ai/core": "^0.9.0",
30
30
  "zod": "^3.24.0"
31
31
  },
32
32
  "devDependencies": {