flowcraft 2.3.1 → 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 (86) 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-HKX7WQLS.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-ZNL7ZXPR.js → chunk-J3HZD5ES.js} +26 -21
  11. package/dist/chunk-J3HZD5ES.js.map +1 -0
  12. package/dist/{chunk-MKNZBKSR.js → chunk-K6LPGUPR.js} +4 -4
  13. package/dist/{chunk-MKNZBKSR.js.map → chunk-K6LPGUPR.js.map} +1 -1
  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-BN4MV36K.js → chunk-VN2JKKAE.js} +3 -3
  27. package/dist/{chunk-BN4MV36K.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 +12 -10
  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 +10 -8
  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 +10 -8
  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 +9 -7
  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 +11 -9
  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-C4HYIJI3.js.map +0 -1
  83. package/dist/chunk-CD3Q4N6V.js.map +0 -1
  84. package/dist/chunk-CD4FUZOJ.js.map +0 -1
  85. package/dist/chunk-HKX7WQLS.js.map +0 -1
  86. package/dist/chunk-ZNL7ZXPR.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { GraphTraverser } from './chunk-G5BGBPFP.js';
2
2
  import { analyzeBlueprint } from './chunk-233SESC2.js';
3
- import { ExecutionContext } from './chunk-FRKO3WX4.js';
4
- import { WorkflowState } from './chunk-CD4FUZOJ.js';
3
+ import { ExecutionContext } from './chunk-KXXEA5VE.js';
4
+ import { WorkflowState } from './chunk-OO3FF3DF.js';
5
5
  import { FlowcraftError } from './chunk-BCRWXTWX.js';
6
6
  import { BaseNode } from './chunk-LNK7LZER.js';
7
7
 
@@ -86,5 +86,5 @@ var SubflowNode = class extends BaseNode {
86
86
  };
87
87
 
88
88
  export { SubflowNode };
89
- //# sourceMappingURL=chunk-MKNZBKSR.js.map
90
- //# sourceMappingURL=chunk-MKNZBKSR.js.map
89
+ //# sourceMappingURL=chunk-K6LPGUPR.js.map
90
+ //# sourceMappingURL=chunk-K6LPGUPR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nodes/subflow.ts"],"names":["subAnalysis"],"mappings":"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","file":"chunk-MKNZBKSR.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 { output: terminalOutputs }\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/nodes/subflow.ts"],"names":["subAnalysis"],"mappings":"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","file":"chunk-K6LPGUPR.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 { output: terminalOutputs }\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { WorkflowState } from './chunk-CD4FUZOJ.js';
1
+ import { WorkflowState } from './chunk-OO3FF3DF.js';
2
2
 
3
3
  // src/runtime/execution-context.ts
4
4
  var ExecutionContext = class _ExecutionContext {
@@ -28,5 +28,5 @@ var ExecutionContext = class _ExecutionContext {
28
28
  };
29
29
 
30
30
  export { ExecutionContext };
31
- //# sourceMappingURL=chunk-FRKO3WX4.js.map
32
- //# sourceMappingURL=chunk-FRKO3WX4.js.map
31
+ //# sourceMappingURL=chunk-KXXEA5VE.js.map
32
+ //# sourceMappingURL=chunk-KXXEA5VE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/execution-context.ts"],"names":[],"mappings":";;;AAkBO,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAkG;AAAA,EAC9G,WAAA,CACiB,WACA,KAAA,EACA,YAAA,EACA,aACA,OAAA,EACA,QAAA,EAQA,QACA,WAAA,EACf;AAfe,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAQA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EACd;AAAA,EAEI,gBAAA,CACN,cACA,eAAA,EAC4C;AAC5C,IAAA,MAAM,QAAA,GAAW,IAAI,aAAA,CAAwB,eAAe,CAAA;AAC5D,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,YAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACN;AAAA,EACD;AACD","file":"chunk-FRKO3WX4.js","sourcesContent":["import type {\n\tIEvaluator,\n\tIEventBus,\n\tILogger,\n\tISerializer,\n\tMiddleware,\n\tNodeClass,\n\tNodeFunction,\n\tRuntimeDependencies,\n\tWorkflowBlueprint,\n} from '../types'\nimport type { FlowRuntime } from './runtime'\nimport { WorkflowState } from './state'\n\n/**\n * A container for all state and dependencies of a single workflow execution.\n * This object is created once per `run` and passed through the execution stack.\n */\nexport class ExecutionContext<TContext extends Record<string, any>, TDependencies extends RuntimeDependencies> {\n\tconstructor(\n\t\tpublic readonly blueprint: WorkflowBlueprint,\n\t\tpublic readonly state: WorkflowState<TContext>,\n\t\tpublic readonly nodeRegistry: Map<string, NodeFunction | NodeClass>,\n\t\tpublic readonly executionId: string,\n\t\tpublic readonly runtime: FlowRuntime<TContext, TDependencies>, // A reference back to the runtime for orchestrating subflows\n\t\tpublic readonly services: {\n\t\t\tlogger: ILogger\n\t\t\teventBus: IEventBus\n\t\t\tserializer: ISerializer\n\t\t\tevaluator: IEvaluator\n\t\t\tmiddleware: Middleware[]\n\t\t\tdependencies: TDependencies\n\t\t},\n\t\tpublic readonly signal?: AbortSignal,\n\t\tpublic readonly concurrency?: number,\n\t) {}\n\n\tpublic createForSubflow(\n\t\tsubBlueprint: WorkflowBlueprint,\n\t\tinitialSubState: Partial<TContext>,\n\t): ExecutionContext<TContext, TDependencies> {\n\t\tconst subState = new WorkflowState<TContext>(initialSubState)\n\t\treturn new ExecutionContext(\n\t\t\tsubBlueprint,\n\t\t\tsubState,\n\t\t\tthis.nodeRegistry,\n\t\t\tthis.executionId,\n\t\t\tthis.runtime,\n\t\t\tthis.services,\n\t\t\tthis.signal,\n\t\t\tthis.concurrency,\n\t\t)\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/runtime/execution-context.ts"],"names":[],"mappings":";;;AAkBO,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAkG;AAAA,EAC9G,WAAA,CACiB,WACA,KAAA,EACA,YAAA,EACA,aACA,OAAA,EACA,QAAA,EAQA,QACA,WAAA,EACf;AAfe,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAQA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EACd;AAAA,EAEI,gBAAA,CACN,cACA,eAAA,EAC4C;AAC5C,IAAA,MAAM,QAAA,GAAW,IAAI,aAAA,CAAwB,eAAe,CAAA;AAC5D,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,YAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACN;AAAA,EACD;AACD","file":"chunk-KXXEA5VE.js","sourcesContent":["import type {\n\tIEvaluator,\n\tIEventBus,\n\tILogger,\n\tISerializer,\n\tMiddleware,\n\tNodeClass,\n\tNodeFunction,\n\tRuntimeDependencies,\n\tWorkflowBlueprint,\n} from '../types'\nimport type { FlowRuntime } from './runtime'\nimport { WorkflowState } from './state'\n\n/**\n * A container for all state and dependencies of a single workflow execution.\n * This object is created once per `run` and passed through the execution stack.\n */\nexport class ExecutionContext<TContext extends Record<string, any>, TDependencies extends RuntimeDependencies> {\n\tconstructor(\n\t\tpublic readonly blueprint: WorkflowBlueprint,\n\t\tpublic readonly state: WorkflowState<TContext>,\n\t\tpublic readonly nodeRegistry: Map<string, NodeFunction | NodeClass>,\n\t\tpublic readonly executionId: string,\n\t\tpublic readonly runtime: FlowRuntime<TContext, TDependencies>, // A reference back to the runtime for orchestrating subflows\n\t\tpublic readonly services: {\n\t\t\tlogger: ILogger\n\t\t\teventBus: IEventBus\n\t\t\tserializer: ISerializer\n\t\t\tevaluator: IEvaluator\n\t\t\tmiddleware: Middleware[]\n\t\t\tdependencies: TDependencies\n\t\t},\n\t\tpublic readonly signal?: AbortSignal,\n\t\tpublic readonly concurrency?: number,\n\t) {}\n\n\tpublic createForSubflow(\n\t\tsubBlueprint: WorkflowBlueprint,\n\t\tinitialSubState: Partial<TContext>,\n\t): ExecutionContext<TContext, TDependencies> {\n\t\tconst subState = new WorkflowState<TContext>(initialSubState)\n\t\treturn new ExecutionContext(\n\t\t\tsubBlueprint,\n\t\t\tsubState,\n\t\t\tthis.nodeRegistry,\n\t\t\tthis.executionId,\n\t\t\tthis.runtime,\n\t\t\tthis.services,\n\t\t\tthis.signal,\n\t\t\tthis.concurrency,\n\t\t)\n\t}\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { BaseNode } from './chunk-LNK7LZER.js';
2
+
3
+ // src/nodes/sleep.ts
4
+ var SleepNode = class extends BaseNode {
5
+ async exec(_prepResult, context) {
6
+ const duration = this.params?.duration;
7
+ if (typeof duration !== "number" || duration < 0)
8
+ throw new Error(`SleepNode '${this.nodeId}' received an invalid duration.`);
9
+ const wakeUpAt = new Date(Date.now() + duration).toISOString();
10
+ context.dependencies.workflowState.markAsAwaiting(this.nodeId ?? "", {
11
+ reason: "timer",
12
+ wakeUpAt
13
+ });
14
+ return { output: void 0 };
15
+ }
16
+ };
17
+
18
+ export { SleepNode };
19
+ //# sourceMappingURL=chunk-LJ4COM7S.js.map
20
+ //# sourceMappingURL=chunk-LJ4COM7S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nodes/sleep.ts"],"names":[],"mappings":";;;AAGO,IAAM,SAAA,GAAN,cAAwB,QAAA,CAAS;AAAA,EACvC,MAAM,IAAA,CACL,WAAA,EACA,OAAA,EACqC;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,EAAQ,QAAA;AAE9B,IAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,GAAW,CAAA;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,+BAAA,CAAiC,CAAA;AAE3E,IAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,CAAK,KAAI,GAAI,QAAQ,EAAE,WAAA,EAAY;AAE7D,IAAA,OAAA,CAAQ,YAAA,CAAa,aAAA,CAAc,cAAA,CAAe,IAAA,CAAK,UAAU,EAAA,EAAI;AAAA,MACpE,MAAA,EAAQ,OAAA;AAAA,MACR;AAAA,KACA,CAAA;AAED,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAU;AAAA,EAC5B;AACD","file":"chunk-LJ4COM7S.js","sourcesContent":["import { BaseNode } from '../node'\nimport type { NodeContext, NodeResult } from '../types'\n\nexport class SleepNode 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 duration = this.params?.duration as number\n\n\t\tif (typeof duration !== 'number' || duration < 0)\n\t\t\tthrow new Error(`SleepNode '${this.nodeId}' received an invalid duration.`)\n\n\t\tconst wakeUpAt = new Date(Date.now() + duration).toISOString()\n\n\t\tcontext.dependencies.workflowState.markAsAwaiting(this.nodeId ?? '', {\n\t\t\treason: 'timer',\n\t\t\twakeUpAt,\n\t\t})\n\n\t\treturn { output: undefined }\n\t}\n}\n"]}
@@ -0,0 +1,73 @@
1
+ // src/runtime/scheduler.ts
2
+ var WorkflowScheduler = class {
3
+ runtime;
4
+ activeWorkflows = /* @__PURE__ */ new Map();
5
+ intervalId;
6
+ checkIntervalMs;
7
+ constructor(runtime, checkIntervalMs = 1e3) {
8
+ this.runtime = runtime;
9
+ this.checkIntervalMs = checkIntervalMs;
10
+ }
11
+ start() {
12
+ if (this.intervalId) return;
13
+ this.intervalId = setInterval(() => {
14
+ this.checkAndResumeWorkflows();
15
+ }, this.checkIntervalMs);
16
+ }
17
+ stop() {
18
+ if (this.intervalId) {
19
+ clearInterval(this.intervalId);
20
+ this.intervalId = void 0;
21
+ }
22
+ }
23
+ registerAwaitingWorkflow(executionId, blueprintId, serializedContext, awaitingNodeId, wakeUpAt) {
24
+ this.activeWorkflows.set(executionId, {
25
+ executionId,
26
+ blueprintId,
27
+ serializedContext,
28
+ awaitingNodeId,
29
+ wakeUpAt
30
+ });
31
+ }
32
+ unregisterWorkflow(executionId) {
33
+ this.activeWorkflows.delete(executionId);
34
+ }
35
+ async checkAndResumeWorkflows() {
36
+ const now = /* @__PURE__ */ new Date();
37
+ const toResume = [];
38
+ for (const [_executionId, workflow] of this.activeWorkflows) {
39
+ const wakeUpTime = new Date(workflow.wakeUpAt);
40
+ if (wakeUpTime <= now) {
41
+ toResume.push(workflow);
42
+ }
43
+ }
44
+ for (const workflow of toResume) {
45
+ try {
46
+ const blueprint = this.runtime.getBlueprint(workflow.blueprintId);
47
+ if (!blueprint) {
48
+ console.warn(`Blueprint ${workflow.blueprintId} not found, skipping resumption`);
49
+ continue;
50
+ }
51
+ const result = await this.runtime.resume(
52
+ blueprint,
53
+ workflow.serializedContext,
54
+ { output: void 0 },
55
+ workflow.awaitingNodeId
56
+ );
57
+ if (result.status === "completed" || result.status === "failed") {
58
+ this.unregisterWorkflow(workflow.executionId);
59
+ }
60
+ } catch (error) {
61
+ console.error(`Failed to resume workflow ${workflow.executionId}:`, error);
62
+ this.unregisterWorkflow(workflow.executionId);
63
+ }
64
+ }
65
+ }
66
+ getActiveWorkflows() {
67
+ return Array.from(this.activeWorkflows.values());
68
+ }
69
+ };
70
+
71
+ export { WorkflowScheduler };
72
+ //# sourceMappingURL=chunk-LM4ACVHL.js.map
73
+ //# sourceMappingURL=chunk-LM4ACVHL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/scheduler.ts"],"names":[],"mappings":";AAUO,IAAM,oBAAN,MAAwB;AAAA,EACtB,OAAA;AAAA,EACA,eAAA,uBAAqD,GAAA,EAAI;AAAA,EACzD,UAAA;AAAA,EACA,eAAA;AAAA,EAER,WAAA,CAAY,OAAA,EAAgC,eAAA,GAA0B,GAAA,EAAM;AAC3E,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAAA,EACxB;AAAA,EAEA,KAAA,GAAc;AACb,IAAA,IAAI,KAAK,UAAA,EAAY;AAErB,IAAA,IAAA,CAAK,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,IAAA,CAAK,uBAAA,EAAwB;AAAA,IAC9B,CAAA,EAAG,KAAK,eAAe,CAAA;AAAA,EACxB;AAAA,EAEA,IAAA,GAAa;AACZ,IAAA,IAAI,KAAK,UAAA,EAAY;AACpB,MAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAC7B,MAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAAA,IACnB;AAAA,EACD;AAAA,EAEA,wBAAA,CACC,WAAA,EACA,WAAA,EACA,iBAAA,EACA,gBACA,QAAA,EACO;AACP,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,WAAA,EAAa;AAAA,MACrC,WAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACF;AAAA,EAEA,mBAAmB,WAAA,EAA2B;AAC7C,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,WAAW,CAAA;AAAA,EACxC;AAAA,EAEA,MAAc,uBAAA,GAAyC;AACtD,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,WAA+B,EAAC;AAEtC,IAAA,KAAA,MAAW,CAAC,YAAA,EAAc,QAAQ,CAAA,IAAK,KAAK,eAAA,EAAiB;AAC5D,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAC7C,MAAA,IAAI,cAAc,GAAA,EAAK;AACtB,QAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA,MACvB;AAAA,IACD;AAEA,IAAA,KAAA,MAAW,YAAY,QAAA,EAAU;AAChC,MAAA,IAAI;AACH,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,SAAS,WAAW,CAAA;AAChE,QAAA,IAAI,CAAC,SAAA,EAAW;AACf,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAa,QAAA,CAAS,WAAW,CAAA,+BAAA,CAAiC,CAAA;AAC/E,UAAA;AAAA,QACD;AAEA,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAA;AAAA,UACjC,SAAA;AAAA,UACA,QAAA,CAAS,iBAAA;AAAA,UACT,EAAE,QAAQ,KAAA,CAAA,EAAU;AAAA,UACpB,QAAA,CAAS;AAAA,SACV;AAEA,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,WAAW,QAAA,EAAU;AAChE,UAAA,IAAA,CAAK,kBAAA,CAAmB,SAAS,WAAW,CAAA;AAAA,QAC7C;AAAA,MACD,SAAS,KAAA,EAAO;AACf,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,WAAW,KAAK,KAAK,CAAA;AACzE,QAAA,IAAA,CAAK,kBAAA,CAAmB,SAAS,WAAW,CAAA;AAAA,MAC7C;AAAA,IACD;AAAA,EACD;AAAA,EAEA,kBAAA,GAAyC;AACxC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AAAA,EAChD;AACD","file":"chunk-LM4ACVHL.js","sourcesContent":["import type { FlowRuntime } from './runtime'\n\nexport interface AwaitingWorkflow {\n\texecutionId: string\n\tblueprintId: string\n\tserializedContext: string\n\tawaitingNodeId: string\n\twakeUpAt: string\n}\n\nexport class WorkflowScheduler {\n\tprivate runtime: FlowRuntime<any, any>\n\tprivate activeWorkflows: Map<string, AwaitingWorkflow> = new Map()\n\tprivate intervalId?: NodeJS.Timeout\n\tprivate checkIntervalMs: number\n\n\tconstructor(runtime: FlowRuntime<any, any>, checkIntervalMs: number = 1000) {\n\t\tthis.runtime = runtime\n\t\tthis.checkIntervalMs = checkIntervalMs\n\t}\n\n\tstart(): void {\n\t\tif (this.intervalId) return\n\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tthis.checkAndResumeWorkflows()\n\t\t}, this.checkIntervalMs)\n\t}\n\n\tstop(): void {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId)\n\t\t\tthis.intervalId = undefined\n\t\t}\n\t}\n\n\tregisterAwaitingWorkflow(\n\t\texecutionId: string,\n\t\tblueprintId: string,\n\t\tserializedContext: string,\n\t\tawaitingNodeId: string,\n\t\twakeUpAt: string,\n\t): void {\n\t\tthis.activeWorkflows.set(executionId, {\n\t\t\texecutionId,\n\t\t\tblueprintId,\n\t\t\tserializedContext,\n\t\t\tawaitingNodeId,\n\t\t\twakeUpAt,\n\t\t})\n\t}\n\n\tunregisterWorkflow(executionId: string): void {\n\t\tthis.activeWorkflows.delete(executionId)\n\t}\n\n\tprivate async checkAndResumeWorkflows(): Promise<void> {\n\t\tconst now = new Date()\n\t\tconst toResume: AwaitingWorkflow[] = []\n\n\t\tfor (const [_executionId, workflow] of this.activeWorkflows) {\n\t\t\tconst wakeUpTime = new Date(workflow.wakeUpAt)\n\t\t\tif (wakeUpTime <= now) {\n\t\t\t\ttoResume.push(workflow)\n\t\t\t}\n\t\t}\n\n\t\tfor (const workflow of toResume) {\n\t\t\ttry {\n\t\t\t\tconst blueprint = this.runtime.getBlueprint(workflow.blueprintId)\n\t\t\t\tif (!blueprint) {\n\t\t\t\t\tconsole.warn(`Blueprint ${workflow.blueprintId} not found, skipping resumption`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst result = await this.runtime.resume(\n\t\t\t\t\tblueprint,\n\t\t\t\t\tworkflow.serializedContext,\n\t\t\t\t\t{ output: undefined },\n\t\t\t\t\tworkflow.awaitingNodeId,\n\t\t\t\t)\n\n\t\t\t\tif (result.status === 'completed' || result.status === 'failed') {\n\t\t\t\t\tthis.unregisterWorkflow(workflow.executionId)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`Failed to resume workflow ${workflow.executionId}:`, error)\n\t\t\t\tthis.unregisterWorkflow(workflow.executionId)\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActiveWorkflows(): AwaitingWorkflow[] {\n\t\treturn Array.from(this.activeWorkflows.values())\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { executeBatch, processResults } from './chunk-HAZ26F3P.js';
2
- import { ExecutionContext } from './chunk-FRKO3WX4.js';
2
+ import { ExecutionContext } from './chunk-KXXEA5VE.js';
3
3
  import { FlowcraftError } from './chunk-BCRWXTWX.js';
4
4
 
5
5
  // src/runtime/orchestrator.ts
@@ -70,5 +70,5 @@ var DefaultOrchestrator = class {
70
70
  };
71
71
 
72
72
  export { DefaultOrchestrator };
73
- //# sourceMappingURL=chunk-33NO4PUJ.js.map
74
- //# sourceMappingURL=chunk-33NO4PUJ.js.map
73
+ //# sourceMappingURL=chunk-NDWVLU7J.js.map
74
+ //# sourceMappingURL=chunk-NDWVLU7J.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/orchestrator.ts"],"names":[],"mappings":";;;;;AAOO,IAAM,sBAAN,MAAmD;AAAA,EACzD,MAAM,GAAA,CAAI,OAAA,EAAqC,SAAA,EAAyD;AACvG,IAAA,MAAM,mBAAA,GAAsB,UAAA,CAAW,SAAA,EAAW,mBAAA,IAAuB,CAAA;AACzE,IAAA,MAAM,iBAAiB,OAAA,CAAQ,WAAA,IAAe,IAAA,CAAK,GAAA,CAAI,qBAAqB,EAAE,CAAA;AAE9E,IAAA,IAAI;AACH,MAAA,OAAA,CAAQ,QAAQ,cAAA,EAAe;AAAA,IAChC,SAAS,KAAA,EAAO;AACf,MAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACjE,QAAA,MAAM,IAAI,cAAA,CAAe,oBAAA,EAAsB,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,MAClE;AACA,MAAA,MAAM,KAAA;AAAA,IACP;AAEA,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,MAAM,aAAA,GAAgB,GAAA;AAEtB,IAAA,OAAO,SAAA,CAAU,aAAY,EAAG;AAC/B,MAAA,IAAI,EAAE,aAAa,aAAA,EAAe;AACjC,QAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,MAChF;AAEA,MAAA,IAAI;AACH,QAAA,OAAA,CAAQ,QAAQ,cAAA,EAAe;AAAA,MAChC,SAAS,KAAA,EAAO;AACf,QAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACjE,UAAA,MAAM,IAAI,cAAA,CAAe,oBAAA,EAAsB,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,QAClE;AACA,QAAA,MAAM,KAAA;AAAA,MACP;AAEA,MAAA,MAAM,UAAA,GAAa,UAAU,aAAA,EAAc;AAC3C,MAAA,MAAM,gBAAA,GAAmB,UAAU,mBAAA,EAAoB;AACvD,MAAA,MAAM,iBAAiB,IAAI,gBAAA;AAAA,QAC1B,gBAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR,OAAA,CAAQ,YAAA;AAAA,QACR,OAAA,CAAQ,WAAA;AAAA,QACR,OAAA,CAAQ,OAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,MAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACT;AACA,MAAA,MAAM,iBAAiB,MAAM,YAAA;AAAA,QAC5B,UAAA;AAAA,QACA,gBAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR,CAAC,MAAA,KAAmB,OAAA,CAAQ,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,cAAc,CAAA;AAAA,QAC7E,OAAA,CAAQ,OAAA;AAAA,QACR;AAAA,OACD;AAEA,MAAA,MAAM,cAAA;AAAA,QACL,cAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR,OAAA,CAAQ,OAAA;AAAA,QACR,OAAA,CAAQ,SAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACT;AAEA,MAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAW,EAAG;AAC/B,QAAA;AAAA,MACD;AAAA,IACD;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAAC,SAAA,CAAU,WAAA,EAAY;AACnD,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,SAAA,CAAU,mBAAmB,CAAA;AAC1D,IAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,MAAM,QAAA,CAAS,OAAA,CAAQ,SAAS,UAAU,CAAA;AACvE,IAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACR;AACD","file":"chunk-33NO4PUJ.js","sourcesContent":["import { FlowcraftError } from '../errors'\nimport type { WorkflowResult } from '../types'\nimport { ExecutionContext } from './execution-context'\nimport { executeBatch, processResults } from './orchestrators/utils'\nimport type { GraphTraverser } from './traverser'\nimport type { IOrchestrator } from './types'\n\nexport class DefaultOrchestrator implements IOrchestrator {\n\tasync run(context: ExecutionContext<any, any>, traverser: GraphTraverser): Promise<WorkflowResult<any>> {\n\t\tconst hardwareConcurrency = globalThis.navigator?.hardwareConcurrency || 4\n\t\tconst maxConcurrency = context.concurrency ?? Math.min(hardwareConcurrency, 10)\n\n\t\ttry {\n\t\t\tcontext.signal?.throwIfAborted()\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\tthrow new FlowcraftError('Workflow cancelled', { isFatal: false })\n\t\t\t}\n\t\t\tthrow error\n\t\t}\n\n\t\tlet iterations = 0\n\t\tconst maxIterations = 10000\n\n\t\twhile (traverser.hasMoreWork()) {\n\t\t\tif (++iterations > maxIterations) {\n\t\t\t\tthrow new Error('Traversal exceeded maximum iterations, possible infinite loop')\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcontext.signal?.throwIfAborted()\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\t\tthrow new FlowcraftError('Workflow cancelled', { isFatal: false })\n\t\t\t\t}\n\t\t\t\tthrow error\n\t\t\t}\n\n\t\t\tconst readyNodes = traverser.getReadyNodes()\n\t\t\tconst dynamicBlueprint = traverser.getDynamicBlueprint()\n\t\t\tconst updatedContext = new ExecutionContext(\n\t\t\t\tdynamicBlueprint,\n\t\t\t\tcontext.state,\n\t\t\t\tcontext.nodeRegistry,\n\t\t\t\tcontext.executionId,\n\t\t\t\tcontext.runtime,\n\t\t\t\tcontext.services,\n\t\t\t\tcontext.signal,\n\t\t\t\tcontext.concurrency,\n\t\t\t)\n\t\t\tconst settledResults = await executeBatch(\n\t\t\t\treadyNodes,\n\t\t\t\tdynamicBlueprint,\n\t\t\t\tcontext.state,\n\t\t\t\t(nodeId: string) => context.runtime.getExecutorForNode(nodeId, updatedContext),\n\t\t\t\tcontext.runtime,\n\t\t\t\tmaxConcurrency,\n\t\t\t)\n\n\t\t\tawait processResults(\n\t\t\t\tsettledResults,\n\t\t\t\ttraverser,\n\t\t\t\tcontext.state,\n\t\t\t\tcontext.runtime,\n\t\t\t\tcontext.blueprint,\n\t\t\t\tcontext.executionId,\n\t\t\t)\n\n\t\t\tif (context.state.isAwaiting()) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tconst isTraversalComplete = !traverser.hasMoreWork()\n\t\tconst status = context.state.getStatus(isTraversalComplete)\n\t\tconst result = await context.state.toResult(context.services.serializer)\n\t\tresult.status = status\n\t\treturn result\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/runtime/orchestrator.ts"],"names":[],"mappings":";;;;;AAOO,IAAM,sBAAN,MAAmD;AAAA,EACzD,MAAM,GAAA,CAAI,OAAA,EAAqC,SAAA,EAAyD;AACvG,IAAA,MAAM,mBAAA,GAAsB,UAAA,CAAW,SAAA,EAAW,mBAAA,IAAuB,CAAA;AACzE,IAAA,MAAM,iBAAiB,OAAA,CAAQ,WAAA,IAAe,IAAA,CAAK,GAAA,CAAI,qBAAqB,EAAE,CAAA;AAE9E,IAAA,IAAI;AACH,MAAA,OAAA,CAAQ,QAAQ,cAAA,EAAe;AAAA,IAChC,SAAS,KAAA,EAAO;AACf,MAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACjE,QAAA,MAAM,IAAI,cAAA,CAAe,oBAAA,EAAsB,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,MAClE;AACA,MAAA,MAAM,KAAA;AAAA,IACP;AAEA,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,MAAM,aAAA,GAAgB,GAAA;AAEtB,IAAA,OAAO,SAAA,CAAU,aAAY,EAAG;AAC/B,MAAA,IAAI,EAAE,aAAa,aAAA,EAAe;AACjC,QAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,MAChF;AAEA,MAAA,IAAI;AACH,QAAA,OAAA,CAAQ,QAAQ,cAAA,EAAe;AAAA,MAChC,SAAS,KAAA,EAAO;AACf,QAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACjE,UAAA,MAAM,IAAI,cAAA,CAAe,oBAAA,EAAsB,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,QAClE;AACA,QAAA,MAAM,KAAA;AAAA,MACP;AAEA,MAAA,MAAM,UAAA,GAAa,UAAU,aAAA,EAAc;AAC3C,MAAA,MAAM,gBAAA,GAAmB,UAAU,mBAAA,EAAoB;AACvD,MAAA,MAAM,iBAAiB,IAAI,gBAAA;AAAA,QAC1B,gBAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR,OAAA,CAAQ,YAAA;AAAA,QACR,OAAA,CAAQ,WAAA;AAAA,QACR,OAAA,CAAQ,OAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,MAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACT;AACA,MAAA,MAAM,iBAAiB,MAAM,YAAA;AAAA,QAC5B,UAAA;AAAA,QACA,gBAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR,CAAC,MAAA,KAAmB,OAAA,CAAQ,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,cAAc,CAAA;AAAA,QAC7E,OAAA,CAAQ,OAAA;AAAA,QACR;AAAA,OACD;AAEA,MAAA,MAAM,cAAA;AAAA,QACL,cAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR,OAAA,CAAQ,OAAA;AAAA,QACR,OAAA,CAAQ,SAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACT;AAEA,MAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAW,EAAG;AAC/B,QAAA;AAAA,MACD;AAAA,IACD;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAAC,SAAA,CAAU,WAAA,EAAY;AACnD,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,SAAA,CAAU,mBAAmB,CAAA;AAC1D,IAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,MAAM,QAAA,CAAS,OAAA,CAAQ,SAAS,UAAU,CAAA;AACvE,IAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACR;AACD","file":"chunk-NDWVLU7J.js","sourcesContent":["import { FlowcraftError } from '../errors'\nimport type { WorkflowResult } from '../types'\nimport { ExecutionContext } from './execution-context'\nimport { executeBatch, processResults } from './orchestrators/utils'\nimport type { GraphTraverser } from './traverser'\nimport type { IOrchestrator } from './types'\n\nexport class DefaultOrchestrator implements IOrchestrator {\n\tasync run(context: ExecutionContext<any, any>, traverser: GraphTraverser): Promise<WorkflowResult<any>> {\n\t\tconst hardwareConcurrency = globalThis.navigator?.hardwareConcurrency || 4\n\t\tconst maxConcurrency = context.concurrency ?? Math.min(hardwareConcurrency, 10)\n\n\t\ttry {\n\t\t\tcontext.signal?.throwIfAborted()\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\tthrow new FlowcraftError('Workflow cancelled', { isFatal: false })\n\t\t\t}\n\t\t\tthrow error\n\t\t}\n\n\t\tlet iterations = 0\n\t\tconst maxIterations = 10000\n\n\t\twhile (traverser.hasMoreWork()) {\n\t\t\tif (++iterations > maxIterations) {\n\t\t\t\tthrow new Error('Traversal exceeded maximum iterations, possible infinite loop')\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcontext.signal?.throwIfAborted()\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\t\tthrow new FlowcraftError('Workflow cancelled', { isFatal: false })\n\t\t\t\t}\n\t\t\t\tthrow error\n\t\t\t}\n\n\t\t\tconst readyNodes = traverser.getReadyNodes()\n\t\t\tconst dynamicBlueprint = traverser.getDynamicBlueprint()\n\t\t\tconst updatedContext = new ExecutionContext(\n\t\t\t\tdynamicBlueprint,\n\t\t\t\tcontext.state,\n\t\t\t\tcontext.nodeRegistry,\n\t\t\t\tcontext.executionId,\n\t\t\t\tcontext.runtime,\n\t\t\t\tcontext.services,\n\t\t\t\tcontext.signal,\n\t\t\t\tcontext.concurrency,\n\t\t\t)\n\t\t\tconst settledResults = await executeBatch(\n\t\t\t\treadyNodes,\n\t\t\t\tdynamicBlueprint,\n\t\t\t\tcontext.state,\n\t\t\t\t(nodeId: string) => context.runtime.getExecutorForNode(nodeId, updatedContext),\n\t\t\t\tcontext.runtime,\n\t\t\t\tmaxConcurrency,\n\t\t\t)\n\n\t\t\tawait processResults(\n\t\t\t\tsettledResults,\n\t\t\t\ttraverser,\n\t\t\t\tcontext.state,\n\t\t\t\tcontext.runtime,\n\t\t\t\tcontext.blueprint,\n\t\t\t\tcontext.executionId,\n\t\t\t)\n\n\t\t\tif (context.state.isAwaiting()) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tconst isTraversalComplete = !traverser.hasMoreWork()\n\t\tconst status = context.state.getStatus(isTraversalComplete)\n\t\tconst result = await context.state.toResult(context.services.serializer)\n\t\tresult.status = status\n\t\treturn result\n\t}\n}\n"]}
@@ -9,6 +9,7 @@ var WorkflowState = class {
9
9
  context;
10
10
  _isAwaiting = false;
11
11
  _awaitingNodeIds = /* @__PURE__ */ new Set();
12
+ _awaitingDetails = /* @__PURE__ */ new Map();
12
13
  constructor(initialData) {
13
14
  this.context = new AsyncContextView(new Context(initialData));
14
15
  if (initialData._awaitingNodeIds) {
@@ -20,6 +21,9 @@ var WorkflowState = class {
20
21
  }
21
22
  }
22
23
  }
24
+ if (initialData._awaitingDetails) {
25
+ this._awaitingDetails = new Map(Object.entries(initialData._awaitingDetails));
26
+ }
23
27
  for (const key of Object.keys(initialData)) {
24
28
  if (key.startsWith("_outputs.")) {
25
29
  const nodeId = key.substring("_outputs.".length);
@@ -62,11 +66,14 @@ var WorkflowState = class {
62
66
  getAnyFallbackExecuted() {
63
67
  return this.anyFallbackExecuted;
64
68
  }
65
- markAsAwaiting(nodeId) {
69
+ markAsAwaiting(nodeId, details) {
66
70
  this._isAwaiting = true;
67
71
  this._awaitingNodeIds.add(nodeId);
68
- const awaitingArray = Array.from(this._awaitingNodeIds);
69
- this.context.set("_awaitingNodeIds", awaitingArray);
72
+ if (details) {
73
+ this._awaitingDetails.set(nodeId, details);
74
+ }
75
+ this.context.set("_awaitingNodeIds", Array.from(this._awaitingNodeIds));
76
+ this.context.set("_awaitingDetails", Object.fromEntries(this._awaitingDetails));
70
77
  }
71
78
  isAwaiting() {
72
79
  return this._isAwaiting && this._awaitingNodeIds.size > 0;
@@ -74,18 +81,24 @@ var WorkflowState = class {
74
81
  getAwaitingNodeIds() {
75
82
  return Array.from(this._awaitingNodeIds);
76
83
  }
84
+ getAwaitingDetails(nodeId) {
85
+ return this._awaitingDetails.get(nodeId);
86
+ }
77
87
  clearAwaiting(nodeId) {
78
88
  if (nodeId) {
79
89
  this._awaitingNodeIds.delete(nodeId);
90
+ this._awaitingDetails.delete(nodeId);
80
91
  } else {
81
92
  this._awaitingNodeIds.clear();
93
+ this._awaitingDetails.clear();
82
94
  }
83
95
  this._isAwaiting = this._awaitingNodeIds.size > 0;
84
- const awaitingArray = Array.from(this._awaitingNodeIds);
85
- if (awaitingArray.length > 0) {
86
- this.context.set("_awaitingNodeIds", awaitingArray);
96
+ if (this._awaitingNodeIds.size > 0) {
97
+ this.context.set("_awaitingNodeIds", Array.from(this._awaitingNodeIds));
98
+ this.context.set("_awaitingDetails", Object.fromEntries(this._awaitingDetails));
87
99
  } else {
88
100
  this.context.delete("_awaitingNodeIds");
101
+ this.context.delete("_awaitingDetails");
89
102
  }
90
103
  }
91
104
  getStatus(isTraversalComplete = false) {
@@ -99,6 +112,7 @@ var WorkflowState = class {
99
112
  const contextJSON = await this.context.toJSON();
100
113
  if (!this._isAwaiting && contextJSON._awaitingNodeIds) {
101
114
  delete contextJSON._awaitingNodeIds;
115
+ delete contextJSON._awaitingDetails;
102
116
  }
103
117
  return {
104
118
  context: contextJSON,
@@ -110,5 +124,5 @@ var WorkflowState = class {
110
124
  };
111
125
 
112
126
  export { WorkflowState };
113
- //# sourceMappingURL=chunk-CD4FUZOJ.js.map
114
- //# sourceMappingURL=chunk-CD4FUZOJ.js.map
127
+ //# sourceMappingURL=chunk-OO3FF3DF.js.map
128
+ //# sourceMappingURL=chunk-OO3FF3DF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/state.ts"],"names":[],"mappings":";;;;AAIO,IAAM,gBAAN,MAA0D;AAAA,EACxD,eAAA,uBAAsB,GAAA,EAAY;AAAA,EAClC,SAA0B,EAAC;AAAA,EAC3B,mBAAA,GAAsB,KAAA;AAAA,EACtB,OAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,gBAAA,uBAAuB,GAAA,EAAY;AAAA,EACnC,gBAAA,uBAAuB,GAAA,EAAiB;AAAA,EAEhD,YAAY,WAAA,EAAgC;AAC3C,IAAA,IAAA,CAAK,UAAU,IAAI,gBAAA,CAAiB,IAAI,OAAA,CAAsB,WAAW,CAAC,CAAA;AAC1E,IAAA,IAAK,YAAoB,gBAAA,EAAkB;AAC1C,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,MAAM,cAAe,WAAA,CAAoB,gBAAA;AACzC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC/B,QAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC7B,UAAA,IAAA,CAAK,gBAAA,CAAiB,IAAI,EAAE,CAAA;AAAA,QAC7B;AAAA,MACD;AAAA,IACD;AACA,IAAA,IAAK,YAAoB,gBAAA,EAAkB;AAC1C,MAAA,IAAA,CAAK,mBAAmB,IAAI,GAAA,CAAI,OAAO,OAAA,CAAS,WAAA,CAAoB,gBAAgB,CAAC,CAAA;AAAA,IACtF;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,EAAG;AAC3C,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAChC,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,MAAM,CAAA;AAC/C,QAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,MAAM,CAAA;AAAA,MAChC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgB,MAAA,EAAa;AACnD,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,MAAM,CAAA;AAC/B,IAAA,MAAM,KAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,MAAM,IAAW,MAAM,CAAA;AAAA,EAC3D;AAAA,EAEA,QAAA,CAAS,QAAgB,KAAA,EAAc;AACtC,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,KAAA,CAAM,OAAA,EAAS;AAAA,MACxD,KAAA,EAAO,KAAA;AAAA,MACP,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACT,CAAA;AACD,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,MAChB,GAAG,cAAA;AAAA,MACH,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,aAAA,EAAe;AAAA;AAAA,KACf,CAAA;AAAA,EACF;AAAA,EAEA,WAAW,MAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAW,MAAM,CAAA;AAAA,EAChE;AAAA,EAEA,oBAAA,GAAuB;AACtB,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAAA,EAC5B;AAAA,EAEA,UAAA,GAAsC;AACrC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACb;AAAA,EAEA,iBAAA,GAAiC;AAChC,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,eAAe,CAAA;AAAA,EACpC;AAAA,EAEA,SAAA,GAA6B;AAC5B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACb;AAAA,EAEA,sBAAA,GAAkC;AACjC,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACb;AAAA,EAEA,cAAA,CAAe,QAAgB,OAAA,EAAqB;AACnD,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAI,MAAM,CAAA;AAChC,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC1C;AACA,IAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,kBAAA,EAA2B,MAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAC7E,IAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,kBAAA,EAA2B,OAAO,WAAA,CAAY,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,EACtF;AAAA,EAEA,UAAA,GAAsB;AACrB,IAAA,OAAO,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,CAAA;AAAA,EACzD;AAAA,EAEA,kBAAA,GAA+B;AAC9B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAA;AAAA,EACxC;AAAA,EAEA,mBAAmB,MAAA,EAAqB;AACvC,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAM,CAAA;AAAA,EACxC;AAAA,EAEA,cAAc,MAAA,EAAuB;AACpC,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,MAAM,CAAA;AACnC,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA,IACpC,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,MAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAAA,IAC7B;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,CAAA;AAEhD,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,kBAAA,EAA2B,MAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAC7E,MAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,kBAAA,EAA2B,OAAO,WAAA,CAAY,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,IACtF,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,kBAAyB,CAAA;AAC7C,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,kBAAyB,CAAA;AAAA,IAC9C;AAAA,EACD;AAAA,EAEA,SAAA,CAAU,sBAAsB,KAAA,EAAiC;AAChE,IAAA,IAAI,IAAA,CAAK,aAAa,OAAO,UAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,qBAAqB,OAAO,WAAA;AACrC,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,QAAA;AACnC,IAAA,IAAI,qBAAqB,OAAO,WAAA;AAChC,IAAA,OAAO,SAAA;AAAA,EACR;AAAA,EAEA,MAAM,SAAS,UAAA,EAA4D;AAC1E,IAAA,MAAM,WAAA,GAAe,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAgB,WAAA,CAAoB,gBAAA,EAAkB;AAC/D,MAAA,OAAQ,WAAA,CAAoB,gBAAA;AAC5B,MAAA,OAAQ,WAAA,CAAoB,gBAAA;AAAA,IAC7B;AACA,IAAA,OAAO;AAAA,MACN,OAAA,EAAS,WAAA;AAAA,MACT,iBAAA,EAAmB,UAAA,CAAW,SAAA,CAAU,WAAW,CAAA;AAAA,MACnD,MAAA,EAAQ,KAAK,SAAA,EAAU;AAAA,MACvB,QAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,KAAK,MAAA,GAAS;AAAA,KAChD;AAAA,EACD;AACD","file":"chunk-OO3FF3DF.js","sourcesContent":["import { AsyncContextView, Context as SyncContext } from '../context'\nimport { FlowcraftError } from '../errors'\nimport type { IAsyncContext, ISerializer, WorkflowError, WorkflowResult } from '../types'\n\nexport class WorkflowState<TContext extends Record<string, any>> {\n\tprivate _completedNodes = new Set<string>()\n\tprivate errors: WorkflowError[] = []\n\tprivate anyFallbackExecuted = false\n\tprivate context: IAsyncContext<TContext>\n\tprivate _isAwaiting = false\n\tprivate _awaitingNodeIds = new Set<string>()\n\tprivate _awaitingDetails = new Map<string, any>()\n\n\tconstructor(initialData: Partial<TContext>) {\n\t\tthis.context = new AsyncContextView(new SyncContext<TContext>(initialData))\n\t\tif ((initialData as any)._awaitingNodeIds) {\n\t\t\tthis._isAwaiting = true\n\t\t\tconst awaitingIds = (initialData as any)._awaitingNodeIds\n\t\t\tif (Array.isArray(awaitingIds)) {\n\t\t\t\tfor (const id of awaitingIds) {\n\t\t\t\t\tthis._awaitingNodeIds.add(id)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ((initialData as any)._awaitingDetails) {\n\t\t\tthis._awaitingDetails = new Map(Object.entries((initialData as any)._awaitingDetails))\n\t\t}\n\t\tfor (const key of Object.keys(initialData)) {\n\t\t\tif (key.startsWith('_outputs.')) {\n\t\t\t\tconst nodeId = key.substring('_outputs.'.length)\n\t\t\t\tthis._completedNodes.add(nodeId)\n\t\t\t}\n\t\t}\n\t}\n\n\tasync addCompletedNode(nodeId: string, output: any) {\n\t\tthis._completedNodes.add(nodeId)\n\t\tawait this.context.set(`_outputs.${nodeId}` as any, output)\n\t}\n\n\taddError(nodeId: string, error: Error) {\n\t\tconst flowcraftError = new FlowcraftError(error.message, {\n\t\t\tcause: error,\n\t\t\tnodeId,\n\t\t\tisFatal: false,\n\t\t})\n\t\tthis.errors.push({\n\t\t\t...flowcraftError,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\toriginalError: error, // Legacy compatibility\n\t\t})\n\t}\n\n\tclearError(nodeId: string) {\n\t\tthis.errors = this.errors.filter((err) => err.nodeId !== nodeId)\n\t}\n\n\tmarkFallbackExecuted() {\n\t\tthis.anyFallbackExecuted = true\n\t}\n\n\tgetContext(): IAsyncContext<TContext> {\n\t\treturn this.context\n\t}\n\n\tgetCompletedNodes(): Set<string> {\n\t\treturn new Set(this._completedNodes)\n\t}\n\n\tgetErrors(): WorkflowError[] {\n\t\treturn this.errors\n\t}\n\n\tgetAnyFallbackExecuted(): boolean {\n\t\treturn this.anyFallbackExecuted\n\t}\n\n\tmarkAsAwaiting(nodeId: string, details?: any): void {\n\t\tthis._isAwaiting = true\n\t\tthis._awaitingNodeIds.add(nodeId)\n\t\tif (details) {\n\t\t\tthis._awaitingDetails.set(nodeId, details)\n\t\t}\n\t\tthis.context.set('_awaitingNodeIds' as any, Array.from(this._awaitingNodeIds))\n\t\tthis.context.set('_awaitingDetails' as any, Object.fromEntries(this._awaitingDetails))\n\t}\n\n\tisAwaiting(): boolean {\n\t\treturn this._isAwaiting && this._awaitingNodeIds.size > 0\n\t}\n\n\tgetAwaitingNodeIds(): string[] {\n\t\treturn Array.from(this._awaitingNodeIds)\n\t}\n\n\tgetAwaitingDetails(nodeId: string): any {\n\t\treturn this._awaitingDetails.get(nodeId)\n\t}\n\n\tclearAwaiting(nodeId?: string): void {\n\t\tif (nodeId) {\n\t\t\tthis._awaitingNodeIds.delete(nodeId)\n\t\t\tthis._awaitingDetails.delete(nodeId)\n\t\t} else {\n\t\t\tthis._awaitingNodeIds.clear()\n\t\t\tthis._awaitingDetails.clear()\n\t\t}\n\t\tthis._isAwaiting = this._awaitingNodeIds.size > 0\n\n\t\tif (this._awaitingNodeIds.size > 0) {\n\t\t\tthis.context.set('_awaitingNodeIds' as any, Array.from(this._awaitingNodeIds))\n\t\t\tthis.context.set('_awaitingDetails' as any, Object.fromEntries(this._awaitingDetails))\n\t\t} else {\n\t\t\tthis.context.delete('_awaitingNodeIds' as any)\n\t\t\tthis.context.delete('_awaitingDetails' as any)\n\t\t}\n\t}\n\n\tgetStatus(isTraversalComplete = false): WorkflowResult['status'] {\n\t\tif (this._isAwaiting) return 'awaiting'\n\t\tif (this.anyFallbackExecuted) return 'completed'\n\t\tif (this.errors.length > 0) return 'failed'\n\t\tif (isTraversalComplete) return 'completed'\n\t\treturn 'stalled'\n\t}\n\n\tasync toResult(serializer: ISerializer): Promise<WorkflowResult<TContext>> {\n\t\tconst contextJSON = (await this.context.toJSON()) as TContext\n\t\tif (!this._isAwaiting && (contextJSON as any)._awaitingNodeIds) {\n\t\t\tdelete (contextJSON as any)._awaitingNodeIds\n\t\t\tdelete (contextJSON as any)._awaitingDetails\n\t\t}\n\t\treturn {\n\t\t\tcontext: contextJSON,\n\t\t\tserializedContext: serializer.serialize(contextJSON),\n\t\t\tstatus: this.getStatus(),\n\t\t\terrors: this.errors.length > 0 ? this.errors : undefined,\n\t\t}\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { DefaultOrchestrator } from './chunk-33NO4PUJ.js';
1
+ import { DefaultOrchestrator } from './chunk-NDWVLU7J.js';
2
2
  import { NullLogger } from './chunk-4PELJWF7.js';
3
3
  import { JsonSerializer } from './chunk-CYHZ2YVH.js';
4
4
  import { DIContainer, ServiceTokens } from './chunk-WWGFIYKW.js';
@@ -21,5 +21,5 @@ function createDefaultContainer(options = {}) {
21
21
  }
22
22
 
23
23
  export { createDefaultContainer };
24
- //# sourceMappingURL=chunk-QNYXQKFW.js.map
25
- //# sourceMappingURL=chunk-QNYXQKFW.js.map
24
+ //# sourceMappingURL=chunk-OZZP5YI6.js.map
25
+ //# sourceMappingURL=chunk-OZZP5YI6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/container-factory.ts"],"names":[],"mappings":";;;;;;;AA4BO,SAAS,sBAAA,CACf,OAAA,GAA2C,EAAC,EAC9B;AACd,EAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY;AAElC,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAI,YAAY,CAAA;AAC3E,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,UAAA,EAAY,QAAQ,UAAA,IAAc,IAAI,gBAAgB,CAAA;AACvF,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,SAAA,EAAW,QAAQ,SAAA,IAAa,IAAI,mBAAmB,CAAA;AACxF,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAE,MAAM,YAAY;AAAA,EAAC,GAAG,CAAA;AACvF,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,UAAA,EAAY,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA;AACrE,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,YAAA,EAAc,OAAA,CAAQ,QAAA,IAAY,EAAE,CAAA;AACrE,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,iBAAA,EAAmB,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA;AAC5E,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAiB,EAAoB,CAAA;AAE5F,EAAA,SAAA,CAAU,gBAAgB,aAAA,CAAc,YAAA,EAAc,MAAM,IAAI,qBAAqB,CAAA;AAErF,EAAA,OAAO,SAAA;AACR","file":"chunk-QNYXQKFW.js","sourcesContent":["import { DIContainer, ServiceTokens } from './container'\nimport { PropertyEvaluator } from './evaluator'\nimport { NullLogger } from './logger'\nimport { DefaultOrchestrator } from './runtime/orchestrator'\nimport { JsonSerializer } from './serializer'\nimport type {\n\tIEvaluator,\n\tIEventBus,\n\tILogger,\n\tISerializer,\n\tMiddleware,\n\tNodeClass,\n\tNodeFunction,\n\tRuntimeDependencies,\n\tWorkflowBlueprint,\n} from './types'\n\nexport interface ContainerOptions<TDependencies extends RuntimeDependencies = RuntimeDependencies> {\n\tlogger?: ILogger\n\tserializer?: ISerializer\n\tevaluator?: IEvaluator\n\teventBus?: IEventBus\n\tmiddleware?: Middleware[]\n\tregistry?: Record<string, NodeFunction | NodeClass>\n\tblueprints?: Record<string, WorkflowBlueprint>\n\tdependencies?: TDependencies\n}\n\nexport function createDefaultContainer<TDependencies extends RuntimeDependencies = RuntimeDependencies>(\n\toptions: ContainerOptions<TDependencies> = {},\n): DIContainer {\n\tconst container = new DIContainer()\n\n\tcontainer.register(ServiceTokens.Logger, options.logger || new NullLogger())\n\tcontainer.register(ServiceTokens.Serializer, options.serializer || new JsonSerializer())\n\tcontainer.register(ServiceTokens.Evaluator, options.evaluator || new PropertyEvaluator())\n\tcontainer.register(ServiceTokens.EventBus, options.eventBus || { emit: async () => {} })\n\tcontainer.register(ServiceTokens.Middleware, options.middleware || [])\n\tcontainer.register(ServiceTokens.NodeRegistry, options.registry || {})\n\tcontainer.register(ServiceTokens.BlueprintRegistry, options.blueprints || {})\n\tcontainer.register(ServiceTokens.Dependencies, options.dependencies || ({} as TDependencies))\n\n\tcontainer.registerFactory(ServiceTokens.Orchestrator, () => new DefaultOrchestrator())\n\n\treturn container\n}\n"]}
1
+ {"version":3,"sources":["../src/container-factory.ts"],"names":[],"mappings":";;;;;;;AA4BO,SAAS,sBAAA,CACf,OAAA,GAA2C,EAAC,EAC9B;AACd,EAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY;AAElC,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAI,YAAY,CAAA;AAC3E,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,UAAA,EAAY,QAAQ,UAAA,IAAc,IAAI,gBAAgB,CAAA;AACvF,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,SAAA,EAAW,QAAQ,SAAA,IAAa,IAAI,mBAAmB,CAAA;AACxF,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAE,MAAM,YAAY;AAAA,EAAC,GAAG,CAAA;AACvF,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,UAAA,EAAY,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA;AACrE,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,YAAA,EAAc,OAAA,CAAQ,QAAA,IAAY,EAAE,CAAA;AACrE,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,iBAAA,EAAmB,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA;AAC5E,EAAA,SAAA,CAAU,SAAS,aAAA,CAAc,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAiB,EAAoB,CAAA;AAE5F,EAAA,SAAA,CAAU,gBAAgB,aAAA,CAAc,YAAA,EAAc,MAAM,IAAI,qBAAqB,CAAA;AAErF,EAAA,OAAO,SAAA;AACR","file":"chunk-OZZP5YI6.js","sourcesContent":["import { DIContainer, ServiceTokens } from './container'\nimport { PropertyEvaluator } from './evaluator'\nimport { NullLogger } from './logger'\nimport { DefaultOrchestrator } from './runtime/orchestrator'\nimport { JsonSerializer } from './serializer'\nimport type {\n\tIEvaluator,\n\tIEventBus,\n\tILogger,\n\tISerializer,\n\tMiddleware,\n\tNodeClass,\n\tNodeFunction,\n\tRuntimeDependencies,\n\tWorkflowBlueprint,\n} from './types'\n\nexport interface ContainerOptions<TDependencies extends RuntimeDependencies = RuntimeDependencies> {\n\tlogger?: ILogger\n\tserializer?: ISerializer\n\tevaluator?: IEvaluator\n\teventBus?: IEventBus\n\tmiddleware?: Middleware[]\n\tregistry?: Record<string, NodeFunction | NodeClass>\n\tblueprints?: Record<string, WorkflowBlueprint>\n\tdependencies?: TDependencies\n}\n\nexport function createDefaultContainer<TDependencies extends RuntimeDependencies = RuntimeDependencies>(\n\toptions: ContainerOptions<TDependencies> = {},\n): DIContainer {\n\tconst container = new DIContainer()\n\n\tcontainer.register(ServiceTokens.Logger, options.logger || new NullLogger())\n\tcontainer.register(ServiceTokens.Serializer, options.serializer || new JsonSerializer())\n\tcontainer.register(ServiceTokens.Evaluator, options.evaluator || new PropertyEvaluator())\n\tcontainer.register(ServiceTokens.EventBus, options.eventBus || { emit: async () => {} })\n\tcontainer.register(ServiceTokens.Middleware, options.middleware || [])\n\tcontainer.register(ServiceTokens.NodeRegistry, options.registry || {})\n\tcontainer.register(ServiceTokens.BlueprintRegistry, options.blueprints || {})\n\tcontainer.register(ServiceTokens.Dependencies, options.dependencies || ({} as TDependencies))\n\n\tcontainer.registerFactory(ServiceTokens.Orchestrator, () => new DefaultOrchestrator())\n\n\treturn container\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { InMemoryEventLogger } from './chunk-MUYLRTSR.js';
2
- import { FlowRuntime } from './chunk-HKX7WQLS.js';
2
+ import { FlowRuntime } from './chunk-CHG6O6JX.js';
3
3
 
4
4
  // src/testing/run-with-trace.ts
5
5
  async function runWithTrace(runtime, blueprint, initialState = {}, options = {}) {
@@ -21,5 +21,5 @@ async function runWithTrace(runtime, blueprint, initialState = {}, options = {})
21
21
  }
22
22
 
23
23
  export { runWithTrace };
24
- //# sourceMappingURL=chunk-BN4MV36K.js.map
25
- //# sourceMappingURL=chunk-BN4MV36K.js.map
24
+ //# sourceMappingURL=chunk-VN2JKKAE.js.map
25
+ //# sourceMappingURL=chunk-VN2JKKAE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/testing/run-with-trace.ts"],"names":[],"mappings":";;;;AA+BA,eAAsB,YAAA,CACrB,SACA,SAAA,EACA,YAAA,GAA2C,EAAC,EAC5C,OAAA,GAII,EAAC,EACJ;AACD,EAAA,MAAM,WAAA,GAAc,IAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY;AAAA,IACnC,GAAG,OAAA,CAAQ,OAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACV,CAAA;AAED,EAAA,IAAI;AACH,IAAA,MAAM,SAAS,MAAM,WAAA,CAAY,GAAA,CAAI,SAAA,EAAW,cAAc,OAAO,CAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,IAAI,KAAA,EAAO;AACtB,MAAA,WAAA,CAAY,QAAA,CAAS,CAAA,kBAAA,EAAqB,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,MAAA;AAAA,EACR,SAAS,KAAA,EAAO;AACf,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,oBAAA,EAAuB,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAC1D,IAAA,MAAM,KAAA;AAAA,EACP;AACD","file":"chunk-BN4MV36K.js","sourcesContent":["import { FlowRuntime } from '../runtime'\nimport type { WorkflowBlueprint } from '../types'\nimport { InMemoryEventLogger } from './event-logger'\n\n/**\n * A test helper that executes a workflow and automatically prints a detailed\n * execution trace to the console if the workflow fails.\n *\n * @example\n * // In your test file (e.g., my-workflow.test.ts)\n * it('should process data correctly', async () => {\n * const flow = createFlow('my-flow')\n * .node('a', async () => ({ output: 1 }))\n * .node('b', async ({ input }) => ({ output: input + 1 })) // Bug: returns { output: 3 }\n * .edge('a', 'b')\n *\n * const runtime = new FlowRuntime({})\n *\n * // If this test fails, a full, human-readable trace of the execution\n * // (inputs, outputs, context changes) is printed to the console.\n * const result = await runWithTrace(runtime, flow.toBlueprint())\n *\n * expect(result.context.b).toBe(2)\n * })\n *\n * @param runtime The original FlowRuntime instance (its options will be used).\n * @param blueprint The WorkflowBlueprint to execute.\n * @param initialState The initial state for the workflow run.\n * @param options Additional options for the run.\n * @returns The WorkflowResult if successful.\n */\nexport async function runWithTrace<TContext extends Record<string, any>>(\n\truntime: FlowRuntime<TContext, any>,\n\tblueprint: WorkflowBlueprint,\n\tinitialState: Partial<TContext> | string = {},\n\toptions: {\n\t\tfunctionRegistry?: Map<string, any>\n\t\tstrict?: boolean\n\t\tsignal?: AbortSignal\n\t} = {},\n) {\n\tconst eventLogger = new InMemoryEventLogger()\n\tconst testRuntime = new FlowRuntime({\n\t\t...runtime.options,\n\t\teventBus: eventLogger,\n\t})\n\n\ttry {\n\t\tconst result = await testRuntime.run(blueprint, initialState, options)\n\t\tif (process.env.DEBUG) {\n\t\t\teventLogger.printLog(`Successful Trace: ${blueprint.id}`)\n\t\t}\n\t\treturn result\n\t} catch (error) {\n\t\teventLogger.printLog(`Failing Test Trace: ${blueprint.id}`)\n\t\tthrow error\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/testing/run-with-trace.ts"],"names":[],"mappings":";;;;AA+BA,eAAsB,YAAA,CACrB,SACA,SAAA,EACA,YAAA,GAA2C,EAAC,EAC5C,OAAA,GAII,EAAC,EACJ;AACD,EAAA,MAAM,WAAA,GAAc,IAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY;AAAA,IACnC,GAAG,OAAA,CAAQ,OAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACV,CAAA;AAED,EAAA,IAAI;AACH,IAAA,MAAM,SAAS,MAAM,WAAA,CAAY,GAAA,CAAI,SAAA,EAAW,cAAc,OAAO,CAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,IAAI,KAAA,EAAO;AACtB,MAAA,WAAA,CAAY,QAAA,CAAS,CAAA,kBAAA,EAAqB,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,MAAA;AAAA,EACR,SAAS,KAAA,EAAO;AACf,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,oBAAA,EAAuB,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAC1D,IAAA,MAAM,KAAA;AAAA,EACP;AACD","file":"chunk-VN2JKKAE.js","sourcesContent":["import { FlowRuntime } from '../runtime'\nimport type { WorkflowBlueprint } from '../types'\nimport { InMemoryEventLogger } from './event-logger'\n\n/**\n * A test helper that executes a workflow and automatically prints a detailed\n * execution trace to the console if the workflow fails.\n *\n * @example\n * // In your test file (e.g., my-workflow.test.ts)\n * it('should process data correctly', async () => {\n * const flow = createFlow('my-flow')\n * .node('a', async () => ({ output: 1 }))\n * .node('b', async ({ input }) => ({ output: input + 1 })) // Bug: returns { output: 3 }\n * .edge('a', 'b')\n *\n * const runtime = new FlowRuntime({})\n *\n * // If this test fails, a full, human-readable trace of the execution\n * // (inputs, outputs, context changes) is printed to the console.\n * const result = await runWithTrace(runtime, flow.toBlueprint())\n *\n * expect(result.context.b).toBe(2)\n * })\n *\n * @param runtime The original FlowRuntime instance (its options will be used).\n * @param blueprint The WorkflowBlueprint to execute.\n * @param initialState The initial state for the workflow run.\n * @param options Additional options for the run.\n * @returns The WorkflowResult if successful.\n */\nexport async function runWithTrace<TContext extends Record<string, any>>(\n\truntime: FlowRuntime<TContext, any>,\n\tblueprint: WorkflowBlueprint,\n\tinitialState: Partial<TContext> | string = {},\n\toptions: {\n\t\tfunctionRegistry?: Map<string, any>\n\t\tstrict?: boolean\n\t\tsignal?: AbortSignal\n\t} = {},\n) {\n\tconst eventLogger = new InMemoryEventLogger()\n\tconst testRuntime = new FlowRuntime({\n\t\t...runtime.options,\n\t\teventBus: eventLogger,\n\t})\n\n\ttry {\n\t\tconst result = await testRuntime.run(blueprint, initialState, options)\n\t\tif (process.env.DEBUG) {\n\t\t\teventLogger.printLog(`Successful Trace: ${blueprint.id}`)\n\t\t}\n\t\treturn result\n\t} catch (error) {\n\t\teventLogger.printLog(`Failing Test Trace: ${blueprint.id}`)\n\t\tthrow error\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { DIContainer } from './container.js';
2
- import { u as RuntimeDependencies, x as ILogger, A as ISerializer, w as IEvaluator, z as IEventBus, M as Middleware, n as NodeFunction, o as NodeClass, g as WorkflowBlueprint } from './types-ezHUBdpL.js';
2
+ import { u as RuntimeDependencies, x as ILogger, A as ISerializer, w as IEvaluator, z as IEventBus, M as Middleware, n as NodeFunction, o as NodeClass, g as WorkflowBlueprint } from './types-DWCZW68f.js';
3
3
  import './errors.js';
4
4
 
5
5
  interface ContainerOptions<TDependencies extends RuntimeDependencies = RuntimeDependencies> {
@@ -1,8 +1,8 @@
1
- export { createDefaultContainer } from './chunk-QNYXQKFW.js';
2
- import './chunk-33NO4PUJ.js';
1
+ export { createDefaultContainer } from './chunk-OZZP5YI6.js';
2
+ import './chunk-NDWVLU7J.js';
3
3
  import './chunk-HAZ26F3P.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-4PELJWF7.js';
7
7
  import './chunk-CYHZ2YVH.js';
8
8
  import './chunk-WWGFIYKW.js';
package/dist/context.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { s as ISyncContext, t as IAsyncContext } from './types-ezHUBdpL.js';
1
+ import { s as ISyncContext, t as IAsyncContext } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { w as IEvaluator } from './types-ezHUBdpL.js';
1
+ import { w as IEvaluator } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.js';
4
4
 
package/dist/flow.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as NodeFunction, o as NodeClass, h as NodeDefinition, j as EdgeDefinition, g as WorkflowBlueprint, U as UIGraph } from './types-ezHUBdpL.js';
1
+ import { n as NodeFunction, o as NodeClass, h as NodeDefinition, j as EdgeDefinition, g as WorkflowBlueprint, U as UIGraph } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.js';
4
4
 
@@ -35,6 +35,15 @@ declare class Flow<TContext extends Record<string, any> = Record<string, any>, T
35
35
  }): Flow<TContext & {
36
36
  [K in TOutputKey]: TWorkerOutput[];
37
37
  }, TDependencies>;
38
+ /**
39
+ * Creates a sleep node that pauses workflow execution for a specified duration.
40
+ * @param id A unique identifier for the sleep node.
41
+ * @param options Configuration for the sleep duration.
42
+ */
43
+ sleep(id: string, options: {
44
+ /** The duration to sleep in milliseconds. */
45
+ duration: number;
46
+ }): this;
38
47
  /**
39
48
  * Creates a wait node that pauses workflow execution for external input.
40
49
  * @param id A unique identifier for the wait node.
package/dist/flow.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Flow, createFlow } from './chunk-C4HYIJI3.js';
1
+ export { Flow, createFlow } from './chunk-7PBANEG3.js';
2
2
  import './chunk-LNK7LZER.js';
3
3
  //# sourceMappingURL=flow.js.map
4
4
  //# sourceMappingURL=flow.js.map
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { PropertyEvaluator, UnsafeEvaluator } from './evaluator.js';
7
7
  export { Flow, createFlow } from './flow.js';
8
8
  export { LinterIssue, LinterIssueCode, LinterResult, lintBlueprint } from './linter.js';
9
9
  export { ConsoleLogger, NullLogger } from './logger.js';
10
- export { B as BaseNode, C as ClassNodeExecutor, r as ContextImplementation, j as EdgeDefinition, e as ExecutionServices, E as ExecutionStrategy, c as FlowRuntime, y as FlowcraftEvent, F as FunctionNodeExecutor, G as GraphTraverser, t as IAsyncContext, w as IEvaluator, z as IEventBus, x as ILogger, I as IOrchestrator, f as IRuntime, A as ISerializer, s as ISyncContext, M as Middleware, o as NodeClass, k as NodeConfig, m as NodeContext, h as NodeDefinition, N as NodeExecutionResult, b as NodeExecutor, a as NodeExecutorConfig, d as NodeExecutorFactory, n as NodeFunction, p as NodeImplementation, q as NodeRegistry, l as NodeResult, R as ReadyNode, u as RuntimeDependencies, v as RuntimeOptions, U as UIGraph, g as WorkflowBlueprint, D as WorkflowError, J as WorkflowResult, W as WorkflowState, H as WorkflowStatus, i as isNodeClass } from './types-ezHUBdpL.js';
10
+ export { B as BaseNode, C as ClassNodeExecutor, r as ContextImplementation, j as EdgeDefinition, e as ExecutionServices, E as ExecutionStrategy, c as FlowRuntime, y as FlowcraftEvent, F as FunctionNodeExecutor, G as GraphTraverser, t as IAsyncContext, w as IEvaluator, z as IEventBus, x as ILogger, I as IOrchestrator, f as IRuntime, A as ISerializer, s as ISyncContext, M as Middleware, o as NodeClass, k as NodeConfig, m as NodeContext, h as NodeDefinition, N as NodeExecutionResult, b as NodeExecutor, a as NodeExecutorConfig, d as NodeExecutorFactory, n as NodeFunction, p as NodeImplementation, q as NodeRegistry, l as NodeResult, R as ReadyNode, u as RuntimeDependencies, v as RuntimeOptions, U as UIGraph, g as WorkflowBlueprint, D as WorkflowError, J as WorkflowResult, W as WorkflowState, H as WorkflowStatus, i as isNodeClass } from './types-DWCZW68f.js';
11
11
  export { AdapterOptions, BaseDistributedAdapter, ICoordinationStore, JobPayload } from './runtime/adapter.js';
12
12
  export { DefaultOrchestrator } from './runtime/orchestrator.js';
13
13
  export { executeBatch, processResults } from './runtime/orchestrators/utils.js';
package/dist/index.js CHANGED
@@ -1,12 +1,14 @@
1
1
  import './chunk-NVJ3ZO3P.js';
2
2
  import './chunk-NVLZFLYM.js';
3
- export { BaseDistributedAdapter } from './chunk-ZNL7ZXPR.js';
4
- export { FlowRuntime } from './chunk-HKX7WQLS.js';
3
+ export { BaseDistributedAdapter } from './chunk-J3HZD5ES.js';
4
+ export { FlowRuntime } from './chunk-CHG6O6JX.js';
5
+ import './chunk-DL7KVYZF.js';
6
+ import './chunk-LM4ACVHL.js';
5
7
  import './chunk-MCGK3FXQ.js';
6
- import './chunk-MKNZBKSR.js';
8
+ import './chunk-LJ4COM7S.js';
9
+ import './chunk-K6LPGUPR.js';
7
10
  export { GraphTraverser } from './chunk-G5BGBPFP.js';
8
- import './chunk-CD3Q4N6V.js';
9
- import './chunk-DL7KVYZF.js';
11
+ import './chunk-GVF7GQXQ.js';
10
12
  export { ClassNodeExecutor, FunctionNodeExecutor, NodeExecutor } from './chunk-ONH7PIJZ.js';
11
13
  export { lintBlueprint } from './chunk-EUJWJWFA.js';
12
14
  export { sanitizeBlueprint } from './chunk-DSYAC4WB.js';
@@ -14,18 +16,18 @@ import './chunk-55J6XMHW.js';
14
16
  import './chunk-BC4G7OM6.js';
15
17
  import './chunk-RM677CNU.js';
16
18
  export { analyzeBlueprint, checkForCycles, generateMermaid } from './chunk-233SESC2.js';
17
- export { createDefaultContainer } from './chunk-QNYXQKFW.js';
18
- export { DefaultOrchestrator } from './chunk-33NO4PUJ.js';
19
+ export { createDefaultContainer } from './chunk-OZZP5YI6.js';
20
+ export { DefaultOrchestrator } from './chunk-NDWVLU7J.js';
19
21
  export { executeBatch, processResults } from './chunk-HAZ26F3P.js';
20
- import './chunk-FRKO3WX4.js';
21
- export { WorkflowState } from './chunk-CD4FUZOJ.js';
22
+ import './chunk-KXXEA5VE.js';
23
+ export { WorkflowState } from './chunk-OO3FF3DF.js';
22
24
  export { ConsoleLogger, NullLogger } from './chunk-4PELJWF7.js';
23
25
  export { JsonSerializer } from './chunk-CYHZ2YVH.js';
24
26
  export { DIContainer, ServiceTokens } from './chunk-WWGFIYKW.js';
25
27
  export { AsyncContextView, Context } from './chunk-R3HQXIEL.js';
26
28
  export { FlowcraftError } from './chunk-BCRWXTWX.js';
27
29
  export { PropertyEvaluator, UnsafeEvaluator } from './chunk-PH2IYZHV.js';
28
- export { Flow, createFlow } from './chunk-C4HYIJI3.js';
30
+ export { Flow, createFlow } from './chunk-7PBANEG3.js';
29
31
  export { BaseNode, isNodeClass } from './chunk-LNK7LZER.js';
30
32
  //# sourceMappingURL=index.js.map
31
33
  //# sourceMappingURL=index.js.map
package/dist/linter.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { g as WorkflowBlueprint, n as NodeFunction, o as NodeClass } from './types-ezHUBdpL.js';
1
+ import { 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
 
package/dist/logger.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { x as ILogger } from './types-ezHUBdpL.js';
1
+ import { x as ILogger } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.js';
4
4
 
package/dist/node.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { B as BaseNode, i as isNodeClass } from './types-ezHUBdpL.js';
1
+ export { B as BaseNode, i as isNodeClass } from './types-DWCZW68f.js';
2
2
  import './errors.js';
3
3
  import './container.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
- 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-MKNZBKSR.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