flowcraft 2.7.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/persistent-event-bus.d.ts +1 -1
- package/dist/adapters/persistent-event-bus.js +1 -1
- package/dist/analysis.d.ts +1 -1
- package/dist/{chunk-ASJYJ3NF.js → chunk-2TSADFQX.js} +2 -2
- package/dist/{chunk-ASJYJ3NF.js.map → chunk-2TSADFQX.js.map} +1 -1
- package/dist/{chunk-4TVWI6Y6.js → chunk-7EMUOH77.js} +4 -4
- package/dist/{chunk-4TVWI6Y6.js.map → chunk-7EMUOH77.js.map} +1 -1
- package/dist/{chunk-LU5SLE3P.js → chunk-7M6FHFHP.js} +3 -3
- package/dist/{chunk-LU5SLE3P.js.map → chunk-7M6FHFHP.js.map} +1 -1
- package/dist/{chunk-K6ID3GRG.js → chunk-BCMR7Y4U.js} +4 -4
- package/dist/{chunk-K6ID3GRG.js.map → chunk-BCMR7Y4U.js.map} +1 -1
- package/dist/{chunk-VDVUF25G.js → chunk-BEHVGFIM.js} +32 -30
- package/dist/chunk-BEHVGFIM.js.map +1 -0
- package/dist/{chunk-TTOS7NW3.js → chunk-DV2CXHOY.js} +3 -3
- package/dist/{chunk-TTOS7NW3.js.map → chunk-DV2CXHOY.js.map} +1 -1
- package/dist/{chunk-LWN7HOD3.js → chunk-L3MX5MTA.js} +3 -3
- package/dist/{chunk-LWN7HOD3.js.map → chunk-L3MX5MTA.js.map} +1 -1
- package/dist/{chunk-VSKDQVCG.js → chunk-L46TQXCV.js} +8 -4
- package/dist/chunk-L46TQXCV.js.map +1 -0
- package/dist/{chunk-W4IAXDO4.js → chunk-U7DKCIWT.js} +12 -16
- package/dist/chunk-U7DKCIWT.js.map +1 -0
- package/dist/{chunk-RF5EYEO6.js → chunk-XZZWIJ4G.js} +3 -3
- package/dist/{chunk-RF5EYEO6.js.map → chunk-XZZWIJ4G.js.map} +1 -1
- package/dist/container-factory.d.ts +1 -1
- package/dist/container-factory.js +4 -4
- package/dist/context.d.ts +1 -1
- package/dist/error-mapper.d.ts +1 -1
- package/dist/evaluator.d.ts +1 -1
- package/dist/flow.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +13 -13
- package/dist/linter.d.ts +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/nodes/batch-gather.d.ts +1 -1
- package/dist/nodes/batch-scatter.d.ts +1 -1
- package/dist/nodes/sleep.d.ts +1 -1
- package/dist/nodes/subflow.d.ts +1 -1
- package/dist/nodes/subflow.js +3 -3
- package/dist/nodes/wait.d.ts +1 -1
- package/dist/nodes/webhook.d.ts +1 -1
- package/dist/runtime/adapter.d.ts +1 -1
- package/dist/runtime/adapter.js +10 -10
- package/dist/runtime/execution-context.d.ts +1 -1
- package/dist/runtime/execution-context.js +2 -2
- package/dist/runtime/executors.d.ts +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +10 -10
- package/dist/runtime/node-executor-factory.d.ts +1 -1
- package/dist/runtime/orchestrator.d.ts +1 -1
- package/dist/runtime/orchestrator.js +3 -3
- package/dist/runtime/orchestrators/replay.d.ts +1 -1
- package/dist/runtime/orchestrators/step-by-step.d.ts +1 -1
- package/dist/runtime/orchestrators/utils.d.ts +1 -1
- package/dist/runtime/runtime.d.ts +1 -1
- package/dist/runtime/runtime.js +9 -9
- package/dist/runtime/scheduler.d.ts +1 -1
- package/dist/runtime/state.d.ts +1 -1
- package/dist/runtime/state.js +1 -1
- package/dist/runtime/traverser.d.ts +1 -1
- package/dist/runtime/types.d.ts +1 -1
- package/dist/runtime/workflow-logic-handler.d.ts +1 -1
- package/dist/sanitizer.d.ts +1 -1
- package/dist/serializer.d.ts +1 -1
- package/dist/testing/event-logger.d.ts +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +14 -14
- package/dist/testing/run-with-trace.d.ts +1 -1
- package/dist/testing/run-with-trace.js +11 -11
- package/dist/testing/stepper.d.ts +1 -1
- package/dist/testing/stepper.js +3 -3
- package/dist/{types-D-dVKe4_.d.ts → types-CKhffqyb.d.ts} +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +2 -2
- package/dist/chunk-VDVUF25G.js.map +0 -1
- package/dist/chunk-VSKDQVCG.js.map +0 -1
- package/dist/chunk-W4IAXDO4.js.map +0 -1
package/dist/adapters/index.d.ts
CHANGED
package/dist/adapters/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import '../chunk-3Y5O5EGB.js';
|
|
2
|
-
export { InMemoryEventStore, PersistentEventBusAdapter } from '../chunk-
|
|
2
|
+
export { InMemoryEventStore, PersistentEventBusAdapter } from '../chunk-2TSADFQX.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { InMemoryEventStore, PersistentEventBusAdapter } from '../chunk-
|
|
1
|
+
export { InMemoryEventStore, PersistentEventBusAdapter } from '../chunk-2TSADFQX.js';
|
|
2
2
|
//# sourceMappingURL=persistent-event-bus.js.map
|
|
3
3
|
//# sourceMappingURL=persistent-event-bus.js.map
|
package/dist/analysis.d.ts
CHANGED
|
@@ -42,5 +42,5 @@ var InMemoryEventStore = class {
|
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
export { InMemoryEventStore, PersistentEventBusAdapter };
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-2TSADFQX.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-2TSADFQX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/persistent-event-bus.ts"],"names":[],"mappings":";AA6CO,IAAM,4BAAN,MAAqD;AAAA,EAC3D,YAAoB,KAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/adapters/persistent-event-bus.ts"],"names":[],"mappings":";AA6CO,IAAM,4BAAN,MAAqD;AAAA,EAC3D,YAAoB,KAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzC,MAAM,KAAK,KAAA,EAAsC;AAChD,IAAA,IAAI,WAAA,GAAc,SAAA;AAClB,IAAA,IAAI,aAAA,IAAiB,MAAM,OAAA,EAAS;AACnC,MAAA,WAAA,GAAc,MAAM,OAAA,CAAQ,WAAA;AAAA,IAC7B;AACA,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,WAAW,CAAA;AAAA,EAC1C;AACD;AAMO,IAAM,qBAAN,MAAgD;AAAA,EAC9C,MAAA,uBAAa,GAAA,EAA8B;AAAA,EAEnD,MAAM,KAAA,CAAM,KAAA,EAAuB,WAAA,EAAoC;AACtE,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,EAAG,KAAK,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,SAAS,WAAA,EAAgD;AAC9D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,KAAK,EAAC;AAAA,EACzC;AAAA,EAEA,MAAM,iBAAiB,YAAA,EAAgE;AACtF,IAAA,MAAM,MAAA,uBAAa,GAAA,EAA8B;AACjD,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC9B,MAAA,MAAA,CAAO,IAAI,EAAA,EAAI,MAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACb,IAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,EACnB;AACD","file":"chunk-2TSADFQX.js","sourcesContent":["import type { FlowcraftEvent, IEventBus } from '../types'\n\n/**\n * Interface for a persistent storage mechanism for events.\n * Implementations can store events in databases, log streams, files, etc.\n */\nexport interface IEventStore {\n\t/**\n\t * Store an event persistently.\n\t * @param event The event to store\n\t * @param executionId The execution ID for grouping events\n\t */\n\tstore(event: FlowcraftEvent, executionId: string): Promise<void>\n\n\t/**\n\t * Retrieve all events for a specific execution.\n\t * @param executionId The execution ID\n\t * @returns Array of events in chronological order\n\t */\n\tretrieve(executionId: string): Promise<FlowcraftEvent[]>\n\n\t/**\n\t * Retrieve events for multiple executions.\n\t * @param executionIds Array of execution IDs\n\t * @returns Map of execution ID to array of events\n\t */\n\tretrieveMultiple(executionIds: string[]): Promise<Map<string, FlowcraftEvent[]>>\n}\n\n/**\n * A pluggable event bus adapter that persists all workflow events\n * to a configurable storage backend, enabling time-travel debugging and replay.\n *\n * @example\n * ```typescript\n * // Using a database-backed store\n * const eventStore = new DatabaseEventStore(dbConnection)\n * const eventBus = new PersistentEventBusAdapter(eventStore)\n * const runtime = new FlowRuntime({ eventBus })\n *\n * // Later, replay the execution\n * const events = await eventStore.retrieve(executionId)\n * const finalState = await runtime.replay(blueprint, events)\n * ```\n */\nexport class PersistentEventBusAdapter implements IEventBus {\n\tconstructor(private store: IEventStore) {}\n\n\t/**\n\t * Emit an event by storing it persistently.\n\t * Also emits to console for debugging (can be made configurable).\n\t */\n\tasync emit(event: FlowcraftEvent): Promise<void> {\n\t\tlet executionId = 'unknown'\n\t\tif ('executionId' in event.payload) {\n\t\t\texecutionId = event.payload.executionId as string\n\t\t}\n\t\tawait this.store.store(event, executionId)\n\t}\n}\n\n/**\n * Simple in-memory event store for testing and development.\n * Not suitable for production use.\n */\nexport class InMemoryEventStore implements IEventStore {\n\tprivate events = new Map<string, FlowcraftEvent[]>()\n\n\tasync store(event: FlowcraftEvent, executionId: string): Promise<void> {\n\t\tif (!this.events.has(executionId)) {\n\t\t\tthis.events.set(executionId, [])\n\t\t}\n\t\tthis.events.get(executionId)?.push(event)\n\t}\n\n\tasync retrieve(executionId: string): Promise<FlowcraftEvent[]> {\n\t\treturn this.events.get(executionId) || []\n\t}\n\n\tasync retrieveMultiple(executionIds: string[]): Promise<Map<string, FlowcraftEvent[]>> {\n\t\tconst result = new Map<string, FlowcraftEvent[]>()\n\t\tfor (const id of executionIds) {\n\t\t\tresult.set(id, await this.retrieve(id))\n\t\t}\n\t\treturn result\n\t}\n\n\t/**\n\t * Clear all stored events (useful for testing).\n\t */\n\tclear(): void {\n\t\tthis.events.clear()\n\t}\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GraphTraverser } from './chunk-H4JTZYIT.js';
|
|
2
2
|
import { analyzeBlueprint } from './chunk-ZLW4QOTS.js';
|
|
3
|
-
import { ExecutionContext } from './chunk-
|
|
4
|
-
import { WorkflowState } from './chunk-
|
|
3
|
+
import { ExecutionContext } from './chunk-L3MX5MTA.js';
|
|
4
|
+
import { WorkflowState } from './chunk-L46TQXCV.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-
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-7EMUOH77.js.map
|
|
90
|
+
//# sourceMappingURL=chunk-7EMUOH77.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nodes/subflow.ts"],"names":["subAnalysis"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/nodes/subflow.ts"],"names":["subAnalysis"],"mappings":"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","file":"chunk-7EMUOH77.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\tawait workflowState.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 }\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 { DefaultOrchestrator } from './chunk-
|
|
1
|
+
import { DefaultOrchestrator } from './chunk-DV2CXHOY.js';
|
|
2
2
|
import { NullLogger } from './chunk-4PELJWF7.js';
|
|
3
3
|
import { JsonSerializer } from './chunk-6RKHCJUU.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-
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
24
|
+
//# sourceMappingURL=chunk-7M6FHFHP.js.map
|
|
25
|
+
//# sourceMappingURL=chunk-7M6FHFHP.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-
|
|
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-7M6FHFHP.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,7 +1,7 @@
|
|
|
1
1
|
import { StepByStepOrchestrator } from './chunk-RAZWRNAJ.js';
|
|
2
2
|
import { GraphTraverser } from './chunk-H4JTZYIT.js';
|
|
3
|
-
import { ExecutionContext } from './chunk-
|
|
4
|
-
import { WorkflowState } from './chunk-
|
|
3
|
+
import { ExecutionContext } from './chunk-L3MX5MTA.js';
|
|
4
|
+
import { WorkflowState } from './chunk-L46TQXCV.js';
|
|
5
5
|
|
|
6
6
|
// src/testing/stepper.ts
|
|
7
7
|
async function createStepper(runtime, blueprint, functionRegistry, initialState = {}) {
|
|
@@ -72,5 +72,5 @@ async function createStepper(runtime, blueprint, functionRegistry, initialState
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
export { createStepper };
|
|
75
|
-
//# sourceMappingURL=chunk-
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
75
|
+
//# sourceMappingURL=chunk-BCMR7Y4U.js.map
|
|
76
|
+
//# sourceMappingURL=chunk-BCMR7Y4U.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/testing/stepper.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/testing/stepper.ts"],"names":[],"mappings":"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","file":"chunk-BCMR7Y4U.js","sourcesContent":["import type { FlowRuntime } from '../runtime'\nimport { ExecutionContext } from '../runtime/execution-context'\nimport { StepByStepOrchestrator } from '../runtime/orchestrators/step-by-step'\nimport { WorkflowState } from '../runtime/state'\nimport { GraphTraverser } from '../runtime/traverser'\nimport type { NodeClass, NodeFunction, WorkflowBlueprint, WorkflowResult } from '../types'\n\n/**\n * Represents the controlled, step-by-step execution of a workflow.\n * Returned by the `createStepper` utility.\n */\nexport interface IWorkflowStepper<TContext extends Record<string, any>> {\n\t/** The current state of the workflow. Can be inspected after each step. */\n\treadonly state: WorkflowState<TContext>\n\n\t/** The graph traverser instance. Can be used to inspect the frontier or completed nodes. */\n\treadonly traverser: GraphTraverser\n\n\t/**\n\t * Executes the next \"turn\" or batch of ready nodes in the workflow.\n\t * @param options Optional configuration for this specific step, like a cancellation signal.\n\t * @returns A `WorkflowResult` representing the state after the step, or `null` if the workflow has already completed.\n\t */\n\tnext(options?: { signal?: AbortSignal; concurrency?: number }): Promise<WorkflowResult<TContext> | null>\n\n\t/**\n\t * Reverts the workflow to its previous state.\n\t * @returns The `WorkflowResult` of the previous state, or `null` if there is no history to revert to.\n\t */\n\tprev(): Promise<WorkflowResult<TContext> | null>\n\n\t/**\n\t * Resets the stepper to its initial state, clearing all progress and history.\n\t */\n\treset(): void\n\n\t/**\n\t * A convenience method to check if the workflow has any more steps to run.\n\t * @returns `true` if the workflow is complete or stalled, `false` otherwise.\n\t */\n\tisDone(): boolean\n}\n\n/**\n * A test utility that creates a stepper to execute a workflow one \"turn\" at a time.\n * This is invaluable for debugging and writing fine-grained tests where you need to\n * assert the state of the workflow after each logical step.\n *\n * @example\n * // In your test file\n * it('should correctly execute step-by-step', async () => {\n * const runtime = new FlowRuntime({ ... });\n * const flow = createFlow('test')\n * .node('a', async () => ({ output: 10 }))\n * .node('b', async ({ input }) => ({ output: input * 2 }))\n * .edge('a', 'b');\n *\n * const stepper = await createStepper(runtime, flow.toBlueprint(), flow.getFunctionRegistry());\n *\n * // First step (executes node 'a')\n * const result1 = await stepper.next();\n * expect(stepper.isDone()).toBe(false);\n * expect(result1.status).toBe('stalled');\n * expect(result1.context._outputs.a).toBe(10);\n *\n * // Second step (executes node 'b')\n * const result2 = await stepper.next();\n * expect(stepper.isDone()).toBe(true);\n * expect(result2.status).toBe('completed');\n * expect(result2.context._outputs.b).toBe(20);\n *\n * // Final step (no more work)\n * const result3 = await stepper.next();\n * expect(result3).toBeNull();\n * });\n *\n * @param runtime The `FlowRuntime` instance, used for its configuration.\n * @param blueprint The `WorkflowBlueprint` to execute.\n * @param functionRegistry The function registry from createFlow, containing the node implementations.\n * @param initialState The initial state for the workflow run.\n * @returns A Promise that resolves to an `IWorkflowStepper` instance.\n */\nexport async function createStepper<TContext extends Record<string, any>, TDependencies extends Record<string, any>>(\n\truntime: FlowRuntime<TContext, TDependencies>,\n\tblueprint: WorkflowBlueprint,\n\tfunctionRegistry: Map<string, NodeFunction | NodeClass>,\n\tinitialState: Partial<TContext> = {},\n): Promise<IWorkflowStepper<TContext>> {\n\tconst _initialBlueprint = structuredClone(blueprint)\n\tconst _initialState = structuredClone(initialState)\n\n\tlet state: WorkflowState<TContext>\n\tlet traverser: GraphTraverser\n\tconst history: string[] = []\n\n\tconst orchestrator = new StepByStepOrchestrator()\n\tconst executionId = globalThis.crypto?.randomUUID()\n\tconst nodeRegistry = new Map([...runtime.registry, ...functionRegistry])\n\n\tconst initialize = () => {\n\t\tstate = new WorkflowState<TContext>(_initialState)\n\t\ttraverser = new GraphTraverser(_initialBlueprint)\n\t\thistory.length = 0\n\t}\n\n\tinitialize()\n\n\tconst stepper: IWorkflowStepper<TContext> = {\n\t\tget state() {\n\t\t\treturn state\n\t\t},\n\t\tget traverser() {\n\t\t\treturn traverser\n\t\t},\n\t\tisDone() {\n\t\t\treturn !traverser.hasMoreWork() && !state.isAwaiting()\n\t\t},\n\t\treset() {\n\t\t\tinitialize()\n\t\t},\n\t\tasync prev() {\n\t\t\tconst previousStateJson = history.pop()\n\t\t\tif (!previousStateJson) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst previousStateData = runtime.serializer.deserialize(previousStateJson) as Partial<TContext>\n\n\t\t\tstate = new WorkflowState(previousStateData)\n\t\t\ttraverser = GraphTraverser.fromState(_initialBlueprint, state)\n\n\t\t\treturn state.toResult(runtime.serializer, undefined)\n\t\t},\n\t\tasync next(options: { signal?: AbortSignal; concurrency?: number } = {}) {\n\t\t\tif (stepper.isDone()) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst serializedContext = (await state.toResult(runtime.serializer, undefined)).serializedContext\n\t\t\thistory.push(serializedContext)\n\n\t\t\tconst executionContext = new ExecutionContext(\n\t\t\t\t_initialBlueprint,\n\t\t\t\tstate,\n\t\t\t\tnodeRegistry,\n\t\t\t\texecutionId,\n\t\t\t\truntime,\n\t\t\t\t{\n\t\t\t\t\tlogger: runtime.logger,\n\t\t\t\t\teventBus: runtime.eventBus,\n\t\t\t\t\tserializer: runtime.serializer,\n\t\t\t\t\tevaluator: runtime.evaluator,\n\t\t\t\t\tmiddleware: runtime.middleware,\n\t\t\t\t\tdependencies: runtime.dependencies,\n\t\t\t\t},\n\t\t\t\toptions.signal,\n\t\t\t\toptions.concurrency,\n\t\t\t)\n\t\t\treturn orchestrator.run(executionContext, traverser)\n\t\t},\n\t}\n\n\treturn stepper\n}\n"]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { WorkflowLogicHandler } from './chunk-HXSK5P2X.js';
|
|
2
2
|
import { NodeExecutorFactory } from './chunk-DL7KVYZF.js';
|
|
3
3
|
import { WorkflowScheduler } from './chunk-LM4ACVHL.js';
|
|
4
|
+
import { BatchGatherNode } from './chunk-BC4G7OM6.js';
|
|
5
|
+
import { BatchScatterNode } from './chunk-RM677CNU.js';
|
|
4
6
|
import { SleepNode } from './chunk-HNHM3FDK.js';
|
|
5
|
-
import { SubflowNode } from './chunk-
|
|
7
|
+
import { SubflowNode } from './chunk-7EMUOH77.js';
|
|
8
|
+
import { GraphTraverser } from './chunk-H4JTZYIT.js';
|
|
6
9
|
import { WaitNode } from './chunk-IDTYHLDQ.js';
|
|
7
10
|
import { WebhookNode } from './chunk-I53JB2KW.js';
|
|
8
|
-
import { GraphTraverser } from './chunk-H4JTZYIT.js';
|
|
9
|
-
import { BatchGatherNode } from './chunk-BC4G7OM6.js';
|
|
10
|
-
import { BatchScatterNode } from './chunk-RM677CNU.js';
|
|
11
11
|
import { sanitizeBlueprint } from './chunk-TKSSRS5U.js';
|
|
12
12
|
import { analyzeBlueprint } from './chunk-ZLW4QOTS.js';
|
|
13
|
-
import { DefaultOrchestrator } from './chunk-
|
|
14
|
-
import { ExecutionContext } from './chunk-
|
|
15
|
-
import { WorkflowState } from './chunk-
|
|
13
|
+
import { DefaultOrchestrator } from './chunk-DV2CXHOY.js';
|
|
14
|
+
import { ExecutionContext } from './chunk-L3MX5MTA.js';
|
|
15
|
+
import { WorkflowState } from './chunk-L46TQXCV.js';
|
|
16
16
|
import { NullLogger } from './chunk-4PELJWF7.js';
|
|
17
17
|
import { JsonSerializer } from './chunk-6RKHCJUU.js';
|
|
18
18
|
import { DIContainer, ServiceTokens } from './chunk-WWGFIYKW.js';
|
|
@@ -40,6 +40,7 @@ var FlowRuntime = class {
|
|
|
40
40
|
return this.blueprints[id];
|
|
41
41
|
}
|
|
42
42
|
constructor(containerOrOptions, legacyOptions) {
|
|
43
|
+
let userRegistry;
|
|
43
44
|
if (containerOrOptions instanceof DIContainer) {
|
|
44
45
|
this.container = containerOrOptions;
|
|
45
46
|
this.logger = this.container.resolve(ServiceTokens.Logger);
|
|
@@ -48,7 +49,7 @@ var FlowRuntime = class {
|
|
|
48
49
|
this.eventBus = this.container.resolve(ServiceTokens.EventBus) || { emit: async () => {
|
|
49
50
|
} };
|
|
50
51
|
this.middleware = this.container.resolve(ServiceTokens.Middleware) || [];
|
|
51
|
-
|
|
52
|
+
userRegistry = this.container.resolve(ServiceTokens.NodeRegistry);
|
|
52
53
|
this.blueprints = this.container.resolve(ServiceTokens.BlueprintRegistry);
|
|
53
54
|
this.dependencies = this.container.resolve(ServiceTokens.Dependencies);
|
|
54
55
|
this.options = legacyOptions || {};
|
|
@@ -62,32 +63,33 @@ var FlowRuntime = class {
|
|
|
62
63
|
this.eventBus = options.eventBus || { emit: async () => {
|
|
63
64
|
} };
|
|
64
65
|
this.middleware = options.middleware || [];
|
|
65
|
-
|
|
66
|
-
const condition = context.params.condition;
|
|
67
|
-
const contextData = await context.context.toJSON();
|
|
68
|
-
const result = this.evaluator.evaluate(condition, contextData);
|
|
69
|
-
if (result) {
|
|
70
|
-
return { action: "continue" };
|
|
71
|
-
} else {
|
|
72
|
-
return { action: "break", output: null };
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
const builtInNodes = {
|
|
76
|
-
wait: WaitNode,
|
|
77
|
-
sleep: SleepNode,
|
|
78
|
-
webhook: WebhookNode,
|
|
79
|
-
subflow: SubflowNode,
|
|
80
|
-
"batch-scatter": BatchScatterNode,
|
|
81
|
-
"batch-gather": BatchGatherNode,
|
|
82
|
-
"loop-controller": loopControllerFunction
|
|
83
|
-
};
|
|
84
|
-
this.registry = new Map(Object.entries({ ...builtInNodes, ...options.registry || {} }));
|
|
66
|
+
userRegistry = options.registry || {};
|
|
85
67
|
this.blueprints = options.blueprints || {};
|
|
86
68
|
this.scheduler = new WorkflowScheduler(this);
|
|
87
69
|
this.dependencies = options.dependencies || {};
|
|
88
70
|
this.options = options;
|
|
89
71
|
this.container = null;
|
|
90
72
|
}
|
|
73
|
+
const loopControllerFunction = async (context) => {
|
|
74
|
+
const condition = context.params.condition;
|
|
75
|
+
const contextData = await context.context.toJSON();
|
|
76
|
+
const result = this.evaluator.evaluate(condition, contextData);
|
|
77
|
+
if (result) {
|
|
78
|
+
return { action: "continue" };
|
|
79
|
+
} else {
|
|
80
|
+
return { action: "break", output: null };
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const builtInNodes = {
|
|
84
|
+
wait: WaitNode,
|
|
85
|
+
sleep: SleepNode,
|
|
86
|
+
webhook: WebhookNode,
|
|
87
|
+
subflow: SubflowNode,
|
|
88
|
+
"batch-scatter": BatchScatterNode,
|
|
89
|
+
"batch-gather": BatchGatherNode,
|
|
90
|
+
"loop-controller": loopControllerFunction
|
|
91
|
+
};
|
|
92
|
+
this.registry = new Map(Object.entries({ ...builtInNodes, ...userRegistry }));
|
|
91
93
|
this.orchestrator = this.container?.has(ServiceTokens.Orchestrator) ? this.container.resolve(ServiceTokens.Orchestrator) : new DefaultOrchestrator();
|
|
92
94
|
this.analysisCache = /* @__PURE__ */ new WeakMap();
|
|
93
95
|
this.logicHandler = new WorkflowLogicHandler(this.evaluator, this.eventBus);
|
|
@@ -526,5 +528,5 @@ var FlowRuntime = class {
|
|
|
526
528
|
};
|
|
527
529
|
|
|
528
530
|
export { FlowRuntime };
|
|
529
|
-
//# sourceMappingURL=chunk-
|
|
530
|
-
//# sourceMappingURL=chunk-
|
|
531
|
+
//# sourceMappingURL=chunk-BEHVGFIM.js.map
|
|
532
|
+
//# sourceMappingURL=chunk-BEHVGFIM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/runtime.ts"],"names":[],"mappings":"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","file":"chunk-BEHVGFIM.js","sourcesContent":["import type { BlueprintAnalysis } from '../analysis'\nimport { analyzeBlueprint } from '../analysis'\nimport { DIContainer, ServiceTokens } from '../container'\nimport { FlowcraftError } from '../errors'\nimport { PropertyEvaluator } from '../evaluator'\nimport { NullLogger } from '../logger'\nimport { BatchGatherNode } from '../nodes/batch-gather'\nimport { BatchScatterNode } from '../nodes/batch-scatter'\nimport { SleepNode } from '../nodes/sleep'\nimport { SubflowNode } from '../nodes/subflow'\nimport { WaitNode } from '../nodes/wait'\nimport { WebhookNode } from '../nodes/webhook'\nimport { sanitizeBlueprint } from '../sanitizer'\nimport { JsonSerializer } from '../serializer'\nimport type {\n\tContextImplementation,\n\tEdgeDefinition,\n\tFlowcraftEvent,\n\tIEvaluator,\n\tIEventBus,\n\tILogger,\n\tISerializer,\n\tMiddleware,\n\tNodeClass,\n\tNodeDefinition,\n\tNodeFunction,\n\tNodeResult,\n\tRuntimeOptions,\n\tWorkflowBlueprint,\n\tWorkflowError,\n\tWorkflowResult,\n} from '../types'\nimport { ExecutionContext } from './execution-context'\nimport { NodeExecutorFactory } from './node-executor-factory'\nimport { DefaultOrchestrator } from './orchestrator'\nimport { WorkflowScheduler } from './scheduler'\nimport { WorkflowState } from './state'\nimport { GraphTraverser } from './traverser'\nimport type { IOrchestrator, IRuntime } from './types'\nimport { WorkflowLogicHandler } from './workflow-logic-handler'\n\nexport class FlowRuntime<TContext extends Record<string, any>, TDependencies extends Record<string, any>>\n\timplements IRuntime<TContext, TDependencies>\n{\n\tprivate container: DIContainer\n\tpublic registry: Map<string, NodeFunction | NodeClass>\n\tprivate blueprints: Record<string, WorkflowBlueprint>\n\tpublic dependencies: TDependencies\n\tpublic logger: ILogger\n\tpublic eventBus: IEventBus\n\tpublic serializer: ISerializer\n\tpublic middleware: Middleware[]\n\tpublic evaluator: IEvaluator\n\tprivate analysisCache: WeakMap<WorkflowBlueprint, BlueprintAnalysis>\n\tpublic orchestrator: IOrchestrator\n\tpublic options: RuntimeOptions<TDependencies>\n\tprivate readonly logicHandler: WorkflowLogicHandler\n\tprivate readonly executorFactory: NodeExecutorFactory\n\tpublic scheduler: WorkflowScheduler\n\n\tgetBlueprint(id: string): WorkflowBlueprint | undefined {\n\t\treturn this.blueprints[id]\n\t}\n\n\tconstructor(container: DIContainer, options?: RuntimeOptions<TDependencies>)\n\tconstructor(options: RuntimeOptions<TDependencies>)\n\tconstructor(\n\t\tcontainerOrOptions: DIContainer | RuntimeOptions<TDependencies>,\n\t\tlegacyOptions?: RuntimeOptions<TDependencies>,\n\t) {\n\t\tlet userRegistry: any\n\n\t\tif (containerOrOptions instanceof DIContainer) {\n\t\t\tthis.container = containerOrOptions\n\t\t\tthis.logger = this.container.resolve<ILogger>(ServiceTokens.Logger)\n\t\t\tthis.serializer = this.container.resolve<ISerializer>(ServiceTokens.Serializer)\n\t\t\tthis.evaluator = this.container.resolve<IEvaluator>(ServiceTokens.Evaluator)\n\t\t\tthis.eventBus = this.container.resolve<IEventBus>(ServiceTokens.EventBus) || { emit: async () => {} }\n\t\t\tthis.middleware = this.container.resolve<Middleware[]>(ServiceTokens.Middleware) || []\n\t\t\tuserRegistry = this.container.resolve(ServiceTokens.NodeRegistry)\n\t\t\tthis.blueprints = this.container.resolve<Record<string, WorkflowBlueprint>>(ServiceTokens.BlueprintRegistry)\n\t\t\tthis.dependencies = this.container.resolve<TDependencies>(ServiceTokens.Dependencies)\n\t\t\tthis.options = legacyOptions || ({} as RuntimeOptions<TDependencies>)\n\t\t\tthis.orchestrator = this.container.resolve<IOrchestrator>(ServiceTokens.Orchestrator)\n\t\t\tthis.scheduler = new WorkflowScheduler(this)\n\t\t} else {\n\t\t\tconst options = containerOrOptions\n\t\t\tthis.logger = options.logger || new NullLogger()\n\t\t\tthis.serializer = options.serializer || new JsonSerializer()\n\t\t\tthis.evaluator = options.evaluator || new PropertyEvaluator()\n\t\t\tthis.eventBus = options.eventBus || { emit: async () => {} }\n\t\t\tthis.middleware = options.middleware || []\n\t\t\tuserRegistry = options.registry || {}\n\t\t\tthis.blueprints = options.blueprints || {}\n\t\t\tthis.scheduler = new WorkflowScheduler(this)\n\t\t\tthis.dependencies = options.dependencies || ({} as TDependencies)\n\t\t\tthis.options = options\n\t\t\tthis.container = null as any\n\t\t}\n\n\t\tconst loopControllerFunction: NodeFunction = async (context) => {\n\t\t\tconst condition = context.params.condition\n\t\t\tconst contextData = await context.context.toJSON()\n\t\t\tconst result = this.evaluator.evaluate(condition, contextData)\n\t\t\tif (result) {\n\t\t\t\treturn { action: 'continue' }\n\t\t\t} else {\n\t\t\t\treturn { action: 'break', output: null }\n\t\t\t}\n\t\t}\n\t\tconst builtInNodes = {\n\t\t\twait: WaitNode,\n\t\t\tsleep: SleepNode,\n\t\t\twebhook: WebhookNode,\n\t\t\tsubflow: SubflowNode,\n\t\t\t'batch-scatter': BatchScatterNode,\n\t\t\t'batch-gather': BatchGatherNode,\n\t\t\t'loop-controller': loopControllerFunction,\n\t\t}\n\t\tthis.registry = new Map(Object.entries({ ...builtInNodes, ...userRegistry }))\n\t\tthis.orchestrator = this.container?.has(ServiceTokens.Orchestrator)\n\t\t\t? this.container.resolve<IOrchestrator>(ServiceTokens.Orchestrator)\n\t\t\t: new DefaultOrchestrator()\n\t\tthis.analysisCache = new WeakMap()\n\t\tthis.logicHandler = new WorkflowLogicHandler(this.evaluator, this.eventBus)\n\t\tthis.executorFactory = new NodeExecutorFactory(this.eventBus)\n\t}\n\n\tprivate _setupExecutionContext(\n\t\tblueprint: WorkflowBlueprint,\n\t\tinitialState: Partial<TContext> | string,\n\t\toptions?: {\n\t\t\tfunctionRegistry?: Map<string, any>\n\t\t\tstrict?: boolean\n\t\t\tsignal?: AbortSignal\n\t\t\tconcurrency?: number\n\t\t},\n\t): ExecutionContext<TContext, TDependencies> {\n\t\tconst executionId = globalThis.crypto?.randomUUID()\n\t\tconst contextData =\n\t\t\ttypeof initialState === 'string' ? (this.serializer.deserialize(initialState) as Partial<TContext>) : initialState\n\t\tblueprint = sanitizeBlueprint(blueprint)\n\t\tconst state = new WorkflowState<TContext>(contextData)\n\t\tconst nodeRegistry = this._createExecutionRegistry(options?.functionRegistry)\n\t\treturn new ExecutionContext(\n\t\t\tblueprint,\n\t\t\tstate,\n\t\t\tnodeRegistry,\n\t\t\texecutionId,\n\t\t\tthis,\n\t\t\t{\n\t\t\t\tlogger: this.logger,\n\t\t\t\teventBus: this.eventBus,\n\t\t\t\tserializer: this.serializer,\n\t\t\t\tevaluator: this.evaluator,\n\t\t\t\tmiddleware: this.middleware,\n\t\t\t\tdependencies: this.dependencies,\n\t\t\t},\n\t\t\toptions?.signal,\n\t\t\toptions?.concurrency,\n\t\t)\n\t}\n\n\tasync run(\n\t\tblueprint: WorkflowBlueprint,\n\t\tinitialState: Partial<TContext> | string = {},\n\t\toptions?: {\n\t\t\tfunctionRegistry?: Map<string, any>\n\t\t\tstrict?: boolean\n\t\t\tsignal?: AbortSignal\n\t\t\tconcurrency?: number\n\t\t},\n\t): Promise<WorkflowResult<TContext>> {\n\t\tconst startTime = Date.now()\n\t\tconst executionContext = this._setupExecutionContext(blueprint, initialState, options)\n\n\t\tthis.logger.info(`Starting workflow execution`, {\n\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\texecutionId: executionContext.executionId,\n\t\t})\n\n\t\ttry {\n\t\t\tawait this.eventBus.emit({\n\t\t\t\ttype: 'workflow:start',\n\t\t\t\tpayload: { blueprintId: executionContext.blueprint.id, executionId: executionContext.executionId },\n\t\t\t})\n\t\t\tawait this.eventBus.emit({\n\t\t\t\ttype: 'workflow:resume',\n\t\t\t\tpayload: { blueprintId: executionContext.blueprint.id, executionId: executionContext.executionId },\n\t\t\t})\n\t\t\tconst analysis =\n\t\t\t\tthis.analysisCache.get(executionContext.blueprint) ??\n\t\t\t\t(() => {\n\t\t\t\t\tconst computed = analyzeBlueprint(executionContext.blueprint)\n\t\t\t\t\tthis.analysisCache.set(executionContext.blueprint, computed)\n\t\t\t\t\treturn computed\n\t\t\t\t})()\n\t\t\tif (options?.strict && !analysis.isDag) {\n\t\t\t\tthrow new Error(`Workflow '${executionContext.blueprint.id}' failed strictness check: Cycles are not allowed.`)\n\t\t\t}\n\t\t\tif (!analysis.isDag) {\n\t\t\t\tthis.logger.warn(`Workflow contains cycles`, {\n\t\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst traverser = new GraphTraverser(executionContext.blueprint, options?.strict === true)\n\t\t\tconst result = await this.orchestrator.run(executionContext, traverser)\n\n\t\t\tconst duration = Date.now() - startTime\n\t\t\tif (result.status === 'stalled') {\n\t\t\t\tawait this.eventBus.emit({\n\t\t\t\t\ttype: 'workflow:stall',\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\t\t\tremainingNodes: traverser.getAllNodeIds().size - executionContext.state.getCompletedNodes().size,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tawait this.eventBus.emit({\n\t\t\t\t\ttype: 'workflow:pause',\n\t\t\t\t\tpayload: { blueprintId: executionContext.blueprint.id, executionId: executionContext.executionId },\n\t\t\t\t})\n\t\t\t}\n\t\t\tthis.logger.info(`Workflow execution completed`, {\n\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\tstatus: result.status,\n\t\t\t\tduration,\n\t\t\t\terrors: result.errors?.length || 0,\n\t\t\t})\n\t\t\tawait this.eventBus.emit({\n\t\t\t\ttype: 'workflow:finish',\n\t\t\t\tpayload: {\n\t\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\t\tstatus: result.status,\n\t\t\t\t\terrors: result.errors,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (result.status === 'awaiting') {\n\t\t\t\tconst awaitingNodeIds = executionContext.state.getAwaitingNodeIds()\n\t\t\t\tfor (const nodeId of awaitingNodeIds) {\n\t\t\t\t\tconst details = executionContext.state.getAwaitingDetails(nodeId)\n\t\t\t\t\tif (details?.reason === 'timer') {\n\t\t\t\t\t\tthis.scheduler.registerAwaitingWorkflow(\n\t\t\t\t\t\t\texecutionContext.executionId,\n\t\t\t\t\t\t\texecutionContext.blueprint.id,\n\t\t\t\t\t\t\tresult.serializedContext,\n\t\t\t\t\t\t\tnodeId,\n\t\t\t\t\t\t\tdetails.wakeUpAt,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tconst duration = Date.now() - startTime\n\t\t\tconst workflowError: WorkflowError = {\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tisFatal: false,\n\t\t\t\tname: 'WorkflowError',\n\t\t\t}\n\t\t\tawait this.eventBus.emit({\n\t\t\t\ttype: 'workflow:finish',\n\t\t\t\tpayload: {\n\t\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\t\tstatus: 'cancelled',\n\t\t\t\t\terrors: [workflowError],\n\t\t\t\t},\n\t\t\t})\n\t\t\tif (\n\t\t\t\terror instanceof DOMException\n\t\t\t\t\t? error.name === 'AbortError'\n\t\t\t\t\t: error instanceof FlowcraftError && error.message.includes('cancelled')\n\t\t\t) {\n\t\t\t\tthis.logger.info(`Workflow execution cancelled`, {\n\t\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\t\tduration,\n\t\t\t\t})\n\t\t\t\tawait this.eventBus.emit({\n\t\t\t\t\ttype: 'workflow:pause',\n\t\t\t\t\tpayload: { blueprintId: executionContext.blueprint.id, executionId: executionContext.executionId },\n\t\t\t\t})\n\t\t\t\tawait this.eventBus.emit({\n\t\t\t\t\ttype: 'workflow:finish',\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\t\t\tstatus: 'cancelled',\n\t\t\t\t\t\terrors: [workflowError],\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn {\n\t\t\t\t\tcontext: {} as TContext,\n\t\t\t\t\tserializedContext: '{}',\n\t\t\t\t\tstatus: 'cancelled',\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.logger.error(`Workflow execution failed`, {\n\t\t\t\tblueprintId: executionContext.blueprint.id,\n\t\t\t\texecutionId: executionContext.executionId,\n\t\t\t\tduration,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t})\n\t\t\tthrow error\n\t\t}\n\t}\n\n\tstartScheduler(checkIntervalMs?: number): void {\n\t\tif (checkIntervalMs !== undefined) {\n\t\t\tthis.scheduler = new WorkflowScheduler(this, checkIntervalMs)\n\t\t}\n\t\tthis.scheduler.start()\n\t}\n\n\tstopScheduler(): void {\n\t\tthis.scheduler.stop()\n\t}\n\n\tprivate _setupResumedExecutionContext(\n\t\tblueprint: WorkflowBlueprint,\n\t\tworkflowState: WorkflowState<TContext>,\n\t\toptions?: {\n\t\t\tfunctionRegistry?: Map<string, any>\n\t\t\tstrict?: boolean\n\t\t\tsignal?: AbortSignal\n\t\t\tconcurrency?: number\n\t\t},\n\t): ExecutionContext<TContext, TDependencies> {\n\t\tconst executionId = globalThis.crypto?.randomUUID()\n\t\tconst nodeRegistry = this._createExecutionRegistry(options?.functionRegistry)\n\t\treturn new ExecutionContext(\n\t\t\tblueprint,\n\t\t\tworkflowState,\n\t\t\tnodeRegistry,\n\t\t\texecutionId,\n\t\t\tthis,\n\t\t\t{\n\t\t\t\tlogger: this.logger,\n\t\t\t\teventBus: this.eventBus,\n\t\t\t\tserializer: this.serializer,\n\t\t\t\tevaluator: this.evaluator,\n\t\t\t\tmiddleware: this.middleware,\n\t\t\t\tdependencies: this.dependencies,\n\t\t\t},\n\t\t\toptions?.signal,\n\t\t)\n\t}\n\n\tasync resume(\n\t\tblueprint: WorkflowBlueprint,\n\t\tserializedContext: string,\n\t\tresumeData: { output?: any; action?: string },\n\t\tnodeId?: string,\n\t\toptions?: {\n\t\t\tfunctionRegistry?: Map<string, any>\n\t\t\tstrict?: boolean\n\t\t\tsignal?: AbortSignal\n\t\t\tconcurrency?: number\n\t\t},\n\t): Promise<WorkflowResult<TContext>> {\n\t\tconst executionId = globalThis.crypto?.randomUUID()\n\t\tconst workflowState = new WorkflowState<TContext>(\n\t\t\tthis.serializer.deserialize(serializedContext) as Partial<TContext>,\n\t\t)\n\n\t\tconst awaitingNodeIds = workflowState.getAwaitingNodeIds()\n\t\tif (awaitingNodeIds.length === 0) {\n\t\t\tthrow new FlowcraftError('Cannot resume: The provided context is not in an awaiting state.', {\n\t\t\t\tisFatal: true,\n\t\t\t})\n\t\t}\n\n\t\tconst awaitingNodeId = nodeId || awaitingNodeIds[0]\n\t\tif (!awaitingNodeIds.includes(awaitingNodeId)) {\n\t\t\tthrow new FlowcraftError(`Cannot resume: Node '${awaitingNodeId}' is not in an awaiting state.`, {\n\t\t\t\tisFatal: true,\n\t\t\t})\n\t\t}\n\n\t\tconst awaitingNodeDef = blueprint.nodes.find((n) => n.id === awaitingNodeId)\n\t\tif (!awaitingNodeDef) {\n\t\t\tthrow new FlowcraftError(`Awaiting node '${awaitingNodeId}' not found in blueprint.`, {\n\t\t\t\tnodeId: awaitingNodeId,\n\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\tisFatal: true,\n\t\t\t})\n\t\t}\n\n\t\tconst contextImpl = workflowState.getContext()\n\n\t\tif (awaitingNodeDef.uses === 'SubflowNode') {\n\t\t\tconst subflowStateKey = `_subflowState.${awaitingNodeId}`\n\t\t\tconst asyncContext = contextImpl\n\t\t\tconst subflowContext = (await asyncContext.get(subflowStateKey as any)) as string\n\n\t\t\tif (!subflowContext) {\n\t\t\t\tthrow new FlowcraftError(`Cannot resume: Subflow state for node '${awaitingNodeId}' not found.`, {\n\t\t\t\t\tnodeId: awaitingNodeId,\n\t\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\t\tisFatal: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst blueprintId = awaitingNodeDef.params?.blueprintId\n\t\t\tif (!blueprintId) {\n\t\t\t\tthrow new FlowcraftError(`Subflow node '${awaitingNodeId}' is missing the 'blueprintId' parameter.`, {\n\t\t\t\t\tnodeId: awaitingNodeId,\n\t\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\t\tisFatal: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst subBlueprint = this.blueprints[blueprintId]\n\t\t\tif (!subBlueprint) {\n\t\t\t\tthrow new FlowcraftError(`Sub-blueprint with ID '${blueprintId}' not found in runtime registry.`, {\n\t\t\t\t\tnodeId: awaitingNodeId,\n\t\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\t\tisFatal: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst subflowResumeResult = await this.resume(subBlueprint, subflowContext, resumeData, undefined, options)\n\n\t\t\tif (subflowResumeResult.status !== 'completed') {\n\t\t\t\tthrow new FlowcraftError(\n\t\t\t\t\t`Resumed subflow '${subBlueprint.id}' did not complete. Status: ${subflowResumeResult.status}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tnodeId: awaitingNodeId,\n\t\t\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\t\t\tisFatal: false,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\n\t\t\t// mirror the output extraction logic from SubflowNode.exec\n\t\t\tconst subflowFinalContext = subflowResumeResult.context as Record<string, any>\n\t\t\tlet finalSubflowOutput: any\n\t\t\tconst subAnalysis = analyzeBlueprint(subBlueprint)\n\n\t\t\tif (awaitingNodeDef.params?.outputs) {\n\t\t\t\tfinalSubflowOutput = subflowFinalContext\n\t\t\t} else if (subAnalysis.terminalNodeIds.length === 1) {\n\t\t\t\tconst terminalId = subAnalysis.terminalNodeIds[0]\n\t\t\t\tfinalSubflowOutput = subflowFinalContext[`_outputs.${terminalId}`]\n\t\t\t} else {\n\t\t\t\tconst terminalOutputs: Record<string, any> = {}\n\t\t\t\tfor (const terminalId of subAnalysis.terminalNodeIds) {\n\t\t\t\t\tterminalOutputs[terminalId] = subflowFinalContext[`_outputs.${terminalId}`]\n\t\t\t\t}\n\t\t\t\tfinalSubflowOutput = terminalOutputs\n\t\t\t}\n\n\t\t\tresumeData = { output: finalSubflowOutput }\n\n\t\t\tawait contextImpl.delete(subflowStateKey as any)\n\t\t}\n\n\t\tworkflowState.addCompletedNode(awaitingNodeId, resumeData.output)\n\n\t\tconst nextSteps = await this.determineNextNodes(blueprint, awaitingNodeId, resumeData, contextImpl, executionId)\n\n\t\tif (nextSteps.length === 0) {\n\t\t\tworkflowState.clearAwaiting(awaitingNodeId)\n\t\t\tconst result = await workflowState.toResult(this.serializer, executionId)\n\t\t\tresult.status = 'completed'\n\t\t\treturn result\n\t\t}\n\n\t\tconst traverserForResume = new GraphTraverser(blueprint)\n\t\tconst allPredecessors = traverserForResume.getAllPredecessors()\n\n\t\tfor (const { node, edge } of nextSteps) {\n\t\t\tawait this.applyEdgeTransform(edge, resumeData, node, contextImpl, allPredecessors, executionId)\n\t\t}\n\n\t\tconst traverser = GraphTraverser.fromState(blueprint, workflowState)\n\n\t\tconst nextNodeDefs = nextSteps.map((s) => s.node)\n\t\tfor (const nodeDef of nextNodeDefs) {\n\t\t\ttraverser.addToFrontier(nodeDef.id)\n\t\t}\n\n\t\tworkflowState.clearAwaiting(awaitingNodeId)\n\n\t\tconst executionContext = this._setupResumedExecutionContext(blueprint, workflowState, options)\n\n\t\treturn await this.orchestrator.run(executionContext, traverser)\n\t}\n\n\tpublic _createExecutionRegistry(dynamicRegistry?: Map<string, any>): Map<string, NodeFunction | NodeClass> {\n\t\tconst executionRegistry = new Map(this.registry)\n\t\tif (dynamicRegistry) {\n\t\t\tfor (const [key, func] of dynamicRegistry.entries()) {\n\t\t\t\texecutionRegistry.set(key, func)\n\t\t\t}\n\t\t}\n\t\treturn executionRegistry\n\t}\n\n\tasync executeNode(\n\t\tblueprint: WorkflowBlueprint,\n\t\tnodeId: string,\n\t\tstate: WorkflowState<TContext>,\n\t\t_allPredecessors?: Map<string, Set<string>>,\n\t\tfunctionRegistry?: Map<string, any>,\n\t\texecutionId?: string,\n\t\tsignal?: AbortSignal,\n\t): Promise<NodeResult<any, any>> {\n\t\tconst nodeDef = blueprint.nodes.find((n) => n.id === nodeId)\n\t\tif (!nodeDef) {\n\t\t\tthrow new FlowcraftError(`Node '${nodeId}' not found in blueprint.`, {\n\t\t\t\tnodeId,\n\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\texecutionId,\n\t\t\t\tisFatal: false,\n\t\t\t})\n\t\t}\n\n\t\tconst contextImpl = state.getContext()\n\t\tconst asyncContext = contextImpl\n\n\t\tconst input = await this.resolveNodeInput(nodeDef.id, blueprint, asyncContext)\n\t\tconst nodeRegistry = new Map([...this.registry, ...(functionRegistry || new Map())])\n\n\t\tconst services = {\n\t\t\tlogger: this.logger,\n\t\t\teventBus: this.eventBus,\n\t\t\tserializer: this.serializer,\n\t\t\tevaluator: this.evaluator,\n\t\t\tmiddleware: this.middleware,\n\t\t\tdependencies: this.dependencies,\n\t\t}\n\t\tconst context = new ExecutionContext(blueprint, state, nodeRegistry, executionId || '', this, services, signal)\n\n\t\tconst executor = this.executorFactory.createExecutorForNode(nodeId, context)\n\n\t\tconst executionResult = await executor.execute(input)\n\n\t\tif (executionResult.status === 'success') {\n\t\t\treturn executionResult.result\n\t\t}\n\n\t\tif (executionResult.status === 'failed_with_fallback') {\n\t\t\tconst fallbackNode = blueprint.nodes.find((n: NodeDefinition) => n.id === executionResult.fallbackNodeId)\n\t\t\tif (!fallbackNode) {\n\t\t\t\tthrow new FlowcraftError(`Fallback node '${executionResult.fallbackNodeId}' not found in blueprint.`, {\n\t\t\t\t\tnodeId: nodeDef.id,\n\t\t\t\t\tblueprintId: blueprint.id,\n\t\t\t\t\texecutionId,\n\t\t\t\t\tisFatal: false,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst fallbackInput = await this.resolveNodeInput(fallbackNode.id, blueprint, asyncContext)\n\t\t\tconst fallbackExecutor = this.executorFactory.createExecutorForNode(fallbackNode.id, context)\n\n\t\t\tconst fallbackResult = await fallbackExecutor.execute(fallbackInput)\n\t\t\tif (fallbackResult.status === 'success') {\n\t\t\t\tstate.markFallbackExecuted()\n\t\t\t\tstate.addCompletedNode(executionResult.fallbackNodeId, fallbackResult.result.output)\n\t\t\t\tthis.logger.info(`Fallback execution completed`, {\n\t\t\t\t\tnodeId: nodeDef.id,\n\t\t\t\t\tfallbackNodeId: executionResult.fallbackNodeId,\n\t\t\t\t\texecutionId,\n\t\t\t\t})\n\t\t\t\treturn { ...fallbackResult.result, _fallbackExecuted: true }\n\t\t\t}\n\n\t\t\tthrow fallbackResult.error\n\t\t}\n\n\t\tthrow executionResult.error\n\t}\n\n\tpublic getExecutorForNode(nodeId: string, context: ExecutionContext<TContext, TDependencies>): any {\n\t\treturn this.executorFactory.createExecutorForNode(nodeId, context)\n\t}\n\n\tpublic createForSubflow(\n\t\tsubBlueprint: WorkflowBlueprint,\n\t\tinitialSubState: Partial<TContext>,\n\t\texecutionId: string,\n\t\tsignal?: AbortSignal,\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.registry,\n\t\t\texecutionId,\n\t\t\tthis,\n\t\t\t{\n\t\t\t\tlogger: this.logger,\n\t\t\t\teventBus: this.eventBus,\n\t\t\t\tserializer: this.serializer,\n\t\t\t\tevaluator: this.evaluator,\n\t\t\t\tmiddleware: this.middleware,\n\t\t\t\tdependencies: this.dependencies,\n\t\t\t},\n\t\t\tsignal,\n\t\t)\n\t}\n\n\tasync determineNextNodes(\n\t\tblueprint: WorkflowBlueprint,\n\t\tnodeId: string,\n\t\tresult: NodeResult<any, any>,\n\t\tcontext: ContextImplementation<TContext>,\n\t\texecutionId?: string,\n\t): Promise<{ node: NodeDefinition; edge: EdgeDefinition }[]> {\n\t\treturn this.logicHandler.determineNextNodes(blueprint, nodeId, result, context, executionId)\n\t}\n\n\tpublic async applyEdgeTransform(\n\t\tedge: EdgeDefinition,\n\t\tsourceResult: NodeResult<any, any>,\n\t\ttargetNode: NodeDefinition,\n\t\tcontext: ContextImplementation<TContext>,\n\t\tallPredecessors?: Map<string, Set<string>>,\n\t\texecutionId?: string,\n\t): Promise<void> {\n\t\treturn this.logicHandler.applyEdgeTransform(edge, sourceResult, targetNode, context, allPredecessors, executionId)\n\t}\n\n\tpublic async resolveNodeInput(\n\t\tnodeId: string,\n\t\tblueprint: WorkflowBlueprint,\n\t\tcontext: ContextImplementation<TContext>,\n\t): Promise<any> {\n\t\treturn this.logicHandler.resolveNodeInput(nodeId, blueprint, context)\n\t}\n\n\t/**\n\t * Replay a workflow execution from a pre-recorded event history.\n\t * This reconstructs the final workflow state without executing any node logic,\n\t * enabling time-travel debugging and post-mortem analysis.\n\t *\n\t * @param blueprint The workflow blueprint\n\t * @param events The recorded event history for the execution\n\t * @param executionId Optional execution ID to filter events (if events contain multiple executions)\n\t * @returns The reconstructed workflow result\n\t */\n\tasync replay(\n\t\tblueprint: WorkflowBlueprint,\n\t\tevents: FlowcraftEvent[],\n\t\texecutionId?: string,\n\t): Promise<WorkflowResult<TContext>> {\n\t\tlet filteredEvents = events\n\t\tif (executionId) {\n\t\t\tfilteredEvents = events.filter((event) => {\n\t\t\t\tif ('executionId' in event.payload) {\n\t\t\t\t\treturn event.payload.executionId === executionId\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t}\n\n\t\tif (!executionId) {\n\t\t\tconst workflowStartEvent = filteredEvents.find((e) => e.type === 'workflow:start')\n\t\t\tif (workflowStartEvent && 'executionId' in workflowStartEvent.payload) {\n\t\t\t\texecutionId = workflowStartEvent.payload.executionId\n\t\t\t} else {\n\t\t\t\tthrow new FlowcraftError('Cannot determine execution ID from events', { isFatal: true })\n\t\t\t}\n\t\t}\n\n\t\tconst tempContext = this._setupExecutionContext(\n\t\t\tblueprint,\n\t\t\t{},\n\t\t\t{ strict: false }, // allow cycles in replay\n\t\t)\n\n\t\tconst executionContext = new ExecutionContext(\n\t\t\tblueprint,\n\t\t\ttempContext.state,\n\t\t\ttempContext.nodeRegistry,\n\t\t\texecutionId,\n\t\t\tthis,\n\t\t\ttempContext.services,\n\t\t\ttempContext.signal,\n\t\t\ttempContext.concurrency,\n\t\t)\n\n\t\tconst { ReplayOrchestrator } = await import('./orchestrators/replay')\n\t\tconst replayOrchestrator = new ReplayOrchestrator(filteredEvents)\n\n\t\tconst traverser = new GraphTraverser(blueprint)\n\n\t\treturn await replayOrchestrator.run(executionContext, traverser)\n\t}\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { executeBatch, processResults } from './chunk-N63S5NEG.js';
|
|
2
|
-
import { ExecutionContext } from './chunk-
|
|
2
|
+
import { ExecutionContext } from './chunk-L3MX5MTA.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-
|
|
74
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-DV2CXHOY.js.map
|
|
74
|
+
//# sourceMappingURL=chunk-DV2CXHOY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/orchestrator.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/runtime/orchestrator.ts"],"names":[],"mappings":"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","file":"chunk-DV2CXHOY.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 =\n\t\t\tcontext.concurrency != null && context.concurrency > 0 ? 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, context.executionId)\n\t\tresult.status = status\n\t\treturn result\n\t}\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WorkflowState } from './chunk-
|
|
1
|
+
import { WorkflowState } from './chunk-L46TQXCV.js';
|
|
2
2
|
|
|
3
3
|
// src/runtime/execution-context.ts
|
|
4
4
|
var ExecutionContext = class _ExecutionContext {
|
|
@@ -29,5 +29,5 @@ var ExecutionContext = class _ExecutionContext {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export { ExecutionContext };
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-L3MX5MTA.js.map
|
|
33
|
+
//# sourceMappingURL=chunk-L3MX5MTA.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;AAEhB,IAAA,IAAA,CAAK,MAAM,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,KAAK,WAAW,CAAA;AAAA,EACpE;AAAA,EAEO,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-
|
|
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;AAEhB,IAAA,IAAA,CAAK,MAAM,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,KAAK,WAAW,CAAA;AAAA,EACpE;AAAA,EAEO,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-L3MX5MTA.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\t\tthis.state.setEventEmitter(this.services.eventBus, this.executionId)\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"]}
|
|
@@ -10,8 +10,12 @@ var WorkflowState = class {
|
|
|
10
10
|
_isAwaiting = false;
|
|
11
11
|
_awaitingNodeIds = /* @__PURE__ */ new Set();
|
|
12
12
|
_awaitingDetails = /* @__PURE__ */ new Map();
|
|
13
|
-
constructor(initialData) {
|
|
14
|
-
|
|
13
|
+
constructor(initialData, context) {
|
|
14
|
+
if (context) {
|
|
15
|
+
this.context = context instanceof TrackedAsyncContext ? context : new TrackedAsyncContext(context);
|
|
16
|
+
} else {
|
|
17
|
+
this.context = new TrackedAsyncContext(new AsyncContextView(new Context(initialData)));
|
|
18
|
+
}
|
|
15
19
|
if (initialData._awaitingNodeIds) {
|
|
16
20
|
this._isAwaiting = true;
|
|
17
21
|
const awaitingIds = initialData._awaitingNodeIds;
|
|
@@ -136,5 +140,5 @@ var WorkflowState = class {
|
|
|
136
140
|
};
|
|
137
141
|
|
|
138
142
|
export { WorkflowState };
|
|
139
|
-
//# sourceMappingURL=chunk-
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
143
|
+
//# sourceMappingURL=chunk-L46TQXCV.js.map
|
|
144
|
+
//# sourceMappingURL=chunk-L46TQXCV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/state.ts"],"names":[],"mappings":"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","file":"chunk-L46TQXCV.js","sourcesContent":["import { AsyncContextView, Context as SyncContext, TrackedAsyncContext } 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>, context?: IAsyncContext<TContext>) {\n\t\tif (context) {\n\t\t\tthis.context = context instanceof TrackedAsyncContext ? context : new TrackedAsyncContext(context)\n\t\t} else {\n\t\t\tthis.context = new TrackedAsyncContext(new AsyncContextView(new SyncContext<TContext>(initialData)))\n\t\t}\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\t/**\n\t * Configure the context to emit events when modified.\n\t * This is called after the ExecutionContext is created.\n\t */\n\tsetEventEmitter(eventBus: any, executionId: string, sourceNode?: string): void {\n\t\tif (this.context instanceof TrackedAsyncContext) {\n\t\t\tthis.context.configureEventEmitter(eventBus, executionId, sourceNode)\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\tasync markAsAwaiting(nodeId: string, details?: any): Promise<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\tawait this.context.set('_awaitingNodeIds' as any, Array.from(this._awaitingNodeIds))\n\t\tawait this.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, executionId?: string): 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\tif (executionId) {\n\t\t\t;(contextJSON as any)._executionId = executionId\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,5 +1,6 @@
|
|
|
1
|
-
import { FlowRuntime } from './chunk-
|
|
1
|
+
import { FlowRuntime } from './chunk-BEHVGFIM.js';
|
|
2
2
|
import { analyzeBlueprint } from './chunk-ZLW4QOTS.js';
|
|
3
|
+
import { WorkflowState } from './chunk-L46TQXCV.js';
|
|
3
4
|
import { ConsoleLogger } from './chunk-4PELJWF7.js';
|
|
4
5
|
import { JsonSerializer } from './chunk-6RKHCJUU.js';
|
|
5
6
|
import { TrackedAsyncContext } from './chunk-ZETQCNEF.js';
|
|
@@ -78,21 +79,16 @@ var BaseDistributedAdapter = class {
|
|
|
78
79
|
this.logger.debug(`[Adapter] Extended TTLs for run ${runId}, node ${nodeId}`);
|
|
79
80
|
}, 18e5);
|
|
80
81
|
try {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
},
|
|
85
|
-
addError: (nodeId2, error) => {
|
|
86
|
-
this.logger.error(`[Adapter] Error in node ${nodeId2}:`, error);
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
const result = await this.runtime.executeNode(blueprint, nodeId, workerState);
|
|
82
|
+
const contextData = await context.toJSON();
|
|
83
|
+
const state = new WorkflowState(contextData, context);
|
|
84
|
+
const result = await this.runtime.executeNode(blueprint, nodeId, state);
|
|
90
85
|
await context.set(`_outputs.${nodeId}`, result.output);
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
const stateContext = state.getContext();
|
|
87
|
+
if (stateContext instanceof TrackedAsyncContext) {
|
|
88
|
+
const deltas = stateContext.getDeltas();
|
|
93
89
|
if (deltas.length > 0) {
|
|
94
|
-
await
|
|
95
|
-
|
|
90
|
+
await stateContext.patch(deltas);
|
|
91
|
+
stateContext.clearDeltas();
|
|
96
92
|
}
|
|
97
93
|
}
|
|
98
94
|
const analysis = analyzeBlueprint(blueprint);
|
|
@@ -340,5 +336,5 @@ var BaseDistributedAdapter = class {
|
|
|
340
336
|
};
|
|
341
337
|
|
|
342
338
|
export { BaseDistributedAdapter };
|
|
343
|
-
//# sourceMappingURL=chunk-
|
|
344
|
-
//# sourceMappingURL=chunk-
|
|
339
|
+
//# sourceMappingURL=chunk-U7DKCIWT.js.map
|
|
340
|
+
//# sourceMappingURL=chunk-U7DKCIWT.js.map
|