flowcraft 2.3.0 → 2.4.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.
Files changed (87) hide show
  1. package/dist/analysis.d.ts +1 -1
  2. package/dist/{chunk-C4HYIJI3.js → chunk-7PBANEG3.js} +16 -2
  3. package/dist/chunk-7PBANEG3.js.map +1 -0
  4. package/dist/{chunk-IB2BISIC.js → chunk-CHG6O6JX.js} +38 -8
  5. package/dist/chunk-CHG6O6JX.js.map +1 -0
  6. package/dist/{chunk-XNRIM27H.js → chunk-GIJOZ3AN.js} +4 -4
  7. package/dist/{chunk-XNRIM27H.js.map → chunk-GIJOZ3AN.js.map} +1 -1
  8. package/dist/{chunk-CD3Q4N6V.js → chunk-GVF7GQXQ.js} +6 -3
  9. package/dist/chunk-GVF7GQXQ.js.map +1 -0
  10. package/dist/{chunk-6INWPSZT.js → chunk-J3HZD5ES.js} +45 -25
  11. package/dist/chunk-J3HZD5ES.js.map +1 -0
  12. package/dist/{chunk-5KKSQWSC.js → chunk-K6LPGUPR.js} +5 -5
  13. package/dist/chunk-K6LPGUPR.js.map +1 -0
  14. package/dist/{chunk-FRKO3WX4.js → chunk-KXXEA5VE.js} +3 -3
  15. package/dist/{chunk-FRKO3WX4.js.map → chunk-KXXEA5VE.js.map} +1 -1
  16. package/dist/chunk-LJ4COM7S.js +20 -0
  17. package/dist/chunk-LJ4COM7S.js.map +1 -0
  18. package/dist/chunk-LM4ACVHL.js +73 -0
  19. package/dist/chunk-LM4ACVHL.js.map +1 -0
  20. package/dist/{chunk-33NO4PUJ.js → chunk-NDWVLU7J.js} +3 -3
  21. package/dist/{chunk-33NO4PUJ.js.map → chunk-NDWVLU7J.js.map} +1 -1
  22. package/dist/{chunk-CD4FUZOJ.js → chunk-OO3FF3DF.js} +22 -8
  23. package/dist/chunk-OO3FF3DF.js.map +1 -0
  24. package/dist/{chunk-QNYXQKFW.js → chunk-OZZP5YI6.js} +3 -3
  25. package/dist/{chunk-QNYXQKFW.js.map → chunk-OZZP5YI6.js.map} +1 -1
  26. package/dist/{chunk-CY755I7I.js → chunk-VN2JKKAE.js} +3 -3
  27. package/dist/{chunk-CY755I7I.js.map → chunk-VN2JKKAE.js.map} +1 -1
  28. package/dist/container-factory.d.ts +1 -1
  29. package/dist/container-factory.js +4 -4
  30. package/dist/context.d.ts +1 -1
  31. package/dist/evaluator.d.ts +1 -1
  32. package/dist/flow.d.ts +10 -1
  33. package/dist/flow.js +1 -1
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +13 -11
  36. package/dist/linter.d.ts +1 -1
  37. package/dist/logger.d.ts +1 -1
  38. package/dist/node.d.ts +1 -1
  39. package/dist/nodes/batch-gather.d.ts +1 -1
  40. package/dist/nodes/batch-scatter.d.ts +1 -1
  41. package/dist/nodes/sleep.d.ts +9 -0
  42. package/dist/nodes/sleep.js +4 -0
  43. package/dist/nodes/sleep.js.map +1 -0
  44. package/dist/nodes/subflow.d.ts +1 -1
  45. package/dist/nodes/subflow.js +3 -3
  46. package/dist/nodes/wait.d.ts +1 -1
  47. package/dist/nodes/wait.js +1 -1
  48. package/dist/runtime/adapter.d.ts +2 -1
  49. package/dist/runtime/adapter.js +11 -9
  50. package/dist/runtime/execution-context.d.ts +1 -1
  51. package/dist/runtime/execution-context.js +2 -2
  52. package/dist/runtime/executors.d.ts +1 -1
  53. package/dist/runtime/index.d.ts +1 -1
  54. package/dist/runtime/index.js +11 -9
  55. package/dist/runtime/node-executor-factory.d.ts +1 -1
  56. package/dist/runtime/orchestrator.d.ts +1 -1
  57. package/dist/runtime/orchestrator.js +3 -3
  58. package/dist/runtime/orchestrators/step-by-step.d.ts +1 -1
  59. package/dist/runtime/orchestrators/utils.d.ts +1 -1
  60. package/dist/runtime/runtime.d.ts +1 -1
  61. package/dist/runtime/runtime.js +10 -8
  62. package/dist/runtime/scheduler.d.ts +3 -0
  63. package/dist/runtime/scheduler.js +3 -0
  64. package/dist/runtime/scheduler.js.map +1 -0
  65. package/dist/runtime/state.d.ts +1 -1
  66. package/dist/runtime/state.js +1 -1
  67. package/dist/runtime/traverser.d.ts +1 -1
  68. package/dist/runtime/types.d.ts +1 -1
  69. package/dist/runtime/workflow-logic-handler.d.ts +1 -1
  70. package/dist/sanitizer.d.ts +1 -1
  71. package/dist/serializer.d.ts +1 -1
  72. package/dist/testing/event-logger.d.ts +1 -1
  73. package/dist/testing/index.d.ts +1 -1
  74. package/dist/testing/index.js +13 -11
  75. package/dist/testing/run-with-trace.d.ts +1 -1
  76. package/dist/testing/run-with-trace.js +12 -10
  77. package/dist/testing/stepper.d.ts +1 -1
  78. package/dist/testing/stepper.js +3 -3
  79. package/dist/{types-ezHUBdpL.d.ts → types-DWCZW68f.d.ts} +29 -2
  80. package/dist/types.d.ts +1 -1
  81. package/package.json +1 -1
  82. package/dist/chunk-5KKSQWSC.js.map +0 -1
  83. package/dist/chunk-6INWPSZT.js.map +0 -1
  84. package/dist/chunk-C4HYIJI3.js.map +0 -1
  85. package/dist/chunk-CD3Q4N6V.js.map +0 -1
  86. package/dist/chunk-CD4FUZOJ.js.map +0 -1
  87. package/dist/chunk-IB2BISIC.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-ezHUBdpL.js';
1
+ import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -0,0 +1,9 @@
1
+ import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-DWCZW68f.js';
2
+ import '../errors.js';
3
+ import '../container.js';
4
+
5
+ declare class SleepNode extends BaseNode {
6
+ exec(_prepResult: any, context: NodeContext<Record<string, any>, any, any>): Promise<Omit<NodeResult, 'error'>>;
7
+ }
8
+
9
+ export { SleepNode };
@@ -0,0 +1,4 @@
1
+ export { SleepNode } from '../chunk-LJ4COM7S.js';
2
+ import '../chunk-LNK7LZER.js';
3
+ //# sourceMappingURL=sleep.js.map
4
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"sleep.js"}
@@ -1,4 +1,4 @@
1
- import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-ezHUBdpL.js';
1
+ import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,8 +1,8 @@
1
- export { SubflowNode } from '../chunk-5KKSQWSC.js';
1
+ export { SubflowNode } from '../chunk-K6LPGUPR.js';
2
2
  import '../chunk-G5BGBPFP.js';
3
3
  import '../chunk-233SESC2.js';
4
- import '../chunk-FRKO3WX4.js';
5
- import '../chunk-CD4FUZOJ.js';
4
+ import '../chunk-KXXEA5VE.js';
5
+ import '../chunk-OO3FF3DF.js';
6
6
  import '../chunk-R3HQXIEL.js';
7
7
  import '../chunk-BCRWXTWX.js';
8
8
  import '../chunk-LNK7LZER.js';
@@ -1,4 +1,4 @@
1
- import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-ezHUBdpL.js';
1
+ import { B as BaseNode, m as NodeContext, l as NodeResult } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- export { WaitNode } from '../chunk-CD3Q4N6V.js';
1
+ export { WaitNode } from '../chunk-GVF7GQXQ.js';
2
2
  import '../chunk-LNK7LZER.js';
3
3
  //# sourceMappingURL=wait.js.map
4
4
  //# sourceMappingURL=wait.js.map
@@ -1,4 +1,4 @@
1
- import { v as RuntimeOptions, c as FlowRuntime, A as ISerializer, t as IAsyncContext, J as WorkflowResult, g as WorkflowBlueprint } from '../types-ezHUBdpL.js';
1
+ import { v as RuntimeOptions, c as FlowRuntime, A as ISerializer, x as ILogger, t as IAsyncContext, J as WorkflowResult, g as WorkflowBlueprint } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -35,6 +35,7 @@ declare abstract class BaseDistributedAdapter {
35
35
  protected readonly runtime: FlowRuntime<any, any>;
36
36
  protected readonly store: ICoordinationStore;
37
37
  protected readonly serializer: ISerializer;
38
+ protected readonly logger: ILogger;
38
39
  constructor(options: AdapterOptions);
39
40
  /**
40
41
  * Starts the worker, which begins listening for and processing jobs from the queue.
@@ -1,19 +1,21 @@
1
- export { BaseDistributedAdapter } from '../chunk-6INWPSZT.js';
2
- import '../chunk-IB2BISIC.js';
3
- import '../chunk-MCGK3FXQ.js';
1
+ export { BaseDistributedAdapter } from '../chunk-J3HZD5ES.js';
2
+ import '../chunk-CHG6O6JX.js';
4
3
  import '../chunk-DL7KVYZF.js';
5
- import '../chunk-ONH7PIJZ.js';
6
- import '../chunk-5KKSQWSC.js';
7
- import '../chunk-CD3Q4N6V.js';
4
+ import '../chunk-LM4ACVHL.js';
5
+ import '../chunk-MCGK3FXQ.js';
6
+ import '../chunk-LJ4COM7S.js';
7
+ import '../chunk-K6LPGUPR.js';
8
8
  import '../chunk-G5BGBPFP.js';
9
+ import '../chunk-GVF7GQXQ.js';
10
+ import '../chunk-ONH7PIJZ.js';
9
11
  import '../chunk-DSYAC4WB.js';
10
12
  import '../chunk-BC4G7OM6.js';
11
13
  import '../chunk-RM677CNU.js';
12
14
  import '../chunk-233SESC2.js';
13
- import '../chunk-33NO4PUJ.js';
15
+ import '../chunk-NDWVLU7J.js';
14
16
  import '../chunk-HAZ26F3P.js';
15
- import '../chunk-FRKO3WX4.js';
16
- import '../chunk-CD4FUZOJ.js';
17
+ import '../chunk-KXXEA5VE.js';
18
+ import '../chunk-OO3FF3DF.js';
17
19
  import '../chunk-4PELJWF7.js';
18
20
  import '../chunk-CYHZ2YVH.js';
19
21
  import '../chunk-WWGFIYKW.js';
@@ -1,3 +1,3 @@
1
- export { K as ExecutionContext } from '../types-ezHUBdpL.js';
1
+ export { K as ExecutionContext } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
@@ -1,5 +1,5 @@
1
- export { ExecutionContext } from '../chunk-FRKO3WX4.js';
2
- import '../chunk-CD4FUZOJ.js';
1
+ export { ExecutionContext } from '../chunk-KXXEA5VE.js';
2
+ import '../chunk-OO3FF3DF.js';
3
3
  import '../chunk-R3HQXIEL.js';
4
4
  import '../chunk-BCRWXTWX.js';
5
5
  //# sourceMappingURL=execution-context.js.map
@@ -1,3 +1,3 @@
1
1
  import '../errors.js';
2
- export { C as ClassNodeExecutor, E as ExecutionStrategy, F as FunctionNodeExecutor, N as NodeExecutionResult, b as NodeExecutor, a as NodeExecutorConfig } from '../types-ezHUBdpL.js';
2
+ export { C as ClassNodeExecutor, E as ExecutionStrategy, F as FunctionNodeExecutor, N as NodeExecutionResult, b as NodeExecutor, a as NodeExecutorConfig } from '../types-DWCZW68f.js';
3
3
  import '../container.js';
@@ -1,5 +1,5 @@
1
1
  export { AdapterOptions, BaseDistributedAdapter, ICoordinationStore, JobPayload } from './adapter.js';
2
- export { C as ClassNodeExecutor, e as ExecutionServices, E as ExecutionStrategy, c as FlowRuntime, F as FunctionNodeExecutor, G as GraphTraverser, I as IOrchestrator, f as IRuntime, N as NodeExecutionResult, b as NodeExecutor, a as NodeExecutorConfig, d as NodeExecutorFactory, R as ReadyNode, W as WorkflowState } from '../types-ezHUBdpL.js';
2
+ export { C as ClassNodeExecutor, e as ExecutionServices, E as ExecutionStrategy, c as FlowRuntime, F as FunctionNodeExecutor, G as GraphTraverser, I as IOrchestrator, f as IRuntime, N as NodeExecutionResult, b as NodeExecutor, a as NodeExecutorConfig, d as NodeExecutorFactory, R as ReadyNode, W as WorkflowState } from '../types-DWCZW68f.js';
3
3
  export { DefaultOrchestrator } from './orchestrator.js';
4
4
  export { executeBatch, processResults } from './orchestrators/utils.js';
5
5
  import '../errors.js';
@@ -1,21 +1,23 @@
1
1
  import '../chunk-NVJ3ZO3P.js';
2
2
  import '../chunk-NVLZFLYM.js';
3
- export { BaseDistributedAdapter } from '../chunk-6INWPSZT.js';
4
- export { FlowRuntime } from '../chunk-IB2BISIC.js';
5
- import '../chunk-MCGK3FXQ.js';
3
+ export { BaseDistributedAdapter } from '../chunk-J3HZD5ES.js';
4
+ export { FlowRuntime } from '../chunk-CHG6O6JX.js';
6
5
  import '../chunk-DL7KVYZF.js';
7
- export { ClassNodeExecutor, FunctionNodeExecutor, NodeExecutor } from '../chunk-ONH7PIJZ.js';
8
- import '../chunk-5KKSQWSC.js';
9
- import '../chunk-CD3Q4N6V.js';
6
+ import '../chunk-LM4ACVHL.js';
7
+ import '../chunk-MCGK3FXQ.js';
8
+ import '../chunk-LJ4COM7S.js';
9
+ import '../chunk-K6LPGUPR.js';
10
10
  export { GraphTraverser } from '../chunk-G5BGBPFP.js';
11
+ import '../chunk-GVF7GQXQ.js';
12
+ export { ClassNodeExecutor, FunctionNodeExecutor, NodeExecutor } from '../chunk-ONH7PIJZ.js';
11
13
  import '../chunk-DSYAC4WB.js';
12
14
  import '../chunk-BC4G7OM6.js';
13
15
  import '../chunk-RM677CNU.js';
14
16
  import '../chunk-233SESC2.js';
15
- export { DefaultOrchestrator } from '../chunk-33NO4PUJ.js';
17
+ export { DefaultOrchestrator } from '../chunk-NDWVLU7J.js';
16
18
  export { executeBatch, processResults } from '../chunk-HAZ26F3P.js';
17
- import '../chunk-FRKO3WX4.js';
18
- export { WorkflowState } from '../chunk-CD4FUZOJ.js';
19
+ import '../chunk-KXXEA5VE.js';
20
+ export { WorkflowState } from '../chunk-OO3FF3DF.js';
19
21
  import '../chunk-4PELJWF7.js';
20
22
  import '../chunk-CYHZ2YVH.js';
21
23
  import '../chunk-WWGFIYKW.js';
@@ -1,4 +1,4 @@
1
- import { z as IEventBus, K as ExecutionContext, b as NodeExecutor } from '../types-ezHUBdpL.js';
1
+ import { z as IEventBus, K as ExecutionContext, b as NodeExecutor } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { I as IOrchestrator, K as ExecutionContext, G as GraphTraverser, J as WorkflowResult } from '../types-ezHUBdpL.js';
1
+ import { I as IOrchestrator, K as ExecutionContext, G as GraphTraverser, J as WorkflowResult } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,7 +1,7 @@
1
- export { DefaultOrchestrator } from '../chunk-33NO4PUJ.js';
1
+ export { DefaultOrchestrator } from '../chunk-NDWVLU7J.js';
2
2
  import '../chunk-HAZ26F3P.js';
3
- import '../chunk-FRKO3WX4.js';
4
- import '../chunk-CD4FUZOJ.js';
3
+ import '../chunk-KXXEA5VE.js';
4
+ import '../chunk-OO3FF3DF.js';
5
5
  import '../chunk-R3HQXIEL.js';
6
6
  import '../chunk-BCRWXTWX.js';
7
7
  //# sourceMappingURL=orchestrator.js.map
@@ -1,4 +1,4 @@
1
- import { I as IOrchestrator, K as ExecutionContext, G as GraphTraverser, J as WorkflowResult } from '../../types-ezHUBdpL.js';
1
+ import { I as IOrchestrator, K as ExecutionContext, G as GraphTraverser, J as WorkflowResult } from '../../types-DWCZW68f.js';
2
2
  import '../../errors.js';
3
3
  import '../../container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { g as WorkflowBlueprint, W as WorkflowState, N as NodeExecutionResult, G as GraphTraverser } from '../../types-ezHUBdpL.js';
1
+ import { g as WorkflowBlueprint, W as WorkflowState, N as NodeExecutionResult, G as GraphTraverser } from '../../types-DWCZW68f.js';
2
2
  import '../../errors.js';
3
3
  import '../../container.js';
4
4
 
@@ -1,3 +1,3 @@
1
1
  import '../container.js';
2
- export { c as FlowRuntime } from '../types-ezHUBdpL.js';
2
+ export { c as FlowRuntime } from '../types-DWCZW68f.js';
3
3
  import '../errors.js';
@@ -1,18 +1,20 @@
1
- export { FlowRuntime } from '../chunk-IB2BISIC.js';
2
- import '../chunk-MCGK3FXQ.js';
1
+ export { FlowRuntime } from '../chunk-CHG6O6JX.js';
3
2
  import '../chunk-DL7KVYZF.js';
4
- import '../chunk-ONH7PIJZ.js';
5
- import '../chunk-5KKSQWSC.js';
6
- import '../chunk-CD3Q4N6V.js';
3
+ import '../chunk-LM4ACVHL.js';
4
+ import '../chunk-MCGK3FXQ.js';
5
+ import '../chunk-LJ4COM7S.js';
6
+ import '../chunk-K6LPGUPR.js';
7
7
  import '../chunk-G5BGBPFP.js';
8
+ import '../chunk-GVF7GQXQ.js';
9
+ import '../chunk-ONH7PIJZ.js';
8
10
  import '../chunk-DSYAC4WB.js';
9
11
  import '../chunk-BC4G7OM6.js';
10
12
  import '../chunk-RM677CNU.js';
11
13
  import '../chunk-233SESC2.js';
12
- import '../chunk-33NO4PUJ.js';
14
+ import '../chunk-NDWVLU7J.js';
13
15
  import '../chunk-HAZ26F3P.js';
14
- import '../chunk-FRKO3WX4.js';
15
- import '../chunk-CD4FUZOJ.js';
16
+ import '../chunk-KXXEA5VE.js';
17
+ import '../chunk-OO3FF3DF.js';
16
18
  import '../chunk-4PELJWF7.js';
17
19
  import '../chunk-CYHZ2YVH.js';
18
20
  import '../chunk-WWGFIYKW.js';
@@ -0,0 +1,3 @@
1
+ export { L as AwaitingWorkflow, O as WorkflowScheduler } from '../types-DWCZW68f.js';
2
+ import '../errors.js';
3
+ import '../container.js';
@@ -0,0 +1,3 @@
1
+ export { WorkflowScheduler } from '../chunk-LM4ACVHL.js';
2
+ //# sourceMappingURL=scheduler.js.map
3
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"scheduler.js"}
@@ -1,3 +1,3 @@
1
- export { W as WorkflowState } from '../types-ezHUBdpL.js';
1
+ export { W as WorkflowState } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
@@ -1,4 +1,4 @@
1
- export { WorkflowState } from '../chunk-CD4FUZOJ.js';
1
+ export { WorkflowState } from '../chunk-OO3FF3DF.js';
2
2
  import '../chunk-R3HQXIEL.js';
3
3
  import '../chunk-BCRWXTWX.js';
4
4
  //# sourceMappingURL=state.js.map
@@ -1,3 +1,3 @@
1
- export { G as GraphTraverser, R as ReadyNode } from '../types-ezHUBdpL.js';
1
+ export { G as GraphTraverser, R as ReadyNode } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
@@ -1,3 +1,3 @@
1
- export { e as ExecutionServices, I as IOrchestrator, f as IRuntime, N as NodeExecutionResult, b as NodeExecutor, d as NodeExecutorFactory } from '../types-ezHUBdpL.js';
1
+ export { e as ExecutionServices, I as IOrchestrator, f as IRuntime, N as NodeExecutionResult, b as NodeExecutor, d as NodeExecutorFactory } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
@@ -1,4 +1,4 @@
1
- import { w as IEvaluator, z as IEventBus, g as WorkflowBlueprint, l as NodeResult, r as ContextImplementation, h as NodeDefinition, j as EdgeDefinition } from '../types-ezHUBdpL.js';
1
+ import { w as IEvaluator, z as IEventBus, g as WorkflowBlueprint, l as NodeResult, r as ContextImplementation, h as NodeDefinition, j as EdgeDefinition } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { g as WorkflowBlueprint } from './types-ezHUBdpL.js';
1
+ import { g as WorkflowBlueprint } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { A as ISerializer } from './types-ezHUBdpL.js';
1
+ import { A as ISerializer } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z as IEventBus, y as FlowcraftEvent } from '../types-ezHUBdpL.js';
1
+ import { z as IEventBus, y as FlowcraftEvent } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,6 +1,6 @@
1
1
  export { InMemoryEventLogger } from './event-logger.js';
2
2
  export { runWithTrace } from './run-with-trace.js';
3
3
  export { IWorkflowStepper, createStepper } from './stepper.js';
4
- import '../types-ezHUBdpL.js';
4
+ import '../types-DWCZW68f.js';
5
5
  import '../errors.js';
6
6
  import '../container.js';
@@ -1,25 +1,27 @@
1
- export { runWithTrace } from '../chunk-CY755I7I.js';
1
+ export { runWithTrace } from '../chunk-VN2JKKAE.js';
2
2
  export { InMemoryEventLogger } from '../chunk-MUYLRTSR.js';
3
- export { createStepper } from '../chunk-XNRIM27H.js';
3
+ export { createStepper } from '../chunk-GIJOZ3AN.js';
4
4
  import '../chunk-G53CSLBF.js';
5
5
  import '../chunk-NVJ3ZO3P.js';
6
6
  import '../chunk-NVLZFLYM.js';
7
- import '../chunk-6INWPSZT.js';
8
- import '../chunk-IB2BISIC.js';
9
- import '../chunk-MCGK3FXQ.js';
7
+ import '../chunk-J3HZD5ES.js';
8
+ import '../chunk-CHG6O6JX.js';
10
9
  import '../chunk-DL7KVYZF.js';
11
- import '../chunk-ONH7PIJZ.js';
12
- import '../chunk-5KKSQWSC.js';
13
- import '../chunk-CD3Q4N6V.js';
10
+ import '../chunk-LM4ACVHL.js';
11
+ import '../chunk-MCGK3FXQ.js';
12
+ import '../chunk-LJ4COM7S.js';
13
+ import '../chunk-K6LPGUPR.js';
14
14
  import '../chunk-G5BGBPFP.js';
15
+ import '../chunk-GVF7GQXQ.js';
16
+ import '../chunk-ONH7PIJZ.js';
15
17
  import '../chunk-DSYAC4WB.js';
16
18
  import '../chunk-BC4G7OM6.js';
17
19
  import '../chunk-RM677CNU.js';
18
20
  import '../chunk-233SESC2.js';
19
- import '../chunk-33NO4PUJ.js';
21
+ import '../chunk-NDWVLU7J.js';
20
22
  import '../chunk-HAZ26F3P.js';
21
- import '../chunk-FRKO3WX4.js';
22
- import '../chunk-CD4FUZOJ.js';
23
+ import '../chunk-KXXEA5VE.js';
24
+ import '../chunk-OO3FF3DF.js';
23
25
  import '../chunk-4PELJWF7.js';
24
26
  import '../chunk-CYHZ2YVH.js';
25
27
  import '../chunk-WWGFIYKW.js';
@@ -1,4 +1,4 @@
1
- import { c as FlowRuntime, g as WorkflowBlueprint, J as WorkflowResult } from '../types-ezHUBdpL.js';
1
+ import { c as FlowRuntime, g as WorkflowBlueprint, J as WorkflowResult } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,23 +1,25 @@
1
- export { runWithTrace } from '../chunk-CY755I7I.js';
1
+ export { runWithTrace } from '../chunk-VN2JKKAE.js';
2
2
  import '../chunk-MUYLRTSR.js';
3
3
  import '../chunk-NVJ3ZO3P.js';
4
4
  import '../chunk-NVLZFLYM.js';
5
- import '../chunk-6INWPSZT.js';
6
- import '../chunk-IB2BISIC.js';
7
- import '../chunk-MCGK3FXQ.js';
5
+ import '../chunk-J3HZD5ES.js';
6
+ import '../chunk-CHG6O6JX.js';
8
7
  import '../chunk-DL7KVYZF.js';
9
- import '../chunk-ONH7PIJZ.js';
10
- import '../chunk-5KKSQWSC.js';
11
- import '../chunk-CD3Q4N6V.js';
8
+ import '../chunk-LM4ACVHL.js';
9
+ import '../chunk-MCGK3FXQ.js';
10
+ import '../chunk-LJ4COM7S.js';
11
+ import '../chunk-K6LPGUPR.js';
12
12
  import '../chunk-G5BGBPFP.js';
13
+ import '../chunk-GVF7GQXQ.js';
14
+ import '../chunk-ONH7PIJZ.js';
13
15
  import '../chunk-DSYAC4WB.js';
14
16
  import '../chunk-BC4G7OM6.js';
15
17
  import '../chunk-RM677CNU.js';
16
18
  import '../chunk-233SESC2.js';
17
- import '../chunk-33NO4PUJ.js';
19
+ import '../chunk-NDWVLU7J.js';
18
20
  import '../chunk-HAZ26F3P.js';
19
- import '../chunk-FRKO3WX4.js';
20
- import '../chunk-CD4FUZOJ.js';
21
+ import '../chunk-KXXEA5VE.js';
22
+ import '../chunk-OO3FF3DF.js';
21
23
  import '../chunk-4PELJWF7.js';
22
24
  import '../chunk-CYHZ2YVH.js';
23
25
  import '../chunk-WWGFIYKW.js';
@@ -1,4 +1,4 @@
1
- import { W as WorkflowState, G as GraphTraverser, J as WorkflowResult, c as FlowRuntime, g as WorkflowBlueprint, n as NodeFunction, o as NodeClass } from '../types-ezHUBdpL.js';
1
+ import { W as WorkflowState, G as GraphTraverser, J as WorkflowResult, c as FlowRuntime, g as WorkflowBlueprint, n as NodeFunction, o as NodeClass } from '../types-DWCZW68f.js';
2
2
  import '../errors.js';
3
3
  import '../container.js';
4
4
 
@@ -1,10 +1,10 @@
1
- export { createStepper } from '../chunk-XNRIM27H.js';
1
+ export { createStepper } from '../chunk-GIJOZ3AN.js';
2
2
  import '../chunk-G53CSLBF.js';
3
3
  import '../chunk-G5BGBPFP.js';
4
4
  import '../chunk-233SESC2.js';
5
5
  import '../chunk-HAZ26F3P.js';
6
- import '../chunk-FRKO3WX4.js';
7
- import '../chunk-CD4FUZOJ.js';
6
+ import '../chunk-KXXEA5VE.js';
7
+ import '../chunk-OO3FF3DF.js';
8
8
  import '../chunk-R3HQXIEL.js';
9
9
  import '../chunk-BCRWXTWX.js';
10
10
  //# sourceMappingURL=stepper.js.map
@@ -50,6 +50,27 @@ declare abstract class BaseNode<TContext extends Record<string, any> = Record<st
50
50
  recover(_error: Error, _context: NodeContext<TContext, TDependencies, TInput>): Promise<void>;
51
51
  }
52
52
 
53
+ interface AwaitingWorkflow {
54
+ executionId: string;
55
+ blueprintId: string;
56
+ serializedContext: string;
57
+ awaitingNodeId: string;
58
+ wakeUpAt: string;
59
+ }
60
+ declare class WorkflowScheduler {
61
+ private runtime;
62
+ private activeWorkflows;
63
+ private intervalId?;
64
+ private checkIntervalMs;
65
+ constructor(runtime: FlowRuntime<any, any>, checkIntervalMs?: number);
66
+ start(): void;
67
+ stop(): void;
68
+ registerAwaitingWorkflow(executionId: string, blueprintId: string, serializedContext: string, awaitingNodeId: string, wakeUpAt: string): void;
69
+ unregisterWorkflow(executionId: string): void;
70
+ private checkAndResumeWorkflows;
71
+ getActiveWorkflows(): AwaitingWorkflow[];
72
+ }
73
+
53
74
  declare class WorkflowState<TContext extends Record<string, any>> {
54
75
  private _completedNodes;
55
76
  private errors;
@@ -57,6 +78,7 @@ declare class WorkflowState<TContext extends Record<string, any>> {
57
78
  private context;
58
79
  private _isAwaiting;
59
80
  private _awaitingNodeIds;
81
+ private _awaitingDetails;
60
82
  constructor(initialData: Partial<TContext>);
61
83
  addCompletedNode(nodeId: string, output: any): Promise<void>;
62
84
  addError(nodeId: string, error: Error): void;
@@ -66,9 +88,10 @@ declare class WorkflowState<TContext extends Record<string, any>> {
66
88
  getCompletedNodes(): Set<string>;
67
89
  getErrors(): WorkflowError[];
68
90
  getAnyFallbackExecuted(): boolean;
69
- markAsAwaiting(nodeId: string): void;
91
+ markAsAwaiting(nodeId: string, details?: any): void;
70
92
  isAwaiting(): boolean;
71
93
  getAwaitingNodeIds(): string[];
94
+ getAwaitingDetails(nodeId: string): any;
72
95
  clearAwaiting(nodeId?: string): void;
73
96
  getStatus(isTraversalComplete?: boolean): WorkflowResult['status'];
74
97
  toResult(serializer: ISerializer): Promise<WorkflowResult<TContext>>;
@@ -197,6 +220,8 @@ declare class FlowRuntime<TContext extends Record<string, any>, TDependencies ex
197
220
  options: RuntimeOptions<TDependencies>;
198
221
  private readonly logicHandler;
199
222
  private readonly executorFactory;
223
+ scheduler: WorkflowScheduler;
224
+ getBlueprint(id: string): WorkflowBlueprint | undefined;
200
225
  constructor(container: DIContainer, options?: RuntimeOptions<TDependencies>);
201
226
  constructor(options: RuntimeOptions<TDependencies>);
202
227
  private _setupExecutionContext;
@@ -206,6 +231,8 @@ declare class FlowRuntime<TContext extends Record<string, any>, TDependencies ex
206
231
  signal?: AbortSignal;
207
232
  concurrency?: number;
208
233
  }): Promise<WorkflowResult<TContext>>;
234
+ startScheduler(): void;
235
+ stopScheduler(): void;
209
236
  private _setupResumedExecutionContext;
210
237
  resume(blueprint: WorkflowBlueprint, serializedContext: string, resumeData: {
211
238
  output?: any;
@@ -561,4 +588,4 @@ interface UIGraph {
561
588
  }>;
562
589
  }
563
590
 
564
- export { type ISerializer as A, BaseNode as B, ClassNodeExecutor as C, type WorkflowError as D, type ExecutionStrategy as E, FunctionNodeExecutor as F, GraphTraverser as G, type WorkflowStatus as H, type IOrchestrator as I, type WorkflowResult as J, ExecutionContext as K, type Middleware as M, type NodeExecutionResult as N, type ReadyNode as R, type UIGraph as U, WorkflowState as W, type NodeExecutorConfig as a, NodeExecutor as b, FlowRuntime as c, type NodeExecutorFactory as d, type ExecutionServices as e, type IRuntime as f, type WorkflowBlueprint as g, type NodeDefinition as h, isNodeClass as i, type EdgeDefinition as j, type NodeConfig as k, type NodeResult as l, type NodeContext as m, type NodeFunction as n, type NodeClass as o, type NodeImplementation as p, type NodeRegistry as q, type ContextImplementation as r, type ISyncContext as s, type IAsyncContext as t, type RuntimeDependencies as u, type RuntimeOptions as v, type IEvaluator as w, type ILogger as x, type FlowcraftEvent as y, type IEventBus as z };
591
+ export { type ISerializer as A, BaseNode as B, ClassNodeExecutor as C, type WorkflowError as D, type ExecutionStrategy as E, FunctionNodeExecutor as F, GraphTraverser as G, type WorkflowStatus as H, type IOrchestrator as I, type WorkflowResult as J, ExecutionContext as K, type AwaitingWorkflow as L, type Middleware as M, type NodeExecutionResult as N, WorkflowScheduler as O, type ReadyNode as R, type UIGraph as U, WorkflowState as W, type NodeExecutorConfig as a, NodeExecutor as b, FlowRuntime as c, type NodeExecutorFactory as d, type ExecutionServices as e, type IRuntime as f, type WorkflowBlueprint as g, type NodeDefinition as h, isNodeClass as i, type EdgeDefinition as j, type NodeConfig as k, type NodeResult as l, type NodeContext as m, type NodeFunction as n, type NodeClass as o, type NodeImplementation as p, type NodeRegistry as q, type ContextImplementation as r, type ISyncContext as s, type IAsyncContext as t, type RuntimeDependencies as u, type RuntimeOptions as v, type IEvaluator as w, type ILogger as x, type FlowcraftEvent as y, type IEventBus as z };
package/dist/types.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import './errors.js';
2
- export { r as ContextImplementation, j as EdgeDefinition, y as FlowcraftEvent, t as IAsyncContext, w as IEvaluator, z as IEventBus, x as ILogger, A as ISerializer, s as ISyncContext, M as Middleware, o as NodeClass, k as NodeConfig, m as NodeContext, h as NodeDefinition, n as NodeFunction, p as NodeImplementation, q as NodeRegistry, l as NodeResult, u as RuntimeDependencies, v as RuntimeOptions, U as UIGraph, g as WorkflowBlueprint, D as WorkflowError, J as WorkflowResult, H as WorkflowStatus } from './types-ezHUBdpL.js';
2
+ export { r as ContextImplementation, j as EdgeDefinition, y as FlowcraftEvent, t as IAsyncContext, w as IEvaluator, z as IEventBus, x as ILogger, A as ISerializer, s as ISyncContext, M as Middleware, o as NodeClass, k as NodeConfig, m as NodeContext, h as NodeDefinition, n as NodeFunction, p as NodeImplementation, q as NodeRegistry, l as NodeResult, u as RuntimeDependencies, v as RuntimeOptions, U as UIGraph, g as WorkflowBlueprint, D as WorkflowError, J as WorkflowResult, H as WorkflowStatus } from './types-DWCZW68f.js';
3
3
  import './container.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "flowcraft",
3
3
  "type": "module",
4
- "version": "2.3.0",
4
+ "version": "2.4.0",
5
5
  "description": "A lightweight workflow framework",
6
6
  "license": "MIT",
7
7
  "homepage": "https://flowcraft.js.org",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/nodes/subflow.ts"],"names":["subAnalysis"],"mappings":"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","file":"chunk-5KKSQWSC.js","sourcesContent":["import { analyzeBlueprint } from '../analysis'\nimport { FlowcraftError } from '../errors'\nimport { BaseNode } from '../node'\nimport { ExecutionContext } from '../runtime/execution-context'\nimport { WorkflowState } from '../runtime/state'\nimport { GraphTraverser } from '../runtime/traverser'\nimport type { NodeContext, NodeResult } from '../types'\n\nexport class SubflowNode extends BaseNode {\n\tasync exec(\n\t\t_prepResult: any,\n\t\tcontext: NodeContext<Record<string, any>, any, any>,\n\t): Promise<Omit<NodeResult, 'error'>> {\n\t\tconst { blueprintId, inputs, outputs } = this.params ?? {}\n\t\tconst { runtime, workflowState } = context.dependencies\n\n\t\tif (!blueprintId) {\n\t\t\tthrow new FlowcraftError(`Subflow node '${this.nodeId}' is missing 'blueprintId' parameter.`, { isFatal: true })\n\t\t}\n\n\t\tconst subBlueprint =\n\t\t\t(runtime as any).blueprints?.[blueprintId] || (runtime as any).runtime?.blueprints?.[blueprintId]\n\t\tif (!subBlueprint) {\n\t\t\tthrow new FlowcraftError(`Sub-blueprint '${blueprintId}' not found in runtime registry.`, { isFatal: true })\n\t\t}\n\n\t\tconst subflowInitialContext: Record<string, any> = {}\n\n\t\tif (inputs) {\n\t\t\t// explicit inputs\n\t\t\tfor (const [targetKey, sourceKey] of Object.entries(inputs as Record<string, string>)) {\n\t\t\t\tlet value = await context.context.get(sourceKey as any)\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = await context.context.get(`_outputs.${sourceKey}` as any)\n\t\t\t\t}\n\t\t\t\tsubflowInitialContext[targetKey] = value\n\t\t\t}\n\t\t} else if (context.input !== undefined) {\n\t\t\t// pass the parent node's input to the subflow's start nodes\n\t\t\tconst subAnalysis = analyzeBlueprint(subBlueprint)\n\t\t\tfor (const startNodeId of subAnalysis.startNodeIds) {\n\t\t\t\tconst inputKey = `_inputs.${startNodeId}`\n\t\t\t\tsubflowInitialContext[inputKey] = context.input\n\t\t\t}\n\t\t}\n\n\t\tconst subflowState = new WorkflowState(subflowInitialContext)\n\t\tconst subflowExecContext = new ExecutionContext(\n\t\t\tsubBlueprint,\n\t\t\tsubflowState,\n\t\t\truntime.nodeRegistry,\n\t\t\truntime.executionId,\n\t\t\truntime.runtime,\n\t\t\truntime.services,\n\t\t\truntime.signal,\n\t\t\truntime.concurrency,\n\t\t)\n\t\tconst subflowTraverser = new GraphTraverser(subBlueprint)\n\n\t\tconst subflowResult = await runtime.runtime.orchestrator.run(subflowExecContext, subflowTraverser)\n\n\t\tif (subflowResult.status === 'awaiting') {\n\t\t\tworkflowState.markAsAwaiting(this.nodeId ?? '')\n\t\t\tconst subflowStateKey = `_subflowState.${this.nodeId}`\n\t\t\tawait context.context.set(subflowStateKey as any, subflowResult.serializedContext)\n\t\t\treturn { output: undefined }\n\t\t}\n\n\t\tif (subflowResult.status !== 'completed') {\n\t\t\tconst firstError = subflowResult.errors?.[0]\n\t\t\tconst errorMessage = firstError?.message || 'Unknown error'\n\t\t\tthrow new FlowcraftError(\n\t\t\t\t`Sub-workflow '${blueprintId}' did not complete successfully. Status: ${subflowResult.status}. Error: ${errorMessage}`,\n\t\t\t\t{\n\t\t\t\t\tcause: firstError,\n\t\t\t\t\tnodeId: this.nodeId,\n\t\t\t\t\tblueprintId,\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\tconst subflowFinalContext = subflowResult.context as Record<string, any>\n\n\t\tif (outputs) {\n\t\t\tfor (const [parentKey, subKey] of Object.entries(outputs as Record<string, string>)) {\n\t\t\t\tconst value = subflowFinalContext[`_outputs.${subKey}`] ?? subflowFinalContext[subKey]\n\t\t\t\tawait context.context.set(parentKey as any, value)\n\t\t\t}\n\t\t\treturn { output: subflowFinalContext } // Return the whole context if mapping is used\n\t\t}\n\n\t\tconst subAnalysis = analyzeBlueprint(subBlueprint)\n\t\tif (subAnalysis.terminalNodeIds.length === 1) {\n\t\t\tconst terminalId = subAnalysis.terminalNodeIds[0]\n\t\t\treturn { output: subflowFinalContext[`_outputs.${terminalId}`] }\n\t\t}\n\n\t\tconst terminalOutputs: Record<string, any> = {}\n\t\tfor (const terminalId of subAnalysis.terminalNodeIds) {\n\t\t\tterminalOutputs[terminalId] = subflowFinalContext[`_outputs.${terminalId}`]\n\t\t}\n\t\treturn terminalOutputs\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime/adapter.ts"],"names":["nodeId"],"mappings":"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","file":"chunk-6INWPSZT.js","sourcesContent":["import { analyzeBlueprint } from '../analysis'\nimport { JsonSerializer } from '../serializer'\nimport type {\n\tIAsyncContext,\n\tISerializer,\n\tNodeResult,\n\tRuntimeOptions,\n\tWorkflowBlueprint,\n\tWorkflowResult,\n} from '../types'\nimport { FlowRuntime } from './runtime'\n\n/**\n * Defines the contract for an atomic, distributed key-value store required by\n * the adapter for coordination tasks like fan-in joins and locking.\n */\nexport interface ICoordinationStore {\n\t/** Atomically increments a key and returns the new value. Ideal for 'all' joins. */\n\tincrement: (key: string, ttlSeconds: number) => Promise<number>\n\t/** Sets a key only if it does not already exist. Ideal for 'any' joins (locking). */\n\tsetIfNotExist: (key: string, value: string, ttlSeconds: number) => Promise<boolean>\n\t/** Deletes a key. Used for cleanup. */\n\tdelete: (key: string) => Promise<void>\n\t/** Gets the value of a key. */\n\tget: (key: string) => Promise<string | undefined>\n}\n\n/** Configuration options for constructing a BaseDistributedAdapter. */\nexport interface AdapterOptions {\n\truntimeOptions: RuntimeOptions<any>\n\tcoordinationStore: ICoordinationStore\n}\n\n/** The data payload expected for a job in the queue. */\nexport interface JobPayload {\n\trunId: string\n\tblueprintId: string\n\tnodeId: string\n}\n\n/**\n * The base class for all distributed adapters. It handles the technology-agnostic\n * orchestration logic and leaves queue-specific implementation to subclasses.\n */\nexport abstract class BaseDistributedAdapter {\n\tprotected readonly runtime: FlowRuntime<any, any>\n\tprotected readonly store: ICoordinationStore\n\tprotected readonly serializer: ISerializer\n\n\tconstructor(options: AdapterOptions) {\n\t\tthis.runtime = new FlowRuntime(options.runtimeOptions)\n\t\tthis.store = options.coordinationStore\n\t\tthis.serializer = options.runtimeOptions.serializer || new JsonSerializer()\n\t\tconsole.log('[Adapter] BaseDistributedAdapter initialized.')\n\t}\n\n\t/**\n\t * Starts the worker, which begins listening for and processing jobs from the queue.\n\t */\n\tpublic start(): void {\n\t\tconsole.log('[Adapter] Starting worker...')\n\t\tthis.processJobs(this.handleJob.bind(this))\n\t}\n\n\t/**\n\t * Creates a technology-specific distributed context for a given workflow run.\n\t * @param runId The unique ID for the workflow execution.\n\t */\n\tprotected abstract createContext(runId: string): IAsyncContext<Record<string, any>>\n\t/**\n\t * Sets up the listener for the message queue. The implementation should call the\n\t * provided `handler` function for each new job received.\n\t * @param handler The core logic to execute for each job.\n\t */\n\tprotected abstract processJobs(handler: (job: JobPayload) => Promise<void>): void\n\n\t/**\n\t * Enqueues a new job onto the message queue.\n\t * @param job The payload for the job to be enqueued.\n\t */\n\tprotected abstract enqueueJob(job: JobPayload): Promise<void>\n\n\t/**\n\t * Publishes the final result of a completed or failed workflow run.\n\t * @param runId The unique ID of the workflow run.\n\t * @param result The final status and payload of the workflow.\n\t */\n\tprotected abstract publishFinalResult(\n\t\trunId: string,\n\t\tresult: {\n\t\t\tstatus: 'completed' | 'failed'\n\t\t\tpayload?: WorkflowResult\n\t\t\treason?: string\n\t\t},\n\t): Promise<void>\n\n\t/**\n\t * Hook called at the start of job processing. Subclasses can override this\n\t * to perform additional setup (e.g., timestamp tracking for reconciliation).\n\t */\n\tprotected async onJobStart(_runId: string, _blueprintId: string, _nodeId: string): Promise<void> {\n\t\t// default implementation does nothing\n\t}\n\n\t/**\n\t * The main handler for processing a single job from the queue.\n\t */\n\tprotected async handleJob(job: JobPayload): Promise<void> {\n\t\tconst { runId, blueprintId, nodeId } = job\n\n\t\tawait this.onJobStart(runId, blueprintId, nodeId)\n\n\t\tconst blueprint = this.runtime.options.blueprints?.[blueprintId]\n\t\tif (!blueprint) {\n\t\t\tconst reason = `Blueprint with ID '${blueprintId}' not found in the worker's runtime registry.`\n\t\t\tconsole.error(`[Adapter] FATAL: ${reason}`)\n\t\t\tawait this.publishFinalResult(runId, { status: 'failed', reason })\n\t\t\treturn\n\t\t}\n\n\t\tconst context = this.createContext(runId)\n\n\t\t// persist the blueprintId for the reconcile method to find later\n\t\tconst hasBlueprintId = await context.has('blueprintId' as any)\n\t\tif (!hasBlueprintId) {\n\t\t\tawait context.set('blueprintId' as any, blueprintId)\n\t\t\t// also store in coordination store as fallback\n\t\t\tconst blueprintKey = `flowcraft:blueprint:${runId}`\n\t\t\tawait this.store.setIfNotExist(blueprintKey, blueprintId, 3600)\n\t\t}\n\t\tconst workerState = {\n\t\t\tgetContext: () => context,\n\t\t\tmarkFallbackExecuted: () => {},\n\t\t\taddError: (nodeId: string, error: Error) => {\n\t\t\t\tconsole.error(`[Adapter] Error in node ${nodeId}:`, error)\n\t\t\t},\n\t\t} as any\n\n\t\ttry {\n\t\t\tconst result: NodeResult<any, any> = await this.runtime.executeNode(blueprint, nodeId, workerState)\n\t\t\tawait context.set(`_outputs.${nodeId}` as any, result.output)\n\n\t\t\tconst analysis = analyzeBlueprint(blueprint)\n\t\t\tconst isTerminalNode = analysis.terminalNodeIds.includes(nodeId)\n\n\t\t\tif (isTerminalNode) {\n\t\t\t\tconst completedNodes = new Set(\n\t\t\t\t\tObject.keys(await context.toJSON()).filter((k) => blueprint.nodes.some((n) => n.id === k)),\n\t\t\t\t)\n\t\t\t\tconst allTerminalNodesCompleted = analysis.terminalNodeIds.every((terminalId) => completedNodes.has(terminalId))\n\n\t\t\t\tif (allTerminalNodesCompleted) {\n\t\t\t\t\tconsole.log(`[Adapter] All terminal nodes completed for Run ID: ${runId}. Declaring workflow complete.`)\n\t\t\t\t\tconst finalContext = await context.toJSON()\n\t\t\t\t\tconst finalResult: WorkflowResult = {\n\t\t\t\t\t\tcontext: finalContext,\n\t\t\t\t\t\tserializedContext: this.serializer.serialize(finalContext),\n\t\t\t\t\t\tstatus: 'completed',\n\t\t\t\t\t}\n\t\t\t\t\tawait this.publishFinalResult(runId, {\n\t\t\t\t\t\tstatus: 'completed',\n\t\t\t\t\t\tpayload: finalResult,\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[Adapter] Terminal node '${nodeId}' completed for Run ID '${runId}', but other terminal nodes are still running.`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nextNodes = await this.runtime.determineNextNodes(blueprint, nodeId, result, context, runId)\n\n\t\t\t// stop if a branch terminates but it wasn't a terminal node\n\t\t\tif (nextNodes.length === 0 && !isTerminalNode) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Adapter] Non-terminal node '${nodeId}' reached end of branch for Run ID '${runId}'. This branch will now terminate.`,\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tfor (const { node: nextNodeDef, edge } of nextNodes) {\n\t\t\t\tawait this.runtime.applyEdgeTransform(edge, result, nextNodeDef, context)\n\t\t\t\tconst isReady = await this.isReadyForFanIn(runId, blueprint, nextNodeDef.id)\n\t\t\t\tif (isReady) {\n\t\t\t\t\tconsole.log(`[Adapter] Node '${nextNodeDef.id}' is ready. Enqueuing job.`)\n\t\t\t\t\tawait this.enqueueJob({ runId, blueprintId, nodeId: nextNodeDef.id })\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(`[Adapter] Node '${nextNodeDef.id}' is waiting for other predecessors to complete.`)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error: any) {\n\t\t\tconst reason = error.message || 'Unknown execution error'\n\t\t\tconsole.error(`[Adapter] FATAL: Job for node '${nodeId}' failed for Run ID '${runId}': ${reason}`)\n\t\t\tawait this.publishFinalResult(runId, { status: 'failed', reason })\n\t\t\tawait this.writePoisonPillForSuccessors(runId, blueprint, nodeId)\n\t\t}\n\t}\n\n\t/**\n\t * Encapsulates the fan-in join logic using the coordination store.\n\t */\n\tprotected async isReadyForFanIn(runId: string, blueprint: WorkflowBlueprint, targetNodeId: string): Promise<boolean> {\n\t\tconst targetNode = blueprint.nodes.find((n) => n.id === targetNodeId)\n\t\tif (!targetNode) {\n\t\t\tthrow new Error(`Node '${targetNodeId}' not found in blueprint`)\n\t\t}\n\t\tconst joinStrategy = targetNode.config?.joinStrategy || 'all'\n\t\tconst predecessors = blueprint.edges.filter((e) => e.target === targetNodeId)\n\n\t\tif (predecessors.length <= 1) {\n\t\t\treturn true\n\t\t}\n\n\t\tconst poisonKey = `flowcraft:fanin:poison:${runId}:${targetNodeId}`\n\t\tconst isPoisoned = !(await this.store.setIfNotExist(poisonKey, 'poisoned', 3600))\n\t\tif (isPoisoned) {\n\t\t\tconsole.log(`[Adapter] Node '${targetNodeId}' is poisoned due to failed predecessor. Failing immediately.`)\n\t\t\tthrow new Error(`Node '${targetNodeId}' failed due to poisoned predecessor in run '${runId}'`)\n\t\t}\n\n\t\tif (joinStrategy === 'any') {\n\t\t\tconst lockKey = `flowcraft:joinlock:${runId}:${targetNodeId}`\n\t\t\tconst isLocked = await this.store.setIfNotExist(lockKey, 'locked', 3600)\n\t\t\tif (!isLocked) {\n\t\t\t\t// Check if it's cancelled\n\t\t\t\tconst cancelKey = `flowcraft:fanin:cancel:${runId}:${targetNodeId}`\n\t\t\t\tconst isCancelled = !(await this.store.setIfNotExist(cancelKey, 'cancelled', 3600))\n\t\t\t\tif (isCancelled) {\n\t\t\t\t\tconsole.log(`[Adapter] Node '${targetNodeId}' is cancelled due to failed predecessor. Failing immediately.`)\n\t\t\t\t\tthrow new Error(`Node '${targetNodeId}' failed due to cancelled predecessor in run '${runId}'`)\n\t\t\t\t}\n\t\t\t\treturn false // Already locked by another predecessor\n\t\t\t}\n\t\t\treturn true\n\t\t} else {\n\t\t\tconst fanInKey = `flowcraft:fanin:${runId}:${targetNodeId}`\n\t\t\tconst readyCount = await this.store.increment(fanInKey, 3600)\n\t\t\tif (readyCount >= predecessors.length) {\n\t\t\t\tawait this.store.delete(fanInKey)\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * Reconciles the state of a workflow run. It inspects the persisted\n\t * context to find completed nodes, determines the next set of executable\n\t * nodes (the frontier), and enqueues jobs for them if they aren't\n\t * already running. This is the core of the resume functionality.\n\t *\n\t * @param runId The unique ID of the workflow execution to reconcile.\n\t * @returns The set of node IDs that were enqueued for execution.\n\t */\n\tpublic async reconcile(runId: string): Promise<Set<string>> {\n\t\tconst context = this.createContext(runId)\n\t\tlet blueprintId = (await context.get('blueprintId' as any)) as string | undefined\n\n\t\tif (!blueprintId) {\n\t\t\t// fallback to coordination store\n\t\t\tconst blueprintKey = `flowcraft:blueprint:${runId}`\n\t\t\tblueprintId = await this.store.get(blueprintKey)\n\t\t\tif (blueprintId) {\n\t\t\t\t// set it back in context for future use\n\t\t\t\tawait context.set('blueprintId' as any, blueprintId)\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Cannot reconcile runId '${runId}': blueprintId not found in context or coordination store.`)\n\t\t\t}\n\t\t}\n\t\tconst blueprint = this.runtime.options.blueprints?.[blueprintId]\n\t\tif (!blueprint) {\n\t\t\tthrow new Error(`Cannot reconcile runId '${runId}': Blueprint with ID '${blueprintId}' not found.`)\n\t\t}\n\n\t\tconst state = await context.toJSON()\n\t\t// filter out internal keys\n\t\tconst completedNodes = new Set(Object.keys(state).filter((k) => blueprint.nodes.some((n) => n.id === k)))\n\n\t\tconst frontier = this.calculateResumedFrontier(blueprint, completedNodes)\n\n\t\tconst enqueuedNodes = new Set<string>()\n\t\tfor (const nodeId of frontier) {\n\t\t\tconst nodeDef = blueprint.nodes.find((n) => n.id === nodeId)\n\t\t\tconst joinStrategy = nodeDef?.config?.joinStrategy || 'all'\n\n\t\t\tlet shouldEnqueue = false\n\n\t\t\tif (joinStrategy === 'any') {\n\t\t\t\t// acquire the permanent join lock\n\t\t\t\tconst lockKey = `flowcraft:joinlock:${runId}:${nodeId}`\n\t\t\t\tif (await this.store.setIfNotExist(lockKey, 'locked-by-reconcile', 3600)) {\n\t\t\t\t\tshouldEnqueue = true\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(`[Adapter] Reconciling: Node '${nodeId}' is an 'any' join and is already locked.`, { runId })\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// 'all' joins and single-predecessor nodes use a temporary lock\n\t\t\t\tconst lockKey = `flowcraft:nodelock:${runId}:${nodeId}`\n\t\t\t\tif (await this.store.setIfNotExist(lockKey, 'locked', 120)) {\n\t\t\t\t\tshouldEnqueue = true\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(`[Adapter] Reconciling: Node '${nodeId}' is already locked.`, { runId })\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldEnqueue) {\n\t\t\t\tconsole.log(`[Adapter] Reconciling: Enqueuing ready job for node '${nodeId}'`, { runId })\n\t\t\t\tawait this.enqueueJob({ runId, blueprintId: blueprint.id, nodeId })\n\t\t\t\tenqueuedNodes.add(nodeId)\n\t\t\t}\n\t\t}\n\n\t\treturn enqueuedNodes\n\t}\n\n\tprivate calculateResumedFrontier(blueprint: WorkflowBlueprint, completedNodes: Set<string>): Set<string> {\n\t\tconst newFrontier = new Set<string>()\n\t\tconst allPredecessors = new Map<string, Set<string>>()\n\t\t// (logic extracted from the GraphTraverser)\n\t\tfor (const node of blueprint.nodes) {\n\t\t\tallPredecessors.set(node.id, new Set())\n\t\t}\n\t\tfor (const edge of blueprint.edges) {\n\t\t\tallPredecessors.get(edge.target)?.add(edge.source)\n\t\t}\n\n\t\tfor (const node of blueprint.nodes) {\n\t\t\tif (completedNodes.has(node.id)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst predecessors = allPredecessors.get(node.id) ?? new Set()\n\t\t\tif (predecessors.size === 0 && !completedNodes.has(node.id)) {\n\t\t\t\tnewFrontier.add(node.id)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst joinStrategy = node.config?.joinStrategy || 'all'\n\t\t\tconst completedPredecessors = [...predecessors].filter((p) => completedNodes.has(p))\n\n\t\t\tconst isReady =\n\t\t\t\tjoinStrategy === 'any' ? completedPredecessors.length > 0 : completedPredecessors.length === predecessors.size\n\n\t\t\tif (isReady) {\n\t\t\t\tnewFrontier.add(node.id)\n\t\t\t}\n\t\t}\n\t\treturn newFrontier\n\t}\n\n\t/**\n\t * Writes a poison pill for 'all' join successors and a cancellation pill for 'any' join successors of a failed node to prevent stalling or ambiguous states.\n\t */\n\tprivate async writePoisonPillForSuccessors(\n\t\trunId: string,\n\t\tblueprint: WorkflowBlueprint,\n\t\tfailedNodeId: string,\n\t): Promise<void> {\n\t\tconst successors = blueprint.edges\n\t\t\t.filter((edge) => edge.source === failedNodeId)\n\t\t\t.map((edge) => edge.target)\n\t\t\t.map((targetId) => blueprint.nodes.find((node) => node.id === targetId))\n\t\t\t.filter((node) => node)\n\n\t\tfor (const successor of successors) {\n\t\t\tif (successor) {\n\t\t\t\tconst joinStrategy = successor.config?.joinStrategy || 'all'\n\t\t\t\tif (joinStrategy === 'all') {\n\t\t\t\t\tconst poisonKey = `flowcraft:fanin:poison:${runId}:${successor.id}`\n\t\t\t\t\tawait this.store.setIfNotExist(poisonKey, 'poisoned', 3600)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[Adapter] Wrote poison pill for 'all' join node '${successor.id}' due to failed predecessor '${failedNodeId}'`,\n\t\t\t\t\t)\n\t\t\t\t} else if (joinStrategy === 'any') {\n\t\t\t\t\tconst cancelKey = `flowcraft:fanin:cancel:${runId}:${successor.id}`\n\t\t\t\t\tawait this.store.setIfNotExist(cancelKey, 'cancelled', 3600)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[Adapter] Wrote cancellation pill for 'any' join node '${successor.id}' due to failed predecessor '${failedNodeId}'`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}