{"version":3,"file":"runtime-Due-FOZ2.cjs","names":["context: DefinedNodeRunContext<TConfig, TBindings>","payload: DefineNodeExecuteArgs<TConfig, TInputJson>","name: string","definition: DefinedNode<TKey, TConfig, TInputJson, TOutputJson, TBindings>","node","SuspensionRequest","policy: \"halt\" | \"auto-accept\"","wf: WorkflowBuilder","from: NodeRef","branchPort: OutputPortKey","priorEndpoints: ReadonlyArray<WhenEndpoint>","created: NodeRef[]","prev: NodeRef | null","port: OutputPortKey","node","wf: WorkflowBuilder","endpoints: ReadonlyArray<ChainCursorEndpoint>","port: OutputPortKey","prev: NodeRef | null","nextEndpoints: ChainCursorEndpoint[]","node","meta: { id: WorkflowId; name: string }","options?: Readonly<Record<string, never>>","entries: NodeIdEntry[]","node","AgentConfigInspector","AgentConnectionNodeCollector","emptyIds: NodeIdEntry[]","duplicateIds: NodeIdEntry[]","lines: string[]","eventBus: RunEventBus | undefined","parent: ParentExecutionRef | undefined","eventBus: RunEventBus | undefined","BINARY_DEFAULT_MAX_BYTES","storage: BinaryStorage","workflowId: WorkflowId","runId: RunId","nodeId: NodeId","activationId: NodeActivationId","now: () => Date","storage: BinaryStorage","workflowId: WorkflowId","runId: RunId","now: () => Date","activationScheduler: ActivationSchedulerPort","workflowExecutionRepository: WorkflowExecutionRepository","nodeEventPublisher: NodeEventPublisher","nodeActivationRequestInputPreparer: NodeActivationRequestInputPreparer","pending: PendingNodeExecution","activationIdFactory: ActivationIdFactory","entries: Entry[]","nodeId: NodeId","activationId: NodeActivationId","cause?: unknown","workflowNodeInstanceFactory: WorkflowNodeInstanceFactory","nodeInstance: unknown","single: Extract<NodeActivationRequest, { kind: \"single\" }>","z","ZodError","nodeId: NodeId","nodeType: string","credentialSessions: CredentialSessionService","maxAttempts: number","delayMs: number","maxAttempts: number","initialDelayMs: number","multiplier: number","maxDelayMs?: number","jitter?: boolean","noOpNodeExecutionTelemetry: NodeExecutionTelemetry","noOpTelemetrySpanScope: TelemetrySpanScope","binaryStorage: BinaryStorage","telemetryFactory: ExecutionTelemetryFactory","costTrackingFactory: CostTrackingTelemetryFactory","currentDate: () => Date","collections?: CollectionsContext","nodeResolver?: NodeResolver","currentScope: TelemetryScope","costCatalog: CostCatalog","costCatalog: CostCatalog","sleeper: AsyncSleeper","lastError: unknown","resolveItemExprsForExecution","out: NodeOutputs","activationIdFactory: ActivationIdFactory","credentialResolverFactory: CredentialResolverFactory","runId: RunId","taskId: string","nodeInstanceFactory: WorkflowNodeInstanceFactory","retryRunner: InProcessRetryRunner","suspensionHandler?: NodeSuspensionHandler","loadRunState?: (runId: RunId) => Promise<PersistedRunState | undefined>","CredentialUnboundError","node","single: Extract<NodeActivationRequest, { kind: \"single\" }>","syntheticItem: Item","args: RunnableNodeExecuteArgs","byPort: Partial<Record<string, Item[]>>","NodeIterationIdFactory","raw: unknown","SuspensionRequest","z","name: string","missingTokenId?: string","name: string","missingTokenId?: string","marker: MissingRuntimeExecutionMarker","missing: MissingRuntimeNodeDetail[]","workflowRepository: WorkflowRepository","tokenRegistry: PersistedWorkflowTokenRegistryLike","codec: WorkflowSnapshotCodec","missingRuntimeFallbacks: MissingRuntimeFallbacks","node","nodeResolver: NodeResolver","workflowExecutionRepository: WorkflowExecutionRepository","runId: RunId","workflowId: WorkflowId","parent: ParentExecutionRef | undefined","publishNodeEvent: (\n      kind: \"nodeQueued\" | \"nodeStarted\" | \"nodeCompleted\" | \"nodeFailed\",\n      snapshot: NodeExecutionSnapshot,\n    ) => Promise<void>","publishConnectionInvocationEvent?: (record: ConnectionInvocationRecord) => Promise<void>","updated: NodeExecutionSnapshot","record: ConnectionInvocationRecord","workflowExecutionRepository: WorkflowExecutionRepository","nodeEventPublisher: NodeEventPublisher","eventBus?: RunEventBus","missingRuntimeExecutionMarker: MissingRuntimeExecutionMarker","node","executionContextFactory: ExecutionContextFactory","credentialResolverFactory: CredentialResolverFactory","defsById: ReadonlyMap<NodeId, NodeDef>","outgoingByNode: ReadonlyMap<NodeId, ReadonlyArray<TopologyOutgoingEdge>>","incomingByNode: ReadonlyMap<NodeId, ReadonlyArray<TopologyIncomingEdge>>","expectedInputsByNode: ReadonlyMap<NodeId, ReadonlyArray<InputPortKey>>","rootNodeIds: ReadonlyArray<NodeId>","order: InputPortKey[]","node","activationIdFactory: ActivationIdFactory","workflowExecutionRepository: WorkflowExecutionRepository","runDataFactory: RunDataFactory","runExecutionContextFactory: WorkflowRunExecutionContextFactory","workflowSnapshotResolver: WorkflowSnapshotResolver","planningFactory: EngineWorkflowPlanningFactory","nodeStatePublisherFactory: NodeRunStateWriterFactory","credentialResolverFactory: CredentialResolverFactory","nodeActivationRequestComposer: NodeActivationRequestComposer","persistedRunStateTerminalBuilder: PersistedRunStateTerminalBuilder","activationEnqueueService: ActivationEnqueueService","nodeEventPublisher: NodeEventPublisher","semantics: RunStateSemantics","waiters: EngineWaiters","policyErrorServices: WorkflowPolicyErrorServices","terminalPersistence: RunTerminalPersistenceCoordinator","executionLimitsPolicy: EngineExecutionLimitsPolicy","parityGuard: MissingRuntimeParityGuard","result: RunResult","queue: RunQueueEntry[]","next: ReturnType<(typeof planner)[\"nextActivation\"]>","pendingResume: PendingResumeEntry","triggerOutputs: NodeOutputs","topology: WorkflowTopology","queue: RunQueueEntry[]","outputsByNode: Record<NodeId, NodeOutputs>","clearedNodeIds: NodeId[]","preservedPinnedNodeIds: NodeId[]","satisfiedNodeIds: NodeId[]","frontierNodeIds: NodeId[]","received: Record<InputPortKey, Items>","input","pendingNodeIds: NodeId[]","ConnectionNodeIdFactory","runIdFactory: RunIdFactory","workflowExecutionRepository: WorkflowExecutionRepository","runDataFactory: RunDataFactory","workflowSnapshotFactory: WorkflowSnapshotFactory","planningFactory: EngineWorkflowPlanningFactory","nodeStatePublisherFactory: NodeRunStateWriterFactory","runExecutionContextFactory: WorkflowRunExecutionContextFactory","nodeActivationRequestComposer: NodeActivationRequestComposer","activationEnqueueService: ActivationEnqueueService","semantics: RunStateSemantics","waiters: EngineWaiters","workflowPolicyRuntimeDefaults: WorkflowPolicyRuntimeDefaults | undefined","executionLimitsPolicy: EngineExecutionLimitsPolicy","nodeEventPublisher: NodeEventPublisher","persistedRunStateTerminalBuilder: PersistedRunStateTerminalBuilder","planning: Readonly<ReturnType<EngineWorkflowPlanningFactory[\"create\"]>>","initialNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>","queue: RunQueueEntry[]","planningFromState: Readonly<ReturnType<EngineWorkflowPlanningFactory[\"create\"]>>","result: RunResult","offloadPolicy: NodeOffloadPolicy","workerScheduler: NodeExecutionScheduler","inline: InlineDrivingScheduler","workerRequest: NodeExecutionRequest","nodeExecutor: NodeExecutor","receipt: NodeActivationReceipt","ENGINE_EXECUTION_LIMITS_DEFAULTS: EngineExecutionLimitsPolicyConfig","config: EngineExecutionLimitsPolicyConfig","runRepository: WorkflowExecutionRepository","storageEvaluator: WorkflowStoragePolicyEvaluator","nodeResolver: NodeResolver","nodeResolver: NodeResolver","ReadableStream","chunks: Uint8Array[]","bytes: Uint8Array","ReadableStream","out: Record<NodeId, NodeOutputs>","triggerSetupStateRepository: TriggerSetupStateRepository","logger: PollingTriggerLogger","first: TState | undefined","err: unknown","workflowExecutionRepository: WorkflowExecutionRepository","workflowSnapshotResolver: WorkflowSnapshotResolver","runDataFactory: RunDataFactory","runExecutionContextFactory: WorkflowRunExecutionContextFactory","nodeStatePublisherFactory: NodeRunStateWriterFactory","nodeActivationRequestComposer: NodeActivationRequestComposer","nodeExecutor: NodeExecutor","continuation: NodeActivationContinuation","executionLimitsPolicy: EngineExecutionLimitsPolicy","parityGuard: MissingRuntimeParityGuard","node","resumeContext: ResumeContext | undefined","topology: WorkflowTopology","nodeInstances: ReadonlyMap<NodeId, unknown>","inst","queue: RunQueueEntry[]","matches: string[]","workflowNodeInstanceFactory: WorkflowNodeInstanceFactory","node","workflowRepository: WorkflowRepository","workflowActivationPolicy: WorkflowActivationPolicy","runIdFactory: RunIdFactory","runDataFactory: RunDataFactory","executionContextFactory: ExecutionContextFactory","nodeExecutionStatePublisherFactory: NodeRunStateWriterFactory","nodeResolver: NodeResolver","triggerSetupStateRepository: TriggerSetupStateRepository","emitHandler: TriggerEmitHandler","executionLimitsPolicy: EngineExecutionLimitsPolicy","diagnostics: TriggerRuntimeDiagnostics | undefined","pollingTriggerRuntime: PollingTriggerRuntime","pollingTriggerDedupWindow: PollingTriggerDedupWindow","node","nextState: unknown","triggerError: unknown","out: string[]","deps: EngineFacadeDeps","WorkflowSnapshotCodec","engine: Engine","workflowRepository: WorkflowRepository","engine: Engine","workflowRepository: WorkflowRepository","node","workflowRepository: WorkflowRepository","workflowActivationPolicy: WorkflowActivationPolicy","diagnostics?: WebhookTriggerRoutingDiagnostics","paths: string[]"],"sources":["../src/contracts/humanTaskStoreTypes.ts","../src/contracts/hitlSeamTypes.ts","../src/authoring/DefinedNodeRegistry.ts","../src/authoring/defineNode.types.ts","../src/authoring/defineHumanApprovalNode.types.ts","../src/workflow/dsl/WhenBuilder.ts","../src/workflow/dsl/workflowBuilderTypes.ts","../src/workflow/dsl/ChainCursorResolver.ts","../src/workflow/dsl/NodeIdSlugifier.ts","../src/workflow/dsl/WorkflowDefinitionError.ts","../src/workflow/dsl/WorkflowBuilder.ts","../src/workflow/definition/ConnectionInvocationIdFactory.ts","../src/workflow/definition/WorkflowExecutableNodeClassifier.ts","../src/workflow/definition/WorkflowExecutableNodeClassifierFactory.ts","../src/workflow/graph/ExecutableGraph.ts","../src/workflow/graph/DefaultWorkflowGraphFactory.ts","../src/events/ConnectionInvocationEventPublisher.ts","../src/events/NodeEventPublisher.ts","../src/binaries/boundedReadBinary.types.ts","../src/binaries/DefaultNodeBinaryAttachmentServiceFactory.ts","../src/binaries/UnavailableBinaryStorage.ts","../src/binaries/DefaultExecutionBinaryServiceFactory.ts","../src/execution/NodeExecutionSnapshotFactory.ts","../src/execution/NodeInputsByPortFactory.ts","../src/execution/ActivationEnqueueService.ts","../src/execution/ChildExecutionScopeFactory.ts","../src/contracts/itemMeta.ts","../src/execution/FanInMergeByOriginMerger.ts","../src/execution/NodeInputContractError.ts","../src/execution/NodeActivationRequestInputPreparer.ts","../src/execution/NodeInstantiationError.ts","../src/execution/CredentialResolverFactory.ts","../src/execution/DefaultAsyncSleeper.ts","../src/contracts/emitPorts.ts","../src/contracts/NoRetryPolicy.ts","../src/contracts/RetryPolicy.ts","../src/contracts/ExpRetryPolicy.ts","../src/contracts/CostTrackingTelemetryContract.ts","../src/contracts/NoOpCostTrackingTelemetry.ts","../src/contracts/NoOpCostTrackingTelemetryFactory.ts","../src/contracts/NoOpTelemetryArtifactReference.ts","../src/contracts/NoOpTelemetrySpanScope.ts","../src/contracts/NoOpNodeExecutionTelemetry.ts","../src/contracts/NoOpExecutionTelemetry.ts","../src/contracts/NoOpExecutionTelemetryFactory.ts","../src/contracts/workflowActivationPolicy.ts","../src/contracts/CodemationTelemetryAttributeNames.ts","../src/contracts/GenAiTelemetryAttributeNames.ts","../src/contracts/CodemationTelemetryMetricNames.ts","../src/execution/ExecutionTelemetryCostTrackingDecoratorFactory.ts","../src/execution/DefaultExecutionContextFactory.ts","../src/execution/CatalogBackedCostTrackingTelemetry.ts","../src/execution/CatalogBackedCostTrackingTelemetryFactory.ts","../src/execution/InProcessRetryRunner.ts","../src/execution/ItemExprResolver.ts","../src/execution/NodeOutputNormalizer.ts","../src/execution/RunnableOutputBehaviorResolver.ts","../src/execution/InProcessRetryRunnerFactory.ts","../src/execution/NodeActivationRequestComposer.ts","../src/execution/RunSuspendedError.ts","../src/execution/NodeExecutor.ts","../src/execution/NodeExecutorFactory.ts","../src/workflowSnapshots/MissingRuntimeExecutionMarker.ts","../src/workflowSnapshots/MissingRuntimeNodeToken.ts","../src/workflowSnapshots/MissingRuntimeNodeConfig.ts","../src/workflowSnapshots/MissingRuntimeTriggerToken.ts","../src/workflowSnapshots/MissingRuntimeTriggerConfig.ts","../src/workflowSnapshots/MissingRuntimeFallbacksFactory.ts","../src/workflowSnapshots/MissingRuntimeNode.ts","../src/workflowSnapshots/WorkflowParityMismatchError.ts","../src/workflowSnapshots/MissingRuntimeParityGuard.ts","../src/workflowSnapshots/MissingRuntimeTrigger.ts","../src/workflowSnapshots/WorkflowSnapshotResolver.ts","../src/execution/NodeInstanceFactory.ts","../src/execution/NodeInstanceFactoryFactory.ts","../src/execution/NodeRunStateWriter.ts","../src/execution/NodeRunStateWriterFactory.ts","../src/execution/PersistedRunStateTerminalBuilder.ts","../src/execution/RunStateSemantics.ts","../src/execution/WorkflowRunExecutionContextFactory.ts","../src/execution/StaticCostCatalog.ts","../src/planning/WorkflowTopologyPlanner.ts","../src/orchestration/RunContinuationService.ts","../src/planning/CurrentStateFrontierPlanner.ts","../src/policies/storage/RunPolicySnapshotFactory.ts","../src/orchestration/RunStartService.ts","../src/scheduler/ConfigDrivenOffloadPolicy.ts","../src/scheduler/DefaultDrivingScheduler.ts","../src/scheduler/HintOnlyOffloadPolicy.ts","../src/scheduler/InlineDrivingScheduler.ts","../src/scheduler/LocalOnlyScheduler.ts","../src/policies/executionLimits/EngineExecutionLimitsPolicy.ts","../src/policies/storage/RunTerminalPersistenceCoordinator.ts","../src/policies/WorkflowPolicyErrorServices.ts","../src/policies/storage/WorkflowStoragePolicyEvaluator.ts","../src/runStorage/BinaryBodyBufferReader.ts","../src/runStorage/BinaryBodyReadableStreamFactory.ts","../src/runStorage/InMemoryBinaryStorageRegistry.ts","../src/runStorage/InMemoryRunData.ts","../src/runStorage/InMemoryRunDataFactory.ts","../src/triggers/polling/PollingTriggerDedupWindow.ts","../src/triggers/polling/PollingTriggerRuntime.ts","../src/triggers/polling/PollingTriggerLogger.ts","../src/orchestration/NodeExecutionRequestHandlerService.ts","../src/planning/RunQueuePlanner.ts","../src/planning/EngineWorkflowPlanningFactory.ts","../src/orchestration/TriggerRuntimeService.ts","../src/orchestration/EngineWaiters.ts","../src/orchestration/Engine.ts","../src/runtime/EngineFactory.ts","../src/runtime/EngineWorkflowRunnerService.ts","../src/runtime/EngineWorkflowRunnerServiceFactory.ts","../src/runtime/InMemoryLiveWorkflowRepository.ts","../src/runtime/RunIntentService.ts","../src/runtime/RunIntentServiceFactory.ts","../src/runtime/WorkflowRepositoryWebhookTriggerMatcher.ts","../src/runtime/WorkflowRepositoryWebhookTriggerMatcherFactory.ts"],"sourcesContent":["import type { TypeToken } from \"../di\";\nimport type { HumanTaskActor, HumanTaskSubject } from \"./runtimeTypes\";\nimport type { JsonValue } from \"./workflowTypes\";\n\nexport type HumanTaskStatus = \"pending\" | \"decided\" | \"timed_out\" | \"auto_accepted\" | \"cancelled\";\n\nexport interface HumanTaskRecord {\n  readonly id: string;\n  readonly runId: string;\n  readonly workflowId: string;\n  readonly workspaceId?: string;\n  readonly nodeId: string;\n  readonly activationId: string;\n  readonly itemIndex: number;\n  readonly status: HumanTaskStatus;\n  readonly channel: string;\n  readonly subject: HumanTaskSubject;\n  readonly metadata: Record<string, JsonValue>;\n  readonly decisionSchemaJson: string;\n  readonly decisionSchemaHash: string;\n  readonly onTimeout: \"halt\" | \"auto-accept\";\n  readonly deliveryRef?: JsonValue;\n  readonly decision?: JsonValue;\n  readonly decidedAt?: Date;\n  readonly decidedBy?: HumanTaskActor;\n  readonly resumeTokenHash: string;\n  readonly expiresAt: Date;\n  readonly createdAt: Date;\n}\n\nexport interface HumanTaskStore {\n  create(record: HumanTaskRecord): Promise<void>;\n  findById(taskId: string): Promise<HumanTaskRecord | undefined>;\n  findByResumeTokenHash(tokenHash: string): Promise<HumanTaskRecord | undefined>;\n  findPendingForWorkspace(workspaceId: string): Promise<ReadonlyArray<HumanTaskRecord>>;\n  findAllPending(): Promise<ReadonlyArray<HumanTaskRecord>>;\n  markDecided(args: { taskId: string; decision: JsonValue; decidedBy: HumanTaskActor; decidedAt: Date }): Promise<void>;\n  markTimedOut(taskId: string): Promise<void>;\n  markAutoAccepted(taskId: string): Promise<void>;\n  markCancelled(taskId: string): Promise<void>;\n  cancelPendingForRun(runId: string): Promise<void>;\n}\n\nexport const HumanTaskStoreToken = Symbol.for(\"codemation.core.HumanTaskStore\") as TypeToken<\n  HumanTaskStore | undefined\n>;\n","import type { TypeToken } from \"../di\";\n\nexport interface HitlResumeTokenSignerSeam {\n  sign(args: { taskId: string; expiresAt: Date; schemaHash: string }): string;\n  hashToken(token: string): string;\n}\n\nexport interface HitlTimeoutJobSchedulerSeam {\n  enqueueTimeoutJob(args: { taskId: string; expiresAt: Date }): Promise<void>;\n}\n\nexport const HitlResumeTokenSignerToken = Symbol.for(\"codemation.core.HitlResumeTokenSigner\") as TypeToken<\n  HitlResumeTokenSignerSeam | undefined\n>;\n\nexport const HitlTimeoutJobSchedulerToken = Symbol.for(\"codemation.core.HitlTimeoutJobScheduler\") as TypeToken<\n  HitlTimeoutJobSchedulerSeam | undefined\n>;\n\nexport const HitlWorkspaceIdToken = Symbol.for(\"codemation.core.HitlWorkspaceId\") as TypeToken<string | undefined>;\n","import type { DefinedNode } from \"./defineNode.types\";\n\nexport class DefinedNodeRegistry {\n  private static readonly definitions = new Map<\n    string,\n    DefinedNode<string, Record<string, unknown>, unknown, unknown>\n  >();\n\n  static register(definition: DefinedNode<string, Record<string, unknown>, unknown, unknown>): void {\n    this.definitions.set(definition.key, definition);\n  }\n\n  static resolve(key: string): DefinedNode<string, Record<string, unknown>, unknown, unknown> | undefined {\n    return this.definitions.get(key);\n  }\n}\n","import type {\n  AnyCredentialType,\n  CredentialJsonRecord,\n  CredentialRequirement,\n  CredentialTypeId,\n} from \"../contracts/credentialTypes\";\nimport type { ParamDeep } from \"../contracts/params\";\nimport type { RunnableNode, RunnableNodeExecuteArgs, NodeExecutionContext } from \"../contracts/runtimeTypes\";\nimport type { Item, Items, NodeInspectorSummaryRow, RunnableNodeConfig } from \"../contracts/workflowTypes\";\nimport type { TypeToken } from \"../di\";\nimport { node as persistedNode } from \"../runtime-types/runtimeTypeDecorators.types\";\nimport type { ZodType } from \"zod\";\nimport { z } from \"zod\";\nimport { DefinedNodeRegistry } from \"./DefinedNodeRegistry\";\nimport type { NodeBaseOptions } from \"./nodeBaseOptions.types\";\n\ntype MaybePromise<TValue> = TValue | Promise<TValue>;\n\ntype ResolvableCredentialType = AnyCredentialType | CredentialTypeId;\n\ntype SessionForCredentialType<TCredential extends ResolvableCredentialType> = TCredential extends AnyCredentialType\n  ? Awaited<ReturnType<TCredential[\"createSession\"]>>\n  : unknown;\n\nexport type DefinedNodeCredentialBinding =\n  | ResolvableCredentialType\n  | Readonly<{\n      readonly type: ResolvableCredentialType | ReadonlyArray<ResolvableCredentialType>;\n      readonly label?: string;\n      readonly optional?: true;\n      readonly helpText?: string;\n      readonly helpUrl?: string;\n    }>;\n\nexport type DefinedNodeCredentialBindings = Readonly<Record<string, DefinedNodeCredentialBinding>>;\n\ntype SessionForBinding<TBinding extends DefinedNodeCredentialBinding> =\n  TBinding extends Readonly<{ type: infer TType }>\n    ? TType extends ReadonlyArray<infer TEntry>\n      ? SessionForCredentialType<TEntry & ResolvableCredentialType>\n      : SessionForCredentialType<TType & ResolvableCredentialType>\n    : SessionForCredentialType<TBinding & ResolvableCredentialType>;\n\nexport type DefinedNodeCredentialAccessors<TBindings extends DefinedNodeCredentialBindings | undefined> =\n  TBindings extends DefinedNodeCredentialBindings\n    ? Readonly<{\n        [TKey in keyof TBindings]: () => Promise<SessionForBinding<TBindings[TKey]>>;\n      }>\n    : Readonly<Record<string, never>>;\n\nexport interface DefinedNodeRunContext<\n  TConfig extends CredentialJsonRecord,\n  TBindings extends DefinedNodeCredentialBindings | undefined,\n> {\n  readonly config: TConfig;\n  readonly credentials: DefinedNodeCredentialAccessors<TBindings>;\n  readonly execution: NodeExecutionContext<RunnableNodeConfig<TConfig, unknown>>;\n}\n\nexport type DefineNodeExecuteArgs<TConfig extends CredentialJsonRecord, TInputJson> = Readonly<{\n  input: TInputJson;\n  item: Item;\n  itemIndex: number;\n  items: Items;\n  ctx: NodeExecutionContext<RunnableNodeConfig<TInputJson, unknown> & Readonly<{ config: TConfig }>>;\n}>;\n\nexport type DefinedNodeConfigInput<TConfigResolved extends CredentialJsonRecord, TItemJson> = ParamDeep<\n  TConfigResolved,\n  TItemJson\n>;\n\nexport interface DefinedNode<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson,\n  TOutputJson,\n  _TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n> {\n  readonly kind: \"defined-node\";\n  readonly key: TKey;\n  readonly title: string;\n  readonly description?: string;\n  create<TConfigItemJson = TInputJson>(\n    config: DefinedNodeConfigInput<TConfig, TConfigItemJson>,\n    name?: string,\n    idOrOptions?: string | NodeBaseOptions,\n  ): RunnableNodeConfig<TInputJson, TOutputJson>;\n  register(context: { registerNode<TValue>(token: TypeToken<TValue>, implementation?: TypeToken<TValue>): void }): void;\n}\n\nexport interface DefineNodeOptions<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson,\n  TOutputJson,\n  TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n> {\n  readonly key: TKey;\n  readonly title: string;\n  readonly description?: string;\n  readonly icon?: string;\n  readonly input?: Readonly<Record<keyof TConfig & string, unknown>>;\n  readonly configSchema?: z.ZodType<TConfig>;\n  readonly credentials?: TBindings;\n  readonly inputSchema?: ZodType<TInputJson>;\n  readonly keepBinaries?: boolean;\n  readonly inspectorSummary?: (\n    args: Readonly<{ config: TConfig }>,\n  ) => ReadonlyArray<NodeInspectorSummaryRow> | undefined;\n  execute(\n    args: DefineNodeExecuteArgs<TConfig, TInputJson>,\n    context: DefinedNodeRunContext<TConfig, TBindings>,\n  ): MaybePromise<TOutputJson>;\n}\n\nexport interface DefineBatchNodeOptions<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson,\n  TOutputJson,\n  TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n> {\n  readonly key: TKey;\n  readonly title: string;\n  readonly description?: string;\n  readonly icon?: string;\n  readonly input?: Readonly<Record<keyof TConfig & string, unknown>>;\n  readonly configSchema?: z.ZodType<TConfig>;\n  readonly credentials?: TBindings;\n  readonly inspectorSummary?: (\n    args: Readonly<{ config: TConfig }>,\n  ) => ReadonlyArray<NodeInspectorSummaryRow> | undefined;\n  run(\n    items: ReadonlyArray<TInputJson>,\n    context: DefinedNodeRunContext<TConfig, TBindings>,\n  ): MaybePromise<ReadonlyArray<TOutputJson>>;\n}\n\nconst definedNodeCredentialRequirementFactory = {\n  create(bindings: DefinedNodeCredentialBindings | undefined): ReadonlyArray<CredentialRequirement> {\n    if (!bindings) {\n      return [];\n    }\n    return Object.entries(bindings).map(([slotKey, binding]) => {\n      if (typeof binding === \"string\" || this.isCredentialType(binding)) {\n        return {\n          slotKey,\n          label: this.humanize(slotKey),\n          acceptedTypes: [this.resolveTypeId(binding)],\n        };\n      }\n\n      const types = Array.isArray(binding.type) ? binding.type : [binding.type];\n      return {\n        slotKey,\n        label: binding.label ?? this.humanize(slotKey),\n        acceptedTypes: types.map((entry) => this.resolveTypeId(entry)),\n        optional: binding.optional,\n        helpText: binding.helpText,\n        helpUrl: binding.helpUrl,\n      };\n    });\n  },\n\n  isCredentialType(value: unknown): value is AnyCredentialType {\n    return (\n      Boolean(value) &&\n      typeof value === \"object\" &&\n      \"definition\" in (value as Record<string, unknown>) &&\n      typeof (value as AnyCredentialType).definition?.typeId === \"string\"\n    );\n  },\n\n  resolveTypeId(type: ResolvableCredentialType): string {\n    return typeof type === \"string\" ? type : type.definition.typeId;\n  },\n\n  humanize(key: string): string {\n    return key\n      .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n      .replace(/[-_.]+/g, \" \")\n      .replace(/\\s+/g, \" \")\n      .trim()\n      .replace(/^./, (character) => character.toUpperCase());\n  },\n} as const;\n\nconst definedNodeCredentialAccessorFactory = {\n  create<TBindings extends DefinedNodeCredentialBindings | undefined>(\n    bindings: TBindings,\n    ctx: NodeExecutionContext<RunnableNodeConfig<any, any>>,\n  ): DefinedNodeCredentialAccessors<TBindings> {\n    if (!bindings) {\n      return {} as DefinedNodeCredentialAccessors<TBindings>;\n    }\n    const entries = Object.keys(bindings).map((slotKey) => [slotKey, () => ctx.getCredential(slotKey)] as const);\n    return Object.fromEntries(entries) as DefinedNodeCredentialAccessors<TBindings>;\n  },\n} as const;\n\nexport function defineNode<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson,\n  TOutputJson,\n  TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n>(\n  options: DefineNodeOptions<TKey, TConfig, TInputJson, TOutputJson, TBindings>,\n): DefinedNode<TKey, TConfig, TInputJson, TOutputJson, TBindings> {\n  const credentialRequirements = definedNodeCredentialRequirementFactory.create(options.credentials);\n  type DefinedRunnableNodeConfigShape = RunnableNodeConfig<TInputJson, TOutputJson> & Readonly<{ config: TConfig }>;\n\n  const DefinedNodeRuntime = class implements RunnableNode<DefinedRunnableNodeConfigShape, TInputJson, TOutputJson> {\n    readonly kind = \"node\" as const;\n    readonly outputPorts = [\"main\"] as const;\n    readonly inputSchema = options.inputSchema;\n\n    async execute(\n      args: Readonly<RunnableNodeExecuteArgs<DefinedRunnableNodeConfigShape, TInputJson>>,\n    ): Promise<unknown> {\n      const ctx = args.ctx;\n      const context: DefinedNodeRunContext<TConfig, TBindings> = {\n        config: ctx.config.config,\n        credentials: definedNodeCredentialAccessorFactory.create(\n          options.credentials,\n          ctx,\n        ) as DefinedNodeCredentialAccessors<TBindings>,\n        execution: ctx as unknown as NodeExecutionContext<RunnableNodeConfig<TConfig, unknown>>,\n      };\n      const payload: DefineNodeExecuteArgs<TConfig, TInputJson> = {\n        input: args.input,\n        item: args.item,\n        itemIndex: args.itemIndex,\n        items: args.items,\n        ctx,\n      };\n      return await options.execute(payload, context);\n    }\n  };\n\n  persistedNode({ name: options.key })(DefinedNodeRuntime);\n\n  const DefinedRunnableNodeConfig = class implements RunnableNodeConfig<TInputJson, TOutputJson> {\n    readonly kind = \"node\" as const;\n    readonly type: TypeToken<unknown> = DefinedNodeRuntime;\n    readonly icon = options.icon;\n    readonly inputSchema = options.inputSchema;\n    readonly keepBinaries = options.keepBinaries ?? false;\n    readonly id?: string;\n    readonly description?: string;\n\n    constructor(\n      public readonly name: string,\n      config: DefinedNodeConfigInput<TConfig, unknown>,\n      idOrOptions?: string | NodeBaseOptions,\n    ) {\n      const resolved = typeof idOrOptions === \"string\" ? { id: idOrOptions } : idOrOptions;\n      this.id = resolved?.id;\n      this.description = resolved?.description;\n      this.config = config as unknown as TConfig;\n    }\n\n    public readonly config: TConfig;\n\n    getCredentialRequirements(): ReadonlyArray<CredentialRequirement> {\n      return credentialRequirements;\n    }\n\n    inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined {\n      return options.inspectorSummary?.({ config: this.config });\n    }\n  };\n\n  const definition: DefinedNode<TKey, TConfig, TInputJson, TOutputJson, TBindings> = {\n    kind: \"defined-node\",\n    key: options.key,\n    title: options.title,\n    description: options.description,\n    create<TConfigItemJson = TInputJson>(\n      config: DefinedNodeConfigInput<TConfig, TConfigItemJson>,\n      name = options.title,\n      idOrOptions?: string | NodeBaseOptions,\n    ) {\n      return new DefinedRunnableNodeConfig(name, config as DefinedNodeConfigInput<TConfig, unknown>, idOrOptions);\n    },\n    register(context) {\n      context.registerNode(DefinedNodeRuntime);\n    },\n  };\n\n  DefinedNodeRegistry.register(definition as DefinedNode<string, Record<string, unknown>, unknown, unknown, undefined>);\n\n  return definition;\n}\n\nexport function defineBatchNode<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson,\n  TOutputJson,\n  TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n>(\n  options: DefineBatchNodeOptions<TKey, TConfig, TInputJson, TOutputJson, TBindings>,\n): DefinedNode<TKey, TConfig, TInputJson, TOutputJson, TBindings> {\n  const credentialRequirements = definedNodeCredentialRequirementFactory.create(options.credentials);\n  type DefinedRunnableNodeConfigShape = RunnableNodeConfig<TInputJson, TOutputJson> & Readonly<{ config: TConfig }>;\n\n  const DefinedNodeRuntime = class implements RunnableNode<DefinedRunnableNodeConfigShape, TInputJson, TOutputJson> {\n    readonly kind = \"node\" as const;\n    readonly outputPorts = [\"main\"] as const;\n\n    async execute(\n      args: Readonly<RunnableNodeExecuteArgs<DefinedRunnableNodeConfigShape, TInputJson>>,\n    ): Promise<unknown> {\n      if (args.itemIndex !== args.items.length - 1) {\n        return [];\n      }\n      const ctx = args.ctx;\n      const context: DefinedNodeRunContext<TConfig, TBindings> = {\n        config: ctx.config.config,\n        credentials: definedNodeCredentialAccessorFactory.create(\n          options.credentials,\n          ctx,\n        ) as DefinedNodeCredentialAccessors<TBindings>,\n        execution: ctx as unknown as NodeExecutionContext<RunnableNodeConfig<TConfig, unknown>>,\n      };\n      const outputs = await options.run(\n        args.items.map((item) => item.json as TInputJson),\n        context,\n      );\n      return [...outputs];\n    }\n  };\n\n  persistedNode({ name: options.key })(DefinedNodeRuntime);\n\n  const DefinedRunnableNodeConfig = class implements RunnableNodeConfig<TInputJson, TOutputJson> {\n    readonly kind = \"node\" as const;\n    readonly type: TypeToken<unknown> = DefinedNodeRuntime;\n    readonly icon = options.icon;\n    readonly id?: string;\n    readonly description?: string;\n\n    constructor(\n      public readonly name: string,\n      config: DefinedNodeConfigInput<TConfig, unknown>,\n      idOrOptions?: string | NodeBaseOptions,\n    ) {\n      const resolved = typeof idOrOptions === \"string\" ? { id: idOrOptions } : idOrOptions;\n      this.id = resolved?.id;\n      this.description = resolved?.description;\n      this.config = config as unknown as TConfig;\n    }\n\n    public readonly config: TConfig;\n\n    getCredentialRequirements(): ReadonlyArray<CredentialRequirement> {\n      return credentialRequirements;\n    }\n\n    inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined {\n      return options.inspectorSummary?.({ config: this.config });\n    }\n  };\n\n  const definition: DefinedNode<TKey, TConfig, TInputJson, TOutputJson, TBindings> = {\n    kind: \"defined-node\",\n    key: options.key,\n    title: options.title,\n    description: options.description,\n    create<TConfigItemJson = TInputJson>(\n      config: DefinedNodeConfigInput<TConfig, TConfigItemJson>,\n      name = options.title,\n      idOrOptions?: string | NodeBaseOptions,\n    ) {\n      return new DefinedRunnableNodeConfig(name, config as DefinedNodeConfigInput<TConfig, unknown>, idOrOptions);\n    },\n    register(context) {\n      context.registerNode(DefinedNodeRuntime);\n    },\n  };\n\n  DefinedNodeRegistry.register(definition as DefinedNode<string, Record<string, unknown>, unknown, unknown, undefined>);\n\n  return definition;\n}\n","import type {\n  Duration,\n  ExecutionContext,\n  HumanTaskActor,\n  HumanTaskHandle,\n  HumanTaskSubject,\n  NodeExecutionContext,\n  ResumeContext,\n} from \"../contracts/runtimeTypes\";\nimport type { Item, JsonValue, NodeInspectorSummaryRow, NodeConfigBase } from \"../contracts/workflowTypes\";\nimport type { CredentialJsonRecord } from \"../contracts/credentialTypes\";\nimport type { ZodObject, ZodType } from \"zod\";\nimport type { DefinedNodeCredentialBindings } from \"./defineNode.types\";\nimport { SuspensionRequest } from \"../contracts/runtimeTypes\";\nimport { defineNode } from \"./defineNode.types\";\nimport type { DefinedNode } from \"./defineNode.types\";\n\nexport interface HumanApprovalDecisionResult {\n  readonly status: \"approved\" | \"rejected\" | \"timed-out\" | \"auto-accepted\";\n  readonly actor?: HumanTaskActor;\n  readonly decidedAt?: Date;\n  readonly note?: string;\n  readonly payload?: Record<string, unknown>;\n}\n\nexport type HumanApprovalOutputJson<TInputJson extends Record<string, unknown>> = TInputJson & {\n  readonly decision: HumanApprovalDecisionResult;\n};\n\nexport interface DefinedHumanApprovalNode<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson extends Record<string, unknown>,\n  TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n> extends DefinedNode<TKey, TConfig, TInputJson, HumanApprovalOutputJson<TInputJson>, TBindings> {\n  readonly humanApprovalToolBehavior: { onRejected: \"return\" | \"halt\" };\n}\n\nexport function isHumanApprovalNode(\n  node: unknown,\n): node is DefinedHumanApprovalNode<string, Record<string, unknown>, Record<string, unknown>, undefined> {\n  return (\n    typeof node === \"object\" &&\n    node !== null &&\n    \"humanApprovalToolBehavior\" in node &&\n    typeof (node as { humanApprovalToolBehavior: unknown }).humanApprovalToolBehavior === \"object\"\n  );\n}\n\nexport function defineHumanApprovalNode<\n  TKey extends string,\n  TConfig extends CredentialJsonRecord,\n  TInputJson extends Record<string, unknown>,\n  TDecision extends Record<string, unknown>,\n  TDelivery extends JsonValue,\n  TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n>(opts: {\n  key: TKey;\n  title: string;\n  description?: string;\n  icon?: string;\n  channel: string;\n\n  configSchema: ZodType<TConfig>;\n  inputSchema?: ZodType<TInputJson>;\n  decisionSchema: ZodType<TDecision>;\n  credentials?: TBindings;\n\n  approvedPredicate?: (decision: TDecision) => boolean;\n  defaultTimeout?: Duration;\n  defaultOnTimeout?: \"halt\" | \"auto-accept\";\n\n  inspectorSummary?: (config: TConfig) => ReadonlyArray<NodeInspectorSummaryRow> | undefined;\n\n  deliver: (\n    args: {\n      task: HumanTaskHandle;\n      config: TConfig;\n      input: TInputJson;\n      item: Item;\n    },\n    ctx: ExecutionContext,\n  ) => Promise<TDelivery>;\n\n  onDecision?: (\n    args: {\n      decision: TDecision;\n      actor: HumanTaskActor;\n      task: HumanTaskHandle;\n      delivery: TDelivery;\n      item: Item;\n    },\n    ctx: ExecutionContext,\n  ) => Promise<void>;\n\n  onTimeout?: (\n    args: {\n      task: HumanTaskHandle;\n      delivery: TDelivery;\n      item: Item;\n      policy: \"halt\" | \"auto-accept\";\n    },\n    ctx: ExecutionContext,\n  ) => Promise<void>;\n}): DefinedHumanApprovalNode<TKey, TConfig, TInputJson, TBindings> {\n  const resolvedPredicate = resolveApprovedPredicate(opts.decisionSchema, opts.approvedPredicate);\n\n  const timeout = opts.defaultTimeout ?? \"24h\";\n  const onTimeout = opts.defaultOnTimeout ?? \"halt\";\n\n  const inner = defineNode<TKey, TConfig, TInputJson, unknown, TBindings>({\n    key: opts.key,\n    title: opts.title,\n    description: opts.description,\n    icon: opts.icon,\n    configSchema: opts.configSchema,\n    inputSchema: opts.inputSchema,\n    credentials: opts.credentials,\n    inspectorSummary: opts.inspectorSummary ? ({ config }) => opts.inspectorSummary!(config) : undefined,\n\n    async execute(args, { config, execution: ctx }) {\n      if (!ctx.resumeContext) {\n        const subject = buildSubject(opts.title, args.item, ctx);\n        throw new SuspensionRequest({\n          decisionSchema: opts.decisionSchema,\n          timeout,\n          onTimeout,\n          subject,\n          metadata: {\n            channel: opts.channel,\n            nodeKey: opts.key,\n            approvedPredicateSource: opts.approvedPredicate?.toString() ?? null,\n          },\n          deliver: (handle: HumanTaskHandle) =>\n            opts.deliver(\n              {\n                task: handle,\n                config,\n                input: args.input as TInputJson,\n                item: args.item,\n              },\n              ctx,\n            ),\n        });\n      }\n\n      return await handleResume(\n        args.item,\n        ctx.resumeContext,\n        opts.decisionSchema,\n        resolvedPredicate,\n        opts.onDecision,\n        opts.onTimeout,\n        ctx,\n      );\n    },\n  });\n\n  return Object.assign(inner, {\n    humanApprovalToolBehavior: { onRejected: \"return\" as const },\n  }) as unknown as DefinedHumanApprovalNode<TKey, TConfig, TInputJson, TBindings>;\n}\n\nfunction resolveApprovedPredicate<TDecision extends Record<string, unknown>>(\n  schema: ZodType<TDecision>,\n  predicate: ((d: TDecision) => boolean) | undefined,\n): (d: TDecision) => boolean {\n  if (predicate) {\n    return predicate;\n  }\n  const shape = (schema as unknown as ZodObject<Record<string, ZodType>>).shape;\n  if (shape && typeof shape === \"object\" && \"approved\" in shape) {\n    return (d) => (d as { approved?: unknown }).approved === true;\n  }\n  throw new Error(\n    `defineHumanApprovalNode: decisionSchema has no \"approved\" field and no approvedPredicate was provided. ` +\n      `Either add { approved: z.boolean() } to the decision schema or supply approvedPredicate explicitly.`,\n  );\n}\n\nfunction buildSubject(title: string, item: Item, ctx: NodeExecutionContext<NodeConfigBase>): HumanTaskSubject {\n  return {\n    title,\n    summary: \"\",\n    attributes: {\n      workflowId: ctx.workflowId,\n      nodeId: ctx.nodeId,\n      item: item.json as JsonValue,\n    },\n  };\n}\n\nfunction mergeDecision(\n  item: Item,\n  decision: HumanApprovalDecisionResult,\n): { json: Record<string, unknown>; binary: Item[\"binary\"]; meta: Item[\"meta\"] } {\n  return {\n    json: { ...(item.json as Record<string, unknown>), decision },\n    binary: item.binary,\n    meta: item.meta,\n  };\n}\n\nasync function handleResume<TDecision extends Record<string, unknown>, TDelivery extends JsonValue>(\n  item: Item,\n  resumeContext: ResumeContext,\n  decisionSchema: ZodType<TDecision>,\n  resolvedPredicate: (d: TDecision) => boolean,\n  onDecision:\n    | ((\n        args: {\n          decision: TDecision;\n          actor: HumanTaskActor;\n          task: HumanTaskHandle;\n          delivery: TDelivery;\n          item: Item;\n        },\n        ctx: ExecutionContext,\n      ) => Promise<void>)\n    | undefined,\n  onTimeoutCb:\n    | ((\n        args: {\n          task: HumanTaskHandle;\n          delivery: TDelivery;\n          item: Item;\n          policy: \"halt\" | \"auto-accept\";\n        },\n        ctx: ExecutionContext,\n      ) => Promise<void>)\n    | undefined,\n  ctx: ExecutionContext,\n): Promise<{ json: Record<string, unknown>; binary: Item[\"binary\"]; meta: Item[\"meta\"] }> {\n  const { decision: dec, delivery, task } = resumeContext;\n\n  if (dec.kind === \"timed_out\" || dec.kind === \"auto_accepted\") {\n    const policy: \"halt\" | \"auto-accept\" = dec.kind === \"auto_accepted\" ? \"auto-accept\" : \"halt\";\n    await onTimeoutCb?.({ task, delivery: delivery as TDelivery, item, policy }, ctx);\n    const status = dec.kind === \"auto_accepted\" ? \"auto-accepted\" : \"timed-out\";\n    return mergeDecision(item, { status, decidedAt: dec.at });\n  }\n\n  const parsed = decisionSchema.parse(dec.value);\n  await onDecision?.(\n    {\n      decision: parsed,\n      actor: dec.actor,\n      task,\n      delivery: delivery as TDelivery,\n      item,\n    },\n    ctx,\n  );\n\n  const isApproved = resolvedPredicate(parsed);\n  return mergeDecision(item, {\n    status: isApproved ? \"approved\" : \"rejected\",\n    actor: dec.actor,\n    decidedAt: dec.decidedAt,\n    note: (parsed as { note?: string }).note,\n    payload: parsed,\n  });\n}\n","import type {\n  InputPortKey,\n  NodeId,\n  NodeRef,\n  OutputPortKey,\n  RunnableNodeConfig,\n  RunnableNodeOutputJson,\n  UpstreamRefPlaceholder,\n  WorkflowDefinition,\n} from \"../../types\";\n\nimport type { DefinedNodeCredentialBindings } from \"../../authoring/defineNode.types\";\nimport type { DefinedHumanApprovalNode, HumanApprovalOutputJson } from \"../../authoring/defineHumanApprovalNode.types\";\nimport { WorkflowBuilder } from \"./WorkflowBuilder\";\nimport { ChainCursor } from \"./ChainCursorResolver\";\nimport type { AnyRunnableNodeConfig, BooleanWhenOverloads, ValidStepSequence } from \"./workflowBuilderTypes\";\n\ntype WhenEndpoint = Readonly<{ node: NodeRef; output: OutputPortKey; inputPortHint?: InputPortKey }>;\n\nexport class WhenBuilder<TCurrentJson> {\n  private armEndpoint: WhenEndpoint | undefined;\n\n  constructor(\n    private readonly wf: WorkflowBuilder,\n    private readonly from: NodeRef,\n    private readonly branchPort: OutputPortKey,\n    private readonly priorEndpoints: ReadonlyArray<WhenEndpoint> = [],\n  ) {}\n\n  addBranch<TSteps extends ReadonlyArray<AnyRunnableNodeConfig>>(\n    steps: TSteps & ValidStepSequence<TCurrentJson, TSteps>,\n  ): this {\n    const created: NodeRef[] = [];\n\n    let prev: NodeRef | null = null;\n    for (const cfg of steps) {\n      const ref = (this.wf as any).add(cfg) as NodeRef;\n      created.push(ref);\n      if (!prev) (this.wf as any).connect(this.from, ref, this.branchPort, \"in\");\n      else (this.wf as any).connect(prev, ref, \"main\", \"in\");\n      prev = ref;\n    }\n\n    for (const cfg of steps) {\n      const maybe = cfg as unknown as { upstreamRefs?: Array<{ nodeId: NodeId } | UpstreamRefPlaceholder> };\n      if (!Array.isArray(maybe.upstreamRefs) || maybe.upstreamRefs.length === 0) continue;\n\n      maybe.upstreamRefs = maybe.upstreamRefs.map((r) => {\n        if (typeof r !== \"string\") return r;\n        const idx = parseInt(r.slice(1), 10);\n        const nodeId = created[idx]?.id;\n        return nodeId ? { nodeId } : { nodeId: r };\n      });\n    }\n\n    this.armEndpoint = prev\n      ? { node: prev, output: \"main\", inputPortHint: this.branchPort }\n      : { node: this.from, output: this.branchPort, inputPortHint: this.branchPort };\n\n    return this;\n  }\n\n  readonly when: BooleanWhenOverloads<TCurrentJson, WhenBuilder<TCurrentJson>> = (\n    branch: boolean,\n    steps: ReadonlyArray<AnyRunnableNodeConfig> | AnyRunnableNodeConfig,\n    ...more: AnyRunnableNodeConfig[]\n  ): WhenBuilder<TCurrentJson> => {\n    const list = Array.isArray(steps) ? steps : [steps, ...more];\n    const port: OutputPortKey = branch ? \"true\" : \"false\";\n    const b = new WhenBuilder<TCurrentJson>(this.wf, this.from, port, this.accumulatedEndpoints);\n    b.addBranch(list);\n    return b;\n  };\n\n  then<TOutputJson, TConfig extends RunnableNodeConfig<TCurrentJson, TOutputJson>>(\n    config: TConfig,\n  ): ChainCursor<RunnableNodeOutputJson<TConfig>> {\n    return this.toCursor().then(config);\n  }\n\n  humanApproval<\n    TKey extends string,\n    TConfig extends Record<string, unknown>,\n    TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n  >(\n    node: DefinedHumanApprovalNode<TKey, TConfig, TCurrentJson & Record<string, unknown>, TBindings>,\n    config: TConfig,\n    metadata?: { name?: string; nodeId?: string },\n  ): ChainCursor<HumanApprovalOutputJson<TCurrentJson & Record<string, unknown>>> {\n    return this.toCursor().humanApproval(node, config, metadata);\n  }\n\n  build(): WorkflowDefinition {\n    return this.wf.build();\n  }\n\n  private get accumulatedEndpoints(): ReadonlyArray<WhenEndpoint> {\n    return this.armEndpoint ? [...this.priorEndpoints, this.armEndpoint] : this.priorEndpoints;\n  }\n\n  private toCursor(): ChainCursor<TCurrentJson> {\n    return new ChainCursor<TCurrentJson>(this.wf, this.accumulatedEndpoints);\n  }\n}\n","import type { RunnableNodeConfig, RunnableNodeOutputJson, TriggerNodeConfig } from \"../../types\";\n\nexport function mergeForward<TIn, TOut>(config: RunnableNodeConfig<TIn, TOut>): RunnableNodeConfig<TIn, TIn & TOut> {\n  (config as { mergeJson?: boolean }).mergeJson = true;\n  return config as unknown as RunnableNodeConfig<TIn, TIn & TOut>;\n}\n\nexport type AnyRunnableNodeConfig = RunnableNodeConfig<any, any>;\n\nexport type AnyTriggerNodeConfig = TriggerNodeConfig<any>;\n\nexport type ValidStepSequence<\n  TCurrentJson,\n  TSteps extends ReadonlyArray<AnyRunnableNodeConfig>,\n> = TSteps extends readonly []\n  ? readonly []\n  : TSteps extends readonly [infer TFirst, ...infer TRest]\n    ? TFirst extends RunnableNodeConfig<TCurrentJson, infer TNextJson>\n      ? TRest extends ReadonlyArray<AnyRunnableNodeConfig>\n        ? readonly [TFirst, ...ValidStepSequence<TNextJson, TRest>]\n        : never\n      : never\n    : TSteps;\n\nexport type StepSequenceOutput<TCurrentJson, TSteps extends ReadonlyArray<AnyRunnableNodeConfig> | undefined> =\n  TSteps extends ReadonlyArray<AnyRunnableNodeConfig>\n    ? TSteps extends readonly []\n      ? TCurrentJson\n      : TSteps extends readonly [infer TFirst, ...infer TRest]\n        ? TFirst extends RunnableNodeConfig<TCurrentJson, infer TNextJson>\n          ? TRest extends ReadonlyArray<AnyRunnableNodeConfig>\n            ? StepSequenceOutput<TNextJson, TRest>\n            : never\n          : never\n        : TCurrentJson\n    : TCurrentJson;\n\ntype TypesMatch<TLeft, TRight> = [TLeft] extends [TRight] ? ([TRight] extends [TLeft] ? true : false) : false;\n\nexport type BranchOutputGuard<\n  TCurrentJson,\n  TTrueSteps extends ReadonlyArray<AnyRunnableNodeConfig> | undefined,\n  TFalseSteps extends ReadonlyArray<AnyRunnableNodeConfig> | undefined,\n> =\n  TypesMatch<StepSequenceOutput<TCurrentJson, TTrueSteps>, StepSequenceOutput<TCurrentJson, TFalseSteps>> extends true\n    ? unknown\n    : never;\n\nexport type BranchStepsArg<TCurrentJson, TSteps extends ReadonlyArray<AnyRunnableNodeConfig>> = TSteps &\n  ValidStepSequence<TCurrentJson, TSteps>;\n\nexport type BranchMoreArgs<\n  TCurrentJson,\n  TFirstStep extends RunnableNodeConfig<TCurrentJson, any>,\n  TRestSteps extends ReadonlyArray<AnyRunnableNodeConfig>,\n> = TRestSteps & ValidStepSequence<RunnableNodeOutputJson<TFirstStep>, TRestSteps>;\n\nexport type BooleanWhenOverloads<TCurrentJson, TReturn> = {\n  <TSteps extends ReadonlyArray<AnyRunnableNodeConfig>>(\n    branch: boolean,\n    steps: BranchStepsArg<TCurrentJson, TSteps>,\n  ): TReturn;\n  <TFirstStep extends RunnableNodeConfig<TCurrentJson, any>, TRestSteps extends ReadonlyArray<AnyRunnableNodeConfig>>(\n    branch: boolean,\n    step: TFirstStep,\n    ...more: BranchMoreArgs<TCurrentJson, TFirstStep, TRestSteps>\n  ): TReturn;\n};\n","import type {\n  InputPortKey,\n  NodeRef,\n  OutputPortKey,\n  RunnableNodeConfig,\n  RunnableNodeOutputJson,\n  WorkflowDefinition,\n} from \"../../types\";\n\nimport type { DefinedNodeCredentialBindings } from \"../../authoring/defineNode.types\";\nimport type { DefinedHumanApprovalNode, HumanApprovalOutputJson } from \"../../authoring/defineHumanApprovalNode.types\";\nimport { isHumanApprovalNode } from \"../../authoring/defineHumanApprovalNode.types\";\nimport { WorkflowBuilder } from \"./WorkflowBuilder\";\nimport { WhenBuilder } from \"./WhenBuilder\";\nimport type {\n  AnyRunnableNodeConfig,\n  BooleanWhenOverloads,\n  BranchOutputGuard,\n  BranchStepsArg,\n  StepSequenceOutput,\n} from \"./workflowBuilderTypes\";\nimport { mergeForward } from \"./workflowBuilderTypes\";\n\ntype ChainCursorEndpoint = Readonly<{ node: NodeRef; output: OutputPortKey; inputPortHint?: InputPortKey }>;\n\ntype ChainCursorWhenOverloads<TCurrentJson> = BooleanWhenOverloads<TCurrentJson, WhenBuilder<TCurrentJson>> & {\n  <\n    TTrueSteps extends ReadonlyArray<AnyRunnableNodeConfig> | undefined,\n    TFalseSteps extends ReadonlyArray<AnyRunnableNodeConfig> | undefined,\n  >(\n    branches: Readonly<{\n      true?: TTrueSteps extends ReadonlyArray<AnyRunnableNodeConfig> ? BranchStepsArg<TCurrentJson, TTrueSteps> : never;\n      false?: TFalseSteps extends ReadonlyArray<AnyRunnableNodeConfig>\n        ? BranchStepsArg<TCurrentJson, TFalseSteps>\n        : never;\n    }> &\n      BranchOutputGuard<TCurrentJson, TTrueSteps, TFalseSteps>,\n  ): ChainCursor<StepSequenceOutput<TCurrentJson, TTrueSteps>>;\n};\n\nexport class ChainCursor<TCurrentJson> {\n  constructor(\n    private readonly wf: WorkflowBuilder,\n    private readonly endpoints: ReadonlyArray<ChainCursorEndpoint>,\n  ) {}\n\n  then<TOutputJson, TConfig extends RunnableNodeConfig<TCurrentJson, TOutputJson>>(\n    config: TConfig,\n  ): ChainCursor<RunnableNodeOutputJson<TConfig>> {\n    const next = (this.wf as any).add(config) as NodeRef;\n    const inputPortHint = this.resolveSharedInputPortHint();\n    for (const e of this.endpoints) {\n      (this.wf as any).connect(e.node, next, e.output);\n    }\n    return new ChainCursor<RunnableNodeOutputJson<TConfig>>(this.wf, [\n      { node: next, output: \"main\", ...(inputPortHint ? { inputPortHint } : {}) },\n    ]);\n  }\n\n  thenMerge<TOutputJson, TConfig extends RunnableNodeConfig<TCurrentJson, TOutputJson>>(\n    config: TConfig,\n  ): ChainCursor<TCurrentJson & RunnableNodeOutputJson<TConfig>> {\n    mergeForward(config);\n    return this.then(config) as unknown as ChainCursor<TCurrentJson & RunnableNodeOutputJson<TConfig>>;\n  }\n\n  thenIntoInputHints<TOutputJson, TConfig extends RunnableNodeConfig<any, TOutputJson>>(\n    config: TConfig,\n  ): ChainCursor<RunnableNodeOutputJson<TConfig>> {\n    const next = (this.wf as any).add(config) as NodeRef;\n    for (const e of this.endpoints) {\n      (this.wf as any).connect(e.node, next, e.output, e.inputPortHint ?? \"in\");\n    }\n    return new ChainCursor<RunnableNodeOutputJson<TConfig>>(this.wf, [{ node: next, output: \"main\" }]);\n  }\n\n  readonly when: ChainCursorWhenOverloads<TCurrentJson> = ((\n    arg1:\n      | boolean\n      | Readonly<{ true?: ReadonlyArray<AnyRunnableNodeConfig>; false?: ReadonlyArray<AnyRunnableNodeConfig> }>,\n    steps?: ReadonlyArray<AnyRunnableNodeConfig> | AnyRunnableNodeConfig,\n    ...more: AnyRunnableNodeConfig[]\n  ): WhenBuilder<TCurrentJson> | ChainCursor<TCurrentJson> => {\n    if (this.endpoints.length !== 1) {\n      throw new Error(\"ChainCursor.when(...) is only supported from a single cursor endpoint\");\n    }\n    const cursor = this.endpoints[0]!.node;\n\n    if (typeof arg1 === \"boolean\") {\n      const list = Array.isArray(steps) ? steps : steps ? [steps, ...more] : more;\n      const port: OutputPortKey = arg1 ? \"true\" : \"false\";\n      const b = new WhenBuilder<TCurrentJson>(this.wf, cursor, port);\n      b.addBranch(list);\n      return b;\n    }\n\n    const branches = arg1;\n    const wfAny = this.wf as any;\n\n    const buildBranch = (\n      port: OutputPortKey,\n      branchSteps: ReadonlyArray<AnyRunnableNodeConfig> | undefined,\n    ): Readonly<{ end: NodeRef; endOutput: OutputPortKey; inputPortHint: InputPortKey }> => {\n      const list = branchSteps ?? [];\n      let prev: NodeRef | null = null;\n      for (const cfg of list) {\n        const ref = wfAny.add(cfg) as NodeRef;\n        if (!prev) wfAny.connect(cursor, ref, port, \"in\");\n        else wfAny.connect(prev, ref, \"main\", \"in\");\n        prev = ref;\n      }\n      if (!prev) return { end: cursor, endOutput: port, inputPortHint: port };\n      return { end: prev, endOutput: \"main\", inputPortHint: port };\n    };\n\n    const t = buildBranch(\"true\", branches.true);\n    const f = buildBranch(\"false\", branches.false);\n    return new ChainCursor<TCurrentJson>(this.wf, [\n      { node: t.end, output: t.endOutput, inputPortHint: t.inputPortHint },\n      { node: f.end, output: f.endOutput, inputPortHint: f.inputPortHint },\n    ]);\n  }) as ChainCursorWhenOverloads<TCurrentJson>;\n\n  route<TNextJson>(\n    branches: Readonly<\n      Record<OutputPortKey, (branch: ChainCursor<TCurrentJson>) => ChainCursor<TNextJson> | undefined>\n    >,\n  ): ChainCursor<TNextJson> {\n    if (this.endpoints.length !== 1) {\n      throw new Error(\"ChainCursor.route(...) is only supported from a single cursor endpoint\");\n    }\n    const cursor = this.endpoints[0]!;\n    const nextEndpoints: ChainCursorEndpoint[] = [];\n    for (const [port, branchFactory] of Object.entries(branches)) {\n      if (!branchFactory) {\n        continue;\n      }\n      const branch = new ChainCursor<TCurrentJson>(this.wf, [{ node: cursor.node, output: port, inputPortHint: port }]);\n      const builtBranch = branchFactory(branch);\n      if (!builtBranch) {\n        continue;\n      }\n      nextEndpoints.push(...builtBranch.endpoints);\n    }\n    return new ChainCursor<TNextJson>(this.wf, nextEndpoints);\n  }\n\n  humanApproval<\n    TKey extends string,\n    TConfig extends Record<string, unknown>,\n    TBindings extends DefinedNodeCredentialBindings | undefined = undefined,\n  >(\n    node: DefinedHumanApprovalNode<TKey, TConfig, TCurrentJson & Record<string, unknown>, TBindings>,\n    config: TConfig,\n    metadata?: { name?: string; nodeId?: string },\n  ): ChainCursor<HumanApprovalOutputJson<TCurrentJson & Record<string, unknown>>> {\n    if (!isHumanApprovalNode(node)) {\n      throw new Error(\n        `.humanApproval() requires a node created via defineHumanApprovalNode (got '${(node as { key?: string }).key ?? String(node)}').`,\n      );\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return this.then(node.create(config as any, metadata?.name, metadata?.nodeId));\n  }\n\n  build(): WorkflowDefinition {\n    return this.wf.build();\n  }\n\n  private resolveSharedInputPortHint(): InputPortKey | undefined {\n    const first = this.endpoints[0]?.inputPortHint;\n    if (!first) {\n      return undefined;\n    }\n    return this.endpoints.every((endpoint) => endpoint.inputPortHint === first) ? first : undefined;\n  }\n}\n","export const NodeIdSlugifier = {\n  slugify(label: string): string {\n    if (!label) return \"\";\n    return label\n      .toLowerCase()\n      .replace(/[^a-z0-9]+/g, \"-\")\n      .replace(/^-+|-+$/g, \"\");\n  },\n};\n","export class WorkflowDefinitionError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"WorkflowDefinitionError\";\n  }\n}\n","import type {\n  InputPortKey,\n  NodeConfigBase,\n  NodeDefinition,\n  NodeRef,\n  OutputPortKey,\n  RunnableNodeOutputJson,\n  TriggerNodeOutputJson,\n  WorkflowDefinition,\n  WorkflowId,\n} from \"../../types\";\n\nimport { AgentConfigInspector } from \"../../ai/AgentConfigInspectorFactory\";\nimport { AgentConnectionNodeCollector } from \"../../ai/AgentConnectionNodeCollector\";\nimport { ChainCursor } from \"./ChainCursorResolver\";\nimport { NodeIdSlugifier } from \"./NodeIdSlugifier\";\nimport { WorkflowDefinitionError } from \"./WorkflowDefinitionError\";\nimport type { AnyRunnableNodeConfig, AnyTriggerNodeConfig } from \"./workflowBuilderTypes\";\n\ntype NodeIdEntry = Readonly<{\n  nodeId: string;\n  tokenName: string;\n  label: string;\n}>;\n\nexport class WorkflowBuilder {\n  private readonly nodes: NodeDefinition[] = [];\n  private readonly edges: WorkflowDefinition[\"edges\"] = [];\n\n  constructor(\n    private readonly meta: { id: WorkflowId; name: string },\n    private readonly options?: Readonly<Record<string, never>>,\n  ) {}\n\n  private add(config: NodeConfigBase): NodeRef {\n    const id = config.id ?? NodeIdSlugifier.slugify(config.name ?? \"\");\n    this.nodes.push({ id, kind: config.kind, type: config.type, name: config.name, config });\n    return { id, kind: config.kind, name: config.name };\n  }\n\n  private connect(from: NodeRef, to: NodeRef, fromOutput: OutputPortKey = \"main\", toInput: InputPortKey = \"in\"): void {\n    this.edges.push({ from: { nodeId: from.id, output: fromOutput }, to: { nodeId: to.id, input: toInput } });\n  }\n\n  trigger<TConfig extends AnyTriggerNodeConfig>(config: TConfig): ChainCursor<TriggerNodeOutputJson<TConfig>> {\n    const ref = this.add(config);\n    return new ChainCursor<TriggerNodeOutputJson<TConfig>>(this, [{ node: ref, output: \"main\" }]);\n  }\n\n  start<TConfig extends AnyRunnableNodeConfig>(config: TConfig): ChainCursor<RunnableNodeOutputJson<TConfig>> {\n    const ref = this.add(config);\n    return new ChainCursor<RunnableNodeOutputJson<TConfig>>(this, [{ node: ref, output: \"main\" }]);\n  }\n\n  build(): WorkflowDefinition {\n    this.validateNodeIds();\n    return { ...this.meta, nodes: this.nodes, edges: this.edges };\n  }\n\n  private validateNodeIds(): void {\n    const entries: NodeIdEntry[] = [];\n\n    for (const node of this.nodes) {\n      const tokenName = typeof node.type === \"function\" ? node.type.name : String(node.type);\n      entries.push({ nodeId: node.id, tokenName, label: node.name ?? \"\" });\n\n      if (AgentConfigInspector.isAgentNodeConfig(node.config)) {\n        for (const child of AgentConnectionNodeCollector.collect(node.id, node.config)) {\n          entries.push({ nodeId: child.nodeId, tokenName: child.typeName, label: child.name });\n        }\n      }\n    }\n\n    const emptyIds: NodeIdEntry[] = [];\n    const seenIds = new Map<string, NodeIdEntry>();\n    const duplicateIds: NodeIdEntry[] = [];\n\n    for (const entry of entries) {\n      if (!entry.nodeId) {\n        emptyIds.push(entry);\n        continue;\n      }\n      const existing = seenIds.get(entry.nodeId);\n      if (existing) {\n        if (!duplicateIds.includes(existing)) {\n          duplicateIds.push(existing);\n        }\n        duplicateIds.push(entry);\n      } else {\n        seenIds.set(entry.nodeId, entry);\n      }\n    }\n\n    if (emptyIds.length === 0 && duplicateIds.length === 0) {\n      return;\n    }\n\n    const lines: string[] = [\"WorkflowBuilder.build() found invalid node ids:\"];\n\n    if (emptyIds.length > 0) {\n      lines.push(\"  Empty ids (label is blank and no explicit id was given):\");\n      for (const e of emptyIds) {\n        lines.push(`    - type \"${e.tokenName}\" label \"${e.label}\"`);\n      }\n    }\n\n    if (duplicateIds.length > 0) {\n      lines.push(\"  Duplicate ids:\");\n      for (const e of duplicateIds) {\n        lines.push(`    - id \"${e.nodeId}\" type \"${e.tokenName}\" label \"${e.label}\"`);\n      }\n    }\n\n    lines.push(\"  Fix: set an explicit `id:` on each offending node config.\");\n\n    throw new WorkflowDefinitionError(lines.join(\"\\n\"));\n  }\n}\n\nexport { ChainCursor } from \"./ChainCursorResolver\";\nexport { WhenBuilder } from \"./WhenBuilder\";\n","import type { NodeId } from \"../../types\";\n\nexport class ConnectionInvocationIdFactory {\n  static create(): string {\n    return `cinv_${globalThis.crypto.randomUUID()}`;\n  }\n\n  static createForTest(runId: string, connectionNodeId: NodeId, sequence: number): string {\n    return `cinv_${runId}_${connectionNodeId}_${sequence}`;\n  }\n}\n","import type { NodeDefinition, NodeId, WorkflowDefinition } from \"../../types\";\n\nexport class WorkflowExecutableNodeClassifier {\n  private readonly connectionOwnedIds: ReadonlySet<NodeId>;\n\n  constructor(workflow: WorkflowDefinition) {\n    this.connectionOwnedIds = this.collectConnectionOwnedIds(workflow);\n  }\n\n  isConnectionOwnedNodeId(nodeId: NodeId): boolean {\n    return this.connectionOwnedIds.has(nodeId);\n  }\n\n  isExecutableNodeId(nodeId: NodeId): boolean {\n    return !this.connectionOwnedIds.has(nodeId);\n  }\n\n  filterExecutableNodeDefinitions(nodes: ReadonlyArray<NodeDefinition>): ReadonlyArray<NodeDefinition> {\n    return nodes.filter((n) => this.isExecutableNodeId(n.id));\n  }\n\n  private collectConnectionOwnedIds(workflow: WorkflowDefinition): ReadonlySet<NodeId> {\n    const ids = new Set<NodeId>();\n    for (const connection of workflow.connections ?? []) {\n      for (const childId of connection.childNodeIds) {\n        ids.add(childId);\n      }\n    }\n    return ids;\n  }\n\n  findDefaultExecutableStartNodeId(workflow: WorkflowDefinition): NodeId {\n    const firstTrigger = workflow.nodes.find((n) => n.kind === \"trigger\" && this.isExecutableNodeId(n.id))?.id;\n    if (firstTrigger) return firstTrigger;\n\n    const incoming = new Map<NodeId, number>();\n    for (const n of workflow.nodes) {\n      if (this.isExecutableNodeId(n.id)) incoming.set(n.id, 0);\n    }\n    for (const e of workflow.edges) {\n      if (!this.isExecutableNodeId(e.from.nodeId) || !this.isExecutableNodeId(e.to.nodeId)) continue;\n      incoming.set(e.to.nodeId, (incoming.get(e.to.nodeId) ?? 0) + 1);\n    }\n    const start = workflow.nodes.find((n) => this.isExecutableNodeId(n.id) && (incoming.get(n.id) ?? 0) === 0)?.id;\n    return (\n      start ??\n      workflow.nodes.find((n) => this.isExecutableNodeId(n.id))?.id ??\n      (() => {\n        throw new Error(`Workflow ${workflow.id} has no executable nodes`);\n      })()\n    );\n  }\n\n  firstExecutableNodeIdInDefinitionOrder(workflow: WorkflowDefinition): NodeId | undefined {\n    return workflow.nodes.find((n) => this.isExecutableNodeId(n.id))?.id;\n  }\n\n  lastExecutableNodeIdInDefinitionOrder(workflow: WorkflowDefinition): NodeId {\n    for (let i = workflow.nodes.length - 1; i >= 0; i--) {\n      const n = workflow.nodes[i]!;\n      if (this.isExecutableNodeId(n.id)) return n.id;\n    }\n    throw new Error(`Workflow ${workflow.id} has no executable nodes`);\n  }\n}\n","import type { WorkflowDefinition } from \"../../types\";\n\nimport { WorkflowExecutableNodeClassifier } from \"./WorkflowExecutableNodeClassifier\";\n\nexport class WorkflowExecutableNodeClassifierFactory {\n  static create(workflow: WorkflowDefinition): WorkflowExecutableNodeClassifier {\n    return new WorkflowExecutableNodeClassifier(workflow);\n  }\n}\n","import type { InputPortKey, NodeId, OutputPortKey, WorkflowDefinition, WorkflowGraph } from \"../../types\";\n\nexport class ExecutableGraph implements WorkflowGraph {\n  private readonly outgoingByNodeAndPort = new Map<\n    NodeId,\n    Map<OutputPortKey, Array<Readonly<{ nodeId: NodeId; input: InputPortKey }>>>\n  >();\n\n  constructor(def: WorkflowDefinition) {\n    for (const e of def.edges) {\n      const byPort =\n        this.outgoingByNodeAndPort.get(e.from.nodeId) ??\n        new Map<OutputPortKey, Array<Readonly<{ nodeId: NodeId; input: InputPortKey }>>>();\n      const next = byPort.get(e.from.output) ?? [];\n      next.push({ nodeId: e.to.nodeId, input: e.to.input });\n      byPort.set(e.from.output, next);\n      this.outgoingByNodeAndPort.set(e.from.nodeId, byPort);\n    }\n  }\n\n  next(nodeId: NodeId, output: OutputPortKey): Array<Readonly<{ nodeId: NodeId; input: InputPortKey }>> {\n    return this.outgoingByNodeAndPort.get(nodeId)?.get(output) ?? [];\n  }\n}\n","import type { WorkflowDefinition, WorkflowGraph, WorkflowGraphFactory } from \"../../types\";\nimport { ExecutableGraph } from \"./ExecutableGraph\";\n\nexport class DefaultWorkflowGraphFactory implements WorkflowGraphFactory {\n  create(def: WorkflowDefinition): WorkflowGraph {\n    return new ExecutableGraph(def);\n  }\n}\n","import type { ConnectionInvocationRecord } from \"../contracts/runTypes\";\nimport type { ParentExecutionRef } from \"../types\";\nimport type { RunEventBus } from \"./runEvents\";\n\nexport class ConnectionInvocationEventPublisher {\n  constructor(\n    private readonly eventBus: RunEventBus | undefined,\n    private readonly parent: ParentExecutionRef | undefined,\n  ) {}\n\n  async publish(record: ConnectionInvocationRecord): Promise<void> {\n    if (!this.eventBus) return;\n    const kind = this.kindFor(record);\n    if (!kind) return;\n    await this.eventBus.publish({\n      kind,\n      runId: record.runId,\n      workflowId: record.workflowId,\n      parent: this.parent,\n      at: record.updatedAt,\n      record,\n    });\n  }\n\n  private kindFor(\n    record: ConnectionInvocationRecord,\n  ): \"connectionInvocationStarted\" | \"connectionInvocationCompleted\" | \"connectionInvocationFailed\" | undefined {\n    if (record.status === \"running\" || record.status === \"queued\") {\n      return \"connectionInvocationStarted\";\n    }\n    if (record.status === \"completed\") {\n      return \"connectionInvocationCompleted\";\n    }\n    if (record.status === \"failed\") {\n      return \"connectionInvocationFailed\";\n    }\n    return undefined;\n  }\n}\n","import type { RunEventBus } from \"./runEvents\";\nimport type { NodeExecutionSnapshot } from \"../types\";\n\nexport class NodeEventPublisher {\n  constructor(private readonly eventBus: RunEventBus | undefined) {}\n\n  async publish(\n    kind: \"nodeQueued\" | \"nodeStarted\" | \"nodeCompleted\" | \"nodeFailed\",\n    snapshot: NodeExecutionSnapshot,\n  ): Promise<void> {\n    if (!this.eventBus) return;\n    await this.eventBus.publish({\n      kind,\n      runId: snapshot.runId,\n      workflowId: snapshot.workflowId,\n      parent: snapshot.parent,\n      at: snapshot.updatedAt,\n      snapshot,\n    });\n  }\n}\n","import type { BinaryAttachment, BinaryStorage } from \"../types\";\nimport type { BinaryStorageReadResult } from \"../types\";\nimport { BINARY_DEFAULT_MAX_BYTES } from \"../contracts/runtimeTypes\";\n\nexport async function boundedReadBinary(\n  result: BinaryStorageReadResult,\n  attachment: BinaryAttachment,\n  maxBytes: number = BINARY_DEFAULT_MAX_BYTES,\n): Promise<Uint8Array> {\n  if (attachment.size > maxBytes) {\n    throw new Error(\n      `Binary attachment size ${attachment.size} bytes exceeds maxBytes ${maxBytes}. ` +\n        `Raise the node's maxBytes setting if this document is expected to be larger.`,\n    );\n  }\n  const out = new Uint8Array(attachment.size);\n  const reader = result.body.getReader();\n  let offset = 0;\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) {\n      break;\n    }\n    if (!value) {\n      continue;\n    }\n    if (offset + value.byteLength > out.byteLength) {\n      throw new Error(`Binary stream produced more bytes than the attachment's declared size (${attachment.size}).`);\n    }\n    out.set(value, offset);\n    offset += value.byteLength;\n  }\n  if (offset !== out.byteLength) {\n    throw new Error(`Binary stream produced ${offset} bytes but attachment declared size ${attachment.size}.`);\n  }\n  return out;\n}\n\nexport async function readBinaryAsBytes(\n  storage: BinaryStorage,\n  attachment: BinaryAttachment,\n  maxBytes?: number,\n): Promise<Uint8Array> {\n  const result = await storage.openReadStream(attachment.storageKey);\n  if (!result) {\n    throw new Error(\"Binary attachment stream is unavailable.\");\n  }\n  return boundedReadBinary(result, attachment, maxBytes);\n}\n\nexport async function readBinaryAsText(\n  storage: BinaryStorage,\n  attachment: BinaryAttachment,\n  maxBytes?: number,\n): Promise<string> {\n  const bytes = await readBinaryAsBytes(storage, attachment, maxBytes);\n  return new TextDecoder().decode(bytes);\n}\n\nexport async function readBinaryAsJson<T = unknown>(\n  storage: BinaryStorage,\n  attachment: BinaryAttachment,\n  maxBytes?: number,\n): Promise<T> {\n  const text = await readBinaryAsText(storage, attachment, maxBytes);\n  try {\n    return JSON.parse(text) as T;\n  } catch (cause) {\n    throw new SyntaxError(\n      `Binary attachment at storage key \"${attachment.storageKey}\" is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`,\n      { cause },\n    );\n  }\n}\n","import type { BinaryAttachment, BinaryPreviewKind, Item, NodeActivationId, NodeId, RunId, WorkflowId } from \"../types\";\n\nimport type {\n  BinaryAttachmentCreateRequest,\n  BinaryStorage,\n  BinaryStorageReadResult,\n  NodeBinaryAttachmentService,\n} from \"../types\";\n\nimport { readBinaryAsBytes, readBinaryAsJson, readBinaryAsText } from \"./boundedReadBinary.types\";\n\nexport class DefaultNodeBinaryAttachmentService implements NodeBinaryAttachmentService {\n  constructor(\n    private readonly storage: BinaryStorage,\n    private readonly workflowId: WorkflowId,\n    private readonly runId: RunId,\n    private readonly nodeId: NodeId,\n    private readonly activationId: NodeActivationId,\n    private readonly now: () => Date,\n  ) {}\n\n  async attach(args: BinaryAttachmentCreateRequest): Promise<BinaryAttachment> {\n    const attachmentId = this.createAttachmentId();\n    const createdAt = this.now().toISOString();\n    const storageKey = this.createStorageKey(args, attachmentId);\n    const stored = await this.storage.write({\n      storageKey,\n      body: args.body,\n    });\n    return {\n      id: attachmentId,\n      storageKey: stored.storageKey,\n      mimeType: args.mimeType,\n      size: stored.size,\n      storageDriver: this.storage.driverName,\n      previewKind: args.previewKind ?? this.resolvePreviewKind(args.mimeType),\n      createdAt,\n      runId: this.runId,\n      workflowId: this.workflowId,\n      nodeId: this.nodeId,\n      activationId: this.activationId,\n      filename: args.filename,\n      sha256: stored.sha256,\n    };\n  }\n\n  withAttachment<TJson>(item: Item<TJson>, name: string, attachment: BinaryAttachment): Item<TJson> {\n    return {\n      ...item,\n      binary: {\n        ...(item.binary ?? {}),\n        [name]: attachment,\n      },\n    };\n  }\n\n  forNode(args: { nodeId: NodeId; activationId: NodeActivationId }): NodeBinaryAttachmentService {\n    return new DefaultNodeBinaryAttachmentService(\n      this.storage,\n      this.workflowId,\n      this.runId,\n      args.nodeId,\n      args.activationId,\n      this.now,\n    );\n  }\n\n  async openReadStream(attachment: BinaryAttachment): Promise<BinaryStorageReadResult | undefined> {\n    return await this.storage.openReadStream(attachment.storageKey);\n  }\n\n  async getBytes(attachment: BinaryAttachment, maxBytes?: number): Promise<Uint8Array> {\n    return readBinaryAsBytes(this.storage, attachment, maxBytes);\n  }\n\n  async getText(attachment: BinaryAttachment, maxBytes?: number): Promise<string> {\n    return readBinaryAsText(this.storage, attachment, maxBytes);\n  }\n\n  async getJson<T = unknown>(attachment: BinaryAttachment, maxBytes?: number): Promise<T> {\n    return readBinaryAsJson<T>(this.storage, attachment, maxBytes);\n  }\n\n  private createAttachmentId(): string {\n    return DefaultNodeBinaryAttachmentService.createAttachmentIdValue(`${this.activationId}-${this.now().getTime()}`);\n  }\n\n  private static createAttachmentIdValue(fallbackValue: string): string {\n    const cryptoObject = globalThis.crypto;\n    if (cryptoObject && typeof cryptoObject.randomUUID === \"function\") {\n      return cryptoObject.randomUUID();\n    }\n    return fallbackValue;\n  }\n\n  private createStorageKey(args: BinaryAttachmentCreateRequest, attachmentId: string): string {\n    const safeName = this.sanitizeSegment(args.name);\n    const safeFilename = this.sanitizeFilename(args.filename);\n    const filenameSuffix = safeFilename ? `-${safeFilename}` : \"\";\n    return `${this.sanitizeSegment(this.workflowId)}/${this.sanitizeSegment(this.runId)}/${this.sanitizeSegment(this.nodeId)}/${this.sanitizeSegment(this.activationId)}/${attachmentId}-${safeName}${filenameSuffix}`;\n  }\n\n  private sanitizeSegment(value: string): string {\n    const normalized = value.trim();\n    if (!normalized) {\n      return \"item\";\n    }\n    return normalized.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n  }\n\n  private sanitizeFilename(value: string | undefined): string | undefined {\n    if (!value) {\n      return undefined;\n    }\n    const normalized = value.trim().split(\"/\").at(-1)?.split(\"\\\\\").at(-1) ?? value.trim();\n    if (!normalized) {\n      return undefined;\n    }\n    return normalized.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n  }\n\n  private resolvePreviewKind(mimeType: string): BinaryPreviewKind {\n    if (mimeType.startsWith(\"image/\")) {\n      return \"image\";\n    }\n    if (mimeType.startsWith(\"audio/\")) {\n      return \"audio\";\n    }\n    if (mimeType.startsWith(\"video/\")) {\n      return \"video\";\n    }\n    return \"download\";\n  }\n}\n","import type { BinaryStorage } from \"../types\";\n\nexport class UnavailableBinaryStorage implements BinaryStorage {\n  readonly driverName = \"unavailable\";\n\n  async write(): Promise<never> {\n    throw new Error(\"Binary storage is not configured for this runtime.\");\n  }\n\n  async openReadStream(): Promise<undefined> {\n    return undefined;\n  }\n\n  async stat(): Promise<{ exists: false }> {\n    return { exists: false };\n  }\n\n  async delete(): Promise<void> {}\n\n  async deleteMany(): Promise<void> {}\n\n  async listByPrefix(): Promise<ReadonlyArray<string>> {\n    return [];\n  }\n}\n","import type { BinaryAttachment, NodeActivationId, NodeId, RunId, WorkflowId } from \"../types\";\n\nimport type {\n  BinaryStorage,\n  BinaryStorageReadResult,\n  ExecutionBinaryService,\n  NodeBinaryAttachmentService,\n} from \"../types\";\n\nimport { DefaultNodeBinaryAttachmentService } from \"./DefaultNodeBinaryAttachmentServiceFactory\";\nimport { boundedReadBinary } from \"./boundedReadBinary.types\";\n\nexport class DefaultExecutionBinaryService implements ExecutionBinaryService {\n  constructor(\n    private readonly storage: BinaryStorage,\n    private readonly workflowId: WorkflowId,\n    private readonly runId: RunId,\n    private readonly now: () => Date,\n  ) {}\n\n  forNode(args: { nodeId: NodeId; activationId: NodeActivationId }): NodeBinaryAttachmentService {\n    return new DefaultNodeBinaryAttachmentService(\n      this.storage,\n      this.workflowId,\n      this.runId,\n      args.nodeId,\n      args.activationId,\n      this.now,\n    );\n  }\n\n  openReadStream(attachment: BinaryAttachment): Promise<BinaryStorageReadResult | undefined> {\n    return this.storage.openReadStream(attachment.storageKey);\n  }\n\n  async getBytes(attachment: BinaryAttachment, maxBytes?: number): Promise<Uint8Array> {\n    const stream = await this.openReadStream(attachment);\n    if (!stream) {\n      throw new Error(\"Binary attachment stream is unavailable.\");\n    }\n    return boundedReadBinary(stream, attachment, maxBytes);\n  }\n\n  async getText(attachment: BinaryAttachment, maxBytes?: number): Promise<string> {\n    return new TextDecoder().decode(await this.getBytes(attachment, maxBytes));\n  }\n\n  async getJson<T = unknown>(attachment: BinaryAttachment, maxBytes?: number): Promise<T> {\n    const text = await this.getText(attachment, maxBytes);\n    try {\n      return JSON.parse(text) as T;\n    } catch (cause) {\n      throw new SyntaxError(\n        `Binary attachment at storage key \"${attachment.storageKey}\" is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`,\n        { cause },\n      );\n    }\n  }\n}\n\nexport { DefaultNodeBinaryAttachmentService } from \"./DefaultNodeBinaryAttachmentServiceFactory\";\nexport { UnavailableBinaryStorage } from \"./UnavailableBinaryStorage\";\n","import type {\n  JsonValue,\n  NodeActivationId,\n  NodeExecutionSnapshot,\n  NodeExecutionStatus,\n  NodeId,\n  NodeInputsByPort,\n  NodeOutputs,\n  ParentExecutionRef,\n  RunId,\n  WorkflowId,\n} from \"../types\";\n\nexport class NodeExecutionSnapshotFactory {\n  static queued(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    parent?: ParentExecutionRef;\n    queuedAt: string;\n    inputsByPort: NodeInputsByPort;\n  }): NodeExecutionSnapshot {\n    return {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: args.parent,\n      status: \"queued\",\n      queuedAt: args.queuedAt,\n      updatedAt: args.queuedAt,\n      inputsByPort: args.inputsByPort,\n    };\n  }\n\n  static running(args: {\n    previous?: NodeExecutionSnapshot;\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    parent?: ParentExecutionRef;\n    startedAt: string;\n    inputsByPort: NodeInputsByPort;\n  }): NodeExecutionSnapshot {\n    return {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: args.parent,\n      status: \"running\",\n      queuedAt: args.previous?.queuedAt,\n      startedAt: args.startedAt,\n      updatedAt: args.startedAt,\n      inputsByPort: args.inputsByPort,\n      outputs: args.previous?.outputs,\n      error: undefined,\n    };\n  }\n\n  static completed(args: {\n    previous?: NodeExecutionSnapshot;\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    parent?: ParentExecutionRef;\n    finishedAt: string;\n    inputsByPort: NodeInputsByPort;\n    outputs: NodeOutputs;\n    fromPinnedOutput?: boolean;\n    hitlStatus?: Extract<\n      NodeExecutionStatus,\n      \"hitl-approved\" | \"hitl-rejected\" | \"hitl-timeout\" | \"hitl-auto-accepted\" | \"hitl-cancelled\"\n    >;\n  }): NodeExecutionSnapshot {\n    const fromPinnedOutput = args.fromPinnedOutput ?? false;\n    const startedAt = fromPinnedOutput ? (args.previous?.startedAt ?? args.finishedAt) : args.previous?.startedAt;\n    return {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: args.parent,\n      status: args.hitlStatus ?? \"completed\",\n      queuedAt: args.previous?.queuedAt,\n      startedAt,\n      finishedAt: args.finishedAt,\n      updatedAt: args.finishedAt,\n      inputsByPort: args.inputsByPort,\n      outputs: args.outputs,\n      usedPinnedOutput: fromPinnedOutput,\n      error: undefined,\n      ...(args.previous?.childRunId !== undefined ? { childRunId: args.previous.childRunId } : {}),\n    };\n  }\n\n  static skipped(args: {\n    previous?: NodeExecutionSnapshot;\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    parent?: ParentExecutionRef;\n    finishedAt: string;\n    inputsByPort: NodeInputsByPort;\n    outputs: NodeOutputs;\n  }): NodeExecutionSnapshot {\n    return {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: args.parent,\n      status: \"skipped\",\n      queuedAt: args.previous?.queuedAt,\n      startedAt: args.previous?.startedAt,\n      finishedAt: args.finishedAt,\n      updatedAt: args.finishedAt,\n      inputsByPort: args.inputsByPort,\n      outputs: args.outputs,\n      error: undefined,\n      ...(args.previous?.childRunId !== undefined ? { childRunId: args.previous.childRunId } : {}),\n    };\n  }\n\n  static failed(args: {\n    previous?: NodeExecutionSnapshot;\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    parent?: ParentExecutionRef;\n    finishedAt: string;\n    inputsByPort: NodeInputsByPort;\n    error: Error;\n  }): NodeExecutionSnapshot {\n    return {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: args.parent,\n      status: \"failed\",\n      queuedAt: args.previous?.queuedAt,\n      startedAt: args.previous?.startedAt,\n      finishedAt: args.finishedAt,\n      updatedAt: args.finishedAt,\n      inputsByPort: args.inputsByPort,\n      outputs: undefined,\n      error: {\n        message: args.error.message,\n        name: args.error.name,\n        stack: args.error.stack,\n        details: (args.error as Error & { details?: JsonValue }).details,\n      },\n      ...(args.previous?.childRunId !== undefined ? { childRunId: args.previous.childRunId } : {}),\n    };\n  }\n}\n","import type { NodeActivationRequest, NodeInputsByPort } from \"../types\";\n\nexport class NodeInputsByPortFactory {\n  static empty(): NodeInputsByPort {\n    return {};\n  }\n\n  static fromRequest(request: NodeActivationRequest): NodeInputsByPort {\n    if (request.kind === \"multi\") {\n      return request.inputsByPort;\n    }\n    return { in: request.input };\n  }\n}\n","import type {\n  ConnectionInvocationRecord,\n  EngineRunCounters,\n  PendingResumeEntry,\n  PersistedSuspensionEntry,\n  PreparedNodeActivationDispatch,\n  NodeActivationRequest,\n  NodeActivationScheduler,\n  NodeExecutionSnapshot,\n  NodeId,\n  ParentExecutionRef,\n  PendingNodeExecution,\n  PersistedRunControlState,\n  RunDataFactory,\n  RunExecutionOptions,\n  RunId,\n  RunQueueEntry,\n  RunResult,\n  WorkflowExecutionRepository,\n  WorkflowId,\n} from \"../types\";\n\nimport { RunQueuePlanner } from \"../planning/RunQueuePlanner\";\n\nimport { NodeEventPublisher } from \"../events/NodeEventPublisher\";\nimport type { NodeActivationRequestInputPreparer } from \"./NodeActivationRequestInputPreparer\";\nimport { NodeExecutionSnapshotFactory } from \"./NodeExecutionSnapshotFactory\";\nimport { NodeInputsByPortFactory } from \"./NodeInputsByPortFactory\";\n\ntype PersistedRunStateRecord = NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>;\n\ntype ActivationSchedulerPort = Pick<NodeActivationScheduler, \"prepareDispatch\">;\n\nexport type ActivationEnqueueRequest = {\n  runId: RunId;\n  workflowId: WorkflowId;\n  startedAt: string;\n  parent?: ParentExecutionRef;\n  executionOptions?: RunExecutionOptions;\n  control: PersistedRunControlState | undefined;\n  workflowSnapshot: PersistedRunStateRecord[\"workflowSnapshot\"];\n  mutableState: PersistedRunStateRecord[\"mutableState\"];\n  policySnapshot: PersistedRunStateRecord[\"policySnapshot\"];\n  pendingQueue: RunQueueEntry[];\n  request: NodeActivationRequest;\n  previousNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n  planner: RunQueuePlanner;\n  engineCounters?: EngineRunCounters;\n  connectionInvocations?: ReadonlyArray<ConnectionInvocationRecord>;\n  suspension?: ReadonlyArray<PersistedSuspensionEntry>;\n  pendingResume?: PendingResumeEntry;\n};\n\nexport class ActivationEnqueueService {\n  constructor(\n    private readonly activationScheduler: ActivationSchedulerPort,\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly nodeEventPublisher: NodeEventPublisher,\n    private readonly nodeActivationRequestInputPreparer: NodeActivationRequestInputPreparer,\n  ) {}\n\n  async enqueueActivation(args: ActivationEnqueueRequest): Promise<RunResult> {\n    const { result, queuedSnapshot } = await this.enqueueActivationWithSnapshot(args);\n    await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n    return result;\n  }\n\n  async enqueueActivationWithSnapshot(\n    args: ActivationEnqueueRequest,\n  ): Promise<{ result: RunResult; queuedSnapshot: NodeExecutionSnapshot }> {\n    const preparedRequest = await this.nodeActivationRequestInputPreparer.prepare(args.request);\n    const preparedDispatch = await this.activationScheduler.prepareDispatch(preparedRequest);\n    const inputsByPort = NodeInputsByPortFactory.fromRequest(preparedRequest);\n    const itemsIn =\n      preparedRequest.kind === \"multi\"\n        ? args.planner.sumItemsByPort(preparedRequest.inputsByPort)\n        : preparedRequest.input.length;\n    const enqueuedAt = new Date().toISOString();\n    const pending: PendingNodeExecution = {\n      runId: args.runId,\n      activationId: args.request.activationId,\n      workflowId: args.workflowId,\n      nodeId: args.request.nodeId,\n      itemsIn,\n      inputsByPort,\n      receiptId: preparedDispatch.receipt.receiptId,\n      queue: preparedDispatch.receipt.queue,\n      batchId: args.request.batchId,\n      enqueuedAt,\n    };\n    const queuedSnapshot = NodeExecutionSnapshotFactory.queued({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.request.nodeId,\n      activationId: args.request.activationId,\n      parent: args.parent,\n      queuedAt: enqueuedAt,\n      inputsByPort,\n    });\n\n    await this.workflowExecutionRepository.save({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      startedAt: args.startedAt,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      control: args.control,\n      workflowSnapshot: args.workflowSnapshot,\n      mutableState: args.mutableState,\n      policySnapshot: args.policySnapshot,\n      engineCounters: args.engineCounters,\n      connectionInvocations: args.connectionInvocations ? [...args.connectionInvocations] : [],\n      status: \"pending\",\n      pending,\n      queue: args.pendingQueue.map((entry) => ({ ...entry })),\n      outputsByNode: (args.request.ctx.data as ReturnType<RunDataFactory[\"create\"]>).dump(),\n      nodeSnapshotsByNodeId: {\n        ...args.previousNodeSnapshotsByNodeId,\n        [args.request.nodeId]: queuedSnapshot,\n      },\n      ...(args.suspension !== undefined ? { suspension: args.suspension } : {}),\n      ...(args.pendingResume !== undefined ? { pendingResume: args.pendingResume } : {}),\n    });\n    await this.dispatchPreparedActivation(preparedDispatch);\n    return {\n      result: { runId: args.runId, workflowId: args.workflowId, startedAt: args.startedAt, status: \"pending\", pending },\n      queuedSnapshot,\n    };\n  }\n\n  private async dispatchPreparedActivation(preparedDispatch: PreparedNodeActivationDispatch): Promise<void> {\n    await preparedDispatch.dispatch();\n  }\n}\n","import type {\n  ActivationIdFactory,\n  ConnectionInvocationId,\n  NodeExecutionContext,\n  NodeId,\n  RunnableNodeConfig,\n  TelemetrySpanScope,\n} from \"../types\";\n\nexport class ChildExecutionScopeFactory {\n  constructor(private readonly activationIdFactory: ActivationIdFactory) {}\n\n  forSubAgent<TConfig extends RunnableNodeConfig<any, any>>(\n    args: Readonly<{\n      parentCtx: NodeExecutionContext<TConfig>;\n      childNodeId: NodeId;\n      childConfig: TConfig;\n      parentInvocationId: ConnectionInvocationId;\n      parentSpan: TelemetrySpanScope;\n    }>,\n  ): NodeExecutionContext<TConfig> {\n    const childActivationId = this.activationIdFactory.makeActivationId();\n    const childTelemetry = args.parentSpan.asNodeTelemetry({\n      nodeId: args.childNodeId,\n      activationId: childActivationId,\n    });\n    const childBinary = args.parentCtx.binary.forNode({\n      nodeId: args.childNodeId,\n      activationId: childActivationId,\n    });\n    return {\n      ...args.parentCtx,\n      nodeId: args.childNodeId,\n      activationId: childActivationId,\n      config: args.childConfig,\n      telemetry: childTelemetry,\n      binary: childBinary,\n      parentInvocationId: args.parentInvocationId,\n      iterationId: undefined,\n    };\n  }\n}\n","import type { Item } from \"./workflowTypes\";\n\nexport function getOriginIndexFromItem(item: Item): number | undefined {\n  const meta = item.meta as Record<string, unknown> | undefined;\n  const cm = meta?._cm as Record<string, unknown> | undefined;\n  const v = cm?.originIndex;\n  return typeof v === \"number\" && Number.isFinite(v) ? v : undefined;\n}\n","import type { InputPortKey, Item, Items, NodeInputsByPort } from \"../types\";\n\nimport { getOriginIndexFromItem } from \"../contracts/itemMeta\";\n\nexport class FanInMergeByOriginMerger {\n  merge(inputsByPort: NodeInputsByPort): Items {\n    const portKeys = Object.keys(inputsByPort).sort();\n    if (portKeys.length === 0) {\n      return [];\n    }\n    if (portKeys.length === 1) {\n      const only = portKeys[0]!;\n      return [...(inputsByPort[only] ?? [])];\n    }\n\n    type Entry = Readonly<{\n      portKey: InputPortKey;\n      portIndex: number;\n      item: Item;\n      originIndex: number | undefined;\n    }>;\n\n    const entries: Entry[] = [];\n    let anyOrigin = false;\n\n    for (let p = 0; p < portKeys.length; p++) {\n      const portKey = portKeys[p]!;\n      const items = inputsByPort[portKey] ?? [];\n      for (let i = 0; i < items.length; i++) {\n        const item = items[i] as Item;\n        const originIndex = getOriginIndexFromItem(item);\n        if (originIndex !== undefined) {\n          anyOrigin = true;\n        }\n        entries.push({ portKey, portIndex: i, item, originIndex });\n      }\n    }\n\n    if (!anyOrigin) {\n      return entries.map((e) => e.item);\n    }\n\n    const missingOriginRank = Number.MAX_SAFE_INTEGER;\n    return entries\n      .slice()\n      .sort((a, b) => {\n        const ao = a.originIndex ?? missingOriginRank;\n        const bo = b.originIndex ?? missingOriginRank;\n        if (ao !== bo) return ao - bo;\n        const pk = a.portKey.localeCompare(b.portKey);\n        if (pk !== 0) return pk;\n        return a.portIndex - b.portIndex;\n      })\n      .map((e) => e.item);\n  }\n}\n","import type { NodeActivationId, NodeId } from \"../types\";\n\nexport class NodeInputContractError extends Error {\n  constructor(\n    message: string,\n    public readonly nodeId: NodeId,\n    public readonly activationId: NodeActivationId,\n    public readonly cause?: unknown,\n  ) {\n    super(message);\n    this.name = \"NodeInputContractError\";\n  }\n}\n","import { z, ZodError } from \"zod\";\n\nimport type { Item, NodeActivationRequest, RunnableNodeConfig, WorkflowNodeInstanceFactory } from \"../types\";\n\nimport { FanInMergeByOriginMerger } from \"./FanInMergeByOriginMerger\";\nimport { NodeInputContractError } from \"./NodeInputContractError\";\n\nexport class NodeActivationRequestInputPreparer {\n  private readonly fanInMerger = new FanInMergeByOriginMerger();\n\n  constructor(private readonly workflowNodeInstanceFactory: WorkflowNodeInstanceFactory) {}\n\n  async prepare(request: NodeActivationRequest): Promise<NodeActivationRequest> {\n    if (request.kind === \"multi\") {\n      return await this.prepareMulti(request);\n    }\n    return await this.prepareSingle(request);\n  }\n\n  private async prepareMulti(\n    request: Extract<NodeActivationRequest, { kind: \"multi\" }>,\n  ): Promise<NodeActivationRequest> {\n    const nodeInstance: unknown = this.workflowNodeInstanceFactory.createByType(request.ctx.config.type);\n    if (\n      !this.hasRunnableExecute(nodeInstance) ||\n      this.hasExecuteMulti(nodeInstance) ||\n      this.isTriggerNode(nodeInstance)\n    ) {\n      return request;\n    }\n    const merged = this.fanInMerger.merge(request.inputsByPort);\n    const single: Extract<NodeActivationRequest, { kind: \"single\" }> = {\n      ...request,\n      kind: \"single\",\n      input: merged,\n    };\n    return await this.prepareSingle(single);\n  }\n\n  private async prepareSingle(\n    request: Extract<NodeActivationRequest, { kind: \"single\" }>,\n  ): Promise<NodeActivationRequest> {\n    const nodeInstance: unknown = this.workflowNodeInstanceFactory.createByType(request.ctx.config.type);\n    if (!this.hasRunnableExecute(nodeInstance) || this.isTriggerNode(nodeInstance)) {\n      return request;\n    }\n    const inputSchema = this.resolveInputSchema(nodeInstance, request.ctx.config as RunnableNodeConfig);\n    const inputBatch = request.input ?? [];\n    for (let i = 0; i < inputBatch.length; i++) {\n      const item = inputBatch[i] as Item;\n      try {\n        if (Array.isArray(item.json)) {\n          throw new Error(\"Item JSON must not be a top-level array\");\n        }\n        inputSchema.parse(item.json);\n      } catch (cause) {\n        const message = this.formatContractFailure(cause);\n        throw new NodeInputContractError(\n          `Node ${request.nodeId} activation ${request.activationId}: input contract failed: ${message}`,\n          request.nodeId,\n          request.activationId,\n          cause,\n        );\n      }\n    }\n    return request.input === undefined ? { ...request, input: inputBatch } : request;\n  }\n\n  private isTriggerNode(nodeInstance: unknown): boolean {\n    return (\n      typeof nodeInstance === \"object\" &&\n      nodeInstance !== null &&\n      (nodeInstance as { kind?: string }).kind === \"trigger\"\n    );\n  }\n\n  private hasRunnableExecute(nodeInstance: unknown): boolean {\n    return (\n      typeof nodeInstance === \"object\" &&\n      nodeInstance !== null &&\n      (nodeInstance as { kind?: string }).kind === \"node\" &&\n      typeof (nodeInstance as { execute?: unknown }).execute === \"function\"\n    );\n  }\n\n  private hasExecuteMulti(nodeInstance: unknown): boolean {\n    return typeof (nodeInstance as { executeMulti?: unknown }).executeMulti === \"function\";\n  }\n\n  private resolveInputSchema(\n    nodeInstance: unknown,\n    config: RunnableNodeConfig,\n  ): {\n    parse: (data: unknown) => unknown;\n  } {\n    const fromInstance = (nodeInstance as { inputSchema?: unknown }).inputSchema;\n    if (fromInstance && typeof (fromInstance as { parse?: unknown }).parse === \"function\") {\n      return fromInstance as { parse: (data: unknown) => unknown };\n    }\n    const fromConfig = config.inputSchema;\n    if (fromConfig && typeof fromConfig.parse === \"function\") {\n      return fromConfig as { parse: (data: unknown) => unknown };\n    }\n    return z.unknown();\n  }\n\n  private formatContractFailure(cause: unknown): string {\n    if (cause instanceof ZodError) {\n      return cause.issues.map((i) => `${i.path.join(\".\") || \"<root>\"}: ${i.message}`).join(\"; \");\n    }\n    if (cause instanceof Error) {\n      return cause.message;\n    }\n    return String(cause);\n  }\n}\n","import type { NodeId } from \"../types\";\n\nexport class NodeInstantiationError extends Error {\n  readonly name = \"NodeInstantiationError\";\n  readonly originalError: Error;\n\n  constructor(\n    readonly nodeId: NodeId,\n    readonly nodeType: string,\n    originalError: Error,\n  ) {\n    super(`Failed to instantiate node \"${nodeId}\" (type ${nodeType}): ${originalError.message}`);\n    this.originalError = originalError;\n    this.stack = originalError.stack;\n  }\n}\n","import type { CredentialSessionService, NodeExecutionContext, NodeId, WorkflowId } from \"../types\";\n\nexport class CredentialResolverFactory {\n  constructor(private readonly credentialSessions: CredentialSessionService) {}\n\n  create(\n    workflowId: WorkflowId,\n    nodeId: NodeId,\n    config?: NodeExecutionContext[\"config\"],\n  ): NodeExecutionContext[\"getCredential\"] {\n    const acceptedTypesBySlot = new Map<string, ReadonlyArray<string>>();\n    for (const requirement of config?.getCredentialRequirements?.() ?? []) {\n      acceptedTypesBySlot.set(requirement.slotKey, requirement.acceptedTypes);\n    }\n\n    return async <TSession = unknown>(slotKey: string): Promise<TSession> => {\n      try {\n        return await this.credentialSessions.getSession<TSession>({\n          workflowId,\n          nodeId,\n          slotKey,\n        });\n      } catch (error) {\n        const acceptedTypes = acceptedTypesBySlot.get(slotKey) ?? [];\n        const message = error instanceof Error ? error.message : String(error);\n        const alreadyListsAcceptedTypes =\n          message.includes(\"Accepted types:\") ||\n          message.includes(\"Accepted credential types:\") ||\n          message.includes(\"binding points at an unknown type\");\n        const acceptedTypesSuffix =\n          acceptedTypes.length > 0 && !alreadyListsAcceptedTypes ? ` Accepted types: ${acceptedTypes.join(\", \")}.` : \"\";\n        throw new Error(\n          `Failed to resolve credential for workflow ${workflowId} node ${nodeId} slot \"${slotKey}\". ${message}${acceptedTypesSuffix}`,\n          { cause: error },\n        );\n      }\n    };\n  }\n}\n","import type { AsyncSleeper } from \"./asyncSleeper.types\";\n\nexport class DefaultAsyncSleeper implements AsyncSleeper {\n  sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => {\n      setTimeout(resolve, ms);\n    });\n  }\n}\n","import type { Items, JsonNonArray, OutputPortKey } from \"./workflowTypes\";\n\nconst EMIT_PORTS_BRAND = Symbol.for(\"codemation.emitPorts\");\n\nexport type PortsEmission = Readonly<{\n  readonly [EMIT_PORTS_BRAND]: true;\n  readonly ports: Readonly<Partial<Record<OutputPortKey, Items | ReadonlyArray<JsonNonArray>>>>;\n}>;\n\nexport function emitPorts(\n  ports: Readonly<Partial<Record<OutputPortKey, Items | ReadonlyArray<JsonNonArray>>>>,\n): PortsEmission {\n  return { [EMIT_PORTS_BRAND]: true, ports };\n}\n\nexport function isPortsEmission(value: unknown): value is PortsEmission {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    EMIT_PORTS_BRAND in value &&\n    (value as Record<symbol, unknown>)[EMIT_PORTS_BRAND] === true\n  );\n}\n\nexport function isUnbrandedPortsEmissionShape(value: unknown): value is Readonly<{ ports: unknown }> {\n  return typeof value === \"object\" && value !== null && \"ports\" in value && !isPortsEmission(value);\n}\n","import type { NoneRetryPolicySpec } from \"./retryPolicySpec.types\";\n\nexport class NoRetryPolicy implements NoneRetryPolicySpec {\n  readonly kind = \"none\" as const;\n}\n","import type { FixedRetryPolicySpec } from \"./retryPolicySpec.types\";\n\nexport class RetryPolicy implements FixedRetryPolicySpec {\n  readonly kind = \"fixed\" as const;\n\n  constructor(\n    public readonly maxAttempts: number,\n    public readonly delayMs: number,\n  ) {\n    if (!Number.isFinite(maxAttempts) || maxAttempts < 1 || !Number.isInteger(maxAttempts)) {\n      throw new Error(`RetryPolicy.maxAttempts must be a positive integer, got ${maxAttempts}`);\n    }\n    if (!Number.isFinite(delayMs) || delayMs < 0) {\n      throw new Error(`RetryPolicy.delayMs must be a non-negative finite number, got ${delayMs}`);\n    }\n  }\n\n  static readonly defaultForHttp: FixedRetryPolicySpec = { kind: \"fixed\", maxAttempts: 3, delayMs: 1000 };\n\n  static readonly defaultForAiAgent: FixedRetryPolicySpec = { kind: \"fixed\", maxAttempts: 3, delayMs: 2000 };\n}\n","import type { ExponentialRetryPolicySpec } from \"./retryPolicySpec.types\";\n\nexport class ExpRetryPolicy implements ExponentialRetryPolicySpec {\n  readonly kind = \"exponential\" as const;\n\n  constructor(\n    public readonly maxAttempts: number,\n    public readonly initialDelayMs: number,\n    public readonly multiplier: number,\n    public readonly maxDelayMs?: number,\n    public readonly jitter?: boolean,\n  ) {\n    if (!Number.isFinite(maxAttempts) || maxAttempts < 1 || !Number.isInteger(maxAttempts)) {\n      throw new Error(`ExpRetryPolicy.maxAttempts must be a positive integer, got ${maxAttempts}`);\n    }\n    if (!Number.isFinite(initialDelayMs) || initialDelayMs < 0) {\n      throw new Error(`ExpRetryPolicy.initialDelayMs must be a non-negative finite number, got ${initialDelayMs}`);\n    }\n    if (!Number.isFinite(multiplier) || multiplier < 1) {\n      throw new Error(`ExpRetryPolicy.multiplier must be >= 1, got ${multiplier}`);\n    }\n  }\n}\n","import type { ExecutionTelemetry } from \"./telemetryTypes\";\nimport type { TelemetryAttributes, TelemetryScope } from \"./telemetryTypes\";\n\nexport type CostTrackingComponent = \"chat\" | \"ocr\" | \"rag\";\n\nexport const CostTrackingTelemetryMetricNames = {\n  usage: \"codemation.cost.usage\",\n  estimatedCost: \"codemation.cost.estimated\",\n} as const;\n\nexport const CostTrackingTelemetryAttributeNames = {\n  component: \"cost.component\",\n  provider: \"cost.provider\",\n  operation: \"cost.operation\",\n  pricingKey: \"cost.pricing_key\",\n  usageUnit: \"cost.usage_unit\",\n  currency: \"cost.currency\",\n  currencyScale: \"cost.currency_scale\",\n  estimateKind: \"cost.estimate_kind\",\n} as const;\n\nexport interface CostTrackingUsageRecord {\n  readonly component: CostTrackingComponent;\n  readonly provider: string;\n  readonly operation: string;\n  readonly pricingKey: string;\n  readonly usageUnit: string;\n  readonly quantity: number;\n  readonly modelName?: string;\n  readonly attributes?: TelemetryAttributes;\n}\n\nexport interface CostTrackingPriceQuote {\n  readonly currency: string;\n  readonly currencyScale: number;\n  readonly estimatedAmountMinor: number;\n  readonly estimateKind: \"catalog\";\n}\n\nexport interface CostTrackingTelemetry {\n  captureUsage(args: CostTrackingUsageRecord): Promise<CostTrackingPriceQuote | undefined>;\n  forScope(scope: TelemetryScope): CostTrackingTelemetry;\n}\n\nexport interface CostTrackingTelemetryFactory {\n  create(args: Readonly<{ telemetry: ExecutionTelemetry }>): CostTrackingTelemetry;\n}\n","import type {\n  CostTrackingPriceQuote,\n  CostTrackingTelemetry,\n  CostTrackingUsageRecord,\n} from \"./CostTrackingTelemetryContract\";\nimport type { TelemetryScope } from \"./telemetryTypes\";\n\nexport class NoOpCostTrackingTelemetry implements CostTrackingTelemetry {\n  async captureUsage(_: CostTrackingUsageRecord): Promise<CostTrackingPriceQuote | undefined> {\n    return undefined;\n  }\n\n  forScope(_: TelemetryScope): CostTrackingTelemetry {\n    return this;\n  }\n}\n","import type { CostTrackingTelemetry, CostTrackingTelemetryFactory } from \"./CostTrackingTelemetryContract\";\nimport type { ExecutionTelemetry } from \"./telemetryTypes\";\nimport { NoOpCostTrackingTelemetry } from \"./NoOpCostTrackingTelemetry\";\n\nexport class NoOpCostTrackingTelemetryFactory implements CostTrackingTelemetryFactory {\n  create(_: Readonly<{ telemetry: ExecutionTelemetry }>): CostTrackingTelemetry {\n    return new NoOpCostTrackingTelemetry();\n  }\n}\n","import type { TelemetryArtifactReference } from \"./telemetryTypes\";\n\nexport class NoOpTelemetryArtifactReference {\n  static readonly value: TelemetryArtifactReference = {\n    artifactId: \"telemetry-artifact-noop\",\n    traceId: undefined,\n    spanId: undefined,\n  };\n}\n","import type { NodeActivationId, NodeId } from \"./workflowTypes\";\nimport type {\n  NodeExecutionTelemetry,\n  TelemetryArtifactAttachment,\n  TelemetryArtifactReference,\n  TelemetryChildSpanStart,\n  TelemetryMetricRecord,\n  TelemetrySpanEnd,\n  TelemetrySpanEventRecord,\n  TelemetrySpanScope,\n} from \"./telemetryTypes\";\nimport { NoOpTelemetryArtifactReference } from \"./NoOpTelemetryArtifactReference\";\n\nconst noOpNodeExecutionTelemetry: NodeExecutionTelemetry = {\n  traceId: \"00000000000000000000000000000000\",\n  spanId: \"0000000000000000\",\n  addSpanEvent(_: TelemetrySpanEventRecord): void {},\n  recordMetric(_: TelemetryMetricRecord): void {},\n  attachArtifact(_: TelemetryArtifactAttachment): TelemetryArtifactReference {\n    return NoOpTelemetryArtifactReference.value;\n  },\n  end(_: TelemetrySpanEnd = {}): void {},\n  asNodeTelemetry(_: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>): NodeExecutionTelemetry {\n    return noOpNodeExecutionTelemetry;\n  },\n  forNode(_: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>): NodeExecutionTelemetry {\n    return noOpNodeExecutionTelemetry;\n  },\n  startChildSpan(_: TelemetryChildSpanStart): TelemetrySpanScope {\n    return noOpTelemetrySpanScope;\n  },\n};\n\nconst noOpTelemetrySpanScope: TelemetrySpanScope = {\n  traceId: \"00000000000000000000000000000000\",\n  spanId: \"0000000000000000\",\n  addSpanEvent(_: TelemetrySpanEventRecord): void {},\n  recordMetric(_: TelemetryMetricRecord): void {},\n  attachArtifact(_: TelemetryArtifactAttachment): TelemetryArtifactReference {\n    return NoOpTelemetryArtifactReference.value;\n  },\n  end(_: TelemetrySpanEnd = {}): void {},\n  asNodeTelemetry(_: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>): NodeExecutionTelemetry {\n    return noOpNodeExecutionTelemetry;\n  },\n};\n\nexport class NoOpTelemetrySpanScope {\n  static readonly value: TelemetrySpanScope = noOpTelemetrySpanScope;\n  static readonly nodeExecutionTelemetryValue: NodeExecutionTelemetry = noOpNodeExecutionTelemetry;\n}\n","import type { NodeExecutionTelemetry } from \"./telemetryTypes\";\nimport { NoOpTelemetrySpanScope } from \"./NoOpTelemetrySpanScope\";\n\nexport class NoOpNodeExecutionTelemetry {\n  static readonly value: NodeExecutionTelemetry = NoOpTelemetrySpanScope.nodeExecutionTelemetryValue;\n}\n","import type {\n  ExecutionTelemetry,\n  NodeExecutionTelemetry,\n  TelemetryArtifactAttachment,\n  TelemetryArtifactReference,\n  TelemetryMetricRecord,\n  TelemetrySpanEventRecord,\n} from \"./telemetryTypes\";\nimport type { NodeActivationId, NodeId } from \"./workflowTypes\";\nimport { NoOpNodeExecutionTelemetry } from \"./NoOpNodeExecutionTelemetry\";\nimport { NoOpTelemetryArtifactReference } from \"./NoOpTelemetryArtifactReference\";\n\nexport class NoOpExecutionTelemetry {\n  static readonly value: ExecutionTelemetry = {\n    traceId: \"00000000000000000000000000000000\",\n    spanId: \"0000000000000000\",\n    addSpanEvent(_: TelemetrySpanEventRecord): void {},\n    recordMetric(_: TelemetryMetricRecord): void {},\n    attachArtifact(_: TelemetryArtifactAttachment): TelemetryArtifactReference {\n      return NoOpTelemetryArtifactReference.value;\n    },\n    forNode(_: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>): NodeExecutionTelemetry {\n      return NoOpNodeExecutionTelemetry.value;\n    },\n  };\n}\n","import type { ParentExecutionRef, PersistedRunPolicySnapshot, RunId, WorkflowId } from \"./workflowTypes\";\nimport type { ExecutionTelemetry, ExecutionTelemetryFactory } from \"./telemetryTypes\";\nimport { NoOpExecutionTelemetry } from \"./NoOpExecutionTelemetry\";\n\nexport class NoOpExecutionTelemetryFactory implements ExecutionTelemetryFactory {\n  create(\n    _: Readonly<{\n      runId: RunId;\n      workflowId: WorkflowId;\n      parent?: ParentExecutionRef;\n      policySnapshot?: PersistedRunPolicySnapshot;\n    }>,\n  ): ExecutionTelemetry {\n    return NoOpExecutionTelemetry.value;\n  }\n}\n","import type { WorkflowId } from \"./workflowTypes\";\n\nexport interface WorkflowActivationPolicy {\n  isActive(workflowId: WorkflowId): boolean;\n}\n\nexport class AllWorkflowsActiveWorkflowActivationPolicy implements WorkflowActivationPolicy {\n  isActive(_workflowId: WorkflowId): boolean {\n    return true;\n  }\n}\n","export class CodemationTelemetryAttributeNames {\n  static readonly workflowId = \"codemation.workflow.id\";\n  static readonly runId = \"codemation.run.id\";\n  static readonly nodeId = \"codemation.node.id\";\n  static readonly activationId = \"codemation.activation.id\";\n  static readonly nodeType = \"codemation.node.type\";\n  static readonly nodeRole = \"codemation.node.role\";\n  static readonly workflowFolder = \"codemation.workflow.folder\";\n  static readonly connectionInvocationId = \"codemation.connection.invocation_id\";\n  static readonly toolName = \"codemation.tool.name\";\n  static readonly traceParentRunId = \"codemation.parent.run.id\";\n  static readonly iterationId = \"codemation.iteration.id\";\n  static readonly iterationIndex = \"codemation.iteration.index\";\n  static readonly parentInvocationId = \"codemation.parent.invocation_id\";\n  static readonly mcpServerId = \"mcp.server_id\";\n  static readonly mcpToolName = \"mcp.tool_name\";\n  static readonly nodeExecutionStatus = \"codemation.node.execution_status\";\n  static readonly runHaltReason = \"codemation.run.halt_reason\";\n  static readonly hitlTaskId = \"codemation.hitl.task_id\";\n  static readonly hitlChannel = \"codemation.hitl.channel\";\n  static readonly hitlDecisionStatus = \"codemation.hitl.decision_status\";\n}\n","export class GenAiTelemetryAttributeNames {\n  static readonly operationName = \"gen_ai.operation.name\";\n  static readonly requestModel = \"gen_ai.request.model\";\n  static readonly usageInputTokens = \"gen_ai.usage.input_tokens\";\n  static readonly usageOutputTokens = \"gen_ai.usage.output_tokens\";\n  static readonly usageTotalTokens = \"gen_ai.usage.total_tokens\";\n  static readonly usageCacheReadInputTokens = \"gen_ai.usage.cache_read.input_tokens\";\n  static readonly usageCacheCreationInputTokens = \"gen_ai.usage.cache_creation.input_tokens\";\n  static readonly usageReasoningTokens = \"codemation.gen_ai.usage.reasoning_tokens\";\n}\n","export class CodemationTelemetryMetricNames {\n  static readonly agentTurns = \"codemation.ai.turns\";\n  static readonly agentToolCalls = \"codemation.ai.tool_calls\";\n  static readonly gmailMessagesEmitted = \"codemation.gmail.messages_emitted\";\n  static readonly gmailAttachments = \"codemation.gmail.attachments\";\n  static readonly gmailAttachmentBytes = \"codemation.gmail.attachment_bytes\";\n}\n","import type { CostTrackingTelemetry } from \"../contracts/CostTrackingTelemetryContract\";\nimport type {\n  ExecutionTelemetry,\n  NodeExecutionTelemetry,\n  TelemetryArtifactAttachment,\n  TelemetryArtifactReference,\n  TelemetryChildSpanStart,\n  TelemetryMetricRecord,\n  TelemetrySpanEnd,\n  TelemetrySpanEventRecord,\n  TelemetrySpanScope,\n} from \"../contracts/telemetryTypes\";\nimport type { NodeActivationId, NodeId } from \"../contracts/workflowTypes\";\n\nexport class ExecutionTelemetryCostTrackingDecoratorFactory {\n  decorateExecutionTelemetry(args: {\n    telemetry: ExecutionTelemetry;\n    costTracking: CostTrackingTelemetry;\n  }): ExecutionTelemetry {\n    return {\n      traceId: args.telemetry.traceId,\n      spanId: args.telemetry.spanId,\n      costTracking: args.costTracking,\n      addSpanEvent: (event: TelemetrySpanEventRecord) => args.telemetry.addSpanEvent(event),\n      recordMetric: (metric: TelemetryMetricRecord) => args.telemetry.recordMetric(metric),\n      attachArtifact: (\n        artifact: TelemetryArtifactAttachment,\n      ): Promise<TelemetryArtifactReference> | TelemetryArtifactReference => args.telemetry.attachArtifact(artifact),\n      forNode: (nodeArgs: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>): NodeExecutionTelemetry => {\n        const nodeTelemetry = args.telemetry.forNode(nodeArgs);\n        return this.decorateNodeExecutionTelemetry({\n          telemetry: nodeTelemetry,\n          costTracking: args.costTracking.forScope(nodeTelemetry),\n        });\n      },\n    };\n  }\n\n  private decorateNodeExecutionTelemetry(args: {\n    telemetry: NodeExecutionTelemetry;\n    costTracking: CostTrackingTelemetry;\n  }): NodeExecutionTelemetry {\n    return {\n      traceId: args.telemetry.traceId,\n      spanId: args.telemetry.spanId,\n      costTracking: args.costTracking,\n      addSpanEvent: (event: TelemetrySpanEventRecord) => args.telemetry.addSpanEvent(event),\n      recordMetric: (metric: TelemetryMetricRecord) => args.telemetry.recordMetric(metric),\n      attachArtifact: (\n        artifact: TelemetryArtifactAttachment,\n      ): Promise<TelemetryArtifactReference> | TelemetryArtifactReference => args.telemetry.attachArtifact(artifact),\n      end: (endArgs?: TelemetrySpanEnd) => args.telemetry.end(endArgs),\n      startChildSpan: (spanArgs: TelemetryChildSpanStart): TelemetrySpanScope =>\n        this.decorateTelemetrySpanScope({\n          scope: args.telemetry.startChildSpan(spanArgs),\n          costTracking: args.costTracking,\n        }),\n      forNode: (nodeArgs: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>): NodeExecutionTelemetry => {\n        const nodeTelemetry = args.telemetry.forNode(nodeArgs);\n        return this.decorateNodeExecutionTelemetry({\n          telemetry: nodeTelemetry,\n          costTracking: args.costTracking.forScope(nodeTelemetry),\n        });\n      },\n      asNodeTelemetry: (\n        rescope: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>,\n      ): NodeExecutionTelemetry => {\n        const nodeTelemetry = args.telemetry.asNodeTelemetry(rescope);\n        return this.decorateNodeExecutionTelemetry({\n          telemetry: nodeTelemetry,\n          costTracking: args.costTracking.forScope(nodeTelemetry),\n        });\n      },\n    };\n  }\n\n  private decorateTelemetrySpanScope(args: {\n    scope: TelemetrySpanScope;\n    costTracking: CostTrackingTelemetry;\n  }): TelemetrySpanScope {\n    return {\n      traceId: args.scope.traceId,\n      spanId: args.scope.spanId,\n      costTracking: args.costTracking.forScope(args.scope),\n      addSpanEvent: (event: TelemetrySpanEventRecord) => args.scope.addSpanEvent(event),\n      recordMetric: (metric: TelemetryMetricRecord) => args.scope.recordMetric(metric),\n      attachArtifact: (\n        artifact: TelemetryArtifactAttachment,\n      ): Promise<TelemetryArtifactReference> | TelemetryArtifactReference => args.scope.attachArtifact(artifact),\n      end: (endArgs?: TelemetrySpanEnd) => args.scope.end(endArgs),\n      asNodeTelemetry: (\n        rescope: Readonly<{ nodeId: NodeId; activationId: NodeActivationId }>,\n      ): NodeExecutionTelemetry => {\n        const nodeTelemetry = args.scope.asNodeTelemetry(rescope);\n        return this.decorateNodeExecutionTelemetry({\n          telemetry: nodeTelemetry,\n          costTracking: args.costTracking.forScope(nodeTelemetry),\n        });\n      },\n    };\n  }\n}\n","import type {\n  BinaryStorage,\n  CollectionsContext,\n  CostTrackingTelemetryFactory,\n  ExecutionContext,\n  ExecutionContextFactory,\n  ExecutionTelemetryFactory,\n  NodeExecutionStatePublisher,\n  NodeResolver,\n  ParentExecutionRef,\n  RunDataSnapshot,\n  RunId,\n  RunTestContext,\n  WorkflowId,\n} from \"../types\";\nimport { NoOpCostTrackingTelemetryFactory, NoOpExecutionTelemetryFactory } from \"../types\";\nimport type { TypeToken } from \"../di\";\n\nimport {\n  DefaultExecutionBinaryService,\n  UnavailableBinaryStorage,\n} from \"../binaries/DefaultExecutionBinaryServiceFactory\";\nimport { ExecutionTelemetryCostTrackingDecoratorFactory } from \"./ExecutionTelemetryCostTrackingDecoratorFactory\";\n\nexport class DefaultExecutionContextFactory implements ExecutionContextFactory {\n  private readonly telemetryDecoratorFactory = new ExecutionTelemetryCostTrackingDecoratorFactory();\n\n  constructor(\n    private readonly binaryStorage: BinaryStorage = new UnavailableBinaryStorage(),\n    private readonly telemetryFactory: ExecutionTelemetryFactory = new NoOpExecutionTelemetryFactory(),\n    private readonly costTrackingFactory: CostTrackingTelemetryFactory = new NoOpCostTrackingTelemetryFactory(),\n    private readonly currentDate: () => Date = () => new Date(),\n    private readonly collections?: CollectionsContext,\n    private readonly nodeResolver?: NodeResolver,\n  ) {}\n\n  create(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    parent?: ParentExecutionRef;\n    policySnapshot?: import(\"../types\").PersistedRunPolicySnapshot;\n    subworkflowDepth: number;\n    engineMaxNodeActivations: number;\n    engineMaxSubworkflowDepth: number;\n    data: RunDataSnapshot;\n    nodeState?: NodeExecutionStatePublisher;\n    telemetry?: ExecutionContext[\"telemetry\"];\n    getCredential<TSession = unknown>(slotKey: string): Promise<TSession>;\n    testContext?: RunTestContext;\n  }): ExecutionContext {\n    const baseTelemetry =\n      args.telemetry ??\n      this.telemetryFactory.create({\n        runId: args.runId,\n        workflowId: args.workflowId,\n        parent: args.parent,\n        policySnapshot: args.policySnapshot,\n      });\n    const telemetry = this.telemetryDecoratorFactory.decorateExecutionTelemetry({\n      telemetry: baseTelemetry,\n      costTracking: baseTelemetry.costTracking ?? this.costTrackingFactory.create({ telemetry: baseTelemetry }),\n    });\n    return {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      parent: args.parent,\n      subworkflowDepth: args.subworkflowDepth,\n      engineMaxNodeActivations: args.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: args.engineMaxSubworkflowDepth,\n      now: this.currentDate,\n      data: args.data,\n      nodeState: args.nodeState,\n      telemetry,\n      binary: new DefaultExecutionBinaryService(this.binaryStorage, args.workflowId, args.runId, this.currentDate),\n      getCredential: args.getCredential,\n      testContext: args.testContext,\n      collections: this.collections,\n      resolve: <T>(token: TypeToken<T>): T => {\n        if (!this.nodeResolver) {\n          throw new Error(\n            \"ExecutionContext.resolve() is not available: no NodeResolver was provided to DefaultExecutionContextFactory.\",\n          );\n        }\n        return this.nodeResolver.resolve(token);\n      },\n    };\n  }\n}\n","import type { CostCatalog } from \"../contracts/CostCatalogContract\";\nimport {\n  CostTrackingTelemetryAttributeNames,\n  CostTrackingTelemetryMetricNames,\n  type CostTrackingPriceQuote,\n  type CostTrackingTelemetry,\n  type CostTrackingUsageRecord,\n} from \"../contracts/CostTrackingTelemetryContract\";\nimport type { TelemetryAttributes, TelemetryScope } from \"../types\";\n\nexport class CatalogBackedCostTrackingTelemetry implements CostTrackingTelemetry {\n  constructor(\n    private readonly currentScope: TelemetryScope,\n    private readonly costCatalog: CostCatalog,\n  ) {}\n\n  async captureUsage(args: CostTrackingUsageRecord): Promise<CostTrackingPriceQuote | undefined> {\n    const usageAttributes = this.createUsageAttributes(args);\n    await this.currentScope.recordMetric({\n      name: CostTrackingTelemetryMetricNames.usage,\n      value: args.quantity,\n      unit: args.usageUnit,\n      attributes: usageAttributes,\n    });\n\n    const catalogEntry = this.costCatalog.findEntry(args);\n    if (!catalogEntry) {\n      return undefined;\n    }\n\n    const estimatedAmountMinor = Math.round(args.quantity * catalogEntry.pricePerUnitMinor);\n    const costAttributes = this.createCostAttributes(args, catalogEntry.currency, catalogEntry.currencyScale);\n    await this.currentScope.recordMetric({\n      name: CostTrackingTelemetryMetricNames.estimatedCost,\n      value: estimatedAmountMinor,\n      unit: catalogEntry.currency,\n      attributes: costAttributes,\n    });\n\n    return {\n      currency: catalogEntry.currency,\n      currencyScale: catalogEntry.currencyScale,\n      estimatedAmountMinor,\n      estimateKind: \"catalog\",\n    };\n  }\n\n  forScope(scope: TelemetryScope): CostTrackingTelemetry {\n    // eslint-disable-next-line codemation/no-manual-di-new\n    return new CatalogBackedCostTrackingTelemetry(scope, this.costCatalog);\n  }\n\n  private createUsageAttributes(args: CostTrackingUsageRecord): TelemetryAttributes {\n    return {\n      ...args.attributes,\n      [CostTrackingTelemetryAttributeNames.component]: args.component,\n      [CostTrackingTelemetryAttributeNames.provider]: args.provider,\n      [CostTrackingTelemetryAttributeNames.operation]: args.operation,\n      [CostTrackingTelemetryAttributeNames.pricingKey]: args.pricingKey,\n      [CostTrackingTelemetryAttributeNames.usageUnit]: args.usageUnit,\n    };\n  }\n\n  private createCostAttributes(\n    args: CostTrackingUsageRecord,\n    currency: string,\n    currencyScale: number,\n  ): TelemetryAttributes {\n    return {\n      ...args.attributes,\n      [CostTrackingTelemetryAttributeNames.component]: args.component,\n      [CostTrackingTelemetryAttributeNames.provider]: args.provider,\n      [CostTrackingTelemetryAttributeNames.operation]: args.operation,\n      [CostTrackingTelemetryAttributeNames.pricingKey]: args.pricingKey,\n      [CostTrackingTelemetryAttributeNames.usageUnit]: args.usageUnit,\n      [CostTrackingTelemetryAttributeNames.currency]: currency,\n      [CostTrackingTelemetryAttributeNames.currencyScale]: currencyScale,\n      [CostTrackingTelemetryAttributeNames.estimateKind]: \"catalog\",\n    };\n  }\n}\n","import type { CostCatalog } from \"../contracts/CostCatalogContract\";\nimport type { CostTrackingTelemetry, CostTrackingTelemetryFactory } from \"../contracts/CostTrackingTelemetryContract\";\nimport type { ExecutionTelemetry } from \"../contracts/telemetryTypes\";\nimport { CatalogBackedCostTrackingTelemetry } from \"./CatalogBackedCostTrackingTelemetry\";\n\nexport class CatalogBackedCostTrackingTelemetryFactory implements CostTrackingTelemetryFactory {\n  constructor(private readonly costCatalog: CostCatalog) {}\n\n  create(args: Readonly<{ telemetry: ExecutionTelemetry }>): CostTrackingTelemetry {\n    return new CatalogBackedCostTrackingTelemetry(args.telemetry, this.costCatalog);\n  }\n}\n","import type {\n  ExponentialRetryPolicySpec,\n  FixedRetryPolicySpec,\n  RetryPolicySpec,\n} from \"../contracts/retryPolicySpec.types\";\nimport type { AsyncSleeper } from \"./asyncSleeper.types\";\n\nexport type { AsyncSleeper } from \"./asyncSleeper.types\";\n\nconst HARD_MAX_RETRY_ATTEMPTS = 10;\n\ntype NormalizedPolicy =\n  | { readonly kind: \"none\"; readonly maxAttempts: 1 }\n  | { readonly kind: \"fixed\"; readonly maxAttempts: number; readonly delayMs: number }\n  | {\n      readonly kind: \"exponential\";\n      readonly maxAttempts: number;\n      readonly initialDelayMs: number;\n      readonly multiplier: number;\n      readonly maxDelayMs?: number;\n      readonly jitter?: boolean;\n    };\n\nexport class InProcessRetryRunner {\n  constructor(private readonly sleeper: AsyncSleeper) {}\n\n  async run<T>(\n    policy: RetryPolicySpec | undefined,\n    work: () => Promise<T>,\n    shouldRetry?: (error: unknown) => boolean,\n    warn?: (message: string) => void,\n  ): Promise<T> {\n    const spec = InProcessRetryRunner.normalizePolicy(policy, warn);\n    let lastError: unknown;\n    for (let attempt = 1; attempt <= spec.maxAttempts; attempt++) {\n      try {\n        return await work();\n      } catch (error) {\n        lastError = error;\n        if (attempt >= spec.maxAttempts) {\n          break;\n        }\n        if (shouldRetry !== undefined && !shouldRetry(error)) {\n          break;\n        }\n        const delayMs = InProcessRetryRunner.delayAfterFailureMs(spec, attempt);\n        await this.sleeper.sleep(delayMs);\n      }\n    }\n    throw lastError instanceof Error ? lastError : new Error(String(lastError));\n  }\n\n  private static delayAfterFailureMs(spec: NormalizedPolicy, failedAttempt: number): number {\n    if (spec.kind === \"none\") {\n      return 0;\n    }\n    if (spec.kind === \"fixed\") {\n      return spec.delayMs;\n    }\n    const exponent = failedAttempt - 1;\n    let ms = spec.initialDelayMs * Math.pow(spec.multiplier, exponent);\n    if (spec.jitter === true) {\n      ms *= 1 + Math.random() * 0.2;\n    }\n    if (spec.maxDelayMs !== undefined && ms > spec.maxDelayMs) {\n      ms = spec.maxDelayMs;\n    }\n    return Math.max(0, Math.floor(ms));\n  }\n\n  private static normalizePolicy(\n    policy: RetryPolicySpec | undefined,\n    warn?: (message: string) => void,\n  ): NormalizedPolicy {\n    if (policy === undefined) {\n      return { kind: \"none\", maxAttempts: 1 };\n    }\n    if (typeof policy !== \"object\" || policy === null) {\n      return { kind: \"none\", maxAttempts: 1 };\n    }\n    const kind = (policy as { kind?: unknown }).kind;\n    if (kind === \"none\") {\n      return { kind: \"none\", maxAttempts: 1 };\n    }\n    if (kind === \"fixed\") {\n      const p = policy as FixedRetryPolicySpec;\n      const raw = InProcessRetryRunner.assertPositiveInt(p.maxAttempts, \"fixed.maxAttempts\");\n      const maxAttempts = InProcessRetryRunner.clampMaxAttempts(raw, warn);\n      const delayMs = InProcessRetryRunner.assertNonNegativeFinite(p.delayMs, \"fixed.delayMs\");\n      return { kind: \"fixed\", maxAttempts, delayMs };\n    }\n    if (kind === \"exponential\") {\n      const p = policy as ExponentialRetryPolicySpec;\n      const raw = InProcessRetryRunner.assertPositiveInt(p.maxAttempts, \"exponential.maxAttempts\");\n      return {\n        kind: \"exponential\",\n        maxAttempts: InProcessRetryRunner.clampMaxAttempts(raw, warn),\n        initialDelayMs: InProcessRetryRunner.assertNonNegativeFinite(p.initialDelayMs, \"exponential.initialDelayMs\"),\n        multiplier: InProcessRetryRunner.assertMultiplier(p.multiplier),\n        maxDelayMs:\n          p.maxDelayMs === undefined\n            ? undefined\n            : InProcessRetryRunner.assertNonNegativeFinite(p.maxDelayMs, \"exponential.maxDelayMs\"),\n        jitter: p.jitter === true,\n      };\n    }\n    return { kind: \"none\", maxAttempts: 1 };\n  }\n\n  private static clampMaxAttempts(requested: number, warn?: (message: string) => void): number {\n    if (requested > HARD_MAX_RETRY_ATTEMPTS) {\n      warn?.(\n        `Retry policy maxAttempts (${requested}) exceeds hard ceiling (${HARD_MAX_RETRY_ATTEMPTS}); clamping to ${HARD_MAX_RETRY_ATTEMPTS}.`,\n      );\n      return HARD_MAX_RETRY_ATTEMPTS;\n    }\n    return requested;\n  }\n\n  private static assertPositiveInt(value: unknown, label: string): number {\n    if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1 || !Number.isInteger(value)) {\n      throw new Error(`Retry policy ${label} must be a positive integer`);\n    }\n    return value;\n  }\n\n  private static assertNonNegativeFinite(value: unknown, label: string): number {\n    if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n      throw new Error(`Retry policy ${label} must be a non-negative finite number`);\n    }\n    return value;\n  }\n\n  private static assertMultiplier(value: unknown): number {\n    if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1) {\n      throw new Error(`Retry policy exponential.multiplier must be >= 1`);\n    }\n    return value;\n  }\n}\n","import { resolveItemExprsForExecution } from \"../contracts/itemExpr\";\nimport type { Item, NodeExecutionContext, RunnableNodeConfig } from \"../types\";\n\nexport class ItemExprResolver {\n  async resolveConfigForItem<TConfig extends RunnableNodeConfig<any, any>>(\n    ctx: NodeExecutionContext<TConfig>,\n    item: Item,\n    itemIndex: number,\n    items: ReadonlyArray<Item>,\n  ): Promise<NodeExecutionContext<TConfig>> {\n    if (!ctx) {\n      throw new Error(\"ItemExprResolver.resolveConfigForItem: ctx is required\");\n    }\n    const resolvedConfig = await resolveItemExprsForExecution(ctx.config, ctx, item, itemIndex, items);\n    const merged = resolvedConfig !== undefined && resolvedConfig !== null ? resolvedConfig : ctx.config;\n    if (merged === undefined || merged === null) {\n      return ctx;\n    }\n    return {\n      ...ctx,\n      config: merged as TConfig,\n    };\n  }\n}\n","import { isPortsEmission, isUnbrandedPortsEmissionShape } from \"../contracts/emitPorts\";\nimport type { PortsEmission } from \"../contracts/emitPorts\";\nimport type { Item, Items, JsonNonArray, NodeOutputs, OutputPortKey } from \"../types\";\nimport type { RunnableOutputBehavior } from \"./RunnableOutputBehaviorResolver\";\n\nexport class NodeOutputNormalizer {\n  normalizeExecuteResult(\n    args: Readonly<{\n      baseItem: Item;\n      raw: unknown;\n      behavior: RunnableOutputBehavior;\n    }>,\n  ): NodeOutputs {\n    const { baseItem, raw, behavior } = args;\n    if (isPortsEmission(raw)) {\n      return this.emitPortsToOutputs(baseItem, raw, behavior);\n    }\n    if (isUnbrandedPortsEmissionShape(raw)) {\n      throw new Error(\n        \"execute() returned an unbranded `{ ports: ... }` object. Use emitPorts(...) for multi-port runnable outputs.\",\n      );\n    }\n    if (Array.isArray(raw)) {\n      return this.arrayFanOutToMain(baseItem, raw, behavior);\n    }\n    if (this.isItemLike(raw)) {\n      return { main: [this.applyOutput(baseItem, raw, behavior)] };\n    }\n    return {\n      main: [this.applyOutput(baseItem, { json: raw as JsonNonArray }, behavior)],\n    };\n  }\n\n  private arrayFanOutToMain(baseItem: Item, raw: readonly unknown[], behavior: RunnableOutputBehavior): NodeOutputs {\n    for (const el of raw) {\n      if (Array.isArray(el)) {\n        throw new Error(\n          \"execute() fan-out arrays must contain only non-array JSON elements (nested arrays belong inside objects).\",\n        );\n      }\n    }\n    const main: Item[] = raw.map((json) => this.applyOutput(baseItem, { json: json as JsonNonArray }, behavior));\n    return { main };\n  }\n\n  private emitPortsToOutputs(baseItem: Item, emission: PortsEmission, behavior: RunnableOutputBehavior): NodeOutputs {\n    const out: NodeOutputs = {};\n    for (const [port, payload] of Object.entries(emission.ports)) {\n      if (payload === undefined) {\n        continue;\n      }\n      out[port as OutputPortKey] = this.normalizePortPayload(baseItem, payload, behavior);\n    }\n    return out;\n  }\n\n  private normalizePortPayload(\n    baseItem: Item,\n    payload: Items | ReadonlyArray<JsonNonArray>,\n    behavior: RunnableOutputBehavior,\n  ): Items {\n    if (payload.length === 0) {\n      return [];\n    }\n    const el0 = payload[0] as unknown;\n    if (this.isItemLike(el0)) {\n      return (payload as Items).map((it) => this.applyOutput(baseItem, it, behavior));\n    }\n    return (payload as readonly JsonNonArray[]).map((json) => this.applyOutput(baseItem, { json }, behavior));\n  }\n\n  private isItemLike(value: unknown): value is Item {\n    return typeof value === \"object\" && value !== null && \"json\" in value;\n  }\n\n  private isPlainJsonObject(value: unknown): value is Record<string, unknown> {\n    return typeof value === \"object\" && value !== null && !Array.isArray(value);\n  }\n\n  private applyOutput(baseItem: Item, next: Item, behavior: RunnableOutputBehavior): Item {\n    const explicitBinary = next.binary;\n    return {\n      json:\n        behavior.mergeJson && this.isPlainJsonObject(baseItem.json) && this.isPlainJsonObject(next.json)\n          ? { ...baseItem.json, ...next.json }\n          : next.json,\n      ...(explicitBinary !== undefined\n        ? { binary: explicitBinary }\n        : behavior.keepBinaries && baseItem.binary\n          ? { binary: baseItem.binary }\n          : {}),\n      ...(next.meta ? { meta: next.meta } : {}),\n      ...(next.paired ? { paired: next.paired } : {}),\n    };\n  }\n}\n","import type { RunnableNodeConfig } from \"../types\";\n\ntype BinaryKeepingRunnableNodeConfig = RunnableNodeConfig &\n  Readonly<{\n    keepBinaries?: boolean;\n  }>;\n\ntype MergeJsonRunnableNodeConfig = RunnableNodeConfig &\n  Readonly<{\n    mergeJson?: boolean;\n  }>;\n\nexport type RunnableOutputBehavior = Readonly<{\n  keepBinaries: boolean;\n  mergeJson: boolean;\n}>;\n\nexport class RunnableOutputBehaviorResolver {\n  resolve(config: RunnableNodeConfig): RunnableOutputBehavior {\n    return {\n      keepBinaries: this.isKeepBinariesEnabled(config),\n      mergeJson: this.isMergeJsonEnabled(config),\n    };\n  }\n\n  private isKeepBinariesEnabled(config: RunnableNodeConfig): boolean {\n    const candidate = config as BinaryKeepingRunnableNodeConfig;\n    return candidate.keepBinaries === true;\n  }\n\n  private isMergeJsonEnabled(config: RunnableNodeConfig): boolean {\n    const candidate = config as MergeJsonRunnableNodeConfig;\n    return candidate.mergeJson === true;\n  }\n}\n","import { DefaultAsyncSleeper } from \"./DefaultAsyncSleeper\";\nimport { InProcessRetryRunner } from \"./InProcessRetryRunner\";\n\nexport class InProcessRetryRunnerFactory {\n  create(defaultAsyncSleeper: DefaultAsyncSleeper): InProcessRetryRunner {\n    return new InProcessRetryRunner(defaultAsyncSleeper);\n  }\n}\n","import type {\n  ActivationIdFactory,\n  ExecutionContextFactory,\n  Items,\n  NodeActivationId,\n  NodeActivationRequest,\n  NodeExecutionContext,\n  NodeId,\n  NodeInputsByPort,\n  ParentExecutionRef,\n  RunDataFactory,\n  RunExecutionOptions,\n  RunId,\n  WorkflowId,\n} from \"../types\";\n\nimport type { PlannedActivation } from \"../planning/RunQueuePlanner\";\n\nimport { CredentialResolverFactory } from \"./CredentialResolverFactory\";\n\ntype NodeExecutionDefinition = Readonly<{ id: NodeId; config: NodeExecutionContext[\"config\"] }>;\n\ntype NodeActivationContextArgs = {\n  runId: RunId;\n  workflowId: WorkflowId;\n  parent?: ParentExecutionRef;\n  executionOptions?: RunExecutionOptions;\n  base: ReturnType<ExecutionContextFactory[\"create\"]>;\n  data: ReturnType<RunDataFactory[\"create\"]>;\n};\n\nexport type SingleDefinitionActivationRequest = NodeActivationContextArgs & {\n  definition: NodeExecutionDefinition;\n  batchId: string;\n  input: Items;\n};\n\nexport type MultiDefinitionActivationRequest = NodeActivationContextArgs & {\n  definition: NodeExecutionDefinition;\n  batchId: string;\n  inputsByPort: NodeInputsByPort;\n};\n\nexport type PlannedNodeActivationRequest = NodeActivationContextArgs & {\n  next: PlannedActivation;\n  nodeDefinition: NodeExecutionDefinition;\n};\n\nexport class NodeActivationRequestComposer {\n  constructor(\n    private readonly activationIdFactory: ActivationIdFactory,\n    private readonly credentialResolverFactory: CredentialResolverFactory,\n  ) {}\n\n  createSingleFromDefinition(\n    args: SingleDefinitionActivationRequest,\n  ): Extract<NodeActivationRequest, { kind: \"single\" }> {\n    return this.createSingleFromDefinitionWithActivation({\n      ...args,\n      activationId: this.activationIdFactory.makeActivationId(),\n    });\n  }\n\n  createSingleFromDefinitionWithActivation(\n    args: SingleDefinitionActivationRequest & Readonly<{ activationId: NodeActivationId }>,\n  ): Extract<NodeActivationRequest, { kind: \"single\" }> {\n    const ctx = this.createNodeExecutionContext(args, args.definition, args.activationId);\n    return {\n      kind: \"single\",\n      runId: args.runId,\n      activationId: args.activationId,\n      workflowId: args.workflowId,\n      nodeId: args.definition.id,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      batchId: args.batchId,\n      input: args.input,\n      ctx,\n    };\n  }\n\n  createMultiFromDefinitionWithActivation(\n    args: MultiDefinitionActivationRequest & Readonly<{ activationId: NodeActivationId }>,\n  ): Extract<NodeActivationRequest, { kind: \"multi\" }> {\n    const ctx = this.createNodeExecutionContext(args, args.definition, args.activationId);\n    return {\n      kind: \"multi\",\n      runId: args.runId,\n      activationId: args.activationId,\n      workflowId: args.workflowId,\n      nodeId: args.definition.id,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      batchId: args.batchId,\n      inputsByPort: args.inputsByPort,\n      ctx,\n    };\n  }\n\n  createFromPlannedActivation(args: PlannedNodeActivationRequest): NodeActivationRequest {\n    const activationId = this.activationIdFactory.makeActivationId();\n    const ctx = this.createNodeExecutionContext(args, args.nodeDefinition, activationId);\n    if (args.next.kind === \"multi\") {\n      return {\n        kind: \"multi\",\n        runId: args.runId,\n        activationId,\n        workflowId: args.workflowId,\n        nodeId: args.nodeDefinition.id,\n        parent: args.parent,\n        executionOptions: args.executionOptions,\n        batchId: args.next.batchId,\n        inputsByPort: args.next.inputsByPort,\n        ctx,\n      };\n    }\n    return {\n      kind: \"single\",\n      runId: args.runId,\n      activationId,\n      workflowId: args.workflowId,\n      nodeId: args.nodeDefinition.id,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      batchId: args.next.batchId,\n      input: args.next.input,\n      ctx,\n    };\n  }\n\n  private createNodeExecutionContext(\n    args: NodeActivationContextArgs,\n    definition: NodeExecutionDefinition,\n    activationId: string,\n  ): NodeExecutionContext {\n    return {\n      ...args.base,\n      data: args.data,\n      nodeId: definition.id,\n      activationId,\n      config: definition.config,\n      telemetry: args.base.telemetry.forNode({ nodeId: definition.id, activationId }),\n      binary: args.base.binary.forNode({ nodeId: definition.id, activationId }),\n      getCredential: this.credentialResolverFactory.create(args.workflowId, definition.id, definition.config),\n    };\n  }\n}\n","import type { RunId } from \"../types\";\n\nexport class RunSuspendedError extends Error {\n  constructor(\n    readonly runId: RunId,\n    readonly taskId: string,\n  ) {\n    super(`RunSuspendedError: run ${runId} suspended on task ${taskId}`);\n    this.name = \"RunSuspendedError\";\n  }\n}\n","import { z } from \"zod\";\nimport { isPortsEmission, isUnbrandedPortsEmissionShape } from \"../contracts/emitPorts\";\nimport { CredentialUnboundError } from \"../contracts/credentialTypes\";\nimport { SuspensionRequest } from \"../contracts/runtimeTypes\";\n\nimport type {\n  Item,\n  MultiInputNode,\n  NodeActivationRequest,\n  NodeExecutionContext,\n  NodeOutputs,\n  PersistedRunState,\n  RunnableNode,\n  RunnableNodeConfig,\n  RunnableNodeExecuteArgs,\n  RunId,\n  TriggerNode,\n  WorkflowNodeInstanceFactory,\n} from \"../types\";\nimport { NodeIterationIdFactory } from \"../workflow/definition/NodeIterationIdFactory\";\n\nimport { FanInMergeByOriginMerger } from \"./FanInMergeByOriginMerger\";\nimport { ItemExprResolver } from \"./ItemExprResolver\";\nimport { InProcessRetryRunner } from \"./InProcessRetryRunner\";\nimport { NodeOutputNormalizer } from \"./NodeOutputNormalizer\";\nimport { NodeSuspensionHandler } from \"./NodeSuspensionHandler\";\nimport { RunSuspendedError } from \"./RunSuspendedError\";\nimport { RunnableOutputBehaviorResolver } from \"./RunnableOutputBehaviorResolver\";\n\nexport class NodeExecutor {\n  private readonly fanInMerger = new FanInMergeByOriginMerger();\n  private readonly outputNormalizer = new NodeOutputNormalizer();\n  private readonly itemExprResolver: ItemExprResolver;\n  private readonly outputBehaviorResolver: RunnableOutputBehaviorResolver;\n\n  constructor(\n    private readonly nodeInstanceFactory: WorkflowNodeInstanceFactory,\n    private readonly retryRunner: InProcessRetryRunner,\n    itemExprResolver?: ItemExprResolver,\n    outputBehaviorResolver?: RunnableOutputBehaviorResolver,\n    private readonly suspensionHandler?: NodeSuspensionHandler,\n    private readonly loadRunState?: (runId: RunId) => Promise<PersistedRunState | undefined>,\n  ) {\n    this.itemExprResolver = itemExprResolver ?? new ItemExprResolver();\n    this.outputBehaviorResolver = outputBehaviorResolver ?? new RunnableOutputBehaviorResolver();\n  }\n\n  async execute(request: NodeActivationRequest): Promise<NodeOutputs> {\n    await this.assertRequiredCredentialsBound(request);\n    const policy = request.ctx.config.retryPolicy;\n    return await this.retryRunner.run(\n      policy,\n      async () => {\n        const nodeInstance = this.nodeInstanceFactory.createByType(request.ctx.config.type);\n        if (request.kind === \"multi\") {\n          return await this.executeMultiInputActivation(request, nodeInstance);\n        }\n        return await this.executeSingleInputNode(request, nodeInstance);\n      },\n      (error) => !this.isCredentialError(error),\n    );\n  }\n\n  private async assertRequiredCredentialsBound(request: NodeActivationRequest): Promise<void> {\n    if (!request.ctx.getCredential) return;\n    for (const req of request.ctx.config.getCredentialRequirements?.() ?? []) {\n      if (req.optional) continue;\n      await request.ctx.getCredential(req.slotKey);\n    }\n  }\n\n  private isCredentialError(e: unknown): boolean {\n    if (e instanceof CredentialUnboundError) return true;\n    const cause = e instanceof Error ? (e as { cause?: unknown }).cause : undefined;\n    return cause instanceof CredentialUnboundError;\n  }\n\n  private async executeMultiInputActivation(\n    request: Extract<NodeActivationRequest, { kind: \"multi\" }>,\n    node: unknown,\n  ): Promise<NodeOutputs> {\n    const multiInputNode = node as MultiInputNode;\n    if (typeof (multiInputNode as { executeMulti?: unknown }).executeMulti === \"function\") {\n      const raw = await multiInputNode.executeMulti(request.inputsByPort, request.ctx as never);\n      this.assertNoPortEnvelopeBypass(request.nodeId, raw, \"executeMulti()\");\n      return raw;\n    }\n    if (this.isRunnableNode(node)) {\n      const merged = this.fanInMerger.merge(request.inputsByPort);\n      const single: Extract<NodeActivationRequest, { kind: \"single\" }> = {\n        ...request,\n        kind: \"single\",\n        input: merged,\n      };\n      return await this.executeRunnableActivation(single, node);\n    }\n    throw new Error(\n      `Node ${request.nodeId} does not support executeMulti or RunnableNode.execute but received multi-input activation`,\n    );\n  }\n\n  private async executeSingleInputNode(\n    request: Extract<NodeActivationRequest, { kind: \"single\" }>,\n    node: unknown,\n  ): Promise<NodeOutputs> {\n    if (this.isTriggerNode(node)) {\n      const raw = await (node as TriggerNode).execute(request.input, request.ctx as never);\n      this.assertNoPortEnvelopeBypass(request.nodeId, raw, \"trigger execute()\");\n      return raw;\n    }\n    if (this.isRunnableNode(node)) {\n      return await this.executeRunnableActivation(request, node);\n    }\n    if (this.hasExecuteMulti(node)) {\n      return await this.executeMultiInputActivation(this.asMultiFromSingleActivation(request), node);\n    }\n    throw new Error(`Node ${request.nodeId} does not support trigger or RunnableNode execution`);\n  }\n\n  private isTriggerNode(node: unknown): node is TriggerNode {\n    return typeof node === \"object\" && node !== null && (node as { kind?: string }).kind === \"trigger\";\n  }\n\n  private isRunnableNode(node: unknown): node is RunnableNode {\n    return (\n      typeof node === \"object\" &&\n      node !== null &&\n      (node as { kind?: string }).kind === \"node\" &&\n      typeof (node as { execute?: unknown }).execute === \"function\"\n    );\n  }\n\n  private hasExecuteMulti(node: unknown): boolean {\n    return typeof (node as { executeMulti?: unknown })?.executeMulti === \"function\";\n  }\n\n  private asMultiFromSingleActivation(\n    request: Extract<NodeActivationRequest, { kind: \"single\" }>,\n  ): Extract<NodeActivationRequest, { kind: \"multi\" }> {\n    return {\n      kind: \"multi\",\n      runId: request.runId,\n      activationId: request.activationId,\n      workflowId: request.workflowId,\n      nodeId: request.nodeId,\n      parent: request.parent,\n      executionOptions: request.executionOptions,\n      batchId: request.batchId,\n      ctx: request.ctx,\n      inputsByPort: { in: request.input ?? [] },\n    };\n  }\n\n  private async executeRunnableActivation(\n    request: Extract<NodeActivationRequest, { kind: \"single\" }>,\n    node: RunnableNode,\n  ): Promise<NodeOutputs> {\n    const runnableConfig = request.ctx.config as RunnableNodeConfig;\n    const behavior = this.outputBehaviorResolver.resolve(runnableConfig);\n    const inputSchema = this.resolveInputSchema(node, runnableConfig);\n    const inputBatch = request.input ?? [];\n    if (inputBatch.length === 0 && runnableConfig.emptyBatchExecution === \"runOnce\") {\n      const syntheticItem: Item = { json: {} };\n      const parsed = inputSchema.parse(syntheticItem.json);\n      const runnableCtx = request.ctx as NodeExecutionContext<RunnableNodeConfig>;\n      const resolvedCtx = await this.itemExprResolver.resolveConfigForItem(runnableCtx, syntheticItem, 0, inputBatch);\n      const ctx = this.pickExecutionContext(runnableCtx, resolvedCtx);\n      const args: RunnableNodeExecuteArgs = {\n        input: parsed,\n        item: syntheticItem,\n        itemIndex: 0,\n        items: inputBatch,\n        ctx,\n      };\n      const raw = await Promise.resolve(node.execute(args));\n      return this.outputNormalizer.normalizeExecuteResult({\n        baseItem: syntheticItem,\n        raw,\n        behavior,\n      }) as NodeOutputs;\n    }\n    const byPort: Partial<Record<string, Item[]>> = {};\n    let hasSuspension = false;\n    for (let i = 0; i < inputBatch.length; i++) {\n      const item = inputBatch[i] as Item;\n      this.assertItemJsonNotTopLevelArray(request.nodeId, item);\n      const parsed = inputSchema.parse(item.json);\n      const runnableCtx = request.ctx as NodeExecutionContext<RunnableNodeConfig>;\n      const resolvedCtx = await this.itemExprResolver.resolveConfigForItem(runnableCtx, item, i, inputBatch);\n      const baseCtx = this.pickExecutionContext(runnableCtx, resolvedCtx);\n      const iterationCtx = {\n        ...baseCtx,\n        iterationId: NodeIterationIdFactory.create(),\n        itemIndex: i,\n      } as NodeExecutionContext<RunnableNodeConfig>;\n      const args: RunnableNodeExecuteArgs = {\n        input: parsed,\n        item,\n        itemIndex: i,\n        items: inputBatch,\n        ctx: iterationCtx,\n      };\n      let raw: unknown;\n      try {\n        raw = await Promise.resolve(node.execute(args));\n      } catch (e) {\n        const isSuspension =\n          e instanceof SuspensionRequest ||\n          (e instanceof Error &&\n            e.name === \"SuspensionRequest\" &&\n            typeof (e as { request?: unknown }).request === \"object\");\n        if (isSuspension) {\n          if (!this.suspensionHandler || !this.loadRunState) {\n            throw new Error(\n              `Node ${request.nodeId} threw SuspensionRequest but this NodeExecutor has no suspensionHandler configured.`,\n              { cause: e },\n            );\n          }\n          const state = await this.loadRunState(request.runId);\n          if (!state) {\n            throw new Error(`NodeExecutor: run state not found for runId ${request.runId} during suspension`, {\n              cause: e,\n            });\n          }\n          await this.suspensionHandler.handle({\n            runId: request.runId,\n            nodeId: request.nodeId,\n            activationId: request.activationId,\n            itemIndex: i,\n            suspensionRequest: e as SuspensionRequest,\n            state,\n            telemetry: iterationCtx.telemetry,\n          });\n          hasSuspension = true;\n          continue;\n        }\n        throw e;\n      }\n      const normalized = this.outputNormalizer.normalizeExecuteResult({\n        baseItem: item,\n        raw,\n        behavior,\n      });\n      for (const [port, batch] of Object.entries(normalized)) {\n        if (!batch || batch.length === 0) {\n          continue;\n        }\n        const list = byPort[port] ?? [];\n        list.push(...batch);\n        byPort[port] = list;\n      }\n    }\n    if (hasSuspension) {\n      throw new RunSuspendedError(request.runId, \"unknown\");\n    }\n    return byPort as NodeOutputs;\n  }\n\n  private pickExecutionContext<TConfig extends RunnableNodeConfig<any, any>>(\n    runnableCtx: NodeExecutionContext<TConfig>,\n    resolvedCtx: NodeExecutionContext<TConfig> | null | undefined,\n  ): NodeExecutionContext<TConfig> {\n    if (resolvedCtx != null && resolvedCtx.config != null) {\n      return resolvedCtx;\n    }\n    return runnableCtx;\n  }\n\n  private resolveInputSchema(\n    nodeInstance: RunnableNode,\n    config: RunnableNodeConfig,\n  ): {\n    parse: (data: unknown) => unknown;\n  } {\n    const fromInstance = nodeInstance.inputSchema;\n    if (fromInstance && typeof fromInstance.parse === \"function\") {\n      return fromInstance as { parse: (data: unknown) => unknown };\n    }\n    const fromConfig = config.inputSchema;\n    if (fromConfig && typeof fromConfig.parse === \"function\") {\n      return fromConfig as { parse: (data: unknown) => unknown };\n    }\n    return z.unknown();\n  }\n\n  private assertItemJsonNotTopLevelArray(nodeId: string, item: Item): void {\n    if (Array.isArray(item.json)) {\n      throw new Error(`Node ${nodeId}: item.json must not be a top-level JSON array`);\n    }\n  }\n\n  private assertNoPortEnvelopeBypass(nodeId: string, value: unknown, methodName: string): void {\n    if (isPortsEmission(value)) {\n      throw new Error(`Node ${nodeId}: ${methodName} must return NodeOutputs, not emitPorts(...).`);\n    }\n    if (isUnbrandedPortsEmissionShape(value)) {\n      throw new Error(\n        `Node ${nodeId}: ${methodName} returned an unbranded \\`{ ports: ... }\\` object. Return NodeOutputs instead.`,\n      );\n    }\n  }\n}\n","import type { PersistedRunState, RunId, WorkflowNodeInstanceFactory } from \"../types\";\n\nimport { InProcessRetryRunner } from \"./InProcessRetryRunner\";\nimport { NodeExecutor } from \"./NodeExecutor\";\nimport { NodeSuspensionHandler } from \"./NodeSuspensionHandler\";\nimport { RunnableOutputBehaviorResolver } from \"./RunnableOutputBehaviorResolver\";\n\nexport class NodeExecutorFactory {\n  create(\n    workflowNodeInstanceFactory: WorkflowNodeInstanceFactory,\n    retryRunner: InProcessRetryRunner,\n    outputBehaviorResolver: RunnableOutputBehaviorResolver,\n    suspensionHandler?: NodeSuspensionHandler,\n    loadRunState?: (runId: RunId) => Promise<PersistedRunState | undefined>,\n  ): NodeExecutor {\n    return new NodeExecutor(\n      workflowNodeInstanceFactory,\n      retryRunner,\n      undefined,\n      outputBehaviorResolver,\n      suspensionHandler,\n      loadRunState,\n    );\n  }\n}\n","export class MissingRuntimeExecutionMarker {\n  isMarked(config: unknown): boolean {\n    return Boolean((config as Partial<{ missingRuntime: boolean }> | undefined)?.missingRuntime);\n  }\n}\n","export class MissingRuntimeNodeToken {}\n","import type { RunnableNodeConfig } from \"../types\";\n\nimport { MissingRuntimeNodeToken } from \"./MissingRuntimeNodeToken\";\n\nexport class MissingRuntimeNodeConfig implements RunnableNodeConfig<unknown, unknown> {\n  readonly kind = \"node\" as const;\n  readonly type = MissingRuntimeNodeToken;\n\n  constructor(\n    public readonly name: string,\n    public readonly missingTokenId?: string,\n    public readonly missingRuntime = true,\n  ) {}\n}\n","export class MissingRuntimeTriggerToken {}\n","import type { NodeConfigBase } from \"../types\";\n\nimport { MissingRuntimeTriggerToken } from \"./MissingRuntimeTriggerToken\";\n\nexport class MissingRuntimeTriggerConfig implements NodeConfigBase {\n  readonly kind = \"trigger\" as const;\n  readonly type = MissingRuntimeTriggerToken;\n\n  constructor(\n    public readonly name: string,\n    public readonly missingTokenId?: string,\n    public readonly missingRuntime = true,\n  ) {}\n}\n","import type { NodeDefinition, PersistedWorkflowSnapshotNode } from \"../types\";\n\nimport { MissingRuntimeNodeConfig } from \"./MissingRuntimeNodeConfig\";\nimport { MissingRuntimeNodeToken } from \"./MissingRuntimeNodeToken\";\nimport { MissingRuntimeTriggerConfig } from \"./MissingRuntimeTriggerConfig\";\nimport { MissingRuntimeTriggerToken } from \"./MissingRuntimeTriggerToken\";\n\nexport class MissingRuntimeFallbacks {\n  createDefinition(snapshotNode: PersistedWorkflowSnapshotNode): NodeDefinition {\n    if (snapshotNode.kind === \"trigger\") {\n      return {\n        id: snapshotNode.id,\n        kind: \"trigger\",\n        name: snapshotNode.name,\n        type: MissingRuntimeTriggerToken,\n        config: new MissingRuntimeTriggerConfig(snapshotNode.name ?? snapshotNode.id, snapshotNode.nodeTokenId),\n      };\n    }\n    return {\n      id: snapshotNode.id,\n      kind: \"node\",\n      name: snapshotNode.name,\n      type: MissingRuntimeNodeToken,\n      config: new MissingRuntimeNodeConfig(snapshotNode.name ?? snapshotNode.id, snapshotNode.nodeTokenId),\n    };\n  }\n}\n","import type { RunnableNode, RunnableNodeExecuteArgs } from \"../types\";\n\nimport { MissingRuntimeNodeConfig } from \"./MissingRuntimeNodeConfig\";\n\nexport class MissingRuntimeNode implements RunnableNode<MissingRuntimeNodeConfig> {\n  readonly kind = \"node\" as const;\n  readonly outputPorts = [\"main\"] as const;\n\n  execute(args: RunnableNodeExecuteArgs<MissingRuntimeNodeConfig>): unknown {\n    return args.item;\n  }\n}\n","import type { NodeId } from \"../types\";\n\nexport type MissingRuntimeNodeDetail = {\n  nodeId: NodeId;\n  kind: \"node\" | \"trigger\";\n  missingTokenId: string | undefined;\n};\n\nexport class WorkflowParityMismatchError extends Error {\n  readonly name = \"WorkflowParityMismatchError\";\n  readonly missingNodes: ReadonlyArray<MissingRuntimeNodeDetail>;\n\n  constructor(missingNodes: ReadonlyArray<MissingRuntimeNodeDetail>) {\n    const labels = missingNodes.map((n) => `${n.nodeId} (token: ${n.missingTokenId ?? \"unknown\"})`).join(\", \");\n    super(`Workflow parity mismatch: nodes resolve to MissingRuntime and cannot execute: ${labels}`);\n    this.missingNodes = missingNodes;\n  }\n}\n","import type { NodeId, WorkflowDefinition } from \"../types\";\n\nimport { MissingRuntimeExecutionMarker } from \"./MissingRuntimeExecutionMarker\";\nimport { type MissingRuntimeNodeDetail, WorkflowParityMismatchError } from \"./WorkflowParityMismatchError\";\n\nexport class MissingRuntimeParityGuard {\n  constructor(private readonly marker: MissingRuntimeExecutionMarker) {}\n\n  assertNone(workflow: WorkflowDefinition, nodeIds?: ReadonlyArray<NodeId>): void {\n    const candidates = nodeIds ? workflow.nodes.filter((n) => nodeIds.includes(n.id)) : workflow.nodes;\n\n    const missing: MissingRuntimeNodeDetail[] = candidates\n      .filter((n) => this.marker.isMarked(n.config))\n      .map((n) => ({\n        nodeId: n.id,\n        kind: n.kind as \"node\" | \"trigger\",\n        missingTokenId: (n.config as Partial<{ missingTokenId: string }>).missingTokenId,\n      }));\n\n    if (missing.length > 0) {\n      throw new WorkflowParityMismatchError(missing);\n    }\n  }\n}\n","import type { ExecutableTriggerNode, Items, NodeOutputs, TriggerSetupContext } from \"../types\";\n\nimport { MissingRuntimeTriggerConfig } from \"./MissingRuntimeTriggerConfig\";\n\nexport class MissingRuntimeTrigger implements ExecutableTriggerNode<MissingRuntimeTriggerConfig> {\n  readonly kind = \"trigger\" as const;\n  readonly outputPorts = [\"main\"] as const;\n\n  async setup(_ctx: TriggerSetupContext<MissingRuntimeTriggerConfig>): Promise<undefined> {\n    return undefined;\n  }\n\n  async execute(items: Items): Promise<NodeOutputs> {\n    return { main: items };\n  }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n  NodeDefinition,\n  PersistedWorkflowSnapshot,\n  PersistedWorkflowTokenRegistryLike,\n  WorkflowDefinition,\n  WorkflowId,\n  WorkflowRepository,\n} from \"../types\";\n\nimport { MissingRuntimeFallbacks } from \"./MissingRuntimeFallbacksFactory\";\nimport { WorkflowSnapshotCodec } from \"./WorkflowSnapshotCodec\";\n\nexport class WorkflowSnapshotResolver {\n  constructor(\n    private readonly workflowRepository: WorkflowRepository,\n    private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike,\n    private readonly codec: WorkflowSnapshotCodec,\n    private readonly missingRuntimeFallbacks: MissingRuntimeFallbacks,\n  ) {}\n\n  resolve(args: {\n    workflowId: WorkflowId;\n    workflowSnapshot?: PersistedWorkflowSnapshot;\n  }): WorkflowDefinition | undefined {\n    const liveWorkflow = this.workflowRepository.get(args.workflowId);\n    if (!args.workflowSnapshot) {\n      return liveWorkflow;\n    }\n    if (!liveWorkflow) {\n      return this.rebuildWorkflow(args.workflowSnapshot, undefined);\n    }\n    return this.rebuildWorkflow(args.workflowSnapshot, liveWorkflow);\n  }\n\n  private rebuildWorkflow(\n    snapshot: PersistedWorkflowSnapshot,\n    liveWorkflow: WorkflowDefinition | undefined,\n  ): WorkflowDefinition {\n    const liveNodesById = new Map((liveWorkflow?.nodes ?? []).map((node) => [node.id, node] as const));\n    const nodes = snapshot.nodes.map((snapshotNode) => {\n      const liveNode = liveNodesById.get(snapshotNode.id);\n      if (!this.isCompatibleLiveNode(liveNode, snapshotNode)) {\n        return this.missingRuntimeFallbacks.createDefinition(snapshotNode);\n      }\n      return {\n        id: snapshotNode.id,\n        kind: snapshotNode.kind,\n        name: snapshotNode.name ?? liveNode.name,\n        type: liveNode.type,\n        config: this.codec.hydrate(snapshotNode, liveNode.config),\n      } satisfies NodeDefinition;\n    });\n    const nodeIds = new Set(nodes.map((node) => node.id));\n    const connectionsFromSnapshot =\n      snapshot.connections\n        ?.map((connection) => ({\n          ...connection,\n          childNodeIds: connection.childNodeIds.filter((childId) => nodeIds.has(childId)),\n        }))\n        .filter((connection) => connection.childNodeIds.length > 0) ?? [];\n    return {\n      id: snapshot.id,\n      name: snapshot.name,\n      nodes,\n      edges: snapshot.edges.filter((edge) => nodeIds.has(edge.from.nodeId) && nodeIds.has(edge.to.nodeId)),\n      ...(connectionsFromSnapshot.length > 0 ? { connections: connectionsFromSnapshot } : {}),\n      ...(liveWorkflow?.discoveryPathSegments !== undefined\n        ? { discoveryPathSegments: liveWorkflow.discoveryPathSegments }\n        : {}),\n    };\n  }\n\n  private isCompatibleLiveNode(\n    liveNode: WorkflowDefinition[\"nodes\"][number] | undefined,\n    snapshotNode: PersistedWorkflowSnapshot[\"nodes\"][number],\n  ): liveNode is WorkflowDefinition[\"nodes\"][number] {\n    if (!liveNode || liveNode.kind !== snapshotNode.kind) {\n      return false;\n    }\n    if (!snapshotNode.nodeTokenId || !snapshotNode.configTokenId) {\n      throw new Error(`Persisted workflow snapshot node \"${snapshotNode.id}\" is missing stable token ids.`);\n    }\n    const liveNodeTokenId = this.resolveLiveTokenId(liveNode.type);\n    const liveConfigTokenId = this.resolveLiveTokenId(liveNode.config.type);\n    return liveNodeTokenId === snapshotNode.nodeTokenId && liveConfigTokenId === snapshotNode.configTokenId;\n  }\n\n  private resolveLiveTokenId(type: TypeToken<unknown>): string | undefined {\n    const registeredTokenId = this.tokenRegistry.getTokenId(type);\n    if (registeredTokenId) {\n      return registeredTokenId;\n    }\n    if (typeof type === \"function\" && type.name) {\n      return type.name;\n    }\n    if (typeof type === \"string\") {\n      return type;\n    }\n    return undefined;\n  }\n}\n","import type { TypeToken } from \"../di\";\nimport type { NodeId, NodeResolver, WorkflowDefinition, WorkflowNodeInstanceFactory } from \"../types\";\n\nimport { MissingRuntimeNode, MissingRuntimeTrigger } from \"../workflowSnapshots\";\nimport { MissingRuntimeNodeToken } from \"../workflowSnapshots/MissingRuntimeNodeToken\";\nimport { MissingRuntimeTriggerToken } from \"../workflowSnapshots/MissingRuntimeTriggerToken\";\nimport { NodeInstantiationError } from \"./NodeInstantiationError\";\n\nexport class NodeInstanceFactory implements WorkflowNodeInstanceFactory {\n  constructor(private readonly nodeResolver: NodeResolver) {}\n\n  createNodes(workflow: WorkflowDefinition): Map<NodeId, unknown> {\n    const nodeInstances = new Map<NodeId, unknown>();\n    for (const definition of workflow.nodes) {\n      try {\n        nodeInstances.set(definition.id, this.createNode(definition));\n      } catch (err) {\n        if (err instanceof NodeInstantiationError) {\n          throw err;\n        }\n        throw new NodeInstantiationError(\n          definition.id,\n          typeof definition.type === \"function\" ? definition.type.name : String(definition.type),\n          err instanceof Error ? err : new Error(String(err)),\n        );\n      }\n    }\n    return nodeInstances;\n  }\n\n  createNode(definition: WorkflowDefinition[\"nodes\"][number]): unknown {\n    return this.createByType(definition.type);\n  }\n\n  createByType(type: TypeToken<unknown>): unknown {\n    if (type === MissingRuntimeNodeToken) {\n      return new MissingRuntimeNode();\n    }\n    if (type === MissingRuntimeTriggerToken) {\n      return new MissingRuntimeTrigger();\n    }\n    return this.nodeResolver.resolve(type);\n  }\n}\n","import type { NodeResolver } from \"../types\";\n\nimport { NodeInstanceFactory } from \"./NodeInstanceFactory\";\n\nexport class NodeInstanceFactoryFactory {\n  create(nodeResolver: NodeResolver): NodeInstanceFactory {\n    return new NodeInstanceFactory(nodeResolver);\n  }\n}\n","import type {\n  ConnectionInvocationAppendArgs,\n  ConnectionInvocationRecord,\n  NodeActivationId,\n  NodeExecutionSnapshot,\n  NodeExecutionStatePublisher,\n  NodeId,\n  NodeInputsByPort,\n  NodeOutputs,\n  ParentExecutionRef,\n  RunId,\n  WorkflowExecutionRepository,\n  WorkflowId,\n} from \"../types\";\n\nimport { NodeInputsByPortFactory } from \"./NodeInputsByPortFactory\";\nimport { NodeExecutionSnapshotFactory } from \"./NodeExecutionSnapshotFactory\";\n\nexport class NodeRunStateWriter implements NodeExecutionStatePublisher {\n  private chain: Promise<void> = Promise.resolve();\n\n  constructor(\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly runId: RunId,\n    private readonly workflowId: WorkflowId,\n    private readonly parent: ParentExecutionRef | undefined,\n    private readonly publishNodeEvent: (\n      kind: \"nodeQueued\" | \"nodeStarted\" | \"nodeCompleted\" | \"nodeFailed\",\n      snapshot: NodeExecutionSnapshot,\n    ) => Promise<void>,\n    private readonly publishConnectionInvocationEvent?: (record: ConnectionInvocationRecord) => Promise<void>,\n  ) {}\n\n  markQueued(args: {\n    nodeId: NodeId;\n    activationId?: NodeActivationId;\n    inputsByPort?: NodeInputsByPort;\n  }): Promise<void> {\n    return this.enqueue(async () => {\n      const state = await this.loadState();\n      const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n      const queuedAt = new Date().toISOString();\n      const snapshot = NodeExecutionSnapshotFactory.queued({\n        runId: this.runId,\n        workflowId: this.workflowId,\n        nodeId: args.nodeId,\n        activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n        parent: this.parent,\n        queuedAt,\n        inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? NodeInputsByPortFactory.empty(),\n      });\n      await this.saveSnapshot(state, snapshot);\n      await this.publishNodeEvent(\"nodeQueued\", snapshot);\n    });\n  }\n\n  markRunning(args: {\n    nodeId: NodeId;\n    activationId?: NodeActivationId;\n    inputsByPort?: NodeInputsByPort;\n  }): Promise<void> {\n    return this.enqueue(async () => {\n      const state = await this.loadState();\n      const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n      const startedAt = new Date().toISOString();\n      const snapshot = NodeExecutionSnapshotFactory.running({\n        previous,\n        runId: this.runId,\n        workflowId: this.workflowId,\n        nodeId: args.nodeId,\n        activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n        parent: this.parent,\n        startedAt,\n        inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? NodeInputsByPortFactory.empty(),\n      });\n      await this.saveSnapshot(state, snapshot);\n      await this.publishNodeEvent(\"nodeStarted\", snapshot);\n    });\n  }\n\n  markCompleted(args: {\n    nodeId: NodeId;\n    activationId?: NodeActivationId;\n    inputsByPort?: NodeInputsByPort;\n    outputs?: NodeOutputs;\n  }): Promise<void> {\n    return this.enqueue(async () => {\n      const state = await this.loadState();\n      const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n      const finishedAt = new Date().toISOString();\n      const snapshot = NodeExecutionSnapshotFactory.completed({\n        previous,\n        runId: this.runId,\n        workflowId: this.workflowId,\n        nodeId: args.nodeId,\n        activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n        parent: this.parent,\n        finishedAt,\n        inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? NodeInputsByPortFactory.empty(),\n        outputs: args.outputs ?? previous?.outputs ?? {},\n      });\n      await this.saveSnapshot(state, snapshot);\n      await this.publishNodeEvent(\"nodeCompleted\", snapshot);\n    });\n  }\n\n  markFailed(args: {\n    nodeId: NodeId;\n    activationId?: NodeActivationId;\n    inputsByPort?: NodeInputsByPort;\n    error: Error;\n  }): Promise<void> {\n    return this.enqueue(async () => {\n      const state = await this.loadState();\n      const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n      const finishedAt = new Date().toISOString();\n      const snapshot = NodeExecutionSnapshotFactory.failed({\n        previous,\n        runId: this.runId,\n        workflowId: this.workflowId,\n        nodeId: args.nodeId,\n        activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n        parent: this.parent,\n        finishedAt,\n        inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? NodeInputsByPortFactory.empty(),\n        error: args.error,\n      });\n      await this.saveSnapshot(state, snapshot);\n      await this.publishNodeEvent(\"nodeFailed\", snapshot);\n    });\n  }\n\n  setChildRunId(args: { nodeId: NodeId; childRunId: RunId }): Promise<void> {\n    return this.enqueue(async () => {\n      const state = await this.loadState();\n      const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n      if (!previous) {\n        return;\n      }\n      const updated: NodeExecutionSnapshot = { ...previous, childRunId: args.childRunId };\n      await this.saveSnapshot(state, updated);\n    });\n  }\n\n  appendConnectionInvocation(args: ConnectionInvocationAppendArgs): Promise<void> {\n    return this.enqueue(async () => {\n      const state = await this.loadState();\n      const updatedAt = new Date().toISOString();\n      const record: ConnectionInvocationRecord = {\n        invocationId: args.invocationId,\n        runId: this.runId,\n        workflowId: this.workflowId,\n        connectionNodeId: args.connectionNodeId,\n        parentAgentNodeId: args.parentAgentNodeId,\n        parentAgentActivationId: args.parentAgentActivationId,\n        status: args.status,\n        managedInput: args.managedInput,\n        managedOutput: args.managedOutput,\n        statusLabel: args.statusLabel,\n        subjectName: args.subjectName,\n        error: args.error,\n        queuedAt: args.queuedAt,\n        startedAt: args.startedAt,\n        finishedAt: args.finishedAt,\n        updatedAt,\n        iterationId: args.iterationId,\n        itemIndex: args.itemIndex,\n        parentInvocationId: args.parentInvocationId,\n      };\n      await this.workflowExecutionRepository.save({\n        ...state,\n        connectionInvocations: [...(state.connectionInvocations ?? []), record],\n      });\n      if (this.publishConnectionInvocationEvent) {\n        await this.publishConnectionInvocationEvent(record);\n      }\n    });\n  }\n\n  private enqueue(work: () => Promise<void>): Promise<void> {\n    const next = this.chain.then(work);\n    this.chain = next.catch(() => undefined);\n    return next;\n  }\n\n  private async loadState(): Promise<NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>> {\n    const state = await this.workflowExecutionRepository.load(this.runId);\n    if (!state) {\n      throw new Error(`Unknown runId: ${this.runId}`);\n    }\n    return state;\n  }\n\n  private async saveSnapshot(\n    state: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>,\n    snapshot: NodeExecutionSnapshot,\n  ): Promise<void> {\n    await this.workflowExecutionRepository.save({\n      ...state,\n      nodeSnapshotsByNodeId: {\n        ...(state.nodeSnapshotsByNodeId ?? {}),\n        [snapshot.nodeId]: snapshot,\n      },\n    });\n  }\n}\n","import type {\n  NodeExecutionStatePublisher,\n  ParentExecutionRef,\n  RunId,\n  WorkflowExecutionRepository,\n  WorkflowId,\n} from \"../types\";\n\nimport { ConnectionInvocationEventPublisher } from \"../events/ConnectionInvocationEventPublisher\";\nimport { NodeEventPublisher } from \"../events/NodeEventPublisher\";\nimport type { RunEventBus } from \"../events/runEvents\";\nimport { NodeRunStateWriter } from \"./NodeRunStateWriter\";\n\nexport class NodeRunStateWriterFactory {\n  constructor(\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly nodeEventPublisher: NodeEventPublisher,\n    private readonly eventBus?: RunEventBus,\n  ) {}\n\n  create(runId: RunId, workflowId: WorkflowId, parent: ParentExecutionRef | undefined): NodeExecutionStatePublisher {\n    const connectionInvocationEventPublisher = new ConnectionInvocationEventPublisher(this.eventBus, parent);\n    return new NodeRunStateWriter(\n      this.workflowExecutionRepository,\n      runId,\n      workflowId,\n      parent,\n      async (kind, snapshot) => {\n        await this.nodeEventPublisher.publish(kind, snapshot);\n      },\n      async (record) => {\n        await connectionInvocationEventPublisher.publish(record);\n      },\n    );\n  }\n}\n","import type { EngineRunCounters, PersistedRunState, RunHaltReason, RunQueueEntry } from \"../types\";\n\nexport class PersistedRunStateTerminalBuilder {\n  mergeTerminal(args: {\n    state: PersistedRunState;\n    engineCounters: EngineRunCounters;\n    status: \"completed\" | \"failed\" | \"halted\";\n    reason?: RunHaltReason;\n    queue: RunQueueEntry[];\n    outputsByNode: PersistedRunState[\"outputsByNode\"];\n    nodeSnapshotsByNodeId: NonNullable<PersistedRunState[\"nodeSnapshotsByNodeId\"]>;\n    finishedAtIso?: string;\n  }): PersistedRunState {\n    return {\n      ...args.state,\n      engineCounters: args.engineCounters,\n      status: args.status,\n      reason: args.reason,\n      pending: undefined,\n      queue: args.queue,\n      outputsByNode: args.outputsByNode,\n      nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n      finishedAt: args.finishedAtIso ?? args.state.finishedAt,\n    };\n  }\n}\n","import type {\n  Items,\n  NodeActivationId,\n  NodeExecutionSnapshot,\n  NodeExecutionStatus,\n  NodeId,\n  NodeInputsByPort,\n  NodeOutputs,\n  ParentExecutionRef,\n  PersistedRunControlState,\n  RunCurrentState,\n  RunDataFactory,\n  RunId,\n  RunQueueEntry,\n  WorkflowExecutionRepository,\n  WorkflowDefinition,\n  WorkflowId,\n} from \"../types\";\n\nimport { WorkflowExecutableNodeClassifierFactory } from \"../workflow/definition/WorkflowExecutableNodeClassifierFactory\";\nimport { RunQueuePlanner } from \"../planning/RunQueuePlanner\";\n\nimport { MissingRuntimeExecutionMarker } from \"../workflowSnapshots/MissingRuntimeExecutionMarker\";\nimport { NodeExecutionSnapshotFactory } from \"./NodeExecutionSnapshotFactory\";\nimport { NodeInputsByPortFactory } from \"./NodeInputsByPortFactory\";\n\nexport class RunStateSemantics {\n  constructor(private readonly missingRuntimeExecutionMarker: MissingRuntimeExecutionMarker) {}\n\n  isStopConditionSatisfied(stopCondition: PersistedRunControlState[\"stopCondition\"], nodeId: NodeId): boolean {\n    if (!stopCondition || stopCondition.kind === \"workflowCompleted\") {\n      return false;\n    }\n    return stopCondition.nodeId === nodeId;\n  }\n\n  resolveResultOutputs(\n    workflow: WorkflowDefinition,\n    stopCondition: PersistedRunControlState[\"stopCondition\"],\n    outputsByNode: Record<NodeId, NodeOutputs>,\n  ): Items {\n    if (stopCondition?.kind === \"nodeCompleted\") {\n      return outputsByNode[stopCondition.nodeId]?.main ?? [];\n    }\n    const lastNodeId =\n      WorkflowExecutableNodeClassifierFactory.create(workflow).lastExecutableNodeIdInDefinitionOrder(workflow);\n    return outputsByNode[lastNodeId]?.main ?? [];\n  }\n\n  applySkippedSnapshots(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    parent?: ParentExecutionRef;\n    currentState: RunCurrentState;\n    skippedNodeIds: ReadonlyArray<NodeId>;\n    preservedPinnedNodeIds: ReadonlyArray<NodeId>;\n    finishedAt: string;\n  }): Record<NodeId, NodeExecutionSnapshot> {\n    const snapshots = { ...args.currentState.nodeSnapshotsByNodeId };\n    const skippedPinnedNodeIds = new Set<NodeId>(\n      args.preservedPinnedNodeIds.filter((nodeId) => args.skippedNodeIds.includes(nodeId)),\n    );\n    for (const nodeId of args.skippedNodeIds) {\n      if (args.currentState.mutableState?.nodesById?.[nodeId]?.pinnedOutputsByPort) {\n        skippedPinnedNodeIds.add(nodeId);\n      }\n    }\n    for (const nodeId of skippedPinnedNodeIds) {\n      const previous = snapshots[nodeId];\n      snapshots[nodeId] = NodeExecutionSnapshotFactory.completed({\n        previous,\n        runId: args.runId,\n        workflowId: args.workflowId,\n        nodeId,\n        activationId: previous?.activationId ?? `synthetic_${nodeId}`,\n        parent: args.parent,\n        finishedAt: args.finishedAt,\n        inputsByPort: previous?.inputsByPort ?? NodeInputsByPortFactory.empty(),\n        outputs: args.currentState.outputsByNode[nodeId] ?? {},\n        fromPinnedOutput: true,\n      });\n    }\n    return snapshots;\n  }\n\n  applyPinnedQueueSkips(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    parent?: ParentExecutionRef;\n    mutableState: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    planner: RunQueuePlanner;\n    queue: RunQueueEntry[];\n    data: ReturnType<RunDataFactory[\"create\"]>;\n    nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n    finishedAt: string;\n  }): void {\n    let changed = true;\n    while (changed) {\n      changed = false;\n      for (let index = 0; index < args.queue.length; index += 1) {\n        const queueEntry = args.queue[index]!;\n        const pinnedOutputs = args.mutableState?.nodesById?.[queueEntry.nodeId]?.pinnedOutputsByPort;\n        if (!pinnedOutputs) {\n          continue;\n        }\n        args.queue.splice(index, 1);\n        const previous = args.nodeSnapshotsByNodeId[queueEntry.nodeId];\n        args.nodeSnapshotsByNodeId[queueEntry.nodeId] = NodeExecutionSnapshotFactory.completed({\n          previous,\n          runId: args.runId,\n          workflowId: args.workflowId,\n          nodeId: queueEntry.nodeId,\n          activationId: previous?.activationId ?? `synthetic_${queueEntry.nodeId}`,\n          parent: args.parent,\n          finishedAt: args.finishedAt,\n          inputsByPort: this.resolveQueueEntryInputsByPort(queueEntry),\n          outputs: pinnedOutputs,\n          fromPinnedOutput: true,\n        });\n        args.data.setOutputs(queueEntry.nodeId, pinnedOutputs);\n        args.planner.applyOutputs(args.queue, {\n          fromNodeId: queueEntry.nodeId,\n          outputs: pinnedOutputs as any,\n          batchId: queueEntry.batchId ?? \"batch_1\",\n        });\n        changed = true;\n        break;\n      }\n    }\n  }\n\n  createFinishedSnapshot(args: {\n    workflow: WorkflowDefinition;\n    previous?: NodeExecutionSnapshot;\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    parent?: ParentExecutionRef;\n    finishedAt: string;\n    inputsByPort: NodeInputsByPort;\n    outputs: NodeOutputs;\n    hitlStatus?: Extract<\n      NodeExecutionStatus,\n      \"hitl-approved\" | \"hitl-rejected\" | \"hitl-timeout\" | \"hitl-auto-accepted\" | \"hitl-cancelled\"\n    >;\n  }): NodeExecutionSnapshot {\n    const definition = args.workflow.nodes.find((node) => node.id === args.nodeId);\n    if (this.missingRuntimeExecutionMarker.isMarked(definition?.config)) {\n      return NodeExecutionSnapshotFactory.skipped(args);\n    }\n    return NodeExecutionSnapshotFactory.completed(args);\n  }\n\n  private resolveQueueEntryInputsByPort(queueEntry: RunQueueEntry): NodeInputsByPort {\n    if (queueEntry.collect) {\n      return queueEntry.collect.received;\n    }\n    return {\n      [queueEntry.toInput ?? \"in\"]: queueEntry.input,\n    };\n  }\n}\n","import type {\n  ExecutionContextFactory,\n  NodeExecutionStatePublisher,\n  NodeId,\n  ParentExecutionRef,\n  RunDataFactory,\n  RunId,\n  RunTestContext,\n  WorkflowId,\n} from \"../types\";\n\nimport { CredentialResolverFactory } from \"./CredentialResolverFactory\";\n\nexport class WorkflowRunExecutionContextFactory {\n  constructor(\n    private readonly executionContextFactory: ExecutionContextFactory,\n    private readonly credentialResolverFactory: CredentialResolverFactory,\n  ) {}\n\n  create(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    nodeId: NodeId;\n    parent?: ParentExecutionRef;\n    policySnapshot?: import(\"../types\").PersistedRunPolicySnapshot;\n    subworkflowDepth: number;\n    engineMaxNodeActivations: number;\n    engineMaxSubworkflowDepth: number;\n    data: ReturnType<RunDataFactory[\"create\"]>;\n    nodeState?: NodeExecutionStatePublisher;\n    testContext?: RunTestContext;\n  }) {\n    return this.executionContextFactory.create({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      parent: args.parent,\n      policySnapshot: args.policySnapshot,\n      subworkflowDepth: args.subworkflowDepth,\n      engineMaxNodeActivations: args.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: args.engineMaxSubworkflowDepth,\n      data: args.data,\n      nodeState: args.nodeState,\n      getCredential: this.credentialResolverFactory.create(args.workflowId, args.nodeId),\n      testContext: args.testContext,\n    });\n  }\n}\n","import type { CostCatalog, CostCatalogEntry } from \"../contracts/CostCatalogContract\";\nimport type { CostTrackingUsageRecord } from \"../contracts/CostTrackingTelemetryContract\";\n\nexport class StaticCostCatalog implements CostCatalog {\n  private readonly entriesByKey: ReadonlyMap<string, CostCatalogEntry>;\n\n  constructor(entries: ReadonlyArray<CostCatalogEntry>) {\n    this.entriesByKey = new Map(entries.map((entry) => [this.createKeyFromEntry(entry), entry]));\n  }\n\n  findEntry(args: CostTrackingUsageRecord): CostCatalogEntry | undefined {\n    return this.entriesByKey.get(this.createKeyFromUsage(args));\n  }\n\n  private createKeyFromEntry(entry: CostCatalogEntry): string {\n    return `${entry.component}::${entry.provider}::${entry.operation}::${entry.pricingKey}::${entry.usageUnit}`;\n  }\n\n  private createKeyFromUsage(args: CostTrackingUsageRecord): string {\n    return `${args.component}::${args.provider}::${args.operation}::${args.pricingKey}::${args.usageUnit}`;\n  }\n}\n","import type { InputPortKey, NodeId, OutputPortKey, WorkflowDefinition } from \"../types\";\nimport { WorkflowExecutableNodeClassifierFactory } from \"../workflow/definition/WorkflowExecutableNodeClassifierFactory\";\n\ntype NodeDef = WorkflowDefinition[\"nodes\"][number];\n\nexport type TopologyIncomingEdge = Readonly<{\n  from: Readonly<{ nodeId: NodeId; output: OutputPortKey }>;\n  input: InputPortKey;\n  collectKey: InputPortKey;\n}>;\n\nexport type TopologyOutgoingEdge = Readonly<{\n  output: OutputPortKey;\n  to: Readonly<{ nodeId: NodeId; input: InputPortKey; collectKey: InputPortKey }>;\n}>;\n\nexport class WorkflowTopology {\n  private constructor(\n    public readonly defsById: ReadonlyMap<NodeId, NodeDef>,\n    public readonly outgoingByNode: ReadonlyMap<NodeId, ReadonlyArray<TopologyOutgoingEdge>>,\n    public readonly incomingByNode: ReadonlyMap<NodeId, ReadonlyArray<TopologyIncomingEdge>>,\n    public readonly expectedInputsByNode: ReadonlyMap<NodeId, ReadonlyArray<InputPortKey>>,\n    public readonly rootNodeIds: ReadonlyArray<NodeId>,\n  ) {}\n\n  static fromWorkflow(wf: WorkflowDefinition): WorkflowTopology {\n    const classifier = WorkflowExecutableNodeClassifierFactory.create(wf);\n    const defs = new Map<NodeId, NodeDef>();\n    for (const n of wf.nodes) {\n      if (classifier.isExecutableNodeId(n.id)) defs.set(n.id, n);\n    }\n\n    const incomingByNode = new Map<NodeId, TopologyIncomingEdge[]>();\n    for (const e of wf.edges) {\n      if (!classifier.isExecutableNodeId(e.from.nodeId) || !classifier.isExecutableNodeId(e.to.nodeId)) {\n        continue;\n      }\n      const list = incomingByNode.get(e.to.nodeId) ?? [];\n      list.push({\n        from: { nodeId: e.from.nodeId, output: e.from.output },\n        input: e.to.input,\n        collectKey: e.to.input,\n      });\n      incomingByNode.set(e.to.nodeId, list);\n    }\n\n    const duplicateInputCounts = new Map<NodeId, Map<InputPortKey, number>>();\n    for (const [toNodeId, edges] of incomingByNode.entries()) {\n      const counts = new Map<InputPortKey, number>();\n      for (const edge of edges) {\n        counts.set(edge.input, (counts.get(edge.input) ?? 0) + 1);\n      }\n      duplicateInputCounts.set(toNodeId, counts);\n    }\n\n    for (const [toNodeId, edges] of incomingByNode.entries()) {\n      const counts = duplicateInputCounts.get(toNodeId) ?? new Map();\n      for (let i = 0; i < edges.length; i++) {\n        const edge = edges[i]!;\n        const dup = (counts.get(edge.input) ?? 0) > 1;\n        const collectKey = dup ? `${edge.from.nodeId}:${edge.from.output}` : edge.input;\n        edges[i] = { ...edge, collectKey };\n      }\n    }\n\n    const outgoing = new Map<NodeId, TopologyOutgoingEdge[]>();\n    for (const e of wf.edges) {\n      if (!classifier.isExecutableNodeId(e.from.nodeId) || !classifier.isExecutableNodeId(e.to.nodeId)) {\n        continue;\n      }\n      const counts = duplicateInputCounts.get(e.to.nodeId) ?? new Map();\n      const dup = (counts.get(e.to.input) ?? 0) > 1;\n      const collectKey = dup ? `${e.from.nodeId}:${e.from.output}` : e.to.input;\n      const list = outgoing.get(e.from.nodeId) ?? [];\n      list.push({\n        output: e.from.output,\n        to: { nodeId: e.to.nodeId, input: e.to.input, collectKey },\n      });\n      outgoing.set(e.from.nodeId, list);\n    }\n\n    const expected = new Map<NodeId, InputPortKey[]>();\n    for (const [toNodeId, edges] of incomingByNode.entries()) {\n      const order: InputPortKey[] = [];\n      const seen = new Set<InputPortKey>();\n      for (const edge of edges) {\n        if (seen.has(edge.collectKey)) {\n          continue;\n        }\n        seen.add(edge.collectKey);\n        order.push(edge.collectKey);\n      }\n      expected.set(toNodeId, order);\n    }\n\n    const rootNodeIds = wf.nodes\n      .filter((node) => classifier.isExecutableNodeId(node.id) && !incomingByNode.has(node.id))\n      .map((node) => node.id);\n    return new WorkflowTopology(defs, outgoing, incomingByNode, expected, rootNodeIds);\n  }\n}\n","import type {\n  ActivationIdFactory,\n  EngineRunCounters,\n  NodeActivationId,\n  NodeActivationRequest,\n  NodeExecutionContext,\n  NodeExecutionSnapshot,\n  NodeExecutionStatus,\n  NodeId,\n  NodeInputsByPort,\n  NodeOutputs,\n  PendingNodeExecution,\n  PendingResumeEntry,\n  PersistedRunSchedulingState,\n  PersistedRunState,\n  ResumeContext,\n  RunDataFactory,\n  RunHaltReason,\n  RunId,\n  RunQueueEntry,\n  RunResult,\n  WorkflowExecutionRepository,\n  WebhookControlSignal,\n  WebhookRunResult,\n  WorkflowDefinition,\n  WorkflowId,\n  WorkflowSnapshotResolver,\n} from \"../types\";\n\nimport { WorkflowTopology } from \"../planning/WorkflowTopologyPlanner\";\nimport { WorkflowExecutableNodeClassifierFactory } from \"../workflow/definition/WorkflowExecutableNodeClassifierFactory\";\n\nimport { CredentialResolverFactory } from \"../execution/CredentialResolverFactory\";\nimport type { EngineExecutionLimitsPolicy } from \"../policies/executionLimits/EngineExecutionLimitsPolicy\";\nimport { RunTerminalPersistenceCoordinator } from \"../policies/storage/RunTerminalPersistenceCoordinator\";\nimport { WorkflowPolicyErrorServices } from \"../policies/WorkflowPolicyErrorServices\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport type { EngineWaiters } from \"../orchestration/EngineWaiters\";\nimport { NodeEventPublisher } from \"../events/NodeEventPublisher\";\n\nimport { ActivationEnqueueService } from \"../execution/ActivationEnqueueService\";\nimport { NodeInputsByPortFactory } from \"../execution/NodeInputsByPortFactory\";\nimport { NodeExecutionSnapshotFactory } from \"../execution/NodeExecutionSnapshotFactory\";\nimport { NodeRunStateWriterFactory } from \"../execution/NodeRunStateWriterFactory\";\nimport { NodeActivationRequestComposer } from \"../execution/NodeActivationRequestComposer\";\nimport { PersistedRunStateTerminalBuilder } from \"../execution/PersistedRunStateTerminalBuilder\";\nimport { RunStateSemantics } from \"../execution/RunStateSemantics\";\nimport { WorkflowRunExecutionContextFactory } from \"../execution/WorkflowRunExecutionContextFactory\";\nimport { MissingRuntimeParityGuard } from \"../workflowSnapshots/MissingRuntimeParityGuard\";\n\nexport class RunContinuationService {\n  constructor(\n    private readonly activationIdFactory: ActivationIdFactory,\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly runDataFactory: RunDataFactory,\n    private readonly runExecutionContextFactory: WorkflowRunExecutionContextFactory,\n    private readonly workflowSnapshotResolver: WorkflowSnapshotResolver,\n    private readonly planningFactory: EngineWorkflowPlanningFactory,\n    private readonly nodeStatePublisherFactory: NodeRunStateWriterFactory,\n    private readonly credentialResolverFactory: CredentialResolverFactory,\n    private readonly nodeActivationRequestComposer: NodeActivationRequestComposer,\n    private readonly persistedRunStateTerminalBuilder: PersistedRunStateTerminalBuilder,\n    private readonly activationEnqueueService: ActivationEnqueueService,\n    private readonly nodeEventPublisher: NodeEventPublisher,\n    private readonly semantics: RunStateSemantics,\n    private readonly waiters: EngineWaiters,\n    private readonly policyErrorServices: WorkflowPolicyErrorServices,\n    private readonly terminalPersistence: RunTerminalPersistenceCoordinator,\n    private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n    private readonly parityGuard: MissingRuntimeParityGuard,\n  ) {}\n\n  async markNodeRunning(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    inputsByPort: NodeInputsByPort;\n  }): Promise<void> {\n    const [state, schedulingState] = await Promise.all([\n      this.workflowExecutionRepository.load(args.runId),\n      this.workflowExecutionRepository.loadSchedulingState(args.runId),\n    ]);\n    const pendingExecution = schedulingState?.pending;\n    if (!state || !pendingExecution) return;\n    if (pendingExecution.activationId !== args.activationId || pendingExecution.nodeId !== args.nodeId) return;\n\n    const startedAt = new Date().toISOString();\n    const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n    const snapshot = NodeExecutionSnapshotFactory.running({\n      previous,\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: state.parent,\n      startedAt,\n      inputsByPort: args.inputsByPort,\n    });\n\n    await this.workflowExecutionRepository.save({\n      ...state,\n      nodeSnapshotsByNodeId: {\n        ...(state.nodeSnapshotsByNodeId ?? {}),\n        [args.nodeId]: snapshot,\n      },\n    });\n    await this.nodeEventPublisher.publish(\"nodeStarted\", snapshot);\n  }\n\n  async resumeFromNodeResult(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    outputs: NodeOutputs;\n  }): Promise<RunResult> {\n    const [state, schedulingState] = await Promise.all([\n      this.workflowExecutionRepository.load(args.runId),\n      this.workflowExecutionRepository.loadSchedulingState(args.runId),\n    ]);\n    if (!state) throw new Error(`Unknown runId: ${args.runId}`);\n    const pendingExecution = this.requirePendingExecution(\n      args.runId,\n      args.activationId,\n      args.nodeId,\n      state,\n      schedulingState,\n    );\n    if (pendingExecution.activationId !== args.activationId)\n      throw new Error(`activationId mismatch for run ${args.runId}`);\n    if (pendingExecution.nodeId !== args.nodeId) throw new Error(`nodeId mismatch for run ${args.runId}`);\n\n    const wf = this.resolvePersistedWorkflow(state);\n    if (!wf) throw new Error(`Unknown workflowId: ${state.workflowId}`);\n\n    const { topology, planner } = this.planningFactory.create(wf);\n\n    const data = this.runDataFactory.create(state.outputsByNode);\n    const limits = this.resolveEngineLimitsFromState(state);\n    const base = this.runExecutionContextFactory.create({\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId: args.nodeId,\n      parent: state.parent,\n      policySnapshot: state.policySnapshot,\n      subworkflowDepth: state.executionOptions?.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: limits.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: limits.engineMaxSubworkflowDepth,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(state.runId, state.workflowId, state.parent),\n      testContext: state.executionOptions?.testContext,\n    });\n\n    data.setOutputs(args.nodeId, args.outputs);\n    const completedAt = new Date().toISOString();\n\n    const hitlResolution = this.resolveHitlStatus(args.outputs);\n\n    const completedSnapshot = this.semantics.createFinishedSnapshot({\n      workflow: wf,\n      previous: state.nodeSnapshotsByNodeId?.[args.nodeId],\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: state.parent,\n      finishedAt: completedAt,\n      inputsByPort: pendingExecution.inputsByPort,\n      outputs: args.outputs,\n      hitlStatus: hitlResolution?.nodeStatus,\n    });\n\n    if (hitlResolution?.halt) {\n      const haltedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state,\n        engineCounters: state.engineCounters ?? { completedNodeActivations: 0 },\n        status: \"halted\",\n        reason: hitlResolution.reason,\n        queue: [],\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: {\n          ...(state.nodeSnapshotsByNodeId ?? {}),\n          [args.nodeId]: completedSnapshot,\n        },\n        finishedAtIso: completedAt,\n      });\n      await this.workflowExecutionRepository.save(haltedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: wf,\n        state: haltedState,\n        finalStatus: \"failed\",\n        finishedAt: completedAt,\n      });\n      const result: RunResult = {\n        runId: state.runId,\n        workflowId: state.workflowId,\n        startedAt: state.startedAt,\n        status: \"halted\",\n        reason: hitlResolution.reason,\n      };\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    const completedActivations = (state.engineCounters?.completedNodeActivations ?? 0) + 1;\n    const engineCounters = { completedNodeActivations: completedActivations };\n    const maxNodeActivations =\n      state.executionOptions?.maxNodeActivations ??\n      this.executionLimitsPolicy.createRootExecutionOptions().maxNodeActivations!;\n\n    if (this.semantics.isStopConditionSatisfied(state.control?.stopCondition, args.nodeId)) {\n      const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state,\n        engineCounters,\n        status: \"completed\",\n        queue: [],\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: {\n          ...(state.nodeSnapshotsByNodeId ?? {}),\n          [args.nodeId]: completedSnapshot,\n        },\n        finishedAtIso: completedAt,\n      });\n      await this.workflowExecutionRepository.save(completedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: wf,\n        state: completedState,\n        finalStatus: \"completed\",\n        finishedAt: completedAt,\n      });\n      const result: RunResult = {\n        runId: state.runId,\n        workflowId: state.workflowId,\n        startedAt: state.startedAt,\n        status: \"completed\",\n        outputs: this.semantics.resolveResultOutputs(wf, state.control?.stopCondition, data.dump()),\n      };\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    const batchId = pendingExecution.batchId ?? \"batch_1\";\n    const queue: RunQueueEntry[] = (schedulingState?.queue ?? []).map((q) => ({ ...q, batchId: q.batchId ?? batchId }));\n    const nextNodeSnapshotsByNodeId = {\n      ...(state.nodeSnapshotsByNodeId ?? {}),\n      [args.nodeId]: completedSnapshot,\n    };\n\n    planner.applyOutputs(queue, { fromNodeId: args.nodeId, outputs: args.outputs as any, batchId });\n    this.semantics.applyPinnedQueueSkips({\n      runId: state.runId,\n      workflowId: state.workflowId,\n      parent: state.parent,\n      mutableState: state.mutableState,\n      planner,\n      queue,\n      data,\n      nodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n      finishedAt: completedAt,\n    });\n\n    let next: ReturnType<(typeof planner)[\"nextActivation\"]>;\n    try {\n      next = planner.nextActivation(queue);\n    } catch (cause) {\n      const completedDefinition = topology.defsById.get(args.nodeId);\n      const completedNodeLabel = this.formatNodeLabel({\n        definition: completedDefinition,\n        nodeId: args.nodeId,\n      });\n      const reason = cause instanceof Error ? cause.message : String(cause);\n      throw new Error(\n        `After completing ${completedNodeLabel}, the engine could not plan the next activation. ${reason} Outputs: ${this.formatOutputCounts(args.outputs)}.`,\n        { cause },\n      );\n    }\n    if (!next) {\n      const lastNodeId = WorkflowExecutableNodeClassifierFactory.create(wf).lastExecutableNodeIdInDefinitionOrder(wf);\n      const outputs = data.getOutputItems(lastNodeId, \"main\");\n\n      const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state,\n        engineCounters,\n        status: \"completed\",\n        queue: [],\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n        finishedAtIso: completedAt,\n      });\n      await this.workflowExecutionRepository.save(completedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: wf,\n        state: completedState,\n        finalStatus: \"completed\",\n        finishedAt: completedAt,\n      });\n\n      const result: RunResult = {\n        runId: state.runId,\n        workflowId: state.workflowId,\n        startedAt: state.startedAt,\n        status: \"completed\",\n        outputs,\n      };\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    if (completedActivations >= maxNodeActivations) {\n      const message = `Run exceeded maxNodeActivations (${maxNodeActivations}) after ${completedActivations} completed node activations (next would be ${next.nodeId}).`;\n      const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state,\n        engineCounters,\n        status: \"failed\",\n        queue: queue.map((q) => ({ ...q })),\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n        finishedAtIso: completedAt,\n      });\n      await this.workflowExecutionRepository.save(failedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: wf,\n        state: failedState,\n        finalStatus: \"failed\",\n        finishedAt: completedAt,\n      });\n      const result: RunResult = {\n        runId: state.runId,\n        workflowId: state.workflowId,\n        startedAt: state.startedAt,\n        status: \"failed\",\n        error: { message },\n      };\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    const def = topology.defsById.get(next.nodeId);\n    if (!def || def.kind !== \"node\") throw new Error(`Node ${next.nodeId} is not a runnable node`);\n\n    const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n      next,\n      base,\n      data,\n      runId: state.runId,\n      workflowId: state.workflowId,\n      parent: state.parent,\n      executionOptions: state.executionOptions,\n      nodeDefinition: def,\n    });\n\n    try {\n      this.parityGuard.assertNone(wf, [next.nodeId]);\n      const { queuedSnapshot, result } = await this.activationEnqueueService.enqueueActivationWithSnapshot({\n        runId: state.runId,\n        workflowId: state.workflowId,\n        startedAt: state.startedAt,\n        parent: state.parent,\n        executionOptions: state.executionOptions,\n        control: state.control,\n        workflowSnapshot: state.workflowSnapshot,\n        mutableState: state.mutableState,\n        policySnapshot: state.policySnapshot,\n        pendingQueue: queue,\n        request,\n        previousNodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n        planner,\n        engineCounters,\n        connectionInvocations: state.connectionInvocations ?? [],\n      });\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n      return result;\n    } catch (cause) {\n      const error = cause instanceof Error ? cause : new Error(String(cause));\n      return await this.terminateRunAfterActivationEnqueueRejected({\n        wf,\n        state,\n        queue,\n        nextNodeId: next.nodeId,\n        request,\n        completedSnapshot,\n        nextNodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n        outputsByNode: data.dump(),\n        engineCounters,\n        error,\n        completedAt,\n      });\n    }\n  }\n\n  async resumeFromNodeError(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    error: Error;\n  }): Promise<RunResult> {\n    const [state, schedulingState] = await Promise.all([\n      this.workflowExecutionRepository.load(args.runId),\n      this.workflowExecutionRepository.loadSchedulingState(args.runId),\n    ]);\n    if (!state) throw new Error(`Unknown runId: ${args.runId}`);\n    const pendingExecution = this.requirePendingExecution(\n      args.runId,\n      args.activationId,\n      args.nodeId,\n      state,\n      schedulingState,\n    );\n    if (pendingExecution.activationId !== args.activationId)\n      throw new Error(`activationId mismatch for run ${args.runId}`);\n    if (pendingExecution.nodeId !== args.nodeId) throw new Error(`nodeId mismatch for run ${args.runId}`);\n\n    const wf = this.resolvePersistedWorkflow(state);\n    if (!wf) throw new Error(`Unknown workflowId: ${state.workflowId}`);\n    const failedDefinition = WorkflowTopology.fromWorkflow(wf).defsById.get(args.nodeId);\n    const webhookControlSignal =\n      state.executionOptions?.webhook && failedDefinition?.kind === \"trigger\"\n        ? this.asWebhookControlSignal(args.error)\n        : undefined;\n    if (webhookControlSignal) {\n      return await this.resumeFromWebhookControl({\n        state,\n        schedulingState,\n        pendingExecution,\n        workflow: wf,\n        args,\n        signal: webhookControlSignal,\n      });\n    }\n\n    if (failedDefinition && failedDefinition.kind === \"node\") {\n      const nodeHandler = this.policyErrorServices.resolveNodeErrorHandler(failedDefinition.config.nodeErrorHandler);\n      if (nodeHandler) {\n        try {\n          const ctx = this.buildNodeExecutionContextForPending(\n            state,\n            pendingExecution,\n            wf,\n            failedDefinition,\n            args.nodeId,\n          );\n          const inputsByPort = pendingExecution.inputsByPort;\n          const portKeys = Object.keys(inputsByPort);\n          const kind = portKeys.length === 1 && portKeys[0] === \"in\" ? (\"single\" as const) : (\"multi\" as const);\n          const items = inputsByPort.in ?? [];\n          const recovered = await nodeHandler.handle({\n            kind,\n            items,\n            inputsByPort: kind === \"multi\" ? inputsByPort : undefined,\n            ctx,\n            error: args.error,\n          });\n          return await this.resumeFromNodeResult({\n            runId: args.runId,\n            activationId: args.activationId,\n            nodeId: args.nodeId,\n            outputs: recovered,\n          });\n        } catch {}\n      }\n    }\n\n    const finishedAt = new Date().toISOString();\n    const message = args.error?.message ?? String(args.error);\n    const failedSnapshot = NodeExecutionSnapshotFactory.failed({\n      previous: state.nodeSnapshotsByNodeId?.[args.nodeId],\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      parent: state.parent,\n      finishedAt,\n      inputsByPort: pendingExecution.inputsByPort,\n      error: args.error,\n    });\n    const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n      state,\n      engineCounters: state.engineCounters ?? { completedNodeActivations: 0 },\n      status: \"failed\",\n      queue: (schedulingState?.queue ?? []).map((q) => ({ ...q })),\n      outputsByNode: state.outputsByNode,\n      nodeSnapshotsByNodeId: {\n        ...(state.nodeSnapshotsByNodeId ?? {}),\n        [args.nodeId]: failedSnapshot,\n      },\n      finishedAtIso: finishedAt,\n    });\n    await this.workflowExecutionRepository.save(failedState);\n    await this.nodeEventPublisher.publish(\"nodeFailed\", failedSnapshot);\n\n    const wfErr = this.policyErrorServices.resolveWorkflowErrorHandler(wf.workflowErrorHandler);\n    if (wfErr) {\n      await Promise.resolve(\n        wfErr.onError({\n          runId: state.runId,\n          workflowId: state.workflowId,\n          workflow: wf,\n          failedNodeId: args.nodeId,\n          error: args.error,\n          startedAt: state.startedAt,\n          finishedAt,\n        }),\n      );\n    }\n\n    await this.terminalPersistence.maybeDeleteAfterTerminalState({\n      workflow: wf,\n      state: failedState,\n      finalStatus: \"failed\",\n      finishedAt,\n    });\n\n    const result: RunResult = {\n      runId: state.runId,\n      workflowId: state.workflowId,\n      startedAt: state.startedAt,\n      status: \"failed\",\n      error: { message },\n    };\n    this.waiters.resolveRunCompletion(result);\n    return result;\n  }\n\n  async resumeFromStepResult(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    outputs: NodeOutputs;\n  }): Promise<RunResult> {\n    return await this.resumeFromNodeResult(args);\n  }\n\n  async resumeFromStepError(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    error: Error;\n  }): Promise<RunResult> {\n    return await this.resumeFromNodeError(args);\n  }\n\n  async waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" | \"halted\" }>> {\n    const existing = await this.workflowExecutionRepository.load(runId);\n    if (existing?.status === \"completed\") {\n      const wf = this.resolvePersistedWorkflow(existing);\n      const outputs = wf\n        ? this.semantics.resolveResultOutputs(wf, existing.control?.stopCondition, existing.outputsByNode)\n        : [];\n      return {\n        runId: existing.runId,\n        workflowId: existing.workflowId,\n        startedAt: existing.startedAt,\n        status: \"completed\",\n        outputs,\n      };\n    }\n    if (existing?.status === \"failed\") {\n      return {\n        runId: existing.runId,\n        workflowId: existing.workflowId,\n        startedAt: existing.startedAt,\n        status: \"failed\",\n        error: { message: \"Run failed\" },\n      };\n    }\n    if (existing?.status === \"halted\") {\n      return {\n        runId: existing.runId,\n        workflowId: existing.workflowId,\n        startedAt: existing.startedAt,\n        status: \"halted\",\n        reason: existing.reason ?? \"hitl-rejected\",\n      };\n    }\n\n    const result = await this.waiters.waitForCompletion(runId);\n    if (result.status !== \"completed\" && result.status !== \"failed\" && result.status !== \"halted\") {\n      throw new Error(`Unexpected run completion status: ${result.status}`);\n    }\n    return result;\n  }\n\n  async waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult> {\n    return await this.waiters.waitForWebhookResponse(runId);\n  }\n\n  async resumeRun(args: { runId: RunId; taskId: string; resumeContext: ResumeContext }): Promise<RunResult> {\n    const state = await this.workflowExecutionRepository.load(args.runId);\n    if (!state) throw new Error(`Unknown runId: ${args.runId}`);\n    if (state.status !== \"suspended\") {\n      throw new Error(`Run ${args.runId} is not suspended (status: ${state.status})`);\n    }\n\n    const suspensionEntry = (state.suspension ?? []).find((s) => s.taskId === args.taskId);\n    if (!suspensionEntry) {\n      throw new Error(`No suspension entry with taskId \"${args.taskId}\" found on run ${args.runId}`);\n    }\n\n    const wf = this.resolvePersistedWorkflow(state);\n    if (!wf) throw new Error(`Unknown workflowId: ${state.workflowId}`);\n\n    const { topology, planner } = this.planningFactory.create(wf);\n    const def = topology.defsById.get(suspensionEntry.nodeId);\n    if (!def || def.kind !== \"node\") {\n      throw new Error(`Node ${suspensionEntry.nodeId} is not a runnable node`);\n    }\n\n    const data = this.runDataFactory.create(state.outputsByNode);\n    const limits = this.resolveEngineLimitsFromState(state);\n    const base = this.runExecutionContextFactory.create({\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId: suspensionEntry.nodeId,\n      parent: state.parent,\n      policySnapshot: state.policySnapshot,\n      subworkflowDepth: state.executionOptions?.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: limits.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: limits.engineMaxSubworkflowDepth,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(state.runId, state.workflowId, state.parent),\n      testContext: state.executionOptions?.testContext,\n    });\n\n    const parentEdges = wf.edges.filter((e) => e.to.nodeId === suspensionEntry.nodeId);\n    const parentNodeId = parentEdges[0]?.from.nodeId;\n    const parentOutputPort = parentEdges[0]?.from.output ?? \"main\";\n    const allParentItems = parentNodeId ? (data.getOutputItems(parentNodeId, parentOutputPort) ?? []) : [];\n    const resumeInput =\n      allParentItems.length > suspensionEntry.itemIndex ? [allParentItems[suspensionEntry.itemIndex]!] : allParentItems;\n\n    const newActivationId = this.activationIdFactory.makeActivationId();\n    const pendingResume: PendingResumeEntry = {\n      activationId: newActivationId,\n      nodeId: suspensionEntry.nodeId,\n      resumeContext: args.resumeContext,\n    };\n\n    const remainingSuspensions = (state.suspension ?? []).filter((s) => s.taskId !== args.taskId);\n\n    const baseWithResume = { ...base, resumeContext: args.resumeContext };\n\n    const batchId = `resume_${newActivationId}`;\n    const request = this.nodeActivationRequestComposer.createSingleFromDefinitionWithActivation({\n      activationId: newActivationId,\n      runId: state.runId,\n      workflowId: state.workflowId,\n      parent: state.parent,\n      executionOptions: state.executionOptions,\n      base: baseWithResume,\n      data,\n      definition: { id: suspensionEntry.nodeId, config: def.config },\n      batchId,\n      input: resumeInput,\n    });\n\n    this.parityGuard.assertNone(wf, [suspensionEntry.nodeId]);\n\n    const { result, queuedSnapshot } = await this.activationEnqueueService.enqueueActivationWithSnapshot({\n      runId: state.runId,\n      workflowId: state.workflowId,\n      startedAt: state.startedAt,\n      parent: state.parent,\n      executionOptions: state.executionOptions,\n      control: state.control,\n      workflowSnapshot: state.workflowSnapshot,\n      mutableState: state.mutableState,\n      policySnapshot: state.policySnapshot,\n      pendingQueue: [],\n      request,\n      previousNodeSnapshotsByNodeId: state.nodeSnapshotsByNodeId ?? {},\n      planner,\n      engineCounters: state.engineCounters,\n      connectionInvocations: state.connectionInvocations ?? [],\n      suspension: remainingSuspensions.length > 0 ? remainingSuspensions : undefined,\n      pendingResume,\n    });\n\n    await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n    return result;\n  }\n\n  private async resumeFromWebhookControl(args: {\n    state: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>;\n    schedulingState: PersistedRunSchedulingState | undefined;\n    pendingExecution: PendingNodeExecution;\n    workflow: WorkflowDefinition;\n    args: { runId: RunId; activationId: NodeActivationId; nodeId: NodeId; error: Error };\n    signal: WebhookControlSignal;\n  }): Promise<RunResult> {\n    const data = this.runDataFactory.create(args.state.outputsByNode);\n    const { topology, planner } = this.planningFactory.create(args.workflow);\n\n    const continuedItems =\n      args.signal.kind === \"respondNowAndContinue\" ? (args.signal.continueItems ?? []) : args.signal.responseItems;\n    const triggerOutputs: NodeOutputs = { main: continuedItems };\n    data.setOutputs(args.args.nodeId, triggerOutputs);\n\n    const completedSnapshot = this.semantics.createFinishedSnapshot({\n      workflow: args.workflow,\n      previous: args.state.nodeSnapshotsByNodeId?.[args.args.nodeId],\n      runId: args.state.runId,\n      workflowId: args.state.workflowId,\n      nodeId: args.args.nodeId,\n      activationId: args.args.activationId,\n      parent: args.state.parent,\n      finishedAt: new Date().toISOString(),\n      inputsByPort: args.pendingExecution.inputsByPort,\n      outputs: triggerOutputs,\n    });\n\n    const completedActivations = (args.state.engineCounters?.completedNodeActivations ?? 0) + 1;\n    const engineCounters = { completedNodeActivations: completedActivations };\n    const maxNodeActivations =\n      args.state.executionOptions?.maxNodeActivations ??\n      this.executionLimitsPolicy.createRootExecutionOptions().maxNodeActivations!;\n\n    if (this.semantics.isStopConditionSatisfied(args.state.control?.stopCondition, args.args.nodeId)) {\n      const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state: args.state,\n        engineCounters,\n        status: \"completed\",\n        queue: [],\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: {\n          ...(args.state.nodeSnapshotsByNodeId ?? {}),\n          [args.args.nodeId]: completedSnapshot,\n        },\n        finishedAtIso: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n      });\n      await this.workflowExecutionRepository.save(completedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: args.workflow,\n        state: completedState,\n        finalStatus: \"completed\",\n        finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n      });\n      this.waiters.resolveWebhookResponse({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        runStatus: \"completed\",\n        response: args.signal.responseItems,\n      });\n      const result: RunResult = {\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        status: \"completed\",\n        outputs: this.semantics.resolveResultOutputs(args.workflow, args.state.control?.stopCondition, data.dump()),\n      };\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    if (args.signal.kind === \"respondNow\") {\n      const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state: args.state,\n        engineCounters,\n        status: \"completed\",\n        queue: [],\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: {\n          ...(args.state.nodeSnapshotsByNodeId ?? {}),\n          [args.args.nodeId]: completedSnapshot,\n        },\n        finishedAtIso: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n      });\n      await this.workflowExecutionRepository.save(completedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: args.workflow,\n        state: completedState,\n        finalStatus: \"completed\",\n        finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n      });\n\n      const result: RunResult = {\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        status: \"completed\",\n        outputs: args.signal.responseItems,\n      };\n      this.waiters.resolveWebhookResponse({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        runStatus: \"completed\",\n        response: args.signal.responseItems,\n      });\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    const batchId = args.pendingExecution.batchId ?? \"batch_1\";\n    const queue: RunQueueEntry[] = (args.schedulingState?.queue ?? []).map((entry) => ({\n      ...entry,\n      batchId: entry.batchId ?? batchId,\n    }));\n    planner.applyOutputs(queue, { fromNodeId: args.args.nodeId, outputs: triggerOutputs as any, batchId });\n    const next = planner.nextActivation(queue);\n\n    const finishedAt = completedSnapshot.finishedAt ?? completedSnapshot.updatedAt;\n    const mergedSnapshots = {\n      ...(args.state.nodeSnapshotsByNodeId ?? {}),\n      [args.args.nodeId]: completedSnapshot,\n    };\n\n    if (!next) {\n      const lastNodeId = WorkflowExecutableNodeClassifierFactory.create(\n        args.workflow,\n      ).lastExecutableNodeIdInDefinitionOrder(args.workflow);\n      const outputs = data.getOutputItems(lastNodeId, \"main\");\n      const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state: args.state,\n        engineCounters,\n        status: \"completed\",\n        queue: [],\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: mergedSnapshots,\n        finishedAtIso: finishedAt,\n      });\n      await this.workflowExecutionRepository.save(completedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: args.workflow,\n        state: completedState,\n        finalStatus: \"completed\",\n        finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n      });\n\n      const result: RunResult = {\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        status: \"completed\",\n        outputs,\n      };\n      this.waiters.resolveWebhookResponse({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        runStatus: \"completed\",\n        response: args.signal.responseItems,\n      });\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    if (completedActivations >= maxNodeActivations) {\n      const message = `Run exceeded maxNodeActivations (${maxNodeActivations}) after ${completedActivations} completed node activations (next would be ${next.nodeId}).`;\n      const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n        state: args.state,\n        engineCounters,\n        status: \"failed\",\n        queue: queue.map((q) => ({ ...q })),\n        outputsByNode: data.dump(),\n        nodeSnapshotsByNodeId: mergedSnapshots,\n        finishedAtIso: finishedAt,\n      });\n      await this.workflowExecutionRepository.save(failedState);\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.terminalPersistence.maybeDeleteAfterTerminalState({\n        workflow: args.workflow,\n        state: failedState,\n        finalStatus: \"failed\",\n        finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n      });\n      const result: RunResult = {\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        status: \"failed\",\n        error: { message },\n      };\n      this.waiters.resolveWebhookResponse({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        runStatus: \"pending\",\n        response: args.signal.responseItems,\n      });\n      this.waiters.resolveRunCompletion(result);\n      return result;\n    }\n\n    const nextDefinition = topology.defsById.get(next.nodeId);\n    if (!nextDefinition || nextDefinition.kind !== \"node\") {\n      throw new Error(`Node ${next.nodeId} is not a runnable node`);\n    }\n\n    const webhookLimits = this.resolveEngineLimitsFromState(args.state);\n    const base = this.runExecutionContextFactory.create({\n      runId: args.state.runId,\n      workflowId: args.state.workflowId,\n      nodeId: nextDefinition.id,\n      parent: args.state.parent,\n      policySnapshot: args.state.policySnapshot,\n      subworkflowDepth: args.state.executionOptions?.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: webhookLimits.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: webhookLimits.engineMaxSubworkflowDepth,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(args.state.runId, args.state.workflowId, args.state.parent),\n      testContext: args.state.executionOptions?.testContext,\n    });\n    const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n      next,\n      base,\n      data,\n      runId: args.state.runId,\n      workflowId: args.state.workflowId,\n      parent: args.state.parent,\n      executionOptions: args.state.executionOptions,\n      nodeDefinition: nextDefinition,\n    });\n\n    try {\n      this.parityGuard.assertNone(args.workflow, [next.nodeId]);\n      const { queuedSnapshot, result } = await this.activationEnqueueService.enqueueActivationWithSnapshot({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        parent: args.state.parent,\n        executionOptions: args.state.executionOptions,\n        control: args.state.control,\n        workflowSnapshot: args.state.workflowSnapshot,\n        mutableState: args.state.mutableState,\n        policySnapshot: args.state.policySnapshot,\n        pendingQueue: queue,\n        request,\n        previousNodeSnapshotsByNodeId: mergedSnapshots,\n        planner,\n        engineCounters,\n        connectionInvocations: args.state.connectionInvocations ?? [],\n      });\n      await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n      await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n      this.waiters.resolveWebhookResponse({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        runStatus: \"pending\",\n        response: args.signal.responseItems,\n      });\n      return result;\n    } catch (cause) {\n      const error = cause instanceof Error ? cause : new Error(String(cause));\n      const result = await this.terminateRunAfterActivationEnqueueRejected({\n        wf: args.workflow,\n        state: args.state,\n        queue,\n        nextNodeId: next.nodeId,\n        request,\n        completedSnapshot,\n        nextNodeSnapshotsByNodeId: mergedSnapshots,\n        outputsByNode: data.dump(),\n        engineCounters,\n        error,\n        completedAt: finishedAt,\n      });\n      this.waiters.resolveWebhookResponse({\n        runId: args.state.runId,\n        workflowId: args.state.workflowId,\n        startedAt: args.state.startedAt,\n        runStatus: \"pending\",\n        response: args.signal.responseItems,\n      });\n      return result;\n    }\n  }\n\n  private asWebhookControlSignal(error: Error): WebhookControlSignal | undefined {\n    const candidate = error as Partial<WebhookControlSignal> | undefined;\n    if (!candidate || candidate.__webhookControl !== true) return undefined;\n    if (candidate.kind !== \"respondNow\" && candidate.kind !== \"respondNowAndContinue\") return undefined;\n    if (!Array.isArray(candidate.responseItems)) return undefined;\n    return candidate as WebhookControlSignal;\n  }\n\n  private resolvePersistedWorkflow(state: {\n    workflowId: WorkflowId;\n    workflowSnapshot?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n  }): WorkflowDefinition | undefined {\n    return this.workflowSnapshotResolver.resolve({\n      workflowId: state.workflowId,\n      workflowSnapshot: state.workflowSnapshot,\n    });\n  }\n\n  private buildNodeExecutionContextForPending(\n    state: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>,\n    pendingExecution: PendingNodeExecution,\n    wf: WorkflowDefinition,\n    def: Readonly<{ id: NodeId; config: NodeExecutionContext[\"config\"] }>,\n    nodeId: NodeId,\n  ): NodeExecutionContext {\n    const data = this.runDataFactory.create(state.outputsByNode);\n    const limits = this.resolveEngineLimitsFromState(state);\n    const base = this.runExecutionContextFactory.create({\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId,\n      parent: state.parent,\n      policySnapshot: state.policySnapshot,\n      subworkflowDepth: state.executionOptions?.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: limits.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: limits.engineMaxSubworkflowDepth,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(state.runId, state.workflowId, state.parent),\n      testContext: state.executionOptions?.testContext,\n    });\n    const activationId = pendingExecution.activationId;\n    return {\n      ...base,\n      data,\n      nodeId,\n      activationId,\n      config: def.config,\n      telemetry: base.telemetry.forNode({ nodeId, activationId }),\n      binary: base.binary.forNode({ nodeId, activationId }),\n      getCredential: this.credentialResolverFactory.create(wf.id, nodeId, def.config),\n    };\n  }\n\n  private requirePendingExecution(\n    runId: RunId,\n    activationId: NodeActivationId,\n    nodeId: NodeId,\n    state: PersistedRunState,\n    schedulingState?: PersistedRunSchedulingState,\n  ): PendingNodeExecution {\n    if (state.status !== \"pending\") {\n      throw new Error(`Run ${runId} is not pending`);\n    }\n    const pendingExecution = schedulingState?.pending;\n    if (!pendingExecution) {\n      throw new Error(`Run ${runId} is not pending`);\n    }\n    if (pendingExecution.activationId !== activationId) {\n      throw new Error(`activationId mismatch for run ${runId}`);\n    }\n    if (pendingExecution.nodeId !== nodeId) {\n      throw new Error(`nodeId mismatch for run ${runId}`);\n    }\n    return pendingExecution;\n  }\n\n  private resolveEngineLimitsFromState(state: PersistedRunState): {\n    engineMaxNodeActivations: number;\n    engineMaxSubworkflowDepth: number;\n  } {\n    const fb = this.executionLimitsPolicy.createRootExecutionOptions();\n    return {\n      engineMaxNodeActivations: state.executionOptions?.maxNodeActivations ?? fb.maxNodeActivations!,\n      engineMaxSubworkflowDepth: state.executionOptions?.maxSubworkflowDepth ?? fb.maxSubworkflowDepth!,\n    };\n  }\n\n  private async terminateRunAfterActivationEnqueueRejected(\n    args: Readonly<{\n      wf: WorkflowDefinition;\n      state: PersistedRunState;\n      queue: RunQueueEntry[];\n      nextNodeId: NodeId;\n      request: NodeActivationRequest;\n      completedSnapshot: NodeExecutionSnapshot;\n      nextNodeSnapshotsByNodeId: NonNullable<PersistedRunState[\"nodeSnapshotsByNodeId\"]>;\n      outputsByNode: PersistedRunState[\"outputsByNode\"];\n      engineCounters: EngineRunCounters;\n      error: Error;\n      completedAt: string;\n    }>,\n  ): Promise<RunResult> {\n    const finishedAt = args.completedAt;\n    const inputsByPort = NodeInputsByPortFactory.fromRequest(args.request);\n    const failedSnapshot = NodeExecutionSnapshotFactory.failed({\n      previous: undefined,\n      runId: args.state.runId,\n      workflowId: args.state.workflowId,\n      nodeId: args.nextNodeId,\n      activationId: args.request.activationId,\n      parent: args.state.parent,\n      finishedAt,\n      inputsByPort,\n      error: args.error,\n    });\n    const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n      state: args.state,\n      engineCounters: args.engineCounters,\n      status: \"failed\",\n      queue: args.queue.map((q) => ({ ...q })),\n      outputsByNode: args.outputsByNode,\n      nodeSnapshotsByNodeId: {\n        ...args.nextNodeSnapshotsByNodeId,\n        [args.nextNodeId]: failedSnapshot,\n      },\n      finishedAtIso: finishedAt,\n    });\n    await this.workflowExecutionRepository.save(failedState);\n    await this.nodeEventPublisher.publish(\"nodeCompleted\", args.completedSnapshot);\n    await this.nodeEventPublisher.publish(\"nodeFailed\", failedSnapshot);\n\n    const wfErr = this.policyErrorServices.resolveWorkflowErrorHandler(args.wf.workflowErrorHandler);\n    if (wfErr) {\n      await Promise.resolve(\n        wfErr.onError({\n          runId: args.state.runId,\n          workflowId: args.state.workflowId,\n          workflow: args.wf,\n          failedNodeId: args.nextNodeId,\n          error: args.error,\n          startedAt: args.state.startedAt,\n          finishedAt,\n        }),\n      );\n    }\n\n    await this.terminalPersistence.maybeDeleteAfterTerminalState({\n      workflow: args.wf,\n      state: failedState,\n      finalStatus: \"failed\",\n      finishedAt,\n    });\n\n    const message = args.error.message ?? String(args.error);\n    const result: RunResult = {\n      runId: args.state.runId,\n      workflowId: args.state.workflowId,\n      startedAt: args.state.startedAt,\n      status: \"failed\",\n      error: { message },\n    };\n    this.waiters.resolveRunCompletion(result);\n    return result;\n  }\n\n  private resolveHitlStatus(outputs: NodeOutputs):\n    | {\n        nodeStatus: Extract<\n          NodeExecutionStatus,\n          \"hitl-approved\" | \"hitl-rejected\" | \"hitl-timeout\" | \"hitl-auto-accepted\"\n        >;\n        halt: boolean;\n        reason: RunHaltReason;\n      }\n    | { nodeStatus: Extract<NodeExecutionStatus, \"hitl-approved\" | \"hitl-auto-accepted\">; halt: false }\n    | undefined {\n    const firstItem = outputs?.main?.[0];\n    const decisionStatus =\n      firstItem &&\n      typeof firstItem === \"object\" &&\n      \"json\" in firstItem &&\n      firstItem.json &&\n      typeof firstItem.json === \"object\" &&\n      \"decision\" in firstItem.json &&\n      firstItem.json.decision &&\n      typeof firstItem.json.decision === \"object\" &&\n      \"status\" in firstItem.json.decision\n        ? (firstItem.json.decision as { status: string }).status\n        : undefined;\n\n    if (!decisionStatus) return undefined;\n\n    if (decisionStatus === \"approved\") {\n      return { nodeStatus: \"hitl-approved\", halt: false } as {\n        nodeStatus: \"hitl-approved\";\n        halt: false;\n      };\n    }\n    if (decisionStatus === \"auto-accepted\") {\n      return { nodeStatus: \"hitl-auto-accepted\", halt: false } as {\n        nodeStatus: \"hitl-auto-accepted\";\n        halt: false;\n      };\n    }\n    if (decisionStatus === \"rejected\") {\n      return { nodeStatus: \"hitl-rejected\", halt: true, reason: \"hitl-rejected\" as const };\n    }\n    if (decisionStatus === \"timed-out\") {\n      return { nodeStatus: \"hitl-timeout\", halt: true, reason: \"hitl-timeout\" as const };\n    }\n\n    return undefined;\n  }\n\n  private formatNodeLabel(args: {\n    definition?: Readonly<{ id: NodeId; name?: string; type: unknown }>;\n    nodeId: NodeId;\n  }): string {\n    const tokenName = typeof args.definition?.type === \"function\" ? args.definition.type.name : \"Node\";\n    return args.definition?.name\n      ? `\"${args.definition.name}\" (${tokenName}:${args.nodeId})`\n      : `${tokenName}:${args.nodeId}`;\n  }\n\n  private formatOutputCounts(outputs: NodeOutputs): string {\n    const entries = Object.entries(outputs ?? {});\n    if (entries.length === 0) {\n      return \"no outputs\";\n    }\n    return entries.map(([port, items]) => `${port}=${items?.length ?? 0}`).join(\", \");\n  }\n}\n","import type {\n  ExecutionFrontierPlan,\n  InputPortKey,\n  Items,\n  NodeId,\n  NodeOutputs,\n  OutputPortKey,\n  RunCurrentState,\n  PersistedMutableNodeState,\n  RunQueueEntry,\n  RunStateResetRequest,\n  RunStopCondition,\n  ConnectionInvocationRecord,\n} from \"../types\";\n\nimport { ConnectionNodeIdFactory } from \"../workflow/definition/ConnectionNodeIdFactory\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class CurrentStateFrontierPlanner {\n  constructor(private readonly topology: WorkflowTopology) {}\n\n  static createFromTopology(topology: WorkflowTopology): CurrentStateFrontierPlanner {\n    return new CurrentStateFrontierPlanner(topology);\n  }\n\n  plan(args: {\n    currentState?: RunCurrentState;\n    stopCondition?: RunStopCondition;\n    reset?: RunStateResetRequest;\n    items?: Items;\n  }): ExecutionFrontierPlan {\n    const stopCondition = args.stopCondition ?? { kind: \"workflowCompleted\" as const };\n    const baseState = this.cloneCurrentState(args.currentState);\n    const normalizedState = this.overlayPinnedOutputs(baseState);\n    const resetResult = this.applyReset({ currentState: normalizedState, reset: args.reset });\n    const requiredNodeIds = this.collectRequiredNodeIds(stopCondition, resetResult.currentState);\n    const satisfiedNodeIds = this.collectSatisfiedNodeIds(resetResult.currentState);\n    const skippedNodeIds = [\n      ...new Set([\n        ...[...requiredNodeIds].filter((nodeId) => this.isNodeSatisfied(resetResult.currentState, nodeId)),\n        ...resetResult.preservedPinnedNodeIds.filter((nodeId) => requiredNodeIds.has(nodeId)),\n      ]),\n    ];\n    const frontierNodeIds = this.collectFrontierNodeIds(requiredNodeIds, resetResult.currentState);\n    const rootNodeIds = frontierNodeIds.filter(\n      (nodeId) => (this.topology.incomingByNode.get(nodeId) ?? []).length === 0,\n    );\n\n    if (rootNodeIds.length > 1) {\n      throw new Error(`Ambiguous execution frontier. Multiple root nodes require input: ${rootNodeIds.join(\", \")}`);\n    }\n\n    if (frontierNodeIds.length === 0) {\n      return {\n        queue: [],\n        currentState: resetResult.currentState,\n        stopCondition,\n        satisfiedNodeIds,\n        skippedNodeIds,\n        clearedNodeIds: resetResult.clearedNodeIds,\n        preservedPinnedNodeIds: resetResult.preservedPinnedNodeIds,\n      };\n    }\n\n    if (rootNodeIds.length === 1) {\n      const rootNodeId = rootNodeIds[0]!;\n      const definition = this.topology.defsById.get(rootNodeId);\n      if (!definition) {\n        throw new Error(`Unknown frontier nodeId: ${rootNodeId}`);\n      }\n      return {\n        rootNodeId,\n        rootNodeInput: this.resolveRootNodeInput({ nodeKind: definition.kind, items: args.items }),\n        queue: [],\n        currentState: resetResult.currentState,\n        stopCondition,\n        satisfiedNodeIds,\n        skippedNodeIds,\n        clearedNodeIds: resetResult.clearedNodeIds,\n        preservedPinnedNodeIds: resetResult.preservedPinnedNodeIds,\n      };\n    }\n\n    const queue: RunQueueEntry[] = [];\n    for (const nodeId of frontierNodeIds) {\n      queue.push(...this.buildFrontierQueue(nodeId, resetResult.currentState));\n    }\n\n    return {\n      queue,\n      currentState: resetResult.currentState,\n      stopCondition,\n      satisfiedNodeIds,\n      skippedNodeIds,\n      clearedNodeIds: resetResult.clearedNodeIds,\n      preservedPinnedNodeIds: resetResult.preservedPinnedNodeIds,\n    };\n  }\n\n  private cloneCurrentState(currentState: RunCurrentState | undefined): RunCurrentState {\n    if (!currentState) {\n      return {\n        outputsByNode: {},\n        nodeSnapshotsByNodeId: {},\n        connectionInvocations: [],\n        mutableState: undefined,\n      };\n    }\n    return {\n      outputsByNode: { ...currentState.outputsByNode },\n      nodeSnapshotsByNodeId: { ...currentState.nodeSnapshotsByNodeId },\n      connectionInvocations: currentState.connectionInvocations ? [...currentState.connectionInvocations] : undefined,\n      mutableState: currentState.mutableState,\n    };\n  }\n\n  private overlayPinnedOutputs(currentState: RunCurrentState): RunCurrentState {\n    const outputsByNode: Record<NodeId, NodeOutputs> = { ...currentState.outputsByNode };\n    for (const [nodeId, nodeState] of Object.entries(currentState.mutableState?.nodesById ?? {}) as Array<\n      [NodeId, PersistedMutableNodeState]\n    >) {\n      const pinnedOutputs = nodeState.pinnedOutputsByPort;\n      if (!pinnedOutputs) {\n        continue;\n      }\n      outputsByNode[nodeId] = pinnedOutputs;\n    }\n    return {\n      outputsByNode,\n      nodeSnapshotsByNodeId: { ...currentState.nodeSnapshotsByNodeId },\n      connectionInvocations: currentState.connectionInvocations,\n      mutableState: currentState.mutableState,\n    };\n  }\n\n  private applyReset(args: { currentState: RunCurrentState; reset?: RunStateResetRequest }): Readonly<{\n    currentState: RunCurrentState;\n    clearedNodeIds: ReadonlyArray<NodeId>;\n    preservedPinnedNodeIds: ReadonlyArray<NodeId>;\n  }> {\n    if (!args.reset) {\n      return {\n        currentState: args.currentState,\n        clearedNodeIds: [],\n        preservedPinnedNodeIds: [],\n      };\n    }\n\n    const outputsByNode: Record<NodeId, NodeOutputs> = { ...args.currentState.outputsByNode };\n    const nodeSnapshotsByNodeId = { ...args.currentState.nodeSnapshotsByNodeId };\n    const clearedNodeIds: NodeId[] = [];\n    const preservedPinnedNodeIds: NodeId[] = [];\n    const descendants = this.collectDescendants(args.reset.clearFromNodeId);\n    const runtimeDescendants = this.collectRuntimeDescendants(args.currentState, descendants);\n    const clearedIdSet = new Set<NodeId>([...descendants, ...runtimeDescendants]);\n\n    for (const nodeId of [...descendants, ...runtimeDescendants]) {\n      const pinnedOutputs = this.getPinnedOutputs(args.currentState, nodeId);\n      if (pinnedOutputs) {\n        outputsByNode[nodeId] = pinnedOutputs;\n        delete nodeSnapshotsByNodeId[nodeId];\n        preservedPinnedNodeIds.push(nodeId);\n        continue;\n      }\n      delete outputsByNode[nodeId];\n      delete nodeSnapshotsByNodeId[nodeId];\n      clearedNodeIds.push(nodeId);\n    }\n\n    return {\n      currentState: {\n        outputsByNode,\n        nodeSnapshotsByNodeId,\n        connectionInvocations: this.filterConnectionInvocations(args.currentState.connectionInvocations, clearedIdSet),\n        mutableState: args.currentState.mutableState,\n      },\n      clearedNodeIds,\n      preservedPinnedNodeIds,\n    };\n  }\n\n  private collectSatisfiedNodeIds(currentState: RunCurrentState): ReadonlyArray<NodeId> {\n    const satisfiedNodeIds: NodeId[] = [];\n    for (const nodeId of this.topology.defsById.keys()) {\n      if (this.isNodeSatisfied(currentState, nodeId)) {\n        satisfiedNodeIds.push(nodeId);\n      }\n    }\n    return satisfiedNodeIds;\n  }\n\n  private collectFrontierNodeIds(\n    requiredNodeIds: ReadonlySet<NodeId>,\n    currentState: RunCurrentState,\n  ): ReadonlyArray<NodeId> {\n    const frontierNodeIds: NodeId[] = [];\n    for (const nodeId of this.topology.defsById.keys()) {\n      if (!requiredNodeIds.has(nodeId) || this.isNodeSatisfied(currentState, nodeId)) {\n        continue;\n      }\n      const incomingEdges = this.topology.incomingByNode.get(nodeId) ?? [];\n      const isFrontier = incomingEdges.every((edge) => this.isEdgeSatisfied(currentState, nodeId, edge.collectKey));\n      if (isFrontier) {\n        frontierNodeIds.push(nodeId);\n      }\n    }\n    return frontierNodeIds;\n  }\n\n  private collectRequiredNodeIds(stopCondition: RunStopCondition, currentState: RunCurrentState): ReadonlySet<NodeId> {\n    const requiredNodeIds = new Set<NodeId>();\n    if (stopCondition.kind === \"workflowCompleted\") {\n      for (const nodeId of this.topology.defsById.keys()) {\n        if (!this.isNodeSatisfied(currentState, nodeId)) {\n          this.collectRequiredNode(requiredNodeIds, currentState, nodeId);\n        }\n      }\n      return requiredNodeIds;\n    }\n    if (!this.topology.defsById.has(stopCondition.nodeId)) {\n      throw new Error(`Unknown stop nodeId: ${stopCondition.nodeId}`);\n    }\n    this.collectRequiredNode(requiredNodeIds, currentState, stopCondition.nodeId);\n    return requiredNodeIds;\n  }\n\n  private collectRequiredNode(requiredNodeIds: Set<NodeId>, currentState: RunCurrentState, nodeId: NodeId): void {\n    if (requiredNodeIds.has(nodeId)) {\n      return;\n    }\n    if (this.isNodeSatisfied(currentState, nodeId) && !this.isNodeSatisfiedByOutputsOnly(currentState, nodeId)) {\n      return;\n    }\n    requiredNodeIds.add(nodeId);\n    for (const edge of this.topology.incomingByNode.get(nodeId) ?? []) {\n      if (\n        !this.isEdgeSatisfied(currentState, nodeId, edge.collectKey) ||\n        this.isNodeSatisfiedByOutputsOnly(currentState, edge.from.nodeId)\n      ) {\n        this.collectRequiredNode(requiredNodeIds, currentState, edge.from.nodeId);\n      }\n    }\n  }\n\n  private buildFrontierQueue(nodeId: NodeId, currentState: RunCurrentState): ReadonlyArray<RunQueueEntry> {\n    const incomingEdges = this.topology.incomingByNode.get(nodeId) ?? [];\n    if (incomingEdges.length === 0) {\n      return [];\n    }\n    const expectedInputs = this.topology.expectedInputsByNode.get(nodeId) ?? [];\n    const usesCollect = this.usesCollect(nodeId);\n    if (usesCollect) {\n      const received: Record<InputPortKey, Items> = {};\n      for (const input of expectedInputs) {\n        received[input] = this.resolveInput(currentState, nodeId, input);\n      }\n      return [\n        {\n          nodeId,\n          input: [],\n          batchId: \"batch_1\",\n          collect: {\n            expectedInputs,\n            received,\n          },\n        },\n      ];\n    }\n    const input = expectedInputs[0] ?? \"in\";\n    const incomingEdge = incomingEdges.find((edge) => edge.collectKey === input);\n    return [\n      {\n        nodeId,\n        input: this.resolveInput(currentState, nodeId, input),\n        toInput: input,\n        batchId: \"batch_1\",\n        from: incomingEdge?.from,\n      },\n    ];\n  }\n\n  private resolveRootNodeInput(args: { nodeKind: \"node\" | \"trigger\"; items?: Items }): Items {\n    if (args.items) {\n      return args.items;\n    }\n    if (args.nodeKind === \"trigger\") {\n      return [];\n    }\n    return [{ json: {} }];\n  }\n\n  private isNodeSatisfied(currentState: RunCurrentState, nodeId: NodeId): boolean {\n    return this.hasOutputs(currentState, nodeId) || this.hasCompletedSnapshot(currentState, nodeId);\n  }\n\n  private isNodeSatisfiedByOutputsOnly(currentState: RunCurrentState, nodeId: NodeId): boolean {\n    return this.hasOutputs(currentState, nodeId) && !this.hasCompletedSnapshot(currentState, nodeId);\n  }\n\n  private isEdgeSatisfied(currentState: RunCurrentState, nodeId: NodeId, collectKey: InputPortKey): boolean {\n    const incomingEdge = (this.topology.incomingByNode.get(nodeId) ?? []).find(\n      (edge) => edge.collectKey === collectKey,\n    );\n    if (!incomingEdge) {\n      return false;\n    }\n    const fromNodeId = incomingEdge.from.nodeId;\n    if (!this.isNodeSatisfied(currentState, fromNodeId)) {\n      return false;\n    }\n    if (this.usesCollect(nodeId)) {\n      return true;\n    }\n    const items = this.resolveOutputItems(currentState, fromNodeId, incomingEdge.from.output);\n    if (items.length > 0) {\n      return true;\n    }\n    return this.shouldContinueAfterEmptyOutputFromSource(fromNodeId);\n  }\n\n  private resolveInput(currentState: RunCurrentState, nodeId: NodeId, collectKey: InputPortKey): Items {\n    const incomingEdge = (this.topology.incomingByNode.get(nodeId) ?? []).find(\n      (edge) => edge.collectKey === collectKey,\n    );\n    if (!incomingEdge) {\n      return [];\n    }\n    return this.resolveOutputItems(currentState, incomingEdge.from.nodeId, incomingEdge.from.output);\n  }\n\n  private hasOutputs(currentState: RunCurrentState, nodeId: NodeId): boolean {\n    return Object.prototype.hasOwnProperty.call(currentState.outputsByNode, nodeId);\n  }\n\n  private hasCompletedSnapshot(currentState: RunCurrentState, nodeId: NodeId): boolean {\n    const snapshot = currentState.nodeSnapshotsByNodeId[nodeId];\n    return snapshot?.status === \"completed\" || snapshot?.status === \"skipped\";\n  }\n\n  private resolveOutputItems(currentState: RunCurrentState, nodeId: NodeId, output: OutputPortKey): Items {\n    return currentState.outputsByNode[nodeId]?.[output] ?? [];\n  }\n\n  private usesCollect(nodeId: NodeId): boolean {\n    const expectedInputs = this.topology.expectedInputsByNode.get(nodeId) ?? [];\n    if (expectedInputs.length !== 1 || expectedInputs[0] !== \"in\") {\n      return true;\n    }\n    return (this.topology.incomingByNode.get(nodeId) ?? []).length > 1;\n  }\n\n  private shouldContinueAfterEmptyOutputFromSource(nodeId: NodeId): boolean {\n    const definition = this.topology.defsById.get(nodeId);\n    if (!definition) {\n      return false;\n    }\n    return definition.config.continueWhenEmptyOutput === true;\n  }\n\n  private getPinnedOutputs(currentState: RunCurrentState, nodeId: NodeId): NodeOutputs | undefined {\n    return currentState.mutableState?.nodesById?.[nodeId]?.pinnedOutputsByPort;\n  }\n\n  private filterConnectionInvocations(\n    invocations: ReadonlyArray<ConnectionInvocationRecord> | undefined,\n    clearedIdSet: ReadonlySet<NodeId>,\n  ): ReadonlyArray<ConnectionInvocationRecord> | undefined {\n    if (!invocations || invocations.length === 0) {\n      return invocations;\n    }\n    const kept = invocations.filter(\n      (invocation) => !clearedIdSet.has(invocation.parentAgentNodeId) && !clearedIdSet.has(invocation.connectionNodeId),\n    );\n    return kept.length === invocations.length ? invocations : kept;\n  }\n\n  private collectDescendants(startNodeId: NodeId): ReadonlyArray<NodeId> {\n    const pendingNodeIds: NodeId[] = [startNodeId];\n    const descendants = new Set<NodeId>();\n    while (pendingNodeIds.length > 0) {\n      const nodeId = pendingNodeIds.pop();\n      if (!nodeId || descendants.has(nodeId)) {\n        continue;\n      }\n      descendants.add(nodeId);\n      for (const edge of this.topology.outgoingByNode.get(nodeId) ?? []) {\n        pendingNodeIds.push(edge.to.nodeId);\n      }\n    }\n    return [...descendants];\n  }\n\n  private collectRuntimeDescendants(\n    currentState: RunCurrentState,\n    descendantNodeIds: ReadonlyArray<NodeId>,\n  ): ReadonlyArray<NodeId> {\n    const descendantSet = new Set(descendantNodeIds);\n    const runtimeNodeIds = new Set<NodeId>();\n    for (const nodeId of [\n      ...Object.keys(currentState.outputsByNode),\n      ...Object.keys(currentState.nodeSnapshotsByNodeId),\n      ...Object.keys(currentState.mutableState?.nodesById ?? {}),\n    ] as NodeId[]) {\n      if (this.isRuntimeDescendant(nodeId, descendantSet)) {\n        runtimeNodeIds.add(nodeId);\n      }\n    }\n    return [...runtimeNodeIds];\n  }\n\n  private isRuntimeDescendant(nodeId: NodeId, descendantNodeIds: ReadonlySet<NodeId>): boolean {\n    for (const descendantNodeId of descendantNodeIds) {\n      if (nodeId === descendantNodeId) {\n        return false;\n      }\n      if (ConnectionNodeIdFactory.isConnectionOwnedDescendantOf(descendantNodeId, nodeId)) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n","import type {\n  PersistedRunPolicySnapshot,\n  WorkflowDefinition,\n  WorkflowPolicyRuntimeDefaults,\n  WorkflowStoragePolicyMode,\n} from \"../../types\";\n\nexport class RunPolicySnapshotFactory {\n  static create(workflow: WorkflowDefinition, defaults?: WorkflowPolicyRuntimeDefaults): PersistedRunPolicySnapshot {\n    const prune = workflow.prunePolicy;\n    const retentionSeconds = prune?.runDataRetentionSeconds ?? defaults?.retentionSeconds;\n    const binaryRetentionSeconds = prune?.binaryRetentionSeconds ?? defaults?.binaryRetentionSeconds;\n    const telemetrySpanRetentionSeconds =\n      prune?.telemetrySpanRetentionSeconds ?? defaults?.telemetrySpanRetentionSeconds;\n    const telemetryArtifactRetentionSeconds =\n      prune?.telemetryArtifactRetentionSeconds ?? defaults?.telemetryArtifactRetentionSeconds;\n    const telemetryMetricRetentionSeconds =\n      prune?.telemetryMetricRetentionSeconds ?? defaults?.telemetryMetricRetentionSeconds;\n    const storagePolicy: WorkflowStoragePolicyMode =\n      typeof workflow.storagePolicy === \"string\"\n        ? (workflow.storagePolicy as WorkflowStoragePolicyMode)\n        : (defaults?.storagePolicy ?? \"ALL\");\n    return {\n      retentionSeconds,\n      binaryRetentionSeconds,\n      telemetrySpanRetentionSeconds,\n      telemetryArtifactRetentionSeconds,\n      telemetryMetricRetentionSeconds,\n      storagePolicy,\n    };\n  }\n}\n","import type {\n  CurrentStateExecutionRequest,\n  ExecutionContextFactory,\n  ExecutionFrontierPlan,\n  Items,\n  NodeExecutionSnapshot,\n  NodeId,\n  NodeOutputs,\n  ParentExecutionRef,\n  PersistedRunControlState,\n  RunCurrentState,\n  RunDataFactory,\n  RunExecutionOptions,\n  RunId,\n  RunIdFactory,\n  RunQueueEntry,\n  RunResult,\n  WorkflowExecutionRepository,\n  WorkflowDefinition,\n  WorkflowId,\n  WorkflowPolicyRuntimeDefaults,\n  WorkflowSnapshotFactory,\n} from \"../types\";\n\nimport { WorkflowExecutableNodeClassifierFactory } from \"../workflow/definition/WorkflowExecutableNodeClassifierFactory\";\nimport { CurrentStateFrontierPlanner } from \"../planning/CurrentStateFrontierPlanner\";\nimport { RunQueuePlanner } from \"../planning/RunQueuePlanner\";\nimport { WorkflowTopology } from \"../planning/WorkflowTopologyPlanner\";\nimport { EngineExecutionLimitsPolicy } from \"../policies/executionLimits/EngineExecutionLimitsPolicy\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport type { EngineWaiters } from \"../orchestration/EngineWaiters\";\nimport { RunPolicySnapshotFactory } from \"../policies/storage/RunPolicySnapshotFactory\";\n\nimport { ActivationEnqueueService } from \"../execution/ActivationEnqueueService\";\nimport { NodeRunStateWriterFactory } from \"../execution/NodeRunStateWriterFactory\";\nimport { NodeActivationRequestComposer } from \"../execution/NodeActivationRequestComposer\";\nimport { NodeExecutionSnapshotFactory } from \"../execution/NodeExecutionSnapshotFactory\";\nimport { NodeInstantiationError } from \"../execution/NodeInstantiationError\";\nimport { PersistedRunStateTerminalBuilder } from \"../execution/PersistedRunStateTerminalBuilder\";\nimport { RunStateSemantics } from \"../execution/RunStateSemantics\";\nimport { WorkflowRunExecutionContextFactory } from \"../execution/WorkflowRunExecutionContextFactory\";\nimport { NodeEventPublisher } from \"../events/NodeEventPublisher\";\n\nexport class RunStartService {\n  constructor(\n    private readonly runIdFactory: RunIdFactory,\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly runDataFactory: RunDataFactory,\n    private readonly workflowSnapshotFactory: WorkflowSnapshotFactory,\n    private readonly planningFactory: EngineWorkflowPlanningFactory,\n    private readonly nodeStatePublisherFactory: NodeRunStateWriterFactory,\n    private readonly runExecutionContextFactory: WorkflowRunExecutionContextFactory,\n    private readonly nodeActivationRequestComposer: NodeActivationRequestComposer,\n    private readonly activationEnqueueService: ActivationEnqueueService,\n    private readonly semantics: RunStateSemantics,\n    private readonly waiters: EngineWaiters,\n    private readonly workflowPolicyRuntimeDefaults: WorkflowPolicyRuntimeDefaults | undefined,\n    private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n    private readonly nodeEventPublisher: NodeEventPublisher,\n    private readonly persistedRunStateTerminalBuilder: PersistedRunStateTerminalBuilder,\n  ) {}\n\n  async runWorkflow(\n    workflow: WorkflowDefinition,\n    startAt: NodeId,\n    items: Items,\n    parent?: ParentExecutionRef,\n    executionOptions?: RunExecutionOptions,\n    persistedStateOverrides?: Readonly<{\n      workflowSnapshot?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n      mutableState?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    }>,\n  ): Promise<RunResult> {\n    const runId = this.runIdFactory.makeRunId();\n    const startedAt = new Date().toISOString();\n    const workflowSnapshot = persistedStateOverrides?.workflowSnapshot ?? this.workflowSnapshotFactory.create(workflow);\n    const mutableState = persistedStateOverrides?.mutableState;\n    const policySnapshot = RunPolicySnapshotFactory.create(workflow, this.workflowPolicyRuntimeDefaults);\n    const mergedExecutionOptions = this.executionLimitsPolicy.mergeExecutionOptionsForNewRun(parent, executionOptions);\n\n    await this.workflowExecutionRepository.createRun({\n      runId,\n      workflowId: workflow.id,\n      startedAt,\n      parent,\n      executionOptions: mergedExecutionOptions,\n      workflowSnapshot,\n      mutableState,\n      policySnapshot,\n      engineCounters: { completedNodeActivations: 0 },\n    });\n\n    const data = this.runDataFactory.create();\n    const base = this.runExecutionContextFactory.create({\n      runId,\n      workflowId: workflow.id,\n      nodeId: startAt,\n      parent,\n      policySnapshot,\n      subworkflowDepth: mergedExecutionOptions.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: mergedExecutionOptions.maxNodeActivations!,\n      engineMaxSubworkflowDepth: mergedExecutionOptions.maxSubworkflowDepth!,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(runId, workflow.id, parent),\n      testContext: mergedExecutionOptions.testContext,\n    });\n    let planning: Readonly<ReturnType<EngineWorkflowPlanningFactory[\"create\"]>>;\n    try {\n      planning = this.planningFactory.create(workflow);\n    } catch (err) {\n      if (err instanceof NodeInstantiationError) {\n        return await this.failRunDuringPlanning({\n          runId,\n          workflowId: workflow.id,\n          startedAt,\n          parent,\n          executionOptions: mergedExecutionOptions,\n          control: undefined,\n          workflowSnapshot,\n          mutableState,\n          policySnapshot,\n          err,\n        });\n      }\n      throw err;\n    }\n    const { topology, planner } = planning;\n    const startDefinition = topology.defsById.get(startAt);\n    if (!startDefinition) {\n      throw new Error(`Unknown start nodeId: ${startAt}`);\n    }\n\n    const initialNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot> = {};\n    if (startDefinition.kind === \"trigger\") {\n      const request = this.nodeActivationRequestComposer.createSingleFromDefinition({\n        runId,\n        workflowId: workflow.id,\n        definition: startDefinition,\n        parent,\n        executionOptions: mergedExecutionOptions,\n        batchId: \"batch_1\",\n        input: items,\n        base,\n        data,\n      });\n      return await this.activationEnqueueService.enqueueActivation({\n        runId,\n        workflowId: workflow.id,\n        startedAt,\n        parent,\n        executionOptions: mergedExecutionOptions,\n        workflowSnapshot,\n        mutableState,\n        policySnapshot,\n        control: undefined,\n        pendingQueue: [],\n        request,\n        previousNodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n        planner,\n        engineCounters: { completedNodeActivations: 0 },\n        connectionInvocations: [],\n      });\n    }\n\n    const queue: RunQueueEntry[] = [{ nodeId: startAt, input: items, toInput: \"in\", batchId: \"batch_1\" }];\n    return await this.scheduleQueuedPlan({\n      runId,\n      workflowId: workflow.id,\n      startedAt,\n      parent,\n      executionOptions: mergedExecutionOptions,\n      control: undefined,\n      workflowSnapshot,\n      mutableState,\n      policySnapshot,\n      workflow,\n      planner,\n      queue,\n      base,\n      data,\n      nodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n      connectionInvocations: [],\n    });\n  }\n\n  async runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult> {\n    const runId = this.runIdFactory.makeRunId();\n    const startedAt = new Date().toISOString();\n    const workflowSnapshot = request.workflowSnapshot ?? this.workflowSnapshotFactory.create(request.workflow);\n    const mutableState = request.mutableState ?? request.currentState?.mutableState;\n    const policySnapshot = RunPolicySnapshotFactory.create(request.workflow, this.workflowPolicyRuntimeDefaults);\n    const control = {\n      stopCondition: request.stopCondition ?? { kind: \"workflowCompleted\" as const },\n    };\n    const mergedExecutionOptions = this.executionLimitsPolicy.mergeExecutionOptionsForNewRun(\n      request.parent,\n      request.executionOptions,\n    );\n\n    await this.workflowExecutionRepository.createRun({\n      runId,\n      workflowId: request.workflow.id,\n      startedAt,\n      parent: request.parent,\n      executionOptions: mergedExecutionOptions,\n      control,\n      workflowSnapshot,\n      mutableState,\n      policySnapshot,\n      engineCounters: { completedNodeActivations: 0 },\n    });\n\n    let planningFromState: Readonly<ReturnType<EngineWorkflowPlanningFactory[\"create\"]>>;\n    try {\n      planningFromState = this.planningFactory.create(request.workflow);\n    } catch (err) {\n      if (err instanceof NodeInstantiationError) {\n        return await this.failRunDuringPlanning({\n          runId,\n          workflowId: request.workflow.id,\n          startedAt,\n          parent: request.parent,\n          executionOptions: mergedExecutionOptions,\n          control,\n          workflowSnapshot,\n          mutableState,\n          policySnapshot,\n          err,\n        });\n      }\n      throw err;\n    }\n    const { topology, planner } = planningFromState;\n    const plan = CurrentStateFrontierPlanner.createFromTopology(topology).plan({\n      currentState: this.createRunCurrentState(request.currentState, mutableState),\n      stopCondition: control.stopCondition,\n      reset: request.reset,\n      items: request.items,\n    });\n\n    const data = this.runDataFactory.create(plan.currentState.outputsByNode);\n    const base = this.runExecutionContextFactory.create({\n      runId,\n      workflowId: request.workflow.id,\n      nodeId:\n        WorkflowExecutableNodeClassifierFactory.create(request.workflow).firstExecutableNodeIdInDefinitionOrder(\n          request.workflow,\n        ) ?? \"unknown_node\",\n      parent: request.parent,\n      policySnapshot,\n      subworkflowDepth: mergedExecutionOptions.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: mergedExecutionOptions.maxNodeActivations!,\n      engineMaxSubworkflowDepth: mergedExecutionOptions.maxSubworkflowDepth!,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(runId, request.workflow.id, request.parent),\n      testContext: mergedExecutionOptions.testContext,\n    });\n\n    return await this.scheduleInitialPlan({\n      runId,\n      startedAt,\n      workflow: request.workflow,\n      workflowSnapshot,\n      mutableState,\n      policySnapshot,\n      executionOptions: mergedExecutionOptions,\n      control,\n      parent: request.parent,\n      planner,\n      plan,\n      base,\n      data,\n    });\n  }\n\n  private createRunCurrentState(\n    currentState: RunCurrentState | undefined,\n    mutableState: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"],\n  ): RunCurrentState {\n    return {\n      outputsByNode: { ...(currentState?.outputsByNode ?? {}) },\n      nodeSnapshotsByNodeId: { ...(currentState?.nodeSnapshotsByNodeId ?? {}) },\n      connectionInvocations: [],\n      mutableState: mutableState ?? currentState?.mutableState,\n    };\n  }\n\n  private async scheduleInitialPlan(args: {\n    runId: RunId;\n    startedAt: string;\n    workflow: WorkflowDefinition;\n    workflowSnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n    mutableState: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    policySnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"policySnapshot\"];\n    executionOptions?: RunExecutionOptions;\n    control: PersistedRunControlState | undefined;\n    parent?: ParentExecutionRef;\n    planner: RunQueuePlanner;\n    plan: ExecutionFrontierPlan;\n    base: ReturnType<ExecutionContextFactory[\"create\"]>;\n    data: ReturnType<RunDataFactory[\"create\"]>;\n  }): Promise<RunResult> {\n    const initialNodeSnapshotsByNodeId = this.semantics.applySkippedSnapshots({\n      runId: args.runId,\n      workflowId: args.workflow.id,\n      parent: args.parent,\n      currentState: args.plan.currentState,\n      skippedNodeIds: args.plan.skippedNodeIds,\n      preservedPinnedNodeIds: args.plan.preservedPinnedNodeIds,\n      finishedAt: args.startedAt,\n    });\n\n    if (args.plan.rootNodeId) {\n      const startDef = WorkflowTopology.fromWorkflow(args.workflow).defsById.get(args.plan.rootNodeId);\n      if (!startDef) {\n        throw new Error(`Unknown frontier nodeId: ${args.plan.rootNodeId}`);\n      }\n      const startItems = args.plan.rootNodeInput ?? [];\n      const request = this.nodeActivationRequestComposer.createSingleFromDefinition({\n        runId: args.runId,\n        workflowId: args.workflow.id,\n        definition: startDef,\n        parent: args.parent,\n        executionOptions: args.executionOptions,\n        batchId: \"batch_1\",\n        input: startItems,\n        base: args.base,\n        data: args.data,\n      });\n      return await this.activationEnqueueService.enqueueActivation({\n        runId: args.runId,\n        workflowId: args.workflow.id,\n        startedAt: args.startedAt,\n        parent: args.parent,\n        executionOptions: args.executionOptions,\n        control: args.control,\n        workflowSnapshot: args.workflowSnapshot,\n        mutableState: args.mutableState,\n        policySnapshot: args.policySnapshot,\n        pendingQueue: [],\n        request,\n        previousNodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n        planner: args.planner,\n        engineCounters: { completedNodeActivations: 0 },\n        connectionInvocations: args.plan.currentState.connectionInvocations ?? [],\n      });\n    }\n\n    return await this.scheduleQueuedPlan({\n      runId: args.runId,\n      workflowId: args.workflow.id,\n      startedAt: args.startedAt,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      control: args.control,\n      workflowSnapshot: args.workflowSnapshot,\n      mutableState: args.mutableState,\n      policySnapshot: args.policySnapshot,\n      workflow: args.workflow,\n      planner: args.planner,\n      queue: [...args.plan.queue],\n      base: args.base,\n      data: args.data,\n      nodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n      connectionInvocations: args.plan.currentState.connectionInvocations ?? [],\n    });\n  }\n\n  private async scheduleQueuedPlan(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    startedAt: string;\n    parent?: ParentExecutionRef;\n    executionOptions?: RunExecutionOptions;\n    control: PersistedRunControlState | undefined;\n    workflowSnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n    mutableState: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    policySnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"policySnapshot\"];\n    workflow: WorkflowDefinition;\n    planner: RunQueuePlanner;\n    queue: RunQueueEntry[];\n    base: ReturnType<ExecutionContextFactory[\"create\"]>;\n    data: ReturnType<RunDataFactory[\"create\"]>;\n    nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n    connectionInvocations: RunCurrentState[\"connectionInvocations\"];\n  }): Promise<RunResult> {\n    this.semantics.applyPinnedQueueSkips({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      parent: args.parent,\n      mutableState: args.mutableState,\n      planner: args.planner,\n      queue: args.queue,\n      data: args.data,\n      nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n      finishedAt: args.startedAt,\n    });\n    const next = args.planner.nextActivation(args.queue);\n    if (!next) {\n      return await this.completeRun({\n        runId: args.runId,\n        workflowId: args.workflowId,\n        startedAt: args.startedAt,\n        parent: args.parent,\n        executionOptions: args.executionOptions,\n        control: args.control,\n        workflowSnapshot: args.workflowSnapshot,\n        mutableState: args.mutableState,\n        policySnapshot: args.policySnapshot,\n        workflow: args.workflow,\n        data: args.data,\n        nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n        connectionInvocations: args.connectionInvocations,\n      });\n    }\n\n    const definition = WorkflowTopology.fromWorkflow(args.workflow).defsById.get(next.nodeId);\n    if (!definition || definition.kind !== \"node\") {\n      throw new Error(`Node ${next.nodeId} is not a runnable node`);\n    }\n\n    const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n      next,\n      base: args.base,\n      data: args.data,\n      runId: args.runId,\n      workflowId: args.workflowId,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      nodeDefinition: definition,\n    });\n\n    return await this.activationEnqueueService.enqueueActivation({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      startedAt: args.startedAt,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      control: args.control,\n      workflowSnapshot: args.workflowSnapshot,\n      mutableState: args.mutableState,\n      policySnapshot: args.policySnapshot,\n      pendingQueue: args.queue,\n      request,\n      previousNodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n      planner: args.planner,\n      engineCounters: { completedNodeActivations: 0 },\n      connectionInvocations: args.connectionInvocations ?? [],\n    });\n  }\n\n  private async completeRun(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    startedAt: string;\n    parent?: ParentExecutionRef;\n    executionOptions?: RunExecutionOptions;\n    control: PersistedRunControlState | undefined;\n    workflowSnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n    mutableState: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    policySnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"policySnapshot\"];\n    workflow: WorkflowDefinition;\n    data: ReturnType<RunDataFactory[\"create\"]>;\n    nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n    connectionInvocations: RunCurrentState[\"connectionInvocations\"];\n  }): Promise<RunResult> {\n    await this.workflowExecutionRepository.save({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      startedAt: args.startedAt,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      control: args.control,\n      workflowSnapshot: args.workflowSnapshot,\n      mutableState: args.mutableState,\n      policySnapshot: args.policySnapshot,\n      engineCounters: { completedNodeActivations: 0 },\n      connectionInvocations: args.connectionInvocations ? [...args.connectionInvocations] : [],\n      status: \"completed\",\n      pending: undefined,\n      queue: [],\n      outputsByNode: args.data.dump(),\n      nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n    });\n    const result: RunResult = {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      startedAt: args.startedAt,\n      status: \"completed\",\n      outputs: this.semantics.resolveResultOutputs(\n        args.workflow,\n        args.control?.stopCondition,\n        args.data.dump() as Record<NodeId, NodeOutputs>,\n      ),\n    };\n    this.waiters.resolveRunCompletion(result);\n    return result;\n  }\n\n  private async failRunDuringPlanning(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    startedAt: string;\n    parent?: ParentExecutionRef;\n    executionOptions?: RunExecutionOptions;\n    control?: PersistedRunControlState;\n    workflowSnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n    mutableState: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    policySnapshot: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"policySnapshot\"];\n    err: NodeInstantiationError;\n  }): Promise<RunResult> {\n    const finishedAt = new Date().toISOString();\n    const failedSnapshot = NodeExecutionSnapshotFactory.failed({\n      previous: undefined,\n      runId: args.runId,\n      workflowId: args.workflowId,\n      nodeId: args.err.nodeId,\n      activationId: \"planning_failure\",\n      parent: args.parent,\n      finishedAt,\n      inputsByPort: {},\n      error: args.err,\n    });\n    const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n      state: {\n        runId: args.runId,\n        workflowId: args.workflowId,\n        startedAt: args.startedAt,\n        parent: args.parent,\n        executionOptions: args.executionOptions,\n        control: args.control,\n        workflowSnapshot: args.workflowSnapshot,\n        mutableState: args.mutableState,\n        policySnapshot: args.policySnapshot,\n        engineCounters: { completedNodeActivations: 0 },\n        status: \"pending\",\n        pending: undefined,\n        queue: [],\n        outputsByNode: {},\n        nodeSnapshotsByNodeId: {},\n        connectionInvocations: [],\n      },\n      engineCounters: { completedNodeActivations: 0 },\n      status: \"failed\",\n      queue: [],\n      outputsByNode: {},\n      nodeSnapshotsByNodeId: { [args.err.nodeId]: failedSnapshot },\n      finishedAtIso: finishedAt,\n    });\n    await this.workflowExecutionRepository.save(failedState);\n    await this.nodeEventPublisher.publish(\"nodeFailed\", failedSnapshot);\n\n    const result: RunResult = {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      startedAt: args.startedAt,\n      status: \"failed\",\n      error: { message: args.err.message },\n    };\n    this.waiters.resolveRunCompletion(result);\n    return result;\n  }\n}\n","import type {\n  ExecutionMode,\n  NodeConfigBase,\n  NodeId,\n  NodeOffloadPolicy,\n  NodeSchedulerDecision,\n  WorkflowId,\n} from \"../types\";\nexport class ConfigDrivenOffloadPolicy implements NodeOffloadPolicy {\n  private readonly defaultMode: ExecutionMode;\n\n  constructor(defaultMode: ExecutionMode = \"worker\") {\n    this.defaultMode = defaultMode;\n  }\n\n  decide(args: { workflowId: WorkflowId; nodeId: NodeId; config: NodeConfigBase }): NodeSchedulerDecision {\n    const hint = args.config.execution?.hint;\n    const queue = args.config.execution?.queue;\n\n    if (hint === \"local\") return { mode: \"local\" };\n    if (hint === \"worker\") return { mode: \"worker\", queue };\n\n    if (queue) return { mode: \"worker\", queue };\n\n    return { mode: this.defaultMode };\n  }\n}\n","import type {\n  NodeActivationContinuation,\n  PreparedNodeActivationDispatch,\n  NodeActivationReceipt,\n  NodeActivationRequest,\n  NodeActivationScheduler,\n  NodeExecutionRequest,\n  NodeExecutionScheduler,\n  NodeOffloadPolicy,\n} from \"../types\";\nimport { InlineDrivingScheduler } from \"./InlineDrivingScheduler\";\n\ntype SchedulerSelection = Readonly<{\n  mode: NodeActivationReceipt[\"mode\"];\n  queue?: string;\n  decision: \"runIntentOverride\" | \"nodePolicy\" | \"containerDefault\";\n}>;\n\nexport class DefaultDrivingScheduler implements NodeActivationScheduler {\n  constructor(\n    private readonly offloadPolicy: NodeOffloadPolicy,\n    private readonly workerScheduler: NodeExecutionScheduler,\n    private readonly inline: InlineDrivingScheduler,\n  ) {}\n\n  setContinuation(continuation: NodeActivationContinuation): void {\n    this.inline.setContinuation(continuation);\n  }\n\n  async prepareDispatch(request: NodeActivationRequest): Promise<PreparedNodeActivationDispatch> {\n    const selection = await this.selectScheduler(request);\n    if (selection.mode === \"worker\") {\n      if (request.kind === \"multi\") {\n        throw new Error(`Multi-input node ${request.nodeId} cannot be scheduled to worker (insert local placement)`);\n      }\n\n      const workerRequest: NodeExecutionRequest = {\n        runId: request.runId,\n        activationId: request.activationId,\n        workflowId: request.workflowId,\n        nodeId: request.nodeId,\n        input: request.input,\n        parent: request.parent,\n        queue: selection.queue,\n        executionOptions: request.executionOptions,\n      };\n\n      return {\n        receipt: {\n          receiptId: request.activationId,\n          mode: \"worker\",\n          queue: selection.queue,\n        },\n        dispatch: async () => {\n          await this.workerScheduler.enqueue(workerRequest);\n        },\n      };\n    }\n\n    return await this.prepareInlineDispatch(request);\n  }\n\n  private async selectScheduler(request: NodeActivationRequest): Promise<SchedulerSelection> {\n    if (request.executionOptions?.localOnly) {\n      return {\n        mode: \"local\",\n        decision: \"runIntentOverride\",\n      };\n    }\n\n    const decision = this.offloadPolicy.decide({\n      workflowId: request.workflowId,\n      nodeId: request.nodeId,\n      config: request.ctx.config,\n    });\n    if (this.hasNodeSchedulingPreference(request)) {\n      return {\n        mode: decision.mode,\n        queue: decision.queue,\n        decision: \"nodePolicy\",\n      };\n    }\n\n    return {\n      mode: decision.mode,\n      queue: decision.queue,\n      decision: \"containerDefault\",\n    };\n  }\n\n  private hasNodeSchedulingPreference(request: NodeActivationRequest): boolean {\n    return request.ctx.config.execution?.hint !== undefined || request.ctx.config.execution?.queue !== undefined;\n  }\n\n  private async prepareInlineDispatch(request: NodeActivationRequest): Promise<PreparedNodeActivationDispatch> {\n    const prepared = await this.inline.prepareDispatch(request);\n    return {\n      receipt: { ...prepared.receipt, mode: \"local\" },\n      dispatch: async () => {\n        await prepared.dispatch();\n      },\n    };\n  }\n}\n","import type { NodeConfigBase, NodeId, NodeOffloadPolicy, NodeSchedulerDecision, WorkflowId } from \"../types\";\n\nexport class HintOnlyOffloadPolicy implements NodeOffloadPolicy {\n  decide(args: { workflowId: WorkflowId; nodeId: NodeId; config: NodeConfigBase }): NodeSchedulerDecision {\n    const hint = args.config.execution?.hint;\n    if (hint === \"worker\") return { mode: \"worker\", queue: args.config.execution?.queue };\n    return { mode: \"local\" };\n  }\n}\n","import type {\n  NodeActivationContinuation,\n  PreparedNodeActivationDispatch,\n  NodeActivationReceipt,\n  NodeActivationRequest,\n  NodeActivationScheduler,\n} from \"../types\";\nimport { NodeExecutor } from \"../execution/NodeExecutor\";\n\nexport class InlineDrivingScheduler implements NodeActivationScheduler {\n  private continuation: NodeActivationContinuation | undefined;\n  private readonly drainingRuns = new Set<string>();\n  private readonly queuesByRunId = new Map<\n    string,\n    Array<Readonly<{ request: NodeActivationRequest; receipt: NodeActivationReceipt }>>\n  >();\n  private readonly scheduledRuns = new Set<string>();\n  private stopped = false;\n  private readonly activeDrainPromises = new Set<Promise<void>>();\n\n  constructor(private readonly nodeExecutor: NodeExecutor) {}\n\n  setContinuation(continuation: NodeActivationContinuation): void {\n    this.continuation = continuation;\n  }\n\n  async stop(): Promise<void> {\n    this.stopped = true;\n    if (this.activeDrainPromises.size > 0) {\n      await Promise.allSettled(this.activeDrainPromises);\n    }\n  }\n\n  async prepareDispatch(request: NodeActivationRequest): Promise<PreparedNodeActivationDispatch> {\n    const receipt: NodeActivationReceipt = { receiptId: request.activationId, mode: \"local\" };\n    return {\n      receipt,\n      dispatch: async () => {\n        const queue = this.queuesByRunId.get(request.runId) ?? [];\n        queue.push({ request, receipt });\n        this.queuesByRunId.set(request.runId, queue);\n        this.scheduleDrain(request.runId);\n      },\n    };\n  }\n\n  private async drainRun(runId: string): Promise<void> {\n    if (this.drainingRuns.has(runId)) return;\n    this.drainingRuns.add(runId);\n    this.scheduledRuns.delete(runId);\n    try {\n      const q = this.queuesByRunId.get(runId) ?? [];\n      if (q.length === 0) return;\n      const next = q.shift()!;\n      const { request } = next;\n\n      const cont = this.continuation;\n      if (!cont) throw new Error(\"InlineDrivingScheduler is missing a continuation (setContinuation was not called)\");\n\n      await cont.markNodeRunning({\n        runId: request.runId,\n        activationId: request.activationId,\n        nodeId: request.nodeId,\n        inputsByPort: request.kind === \"multi\" ? request.inputsByPort : { in: request.input },\n      });\n\n      let outputs;\n      try {\n        outputs = await this.nodeExecutor.execute(request);\n      } catch (e) {\n        await this.resumeAfterExecutionError(cont, request, this.asError(e));\n        return;\n      }\n\n      await this.resumeAfterExecutionResult(cont, request, outputs ?? {});\n    } finally {\n      if ((this.queuesByRunId.get(runId)?.length ?? 0) === 0) this.queuesByRunId.delete(runId);\n      this.drainingRuns.delete(runId);\n      if ((this.queuesByRunId.get(runId)?.length ?? 0) > 0) {\n        this.scheduleDrain(runId);\n      }\n    }\n  }\n\n  private scheduleDrain(runId: string): void {\n    if (this.stopped || this.drainingRuns.has(runId) || this.scheduledRuns.has(runId)) {\n      return;\n    }\n    this.scheduledRuns.add(runId);\n    setImmediate(() => {\n      this.scheduledRuns.delete(runId);\n      if (this.stopped) return;\n      const p = this.drainRun(runId).finally(() => {\n        this.activeDrainPromises.delete(p);\n      });\n      this.activeDrainPromises.add(p);\n    });\n  }\n\n  private async resumeAfterExecutionResult(\n    continuation: NodeActivationContinuation,\n    request: NodeActivationRequest,\n    outputs: unknown,\n  ): Promise<void> {\n    try {\n      await continuation.resumeFromNodeResult({\n        runId: request.runId,\n        activationId: request.activationId,\n        nodeId: request.nodeId,\n        outputs: outputs as any,\n      });\n    } catch (e) {\n      this.rethrowUnlessIgnorableContinuationError(e);\n    }\n  }\n\n  private async resumeAfterExecutionError(\n    continuation: NodeActivationContinuation,\n    request: NodeActivationRequest,\n    error: Error,\n  ): Promise<void> {\n    try {\n      await continuation.resumeFromNodeError({\n        runId: request.runId,\n        activationId: request.activationId,\n        nodeId: request.nodeId,\n        error,\n      });\n    } catch (e) {\n      this.rethrowUnlessIgnorableContinuationError(e);\n    }\n  }\n\n  private asError(e: unknown): Error {\n    return e instanceof Error ? e : new Error(String(e));\n  }\n\n  private rethrowUnlessIgnorableContinuationError(e: unknown): void {\n    if (this.isIgnorableContinuationError(e)) {\n      return;\n    }\n    throw this.asError(e);\n  }\n\n  private isIgnorableContinuationError(e: unknown): boolean {\n    const message = this.asError(e).message;\n    return (\n      message.includes(\" is not pending\") ||\n      message.includes(\"activationId mismatch\") ||\n      message.includes(\"nodeId mismatch\")\n    );\n  }\n}\n","import type { NodeExecutionRequest, NodeExecutionScheduler } from \"../types\";\n\nexport class LocalOnlyScheduler implements NodeExecutionScheduler {\n  async enqueue(_request: NodeExecutionRequest): Promise<{ receiptId: string }> {\n    throw new Error(\"No worker scheduler configured\");\n  }\n}\n","import type { ParentExecutionRef, RunExecutionOptions } from \"../../types\";\n\nexport interface EngineExecutionLimitsPolicyConfig {\n  readonly defaultMaxNodeActivations: number;\n  readonly hardMaxNodeActivations: number;\n  readonly defaultMaxSubworkflowDepth: number;\n  readonly hardMaxSubworkflowDepth: number;\n}\n\nexport const ENGINE_EXECUTION_LIMITS_DEFAULTS: EngineExecutionLimitsPolicyConfig = {\n  defaultMaxNodeActivations: 100_000,\n  hardMaxNodeActivations: 100_000,\n  defaultMaxSubworkflowDepth: 32,\n  hardMaxSubworkflowDepth: 32,\n};\n\nexport class EngineExecutionLimitsPolicy {\n  constructor(private readonly config: EngineExecutionLimitsPolicyConfig = ENGINE_EXECUTION_LIMITS_DEFAULTS) {}\n\n  createRootExecutionOptions(): RunExecutionOptions {\n    return this.mergeExecutionOptionsForNewRun(undefined, undefined);\n  }\n\n  mergeExecutionOptionsForNewRun(\n    parent: ParentExecutionRef | undefined,\n    user: RunExecutionOptions | undefined,\n  ): RunExecutionOptions {\n    const subworkflowDepth = parent === undefined ? 0 : (parent.subworkflowDepth ?? 0) + 1;\n    const inheritedMaxNode = parent?.engineMaxNodeActivations;\n    const inheritedMaxSub = parent?.engineMaxSubworkflowDepth;\n    const maxNodeActivations = this.capNumber(\n      user?.maxNodeActivations ?? inheritedMaxNode,\n      this.config.defaultMaxNodeActivations,\n      this.config.hardMaxNodeActivations,\n    );\n    const maxSubworkflowDepth = this.capNumber(\n      user?.maxSubworkflowDepth ?? inheritedMaxSub,\n      this.config.defaultMaxSubworkflowDepth,\n      this.config.hardMaxSubworkflowDepth,\n    );\n    if (subworkflowDepth > maxSubworkflowDepth) {\n      throw new Error(\n        `Subworkflow nesting depth ${subworkflowDepth} exceeds maxSubworkflowDepth ${maxSubworkflowDepth} (run would be a child of parent run).`,\n      );\n    }\n    return {\n      ...user,\n      subworkflowDepth,\n      maxNodeActivations,\n      maxSubworkflowDepth,\n    };\n  }\n\n  private capNumber(requested: number | undefined, defaultValue: number, hardCeiling: number): number {\n    const base = requested === undefined ? defaultValue : requested;\n    return Math.min(base, hardCeiling);\n  }\n}\n","import type { PersistedRunState, WorkflowDefinition, WorkflowExecutionRepository } from \"../../types\";\n\nimport { WorkflowStoragePolicyEvaluator } from \"./WorkflowStoragePolicyEvaluator\";\n\nexport class RunTerminalPersistenceCoordinator {\n  constructor(\n    private readonly runRepository: WorkflowExecutionRepository,\n    private readonly storageEvaluator: WorkflowStoragePolicyEvaluator,\n  ) {}\n\n  async maybeDeleteAfterTerminalState(args: {\n    workflow: WorkflowDefinition;\n    state: PersistedRunState;\n    finalStatus: \"completed\" | \"failed\";\n    finishedAt: string;\n  }): Promise<void> {\n    const persist = await this.storageEvaluator.shouldPersist(args.workflow, args.state.policySnapshot, {\n      runId: args.state.runId,\n      workflowId: args.state.workflowId,\n      workflow: args.workflow,\n      finalStatus: args.finalStatus,\n      startedAt: args.state.startedAt,\n      finishedAt: args.finishedAt,\n    });\n    if (persist) return;\n    if (!this.runRepository.deleteRun) return;\n    await this.runRepository.deleteRun(args.state.runId);\n  }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n  NodeErrorHandler,\n  NodeErrorHandlerSpec,\n  NodeResolver,\n  WorkflowErrorHandler,\n  WorkflowErrorHandlerSpec,\n} from \"../types\";\n\nexport class WorkflowPolicyErrorServices {\n  constructor(private readonly nodeResolver: NodeResolver) {}\n\n  resolveNodeErrorHandler(spec: NodeErrorHandlerSpec | undefined): NodeErrorHandler | undefined {\n    if (!spec) return undefined;\n    if (\n      typeof spec === \"object\" &&\n      spec !== null &&\n      \"handle\" in spec &&\n      typeof (spec as NodeErrorHandler).handle === \"function\"\n    ) {\n      return spec as NodeErrorHandler;\n    }\n    return this.nodeResolver.resolve(spec as TypeToken<NodeErrorHandler>);\n  }\n\n  resolveWorkflowErrorHandler(spec: WorkflowErrorHandlerSpec | undefined): WorkflowErrorHandler | undefined {\n    if (!spec) return undefined;\n    if (\n      typeof spec === \"object\" &&\n      spec !== null &&\n      \"onError\" in spec &&\n      typeof (spec as WorkflowErrorHandler).onError === \"function\"\n    ) {\n      return spec as WorkflowErrorHandler;\n    }\n    return this.nodeResolver.resolve(spec as TypeToken<WorkflowErrorHandler>);\n  }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n  NodeResolver,\n  PersistedRunPolicySnapshot,\n  WorkflowDefinition,\n  WorkflowStoragePolicyDecisionArgs,\n  WorkflowStoragePolicyMode,\n  WorkflowStoragePolicyResolver,\n} from \"../../types\";\n\nexport class WorkflowStoragePolicyEvaluator {\n  constructor(private readonly nodeResolver: NodeResolver) {}\n\n  async shouldPersist(\n    workflow: WorkflowDefinition,\n    snapshot: PersistedRunPolicySnapshot | undefined,\n    args: WorkflowStoragePolicyDecisionArgs,\n  ): Promise<boolean> {\n    const spec = workflow.storagePolicy;\n    if (spec === undefined) {\n      return this.modeMatches(snapshot?.storagePolicy ?? \"ALL\", args);\n    }\n    if (typeof spec === \"string\") {\n      return this.modeMatches(spec as WorkflowStoragePolicyMode, args);\n    }\n    const resolver = this.nodeResolver.resolve(\n      spec as TypeToken<WorkflowStoragePolicyResolver>,\n    ) as WorkflowStoragePolicyResolver;\n    return Boolean(await resolver.shouldPersist(args));\n  }\n\n  private modeMatches(mode: WorkflowStoragePolicyMode, args: WorkflowStoragePolicyDecisionArgs): boolean {\n    if (mode === \"ALL\") return true;\n    if (mode === \"NEVER\") return false;\n    if (mode === \"SUCCESS\") return args.finalStatus === \"completed\";\n    if (mode === \"ERROR\") return args.finalStatus === \"failed\";\n    return true;\n  }\n}\n","import { ReadableStream } from \"node:stream/web\";\n\nimport type { BinaryBody } from \"../types\";\n\nexport class BinaryBodyBufferReader {\n  async read(body: BinaryBody): Promise<Uint8Array> {\n    if (body instanceof Uint8Array) {\n      return body;\n    }\n    if (body instanceof ArrayBuffer) {\n      return new Uint8Array(body);\n    }\n    if (body instanceof ReadableStream) {\n      return await this.readReadableStream(body);\n    }\n    return await this.readAsyncIterable(body);\n  }\n\n  private async readReadableStream(body: ReadableStream<Uint8Array>): Promise<Uint8Array> {\n    const reader = body.getReader();\n    const chunks: Uint8Array[] = [];\n    let totalSize = 0;\n    try {\n      while (true) {\n        const result = await reader.read();\n        if (result.done) {\n          break;\n        }\n        chunks.push(result.value);\n        totalSize += result.value.byteLength;\n      }\n    } finally {\n      reader.releaseLock();\n    }\n    return this.joinChunks(chunks, totalSize);\n  }\n\n  private async readAsyncIterable(body: AsyncIterable<Uint8Array>): Promise<Uint8Array> {\n    const chunks: Uint8Array[] = [];\n    let totalSize = 0;\n    for await (const chunk of body) {\n      chunks.push(chunk);\n      totalSize += chunk.byteLength;\n    }\n    return this.joinChunks(chunks, totalSize);\n  }\n\n  private joinChunks(chunks: ReadonlyArray<Uint8Array>, totalSize: number): Uint8Array {\n    const bytes = new Uint8Array(totalSize);\n    let offset = 0;\n    for (const chunk of chunks) {\n      bytes.set(chunk, offset);\n      offset += chunk.byteLength;\n    }\n    return bytes;\n  }\n}\n","import { ReadableStream } from \"node:stream/web\";\n\nexport class BinaryBodyReadableStreamFactory {\n  constructor(private readonly bytes: Uint8Array) {}\n\n  create(): ReadableStream<Uint8Array> {\n    const value = this.bytes;\n    let consumed = false;\n    return new ReadableStream<Uint8Array>({\n      pull(controller) {\n        if (consumed) {\n          controller.close();\n          return;\n        }\n        consumed = true;\n        controller.enqueue(value);\n        controller.close();\n      },\n    });\n  }\n}\n","import { createHash } from \"node:crypto\";\n\nimport type {\n  BinaryBody,\n  BinaryStorage,\n  BinaryStorageReadResult,\n  BinaryStorageStatResult,\n  BinaryStorageWriteResult,\n} from \"../types\";\n\nimport { BinaryBodyBufferReader } from \"./BinaryBodyBufferReader\";\nimport { BinaryBodyReadableStreamFactory } from \"./BinaryBodyReadableStreamFactory\";\n\nexport class InMemoryBinaryStorage implements BinaryStorage {\n  readonly driverName = \"memory\";\n  private readonly values = new Map<string, Uint8Array>();\n\n  async write(args: { storageKey: string; body: BinaryBody }): Promise<BinaryStorageWriteResult> {\n    const bytes = await new BinaryBodyBufferReader().read(args.body);\n    this.values.set(args.storageKey, bytes);\n    return {\n      storageKey: args.storageKey,\n      size: bytes.byteLength,\n      sha256: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n    };\n  }\n\n  async openReadStream(storageKey: string): Promise<BinaryStorageReadResult | undefined> {\n    const bytes = this.values.get(storageKey);\n    if (!bytes) {\n      return undefined;\n    }\n    return {\n      body: new BinaryBodyReadableStreamFactory(bytes).create(),\n      size: bytes.byteLength,\n    };\n  }\n\n  async stat(storageKey: string): Promise<BinaryStorageStatResult> {\n    const bytes = this.values.get(storageKey);\n    if (!bytes) {\n      return { exists: false };\n    }\n    return { exists: true, size: bytes.byteLength };\n  }\n\n  async delete(storageKey: string): Promise<void> {\n    this.values.delete(storageKey);\n  }\n\n  async deleteMany(storageKeys: ReadonlyArray<string>): Promise<void> {\n    for (const key of storageKeys) {\n      this.values.delete(key);\n    }\n  }\n\n  async listByPrefix(prefix: string): Promise<ReadonlyArray<string>> {\n    return Array.from(this.values.keys()).filter((key) => key.startsWith(prefix));\n  }\n}\n\nexport { BinaryBodyBufferReader } from \"./BinaryBodyBufferReader\";\nexport { BinaryBodyReadableStreamFactory } from \"./BinaryBodyReadableStreamFactory\";\n","import type { Items, MutableRunData, NodeId, NodeIdRef, NodeOutputs, OutputPortKey, Item } from \"../types\";\n\nexport class InMemoryRunData implements MutableRunData {\n  private readonly byNode = new Map<NodeId, NodeOutputs>();\n\n  constructor(initial?: Record<NodeId, NodeOutputs>) {\n    if (initial) {\n      for (const [nodeId, outputs] of Object.entries(initial)) this.byNode.set(nodeId, outputs);\n    }\n  }\n\n  setOutputs(nodeId: NodeId, outputs: NodeOutputs): void {\n    this.byNode.set(nodeId, outputs);\n  }\n\n  getOutputs(nodeId: NodeId): NodeOutputs | undefined {\n    return this.byNode.get(nodeId);\n  }\n\n  getOutputItems<TJson = unknown>(nodeId: NodeId | NodeIdRef<TJson>, output: OutputPortKey = \"main\"): Items<TJson> {\n    return (this.byNode.get(nodeId)?.[output] ?? []) as Items<TJson>;\n  }\n\n  getOutputItem<TJson = unknown>(\n    nodeId: NodeId | NodeIdRef<TJson>,\n    itemIndex: number,\n    output: OutputPortKey = \"main\",\n  ): Item<TJson> | undefined {\n    return this.getOutputItems<TJson>(nodeId, output)[itemIndex];\n  }\n\n  dump(): Record<NodeId, NodeOutputs> {\n    const out: Record<NodeId, NodeOutputs> = {};\n    for (const [nodeId, outputs] of this.byNode.entries()) out[nodeId] = outputs;\n    return out;\n  }\n}\n","import type { MutableRunData, NodeId, NodeOutputs, RunDataFactory } from \"../types\";\nimport { InMemoryRunData } from \"./InMemoryRunData\";\n\nexport class InMemoryRunDataFactory implements RunDataFactory {\n  create(initial?: Record<NodeId, NodeOutputs>): MutableRunData {\n    return new InMemoryRunData(initial);\n  }\n}\n","export class PollingTriggerDedupWindow {\n  static readonly defaultCapN = 2000;\n\n  merge(\n    previous: ReadonlyArray<string>,\n    incoming: ReadonlyArray<string>,\n    capN: number = PollingTriggerDedupWindow.defaultCapN,\n  ): ReadonlyArray<string> {\n    const merged = new Set(previous);\n    for (const id of incoming) {\n      merged.add(id);\n    }\n    const result = [...merged];\n    if (result.length <= capN) {\n      return result;\n    }\n    return result.slice(result.length - capN);\n  }\n}\n","import type { Items, TriggerInstanceId, TriggerSetupStateRepository } from \"../../types\";\nimport type { PollingTriggerLogger } from \"./PollingTriggerLogger\";\n\nexport interface PollingRunCycleArgs<TState> {\n  previousState: TState | undefined;\n  signal: AbortSignal;\n}\n\nexport interface PollingRunCycleResult<TState, TItem> {\n  items: Items<TItem>;\n  nextState: TState;\n}\n\nexport interface PollingTriggerStartArgs<TState, TItem> {\n  trigger: TriggerInstanceId;\n  intervalMs: number;\n  seedState?: TState;\n  runCycle: (cycleCtx: PollingRunCycleArgs<TState>) => Promise<PollingRunCycleResult<TState, TItem>>;\n  emit: (items: Items) => Promise<void>;\n}\n\nexport class PollingTriggerRuntime {\n  private readonly activeTriggers = new Set<string>();\n  private readonly intervalsByTrigger = new Map<string, ReturnType<typeof setInterval>>();\n  private readonly busyTriggers = new Set<string>();\n\n  constructor(\n    private readonly triggerSetupStateRepository: TriggerSetupStateRepository,\n    private readonly logger: PollingTriggerLogger,\n  ) {}\n\n  async start<TState, TItem>(args: PollingTriggerStartArgs<TState, TItem>): Promise<TState | undefined> {\n    let first: TState | undefined;\n    try {\n      first = await this.runCycle(args, { seedState: args.seedState });\n    } catch (err: unknown) {\n      this.logError(`Polling trigger initial cycle failed for ${this.describe(args.trigger)}`, err);\n    }\n    this.ensureLoop(args);\n    return first;\n  }\n\n  async stop(trigger: TriggerInstanceId): Promise<void> {\n    const key = this.toKey(trigger);\n    const interval = this.intervalsByTrigger.get(key);\n    if (interval !== undefined) {\n      clearInterval(interval);\n      this.intervalsByTrigger.delete(key);\n    }\n    this.busyTriggers.delete(key);\n    this.activeTriggers.delete(key);\n    this.logger.debug(`Polling trigger stopped for ${this.describe(trigger)}`);\n  }\n\n  private ensureLoop<TState, TItem>(args: PollingTriggerStartArgs<TState, TItem>): void {\n    const key = this.toKey(args.trigger);\n    if (this.activeTriggers.has(key)) {\n      this.logger.debug(`Polling trigger already active for ${this.describe(args.trigger)}`);\n      return;\n    }\n    this.activeTriggers.add(key);\n    const intervalMs = Math.max(args.intervalMs, 25);\n    const interval = setInterval(() => {\n      void this.runCycle(args, { seedState: undefined }).catch((err: unknown) => {\n        this.logError(`Polling trigger cycle failed for ${this.describe(args.trigger)}`, err);\n      });\n    }, intervalMs);\n    this.intervalsByTrigger.set(key, interval);\n    this.logger.info(`Polling trigger started for ${this.describe(args.trigger)} (interval ${intervalMs}ms)`);\n  }\n\n  private async runCycle<TState, TItem>(\n    args: PollingTriggerStartArgs<TState, TItem>,\n    opts: { seedState: TState | undefined },\n  ): Promise<TState | undefined> {\n    const key = this.toKey(args.trigger);\n    if (this.busyTriggers.has(key)) {\n      this.logger.debug(`Polling trigger skipping overlapping tick for ${this.describe(args.trigger)}`);\n      return undefined;\n    }\n    this.busyTriggers.add(key);\n    try {\n      const loaded = await this.triggerSetupStateRepository.load(args.trigger);\n      const previousState = loaded !== undefined ? (loaded.state as TState | undefined) : opts.seedState;\n      const controller = new AbortController();\n      const { items, nextState } = await args.runCycle({ previousState, signal: controller.signal });\n      await this.triggerSetupStateRepository.save({\n        trigger: args.trigger,\n        updatedAt: new Date().toISOString(),\n        state: nextState as never,\n      });\n      if (items.length > 0) {\n        this.logger.info(`Polling trigger emitting ${items.length} item(s) for ${this.describe(args.trigger)}`);\n        await args.emit(items);\n      }\n      return nextState;\n    } finally {\n      this.busyTriggers.delete(key);\n    }\n  }\n\n  private toKey(trigger: TriggerInstanceId): string {\n    return `${trigger.workflowId}:${trigger.nodeId}`;\n  }\n\n  private describe(trigger: TriggerInstanceId): string {\n    return `${trigger.workflowId}.${trigger.nodeId}`;\n  }\n\n  private logError(message: string, error: unknown): void {\n    if (error instanceof Error) {\n      this.logger.error(message, error);\n      return;\n    }\n    this.logger.error(`${message}: ${String(error)}`);\n  }\n}\n","export interface PollingTriggerLogger {\n  info(message: string): void;\n  warn(message: string): void;\n  error(message: string, exception?: Error): void;\n  debug(message: string): void;\n}\n\nexport class NoOpPollingTriggerLogger implements PollingTriggerLogger {\n  info(): void {}\n  warn(): void {}\n  error(): void {}\n  debug(): void {}\n}\n","import type {\n  NodeActivationContinuation,\n  NodeExecutor,\n  NodeExecutionRequest,\n  NodeExecutionRequestHandler,\n  PersistedRunState,\n  ResumeContext,\n  RunDataFactory,\n  WorkflowDefinition,\n  WorkflowExecutionRepository,\n  WorkflowSnapshotResolver,\n} from \"../types\";\nimport type { EngineExecutionLimitsPolicy } from \"../policies/executionLimits/EngineExecutionLimitsPolicy\";\nimport { RunSuspendedError } from \"../execution/RunSuspendedError\";\nimport { NodeActivationRequestComposer } from \"../execution/NodeActivationRequestComposer\";\nimport { NodeRunStateWriterFactory } from \"../execution/NodeRunStateWriterFactory\";\nimport { WorkflowRunExecutionContextFactory } from \"../execution/WorkflowRunExecutionContextFactory\";\nimport { MissingRuntimeParityGuard } from \"../workflowSnapshots/MissingRuntimeParityGuard\";\n\ntype PersistedWorkflowLike = Readonly<{\n  workflowId: PersistedRunState[\"workflowId\"];\n  workflowSnapshot?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n}>;\n\nexport class NodeExecutionRequestHandlerService implements NodeExecutionRequestHandler {\n  constructor(\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly workflowSnapshotResolver: WorkflowSnapshotResolver,\n    private readonly runDataFactory: RunDataFactory,\n    private readonly runExecutionContextFactory: WorkflowRunExecutionContextFactory,\n    private readonly nodeStatePublisherFactory: NodeRunStateWriterFactory,\n    private readonly nodeActivationRequestComposer: NodeActivationRequestComposer,\n    private readonly nodeExecutor: NodeExecutor,\n    private readonly continuation: NodeActivationContinuation,\n    private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n    private readonly parityGuard: MissingRuntimeParityGuard,\n  ) {}\n\n  async handleNodeExecutionRequest(request: NodeExecutionRequest): Promise<void> {\n    const [state, schedulingState] = await Promise.all([\n      this.workflowExecutionRepository.load(request.runId),\n      this.workflowExecutionRepository.loadSchedulingState(request.runId),\n    ]);\n    if (!state) {\n      throw new Error(`Unknown runId: ${request.runId}`);\n    }\n    if (state.workflowId !== request.workflowId) {\n      throw new Error(`workflowId mismatch for run ${request.runId}: ${state.workflowId} vs ${request.workflowId}`);\n    }\n    const pendingExecution = schedulingState?.pending;\n    if (state.status !== \"pending\" || !pendingExecution) {\n      return;\n    }\n    if (pendingExecution.activationId !== request.activationId || pendingExecution.nodeId !== request.nodeId) {\n      return;\n    }\n\n    const workflow = this.resolvePersistedWorkflow(state);\n    if (!workflow) {\n      throw new Error(`Unknown workflowId: ${state.workflowId}`);\n    }\n    const definition = workflow.nodes.find((node) => node.id === request.nodeId);\n    if (!definition) {\n      throw new Error(`Unknown nodeId: ${request.nodeId}`);\n    }\n    if (definition.kind !== \"node\") {\n      throw new Error(`Node ${request.nodeId} is not runnable`);\n    }\n\n    const resolvedParent = request.parent ?? state.parent;\n    const data = this.runDataFactory.create(state.outputsByNode);\n    const limits = this.resolveEngineLimitsFromState(state);\n    const base = this.runExecutionContextFactory.create({\n      runId: state.runId,\n      workflowId: state.workflowId,\n      nodeId: request.nodeId,\n      parent: resolvedParent,\n      policySnapshot: state.policySnapshot,\n      subworkflowDepth: state.executionOptions?.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: limits.engineMaxNodeActivations,\n      engineMaxSubworkflowDepth: limits.engineMaxSubworkflowDepth,\n      data,\n      nodeState: this.nodeStatePublisherFactory.create(state.runId, state.workflowId, resolvedParent),\n      testContext: state.executionOptions?.testContext,\n    });\n\n    const inputsByPort = pendingExecution.inputsByPort;\n    const portKeys = Object.keys(inputsByPort);\n    const kind = portKeys.length === 1 && portKeys[0] === \"in\" ? (\"single\" as const) : (\"multi\" as const);\n    const batchId = pendingExecution.batchId ?? \"batch_1\";\n    const pendingResume = state.pendingResume;\n    const resumeContext: ResumeContext | undefined =\n      pendingResume?.activationId === request.activationId && pendingResume?.nodeId === request.nodeId\n        ? (pendingResume.resumeContext as ResumeContext)\n        : undefined;\n    const baseWithResume = resumeContext != null ? { ...base, resumeContext } : base;\n\n    const activationRequest =\n      kind === \"multi\"\n        ? this.nodeActivationRequestComposer.createMultiFromDefinitionWithActivation({\n            activationId: request.activationId,\n            runId: request.runId,\n            workflowId: request.workflowId,\n            parent: resolvedParent,\n            executionOptions: request.executionOptions ?? state.executionOptions,\n            base: baseWithResume,\n            data,\n            definition: {\n              id: definition.id,\n              config: definition.config,\n            },\n            batchId,\n            inputsByPort,\n          })\n        : this.nodeActivationRequestComposer.createSingleFromDefinitionWithActivation({\n            activationId: request.activationId,\n            runId: request.runId,\n            workflowId: request.workflowId,\n            parent: resolvedParent,\n            executionOptions: request.executionOptions ?? state.executionOptions,\n            base: baseWithResume,\n            data,\n            definition: {\n              id: definition.id,\n              config: definition.config,\n            },\n            batchId,\n            input: inputsByPort.in ?? request.input ?? [],\n          });\n\n    if (resumeContext != null) {\n      const clearedState = await this.workflowExecutionRepository.load(request.runId);\n      if (clearedState?.pendingResume?.activationId === request.activationId) {\n        await this.workflowExecutionRepository.save({ ...clearedState, pendingResume: undefined });\n      }\n    }\n\n    await this.continuation.markNodeRunning({\n      runId: activationRequest.runId,\n      activationId: activationRequest.activationId,\n      nodeId: activationRequest.nodeId,\n      inputsByPort: pendingExecution.inputsByPort,\n    });\n\n    let outputs;\n    try {\n      this.parityGuard.assertNone(workflow, [request.nodeId]);\n      outputs = await this.nodeExecutor.execute(activationRequest);\n    } catch (error) {\n      if (error instanceof RunSuspendedError) {\n        return;\n      }\n      await this.resumeAfterExecutionError(activationRequest, this.asError(error));\n      return;\n    }\n\n    await this.resumeAfterExecutionResult(activationRequest, outputs ?? {});\n  }\n\n  private resolvePersistedWorkflow(state: PersistedWorkflowLike): WorkflowDefinition | undefined {\n    return this.workflowSnapshotResolver.resolve({\n      workflowId: state.workflowId,\n      workflowSnapshot: state.workflowSnapshot,\n    });\n  }\n\n  private resolveEngineLimitsFromState(state: PersistedRunState): {\n    engineMaxNodeActivations: number;\n    engineMaxSubworkflowDepth: number;\n  } {\n    const fallback = this.executionLimitsPolicy.createRootExecutionOptions();\n    return {\n      engineMaxNodeActivations: state.executionOptions?.maxNodeActivations ?? fallback.maxNodeActivations!,\n      engineMaxSubworkflowDepth: state.executionOptions?.maxSubworkflowDepth ?? fallback.maxSubworkflowDepth!,\n    };\n  }\n\n  private async resumeAfterExecutionResult(\n    request: Readonly<{ runId: string; activationId: string; nodeId: string }>,\n    outputs: unknown,\n  ): Promise<void> {\n    try {\n      await this.continuation.resumeFromNodeResult({\n        runId: request.runId,\n        activationId: request.activationId,\n        nodeId: request.nodeId,\n        outputs: outputs as never,\n      });\n    } catch (error) {\n      this.rethrowUnlessIgnorableContinuationError(error);\n    }\n  }\n\n  private async resumeAfterExecutionError(\n    request: Readonly<{ runId: string; activationId: string; nodeId: string }>,\n    error: Error,\n  ): Promise<void> {\n    try {\n      await this.continuation.resumeFromNodeError({\n        runId: request.runId,\n        activationId: request.activationId,\n        nodeId: request.nodeId,\n        error,\n      });\n    } catch (continuationError) {\n      this.rethrowUnlessIgnorableContinuationError(continuationError);\n    }\n  }\n\n  private asError(error: unknown): Error {\n    return error instanceof Error ? error : new Error(String(error));\n  }\n\n  private rethrowUnlessIgnorableContinuationError(error: unknown): void {\n    if (this.isIgnorableContinuationError(error)) {\n      return;\n    }\n    throw this.asError(error);\n  }\n\n  private isIgnorableContinuationError(error: unknown): boolean {\n    const message = this.asError(error).message;\n    return (\n      message.includes(\" is not pending\") ||\n      message.includes(\"activationId mismatch\") ||\n      message.includes(\"nodeId mismatch\")\n    );\n  }\n}\n","import type { InputPortKey, Items, NodeId, OutputPortKey, RunQueueEntry } from \"../types\";\n\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\nimport type { TopologyOutgoingEdge } from \"./WorkflowTopologyPlanner\";\n\nexport type PlannedActivation =\n  | Readonly<{ kind: \"single\"; nodeId: NodeId; input: Items; batchId: string }>\n  | Readonly<{ kind: \"multi\"; nodeId: NodeId; inputsByPort: Readonly<Record<InputPortKey, Items>>; batchId: string }>;\n\nexport class RunQueuePlanner {\n  constructor(\n    private readonly topology: WorkflowTopology,\n    private readonly nodeInstances: ReadonlyMap<NodeId, unknown>,\n  ) {}\n\n  validateNodeKinds(): void {\n    for (const [toNodeId, inputs] of this.topology.expectedInputsByNode.entries()) {\n      if (inputs.length <= 1) {\n        const only = inputs[0];\n        if (only && only !== \"in\") {\n          const inst = this.nodeInstances.get(toNodeId);\n          if (!this.isMultiInputNode(inst))\n            throw new Error(`Node ${toNodeId} only supports input 'in' (got '${only}').`);\n        }\n        continue;\n      }\n\n      const inst = this.nodeInstances.get(toNodeId);\n      if (!this.isMultiInputNode(inst) && !this.supportsEngineFanInMerge(inst)) {\n        throw new Error(\n          `Node ${toNodeId} has ${inputs.length} inbound edges but does not support multi-input execution.`,\n        );\n      }\n    }\n  }\n\n  seedFromTrigger(args: { startNodeId: NodeId; items: Items; batchId: string }): RunQueueEntry[] {\n    const queue: RunQueueEntry[] = [];\n    for (const e of this.topology.outgoingByNode.get(args.startNodeId) ?? []) {\n      if (e.output !== \"main\") continue;\n      this.enqueueEdge(queue, {\n        batchId: args.batchId,\n        to: this.toEnqueueTarget(e),\n        from: { nodeId: args.startNodeId, output: \"main\" },\n        items: args.items,\n      });\n    }\n    return queue;\n  }\n\n  applyOutputs(\n    queue: RunQueueEntry[],\n    args: { fromNodeId: NodeId; outputs: Record<string, Items | undefined>; batchId: string },\n  ): void {\n    for (const e of this.topology.outgoingByNode.get(args.fromNodeId) ?? []) {\n      const outItems = (args.outputs as any)[e.output] ?? [];\n      this.enqueueEdge(queue, {\n        batchId: args.batchId,\n        to: this.toEnqueueTarget(e),\n        from: { nodeId: args.fromNodeId, output: e.output },\n        items: outItems,\n      });\n    }\n  }\n\n  nextActivation(queue: RunQueueEntry[]): PlannedActivation | null {\n    const readyCollect = this.resolveReadyCollect(queue);\n    if (readyCollect) {\n      return readyCollect;\n    }\n\n    const jobIdx = queue.findIndex((q) => !q.collect);\n    if (jobIdx === -1) {\n      if (queue.length === 0) return null;\n      const sealedCollect = this.resolveSealedCollect(queue);\n      if (sealedCollect) {\n        return sealedCollect;\n      }\n      const stuck = queue[0]!;\n      throw new Error(this.describeUnsatisfiedCollect(stuck));\n    }\n\n    const job = queue.splice(jobIdx, 1)[0]!;\n    const def = this.topology.defsById.get(job.nodeId);\n    if (!def || def.kind !== \"node\") return this.nextActivation(queue);\n    return { kind: \"single\", nodeId: job.nodeId, input: job.input, batchId: job.batchId ?? \"batch_1\" };\n  }\n\n  sumItemsByPort(inputsByPort: Readonly<Record<InputPortKey, Items>>): number {\n    let n = 0;\n    for (const v of Object.values(inputsByPort)) n += v?.length ?? 0;\n    return n;\n  }\n\n  private resolveReadyCollect(queue: RunQueueEntry[]): PlannedActivation | null {\n    for (let i = 0; i < queue.length; i++) {\n      const ready = this.tryDequeueCollect(queue, i);\n      if (ready) {\n        return ready;\n      }\n    }\n    return null;\n  }\n\n  private resolveSealedCollect(queue: RunQueueEntry[]): PlannedActivation | null {\n    for (let i = 0; i < queue.length; i++) {\n      const queueEntry = queue[i]!;\n      if (!queueEntry.collect) {\n        continue;\n      }\n      const received = queueEntry.collect.received as Record<InputPortKey, Items>;\n      if (Object.keys(received).length === 0) {\n        continue;\n      }\n      this.fillMissingCollectInputs(queueEntry);\n      const ready = this.tryDequeueCollect(queue, i);\n      if (ready) {\n        return ready;\n      }\n    }\n    return null;\n  }\n\n  private tryDequeueCollect(queue: RunQueueEntry[], index: number): PlannedActivation | null {\n    const queueEntry = queue[index]!;\n    if (!queueEntry.collect) {\n      return null;\n    }\n    const batchId = queueEntry.batchId ?? \"batch_1\";\n    const expected = queueEntry.collect.expectedInputs ?? [];\n    const received = queueEntry.collect.received as Record<InputPortKey, Items>;\n    for (const input of expected) {\n      if (!(input in received)) {\n        return null;\n      }\n    }\n    queue.splice(index, 1);\n    return { kind: \"multi\", nodeId: queueEntry.nodeId, inputsByPort: received, batchId };\n  }\n\n  private fillMissingCollectInputs(queueEntry: RunQueueEntry): void {\n    if (!queueEntry.collect) {\n      return;\n    }\n    const received = queueEntry.collect.received as Record<InputPortKey, Items>;\n    for (const input of queueEntry.collect.expectedInputs ?? []) {\n      if (!(input in received)) {\n        received[input] = [];\n      }\n    }\n  }\n\n  private usesTopologyCollectMerge(toNodeId: NodeId): boolean {\n    const expectedInputs = this.topology.expectedInputsByNode.get(toNodeId) ?? [];\n    if (expectedInputs.length !== 1 || expectedInputs[0] !== \"in\") {\n      return true;\n    }\n    return (this.topology.incomingByNode.get(toNodeId) ?? []).length > 1;\n  }\n\n  private toEnqueueTarget(edge: TopologyOutgoingEdge): Readonly<{\n    nodeId: NodeId;\n    input: InputPortKey;\n    collectKey: InputPortKey;\n  }> {\n    return edge.to;\n  }\n\n  private enqueueEdge(\n    queue: RunQueueEntry[],\n    args: Readonly<{\n      batchId: string;\n      to: { nodeId: NodeId; input: InputPortKey; collectKey: InputPortKey };\n      from: { nodeId: NodeId; output: OutputPortKey };\n      items: Items;\n    }>,\n    emptyPathSourceNodeId?: NodeId,\n  ): void {\n    const target = this.nodeInstances.get(args.to.nodeId);\n    const isMulti = this.usesTopologyCollectMerge(args.to.nodeId) || this.isMultiInputNode(target);\n\n    if (!isMulti) {\n      if (args.items.length === 0) {\n        const continueSourceNodeId = emptyPathSourceNodeId ?? args.from.nodeId;\n        if (this.shouldContinueAfterEmptyOutputFromSource(continueSourceNodeId)) {\n          queue.push({\n            nodeId: args.to.nodeId,\n            input: args.items,\n            toInput: args.to.collectKey,\n            batchId: args.batchId,\n            from: args.from,\n          });\n          return;\n        }\n        const source = emptyPathSourceNodeId ?? args.from.nodeId;\n        this.propagateEmptyPath(queue, args.to.nodeId, args.batchId, source);\n        return;\n      }\n      queue.push({\n        nodeId: args.to.nodeId,\n        input: args.items,\n        toInput: args.to.collectKey,\n        batchId: args.batchId,\n        from: args.from,\n      });\n      return;\n    }\n\n    const expected = this.topology.expectedInputsByNode.get(args.to.nodeId) ?? [];\n    let collect = queue.find(\n      (q) => q.nodeId === args.to.nodeId && (q.batchId ?? \"batch_1\") === args.batchId && !!q.collect,\n    );\n    if (!collect) {\n      collect = {\n        nodeId: args.to.nodeId,\n        input: [],\n        batchId: args.batchId,\n        collect: { expectedInputs: expected, received: {} as Record<InputPortKey, Items> },\n      };\n      queue.push(collect);\n    }\n\n    const received = (collect.collect as any).received as Record<InputPortKey, Items>;\n    received[args.to.collectKey] = args.items;\n  }\n\n  private shouldContinueAfterEmptyOutputFromSource(fromNodeId: NodeId): boolean {\n    const def = this.topology.defsById.get(fromNodeId);\n    if (!def) {\n      return false;\n    }\n    return def.config.continueWhenEmptyOutput === true;\n  }\n\n  private propagateEmptyPath(\n    queue: RunQueueEntry[],\n    nodeId: NodeId,\n    batchId: string,\n    emptyPathSourceNodeId: NodeId,\n  ): void {\n    for (const edge of this.topology.outgoingByNode.get(nodeId) ?? []) {\n      this.enqueueEdge(\n        queue,\n        {\n          batchId,\n          to: edge.to,\n          from: { nodeId, output: edge.output },\n          items: [],\n        },\n        emptyPathSourceNodeId,\n      );\n    }\n  }\n\n  private isMultiInputNode(n: unknown): boolean {\n    return typeof (n as any)?.executeMulti === \"function\";\n  }\n\n  private hasRunnableExecute(n: unknown): boolean {\n    return (\n      typeof n === \"object\" &&\n      n !== null &&\n      (n as { kind?: string }).kind === \"node\" &&\n      typeof (n as { execute?: unknown }).execute === \"function\"\n    );\n  }\n\n  private supportsEngineFanInMerge(n: unknown): boolean {\n    return this.hasRunnableExecute(n) && !this.isMultiInputNode(n);\n  }\n\n  private describeUnsatisfiedCollect(queueEntry: RunQueueEntry): string {\n    const batchId = queueEntry.batchId ?? \"batch_1\";\n    const expectedInputs = queueEntry.collect?.expectedInputs ?? [];\n    const receivedInputs = Object.keys(\n      (queueEntry.collect?.received ?? {}) as Record<InputPortKey, Items>,\n    ) as InputPortKey[];\n    const missingInputs = expectedInputs.filter((input) => !receivedInputs.includes(input));\n    const mergeNodeLabel = this.formatNodeLabel(queueEntry.nodeId);\n    const receivedSummary = this.describeReceivedInputs(queueEntry);\n    const missingSummary = this.describeMissingInputs(queueEntry.nodeId, missingInputs);\n\n    return [\n      `Multi-input collect is stuck at ${mergeNodeLabel} (batchId=${batchId}).`,\n      `Expected inputs: ${this.formatInputList(expectedInputs)}.`,\n      `Received inputs: ${receivedSummary}.`,\n      `Missing inputs: ${missingSummary}.`,\n    ].join(\" \");\n  }\n\n  private describeReceivedInputs(queueEntry: RunQueueEntry): string {\n    const received = (queueEntry.collect?.received ?? {}) as Record<InputPortKey, Items>;\n    const receivedEntries = Object.entries(received);\n    if (receivedEntries.length === 0) {\n      return \"none\";\n    }\n    return receivedEntries\n      .map(([input, items]) => `${input} (${items.length} item${items.length === 1 ? \"\" : \"s\"})`)\n      .join(\", \");\n  }\n\n  private describeMissingInputs(nodeId: NodeId, missingInputs: ReadonlyArray<InputPortKey>): string {\n    if (missingInputs.length === 0) {\n      return \"none\";\n    }\n    return missingInputs\n      .map((input) => {\n        const sources = this.findSources(nodeId, input);\n        if (sources.length === 0) {\n          return input;\n        }\n        return `${input} from ${sources.join(\" or \")}`;\n      })\n      .join(\", \");\n  }\n\n  private findSources(nodeId: NodeId, input: InputPortKey): string[] {\n    const matches: string[] = [];\n    for (const [sourceNodeId, edges] of this.topology.outgoingByNode.entries()) {\n      for (const edge of edges) {\n        if (edge.to.nodeId === nodeId && edge.to.collectKey === input) {\n          matches.push(this.formatNodeLabel(sourceNodeId));\n        }\n      }\n    }\n    return matches;\n  }\n\n  private formatInputList(inputs: ReadonlyArray<InputPortKey>): string {\n    return inputs.length > 0 ? `[${inputs.join(\", \")}]` : \"[]\";\n  }\n\n  private formatNodeLabel(nodeId: NodeId): string {\n    const definition = this.topology.defsById.get(nodeId);\n    const instance = this.nodeInstances.get(nodeId);\n    const typeName =\n      definition?.type && typeof definition.type === \"function\"\n        ? definition.type.name\n        : instance && typeof instance === \"object\" && \"constructor\" in instance\n          ? ((instance.constructor as { name?: string }).name ?? \"Node\")\n          : \"Node\";\n    return definition?.name ? `\"${definition.name}\" (${typeName}:${nodeId})` : `${typeName}:${nodeId}`;\n  }\n}\n","import type { WorkflowDefinition, WorkflowNodeInstanceFactory } from \"../types\";\nimport { WorkflowExecutableNodeClassifierFactory } from \"../workflow/definition/WorkflowExecutableNodeClassifierFactory\";\n\nimport { RunQueuePlanner } from \"./RunQueuePlanner\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class EngineWorkflowPlanningFactory {\n  constructor(private readonly workflowNodeInstanceFactory: WorkflowNodeInstanceFactory) {}\n\n  create(workflow: WorkflowDefinition): Readonly<{ topology: WorkflowTopology; planner: RunQueuePlanner }> {\n    this.validateAcyclic(workflow);\n    const topology = WorkflowTopology.fromWorkflow(workflow);\n    const nodeInstances = this.workflowNodeInstanceFactory.createNodes(workflow);\n    const planner = new RunQueuePlanner(topology, nodeInstances);\n    planner.validateNodeKinds();\n    return { topology, planner };\n  }\n\n  private validateAcyclic(workflow: WorkflowDefinition): void {\n    const classifier = WorkflowExecutableNodeClassifierFactory.create(workflow);\n    const outgoing = new Map<string, string[]>();\n    const visitState = new Map<string, \"unvisited\" | \"visiting\" | \"done\">();\n\n    for (const node of workflow.nodes) {\n      if (classifier.isExecutableNodeId(node.id)) {\n        visitState.set(node.id, \"unvisited\");\n      }\n    }\n\n    for (const edge of workflow.edges) {\n      if (!classifier.isExecutableNodeId(edge.from.nodeId) || !classifier.isExecutableNodeId(edge.to.nodeId)) {\n        continue;\n      }\n      const destinations = outgoing.get(edge.from.nodeId) ?? [];\n      destinations.push(edge.to.nodeId);\n      outgoing.set(edge.from.nodeId, destinations);\n    }\n\n    for (const node of workflow.nodes) {\n      if (classifier.isExecutableNodeId(node.id) && visitState.get(node.id) === \"unvisited\") {\n        this.depthFirstSearch(node.id, outgoing, visitState);\n      }\n    }\n  }\n\n  private depthFirstSearch(\n    nodeId: string,\n    outgoing: ReadonlyMap<string, ReadonlyArray<string>>,\n    visitState: Map<string, \"unvisited\" | \"visiting\" | \"done\">,\n  ): void {\n    visitState.set(nodeId, \"visiting\");\n    for (const toNodeId of outgoing.get(nodeId) ?? []) {\n      const state = visitState.get(toNodeId);\n      if (state === \"visiting\") {\n        throw new Error(`Workflow graph contains a directed cycle (edge ${nodeId} -> ${toNodeId}).`);\n      }\n      if (state === \"unvisited\") {\n        this.depthFirstSearch(toNodeId, outgoing, visitState);\n      }\n    }\n    visitState.set(nodeId, \"done\");\n  }\n}\n","import type {\n  ExecutionContextFactory,\n  Items,\n  JsonValue,\n  NodeDefinition,\n  NodeId,\n  NodeResolver,\n  RunDataFactory,\n  RunIdFactory,\n  TestableTriggerNode,\n  TriggerCleanupHandle,\n  TriggerInstanceId,\n  TriggerNode,\n  TriggerNodeConfig,\n  TriggerSetupContext,\n  TriggerSetupStateRepository,\n  TriggerRuntimeDiagnostics,\n  WorkflowActivationPolicy,\n  WorkflowDefinition,\n  WorkflowId,\n  WorkflowRepository,\n} from \"../types\";\n\nimport { CredentialResolverFactory } from \"../execution/CredentialResolverFactory\";\nimport type { NodeRunStateWriterFactory } from \"../execution/NodeRunStateWriterFactory\";\nimport type { EngineExecutionLimitsPolicy } from \"../policies/executionLimits/EngineExecutionLimitsPolicy\";\nimport type { PollingTriggerRuntime } from \"../triggers/polling/PollingTriggerRuntime\";\nimport type { PollingTriggerDedupWindow } from \"../triggers/polling/PollingTriggerDedupWindow\";\nimport type { PollingTriggerHandle, TriggerPollingPort } from \"../contracts/runtimeTypes\";\n\nexport interface TriggerEmitHandler {\n  emit(workflow: WorkflowDefinition, triggerNodeId: NodeId, items: Items): Promise<void>;\n}\n\nexport class TriggerRuntimeService {\n  private readonly credentialResolverFactory: CredentialResolverFactory;\n  private readonly triggerCleanupHandlesByKey = new Map<string, TriggerCleanupHandle[]>();\n\n  constructor(\n    private readonly workflowRepository: WorkflowRepository,\n    private readonly workflowActivationPolicy: WorkflowActivationPolicy,\n    private readonly runIdFactory: RunIdFactory,\n    private readonly runDataFactory: RunDataFactory,\n    private readonly executionContextFactory: ExecutionContextFactory,\n    credentialResolverFactory: CredentialResolverFactory,\n    private readonly nodeExecutionStatePublisherFactory: NodeRunStateWriterFactory,\n    private readonly nodeResolver: NodeResolver,\n    private readonly triggerSetupStateRepository: TriggerSetupStateRepository,\n    private readonly emitHandler: TriggerEmitHandler,\n    private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n    private readonly diagnostics: TriggerRuntimeDiagnostics | undefined,\n    private readonly pollingTriggerRuntime: PollingTriggerRuntime,\n    private readonly pollingTriggerDedupWindow: PollingTriggerDedupWindow,\n  ) {\n    this.credentialResolverFactory = credentialResolverFactory;\n  }\n\n  async startTriggers(): Promise<void> {\n    for (const wf of this.workflowRepository.list()) {\n      if (!this.workflowActivationPolicy.isActive(wf.id)) {\n        const summaries = this.formatTriggerSummaries(wf);\n        if (summaries.length > 0) {\n          this.logInfo(\n            `Workflow \"${wf.name}\" (${wf.id}) is inactive; skipping trigger setup — ${summaries.join(\"; \")}.`,\n          );\n        }\n        continue;\n      }\n      await this.startTriggersForWorkflow(wf);\n    }\n  }\n\n  async syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void> {\n    const wf = this.workflowRepository.get(workflowId);\n    if (!wf) {\n      return;\n    }\n    const summaries = this.formatTriggerSummaries(wf);\n    if (summaries.length > 0) {\n      this.logInfo(`Workflow \"${wf.name}\" (${wf.id}): stopping triggers — ${summaries.join(\"; \")}.`);\n    }\n    await this.stopTriggersForWorkflow(wf);\n    if (this.workflowActivationPolicy.isActive(workflowId)) {\n      if (summaries.length > 0) {\n        this.logInfo(`Workflow \"${wf.name}\" (${wf.id}): activation on; starting triggers — ${summaries.join(\"; \")}.`);\n      }\n      await this.startTriggersForWorkflow(wf);\n    } else {\n      this.logInfo(`Workflow \"${wf.name}\" (${wf.id}): activation off; triggers not started.`);\n    }\n  }\n\n  async stop(): Promise<void> {\n    for (const workflow of this.workflowRepository.list()) {\n      await this.stopTriggersForWorkflow(workflow);\n    }\n  }\n\n  async createTriggerTestItems(args: { workflow: WorkflowDefinition; nodeId: NodeId }): Promise<Items | undefined> {\n    const definition = args.workflow.nodes.find((node) => node.id === args.nodeId);\n    if (!definition) {\n      throw new Error(`Unknown trigger nodeId: ${args.nodeId}`);\n    }\n    if (definition.kind !== \"trigger\") {\n      throw new Error(`Node ${args.nodeId} is not a trigger`);\n    }\n    const node = this.nodeResolver.resolve(definition.type) as TriggerNode;\n    if (!this.isTestableTriggerNode(node)) {\n      return undefined;\n    }\n    const data = this.runDataFactory.create();\n    const runId = this.runIdFactory.makeRunId();\n    const trigger = { workflowId: args.workflow.id, nodeId: definition.id } as const;\n    const previousState = await this.triggerSetupStateRepository.load(trigger);\n    return await node.getTestItems({\n      ...this.createExecutionContext({\n        runId,\n        workflowId: args.workflow.id,\n        nodeId: definition.id,\n        data,\n      }),\n      trigger,\n      nodeId: definition.id,\n      config: definition.config as TriggerNodeConfig,\n      previousState: previousState?.state as never,\n    });\n  }\n\n  private async startTriggersForWorkflow(wf: WorkflowDefinition): Promise<void> {\n    for (const def of wf.nodes) {\n      if (def.kind !== \"trigger\") continue;\n      if ((def.config as TriggerNodeConfig).triggerKind === \"test\") continue;\n      const node = this.nodeResolver.resolve(def.type) as TriggerNode;\n      const data = this.runDataFactory.create();\n      const triggerRunId = this.runIdFactory.makeRunId();\n      const trigger = { workflowId: wf.id, nodeId: def.id } as const;\n      await this.stopTrigger(trigger);\n      const previousState = await this.triggerSetupStateRepository.load(trigger);\n      const emit = this.emitHandler.emit.bind(this.emitHandler, wf, def.id);\n      const registerCleanup = this.registerTriggerCleanupHandle.bind(this, trigger);\n      const polling = this.buildPollingHandle(trigger, emit);\n      let nextState: unknown;\n      try {\n        nextState = await node.setup({\n          ...this.createExecutionContext({\n            runId: triggerRunId,\n            workflowId: wf.id,\n            nodeId: def.id,\n            data,\n          }),\n          trigger,\n          config: def.config as TriggerNodeConfig,\n          previousState: previousState?.state as never,\n          registerCleanup,\n          emit,\n          polling,\n        } satisfies TriggerSetupContext<TriggerNodeConfig>);\n      } catch (triggerError: unknown) {\n        await this.stopTrigger(trigger);\n        const message = triggerError instanceof Error ? triggerError.message : String(triggerError);\n        this.logWarn(`Skipping trigger setup for workflow ${wf.id} node ${def.id}: ${message}`);\n        continue;\n      }\n      if (nextState === undefined) {\n        await this.triggerSetupStateRepository.delete(trigger);\n      } else {\n        await this.triggerSetupStateRepository.save({\n          trigger,\n          updatedAt: new Date().toISOString(),\n          state: nextState as JsonValue | undefined,\n        });\n      }\n    }\n  }\n\n  private async stopTriggersForWorkflow(workflow: WorkflowDefinition): Promise<void> {\n    for (const node of workflow.nodes) {\n      if (node.kind !== \"trigger\") {\n        continue;\n      }\n      if ((node.config as TriggerNodeConfig).triggerKind === \"test\") {\n        continue;\n      }\n      await this.stopTrigger({\n        workflowId: workflow.id,\n        nodeId: node.id,\n      });\n    }\n  }\n\n  private createExecutionContext(args: {\n    runId: ReturnType<RunIdFactory[\"makeRunId\"]>;\n    workflowId: string;\n    nodeId: NodeId;\n    data: ReturnType<RunDataFactory[\"create\"]>;\n  }) {\n    const nodeState = this.nodeExecutionStatePublisherFactory.create(args.runId, args.workflowId, undefined);\n    const rootLimits = this.executionLimitsPolicy.createRootExecutionOptions();\n    return this.executionContextFactory.create({\n      runId: args.runId,\n      workflowId: args.workflowId,\n      parent: undefined,\n      subworkflowDepth: rootLimits.subworkflowDepth ?? 0,\n      engineMaxNodeActivations: rootLimits.maxNodeActivations!,\n      engineMaxSubworkflowDepth: rootLimits.maxSubworkflowDepth!,\n      data: args.data,\n      nodeState,\n      getCredential: this.credentialResolverFactory.create(args.workflowId, args.nodeId),\n    });\n  }\n\n  private registerTriggerCleanupHandle(trigger: TriggerInstanceId, cleanup: TriggerCleanupHandle): void {\n    const key = this.toTriggerKey(trigger);\n    const cleanups = this.triggerCleanupHandlesByKey.get(key) ?? [];\n    cleanups.push(cleanup);\n    this.triggerCleanupHandlesByKey.set(key, cleanups);\n  }\n\n  private async stopTrigger(trigger: TriggerInstanceId): Promise<void> {\n    const key = this.toTriggerKey(trigger);\n    const cleanups = this.triggerCleanupHandlesByKey.get(key) ?? [];\n    this.triggerCleanupHandlesByKey.delete(key);\n    for (const cleanup of [...cleanups].reverse()) {\n      await cleanup.stop();\n    }\n  }\n\n  private toTriggerKey(trigger: TriggerInstanceId): string {\n    return `${trigger.workflowId}:${trigger.nodeId}`;\n  }\n\n  private formatTriggerSummaries(wf: WorkflowDefinition): string[] {\n    const out: string[] = [];\n    for (const def of wf.nodes) {\n      if (def.kind !== \"trigger\") {\n        continue;\n      }\n      if ((def.config as TriggerNodeConfig).triggerKind === \"test\") {\n        continue;\n      }\n      out.push(this.describeTriggerNode(def));\n    }\n    return out;\n  }\n\n  private describeTriggerNode(def: NodeDefinition): string {\n    const label = def.name !== undefined && def.name.trim().length > 0 ? def.name.trim() : String(def.id);\n    const cfg = def.config as { endpointKey?: unknown };\n    if (typeof cfg.endpointKey === \"string\" && cfg.endpointKey.trim().length > 0) {\n      return `${label} (webhook \"${cfg.endpointKey.trim()}\")`;\n    }\n    return label;\n  }\n\n  private logInfo(message: string): void {\n    if (this.diagnostics) {\n      this.diagnostics.info(message);\n    }\n  }\n\n  private logWarn(message: string): void {\n    if (this.diagnostics) {\n      this.diagnostics.warn(message);\n    } else {\n      console.warn(`[engine] ${message}`);\n    }\n  }\n\n  private buildPollingHandle(trigger: TriggerInstanceId, emit: (items: Items) => Promise<void>): PollingTriggerHandle {\n    const runtime = this.pollingTriggerRuntime;\n    const handle: PollingTriggerHandle = {\n      dedup: this.pollingTriggerDedupWindow,\n      start: async (args) => {\n        this.registerTriggerCleanupHandle(trigger, {\n          stop: async () => {\n            await runtime.stop(trigger);\n          },\n        });\n        return runtime.start({ trigger, emit, ...args });\n      },\n    };\n    return handle satisfies TriggerPollingPort;\n  }\n\n  private isTestableTriggerNode(node: TriggerNode): node is TestableTriggerNode<TriggerNodeConfig> {\n    return typeof (node as Partial<TestableTriggerNode<TriggerNodeConfig>>).getTestItems === \"function\";\n  }\n}\n","import type { RunId, RunResult, WebhookRunResult } from \"../types\";\n\nexport class EngineWaiters {\n  private readonly completionWaiters = new Map<RunId, Array<(result: RunResult) => void>>();\n  private readonly webhookResponseWaiters = new Map<RunId, Array<(result: WebhookRunResult) => void>>();\n\n  waitForCompletion(runId: RunId): Promise<RunResult> {\n    return new Promise((resolve) => {\n      const list = this.completionWaiters.get(runId) ?? [];\n      list.push(resolve);\n      this.completionWaiters.set(runId, list);\n    });\n  }\n\n  waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult> {\n    return new Promise((resolve) => {\n      const list = this.webhookResponseWaiters.get(runId) ?? [];\n      list.push(resolve);\n      this.webhookResponseWaiters.set(runId, list);\n    });\n  }\n\n  resolveRunCompletion(result: RunResult): void {\n    if (result.status !== \"completed\" && result.status !== \"failed\" && result.status !== \"halted\") return;\n    const list = this.completionWaiters.get(result.runId);\n    if (!list || list.length === 0) return;\n    this.completionWaiters.delete(result.runId);\n    for (const r of list) r(result);\n  }\n\n  resolveWebhookResponse(result: WebhookRunResult): void {\n    const list = this.webhookResponseWaiters.get(result.runId);\n    if (!list || list.length === 0) return;\n    this.webhookResponseWaiters.delete(result.runId);\n    for (const resolve of list) resolve(result);\n  }\n}\n","import type {\n  CurrentStateExecutionRequest,\n  HttpMethod,\n  Items,\n  NodeActivationContinuation,\n  NodeActivationId,\n  NodeExecutionRequest,\n  NodeExecutionRequestHandler,\n  NodeId,\n  NodeInputsByPort,\n  NodeOutputs,\n  ParentExecutionRef,\n  PersistedWorkflowTokenRegistryLike,\n  ResumeContext,\n  RunExecutionOptions,\n  RunId,\n  RunResult,\n  WorkflowExecutionRepository,\n  WebhookRunResult,\n  WebhookTriggerMatcher,\n  WebhookTriggerResolution,\n  WorkflowDefinition,\n  WorkflowId,\n  LiveWorkflowRepository,\n  WorkflowSnapshotResolver,\n} from \"../types\";\n\ninterface EngineTriggerRuntime {\n  startTriggers(): Promise<void>;\n  stop(): Promise<void>;\n  syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void>;\n  createTriggerTestItems(args: { workflow: WorkflowDefinition; nodeId: NodeId }): Promise<Items | undefined>;\n}\n\ninterface EngineRunStartService {\n  runWorkflow(\n    wf: WorkflowDefinition,\n    startAt: NodeId,\n    items: Items,\n    parent?: ParentExecutionRef,\n    executionOptions?: RunExecutionOptions,\n    persistedStateOverrides?: Readonly<{\n      workflowSnapshot?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n      mutableState?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    }>,\n  ): Promise<RunResult>;\n  runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult>;\n}\n\ninterface EngineRunContinuationService {\n  markNodeRunning(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    inputsByPort: NodeInputsByPort;\n  }): Promise<void>;\n  resumeFromNodeResult(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    outputs: NodeOutputs;\n  }): Promise<RunResult>;\n  resumeFromNodeError(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    error: Error;\n  }): Promise<RunResult>;\n  resumeFromStepResult(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    outputs: NodeOutputs;\n  }): Promise<RunResult>;\n  resumeFromStepError(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    error: Error;\n  }): Promise<RunResult>;\n  waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" | \"halted\" }>>;\n  waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult>;\n  resumeRun(args: { runId: RunId; taskId: string; resumeContext: ResumeContext }): Promise<RunResult>;\n}\n\ninterface EngineNodeExecutionRequestHandler {\n  handleNodeExecutionRequest(request: NodeExecutionRequest): Promise<void>;\n}\n\nexport interface EngineFacadeDeps {\n  liveWorkflowRepository: LiveWorkflowRepository;\n  tokenRegistry: PersistedWorkflowTokenRegistryLike;\n  webhookTriggerMatcher: WebhookTriggerMatcher;\n  workflowSnapshotResolver: WorkflowSnapshotResolver;\n  triggerRuntime: EngineTriggerRuntime;\n  runStartService: EngineRunStartService;\n  runContinuationService: EngineRunContinuationService;\n  nodeExecutionRequestHandler: EngineNodeExecutionRequestHandler;\n}\n\nexport class Engine implements NodeActivationContinuation, NodeExecutionRequestHandler {\n  constructor(private readonly deps: EngineFacadeDeps) {}\n\n  loadWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n    this.deps.tokenRegistry.registerFromWorkflows?.(workflows);\n    this.deps.liveWorkflowRepository.setWorkflows(workflows);\n    this.deps.webhookTriggerMatcher.onEngineWorkflowsLoaded?.();\n  }\n\n  getTokenRegistry(): EngineFacadeDeps[\"tokenRegistry\"] {\n    return this.deps.tokenRegistry;\n  }\n\n  resolveWorkflowSnapshot(args: {\n    workflowId: WorkflowId;\n    workflowSnapshot?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n  }): WorkflowDefinition | undefined {\n    return this.deps.workflowSnapshotResolver.resolve(args);\n  }\n\n  async startTriggers(): Promise<void> {\n    return await this.deps.triggerRuntime.startTriggers();\n  }\n\n  async syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void> {\n    await this.deps.triggerRuntime.syncWorkflowTriggersForActivation(workflowId);\n    this.deps.webhookTriggerMatcher.reloadWebhookRoutes?.();\n  }\n\n  async start(workflows: WorkflowDefinition[]): Promise<void> {\n    await this.stop();\n    this.loadWorkflows(workflows);\n    await this.startTriggers();\n  }\n\n  async stop(): Promise<void> {\n    await this.deps.triggerRuntime.stop();\n    this.deps.webhookTriggerMatcher.onEngineStopped?.();\n  }\n\n  resolveWebhookTrigger(args: { endpointPath: string; method: HttpMethod }): WebhookTriggerResolution {\n    const entry = this.deps.webhookTriggerMatcher.lookup(args.endpointPath);\n    if (!entry) {\n      return { status: \"notFound\" };\n    }\n    if (!entry.methods.includes(args.method)) {\n      return { status: \"methodNotAllowed\", match: entry };\n    }\n    return { status: \"ok\", match: entry };\n  }\n\n  async createTriggerTestItems(args: { workflow: WorkflowDefinition; nodeId: NodeId }): Promise<Items | undefined> {\n    return await this.deps.triggerRuntime.createTriggerTestItems(args);\n  }\n\n  async runWorkflow(\n    wf: WorkflowDefinition,\n    startAt: NodeId,\n    items: Items,\n    parent?: ParentExecutionRef,\n    executionOptions?: RunExecutionOptions,\n    persistedStateOverrides?: Readonly<{\n      workflowSnapshot?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"workflowSnapshot\"];\n      mutableState?: NonNullable<Awaited<ReturnType<WorkflowExecutionRepository[\"load\"]>>>[\"mutableState\"];\n    }>,\n  ): Promise<RunResult> {\n    return await this.deps.runStartService.runWorkflow(\n      wf,\n      startAt,\n      items,\n      parent,\n      executionOptions,\n      persistedStateOverrides,\n    );\n  }\n\n  async runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult> {\n    return await this.deps.runStartService.runWorkflowFromState(request);\n  }\n\n  async markNodeRunning(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    inputsByPort: NodeInputsByPort;\n  }): Promise<void> {\n    return await this.deps.runContinuationService.markNodeRunning(args);\n  }\n\n  async resumeFromNodeResult(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    outputs: NodeOutputs;\n  }): Promise<RunResult> {\n    return await this.deps.runContinuationService.resumeFromNodeResult(args);\n  }\n\n  async resumeFromNodeError(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    error: Error;\n  }): Promise<RunResult> {\n    return await this.deps.runContinuationService.resumeFromNodeError(args);\n  }\n\n  async resumeFromStepResult(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    outputs: NodeOutputs;\n  }): Promise<RunResult> {\n    return await this.deps.runContinuationService.resumeFromStepResult(args);\n  }\n\n  async resumeFromStepError(args: {\n    runId: RunId;\n    activationId: NodeActivationId;\n    nodeId: NodeId;\n    error: Error;\n  }): Promise<RunResult> {\n    return await this.deps.runContinuationService.resumeFromStepError(args);\n  }\n\n  async waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" | \"halted\" }>> {\n    return await this.deps.runContinuationService.waitForCompletion(runId);\n  }\n\n  async waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult> {\n    return await this.deps.runContinuationService.waitForWebhookResponse(runId);\n  }\n\n  async resumeRun(args: { runId: RunId; taskId: string; resumeContext: ResumeContext }): Promise<RunResult> {\n    return await this.deps.runContinuationService.resumeRun(args);\n  }\n\n  async handleNodeExecutionRequest(request: NodeExecutionRequest): Promise<void> {\n    await this.deps.nodeExecutionRequestHandler.handleNodeExecutionRequest(request);\n  }\n}\n","import type { EngineDeps } from \"../types\";\n\nimport { PollingTriggerDedupWindow } from \"../triggers/polling/PollingTriggerDedupWindow\";\nimport { PollingTriggerRuntime } from \"../triggers/polling/PollingTriggerRuntime\";\nimport { NoOpPollingTriggerLogger } from \"../triggers/polling/PollingTriggerLogger\";\nimport { MissingRuntimeFallbacks } from \"../workflowSnapshots/MissingRuntimeFallbacksFactory\";\nimport { MissingRuntimeExecutionMarker } from \"../workflowSnapshots/MissingRuntimeExecutionMarker\";\nimport { MissingRuntimeParityGuard } from \"../workflowSnapshots/MissingRuntimeParityGuard\";\nimport { WorkflowSnapshotCodec } from \"../workflowSnapshots/WorkflowSnapshotCodec\";\nimport { WorkflowSnapshotResolver } from \"../workflowSnapshots/WorkflowSnapshotResolver\";\nimport { ActivationEnqueueService } from \"../execution/ActivationEnqueueService\";\nimport { NodeActivationRequestInputPreparer } from \"../execution/NodeActivationRequestInputPreparer\";\nimport { NodeActivationRequestComposer } from \"../execution/NodeActivationRequestComposer\";\nimport { PersistedRunStateTerminalBuilder } from \"../execution/PersistedRunStateTerminalBuilder\";\nimport { NodeExecutionRequestHandlerService } from \"../orchestration/NodeExecutionRequestHandlerService\";\nimport { RunContinuationService } from \"../orchestration/RunContinuationService\";\nimport { RunStartService } from \"../orchestration/RunStartService\";\nimport { RunStateSemantics } from \"../execution/RunStateSemantics\";\nimport { WorkflowRunExecutionContextFactory } from \"../execution/WorkflowRunExecutionContextFactory\";\nimport { RunTerminalPersistenceCoordinator } from \"../policies/storage/RunTerminalPersistenceCoordinator\";\nimport { WorkflowPolicyErrorServices } from \"../policies/WorkflowPolicyErrorServices\";\nimport { WorkflowStoragePolicyEvaluator } from \"../policies/storage/WorkflowStoragePolicyEvaluator\";\nimport { NodeEventPublisher } from \"../events/NodeEventPublisher\";\nimport { EngineExecutionLimitsPolicy } from \"../policies/executionLimits/EngineExecutionLimitsPolicy\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport { TriggerRuntimeService } from \"../orchestration/TriggerRuntimeService\";\nimport { EngineWaiters } from \"../orchestration/EngineWaiters\";\nimport { Engine } from \"../orchestration/Engine\";\nimport { CredentialResolverFactory } from \"../execution/CredentialResolverFactory\";\nimport { NodeRunStateWriterFactory } from \"../execution/NodeRunStateWriterFactory\";\n\nexport type EngineCompositionDeps = EngineDeps & {\n  workflowSnapshotCodec?: WorkflowSnapshotCodec;\n  missingRuntimeFallbacks?: MissingRuntimeFallbacks;\n  executionLimitsPolicy?: EngineExecutionLimitsPolicy;\n};\n\nexport class EngineFactory {\n  create(deps: EngineCompositionDeps): Engine {\n    const waiters = new EngineWaiters();\n    const credentialResolverFactory = new CredentialResolverFactory(deps.credentialSessions);\n    const nodeEventPublisher = new NodeEventPublisher(deps.eventBus);\n    const nodeStatePublisherFactory = new NodeRunStateWriterFactory(\n      deps.workflowExecutionRepository,\n      nodeEventPublisher,\n      deps.eventBus,\n    );\n    const planningFactory = new EngineWorkflowPlanningFactory(deps.workflowNodeInstanceFactory);\n    const executionLimitsPolicy = deps.executionLimitsPolicy ?? new EngineExecutionLimitsPolicy();\n    const workflowSnapshotCodec = deps.workflowSnapshotCodec ?? new WorkflowSnapshotCodec(deps.tokenRegistry);\n    const missingRuntimeFallbacks = deps.missingRuntimeFallbacks ?? new MissingRuntimeFallbacks();\n    const workflowSnapshotResolver = new WorkflowSnapshotResolver(\n      deps.workflowRepository,\n      deps.tokenRegistry,\n      workflowSnapshotCodec,\n      missingRuntimeFallbacks,\n    );\n\n    const missingRuntimeExecutionMarker = new MissingRuntimeExecutionMarker();\n    const semantics = new RunStateSemantics(missingRuntimeExecutionMarker);\n    const parityGuard = new MissingRuntimeParityGuard(missingRuntimeExecutionMarker);\n    const nodeActivationRequestInputPreparer = new NodeActivationRequestInputPreparer(deps.workflowNodeInstanceFactory);\n    const activationEnqueueService = new ActivationEnqueueService(\n      deps.activationScheduler,\n      deps.workflowExecutionRepository,\n      nodeEventPublisher,\n      nodeActivationRequestInputPreparer,\n    );\n    const runExecutionContextFactory = new WorkflowRunExecutionContextFactory(\n      deps.executionContextFactory,\n      credentialResolverFactory,\n    );\n    const nodeActivationRequestComposer = new NodeActivationRequestComposer(\n      deps.activationIdFactory,\n      credentialResolverFactory,\n    );\n    const persistedRunStateTerminalBuilder = new PersistedRunStateTerminalBuilder();\n    const storagePolicyEvaluator = new WorkflowStoragePolicyEvaluator(deps.nodeResolver);\n    const terminalPersistence = new RunTerminalPersistenceCoordinator(\n      deps.workflowExecutionRepository,\n      storagePolicyEvaluator,\n    );\n    const policyErrorServices = new WorkflowPolicyErrorServices(deps.nodeResolver);\n\n    const runStartService = new RunStartService(\n      deps.runIdFactory,\n      deps.workflowExecutionRepository,\n      deps.runDataFactory,\n      workflowSnapshotCodec,\n      planningFactory,\n      nodeStatePublisherFactory,\n      runExecutionContextFactory,\n      nodeActivationRequestComposer,\n      activationEnqueueService,\n      semantics,\n      waiters,\n      deps.workflowPolicyRuntimeDefaults,\n      executionLimitsPolicy,\n      nodeEventPublisher,\n      persistedRunStateTerminalBuilder,\n    );\n    const runContinuationService = new RunContinuationService(\n      deps.activationIdFactory,\n      deps.workflowExecutionRepository,\n      deps.runDataFactory,\n      runExecutionContextFactory,\n      workflowSnapshotResolver,\n      planningFactory,\n      nodeStatePublisherFactory,\n      credentialResolverFactory,\n      nodeActivationRequestComposer,\n      persistedRunStateTerminalBuilder,\n      activationEnqueueService,\n      nodeEventPublisher,\n      semantics,\n      waiters,\n      policyErrorServices,\n      terminalPersistence,\n      executionLimitsPolicy,\n      parityGuard,\n    );\n    const nodeExecutionRequestHandler = new NodeExecutionRequestHandlerService(\n      deps.workflowExecutionRepository,\n      workflowSnapshotResolver,\n      deps.runDataFactory,\n      runExecutionContextFactory,\n      nodeStatePublisherFactory,\n      nodeActivationRequestComposer,\n      deps.nodeExecutor,\n      runContinuationService,\n      executionLimitsPolicy,\n      parityGuard,\n    );\n\n    const pollingTriggerLogger = deps.pollingTriggerLogger ?? new NoOpPollingTriggerLogger();\n    const pollingTriggerDedupWindow = new PollingTriggerDedupWindow();\n    const pollingTriggerRuntime = new PollingTriggerRuntime(deps.triggerSetupStateRepository, pollingTriggerLogger);\n\n    const triggerRuntime = new TriggerRuntimeService(\n      deps.workflowRepository,\n      deps.workflowActivationPolicy,\n      deps.runIdFactory,\n      deps.runDataFactory,\n      deps.executionContextFactory,\n      credentialResolverFactory,\n      nodeStatePublisherFactory,\n      deps.nodeResolver,\n      deps.triggerSetupStateRepository,\n      {\n        emit: async (workflow, triggerNodeId, items) => {\n          await runStartService.runWorkflow(workflow, triggerNodeId, items, undefined);\n        },\n      },\n      executionLimitsPolicy,\n      deps.triggerRuntimeDiagnostics,\n      pollingTriggerRuntime,\n      pollingTriggerDedupWindow,\n    );\n\n    const engine = new Engine({\n      liveWorkflowRepository: deps.liveWorkflowRepository,\n      tokenRegistry: deps.tokenRegistry,\n      webhookTriggerMatcher: deps.webhookTriggerMatcher,\n      workflowSnapshotResolver,\n      triggerRuntime,\n      runStartService,\n      runContinuationService,\n      nodeExecutionRequestHandler,\n    });\n\n    deps.activationScheduler.setContinuation?.(engine);\n    return engine;\n  }\n}\n","import type {\n  Items,\n  NodeId,\n  ParentExecutionRef,\n  RunResult,\n  WorkflowDefinition,\n  WorkflowId,\n  WorkflowRepository,\n} from \"../types\";\nimport { WorkflowExecutableNodeClassifierFactory } from \"../workflow\";\n\nimport { Engine } from \"../orchestration/Engine\";\n\nexport class EngineWorkflowRunnerService {\n  constructor(\n    private readonly engine: Engine,\n    private readonly workflowRepository: WorkflowRepository,\n  ) {}\n\n  async runById(args: {\n    workflowId: WorkflowId;\n    startAt?: NodeId;\n    items: Items;\n    parent?: ParentExecutionRef;\n  }): Promise<RunResult> {\n    const { workflowId, startAt, items, parent } = args;\n    const wf = this.workflowRepository.get(workflowId);\n    if (!wf) throw new Error(`Unknown workflowId: ${workflowId}`);\n\n    const startNodeId = startAt ?? this.findDefaultStartNodeId(wf);\n    const scheduled = await this.engine.runWorkflow(wf, startNodeId, items, parent);\n    if (scheduled.status !== \"pending\") return scheduled;\n    return await this.engine.waitForCompletion(scheduled.runId);\n  }\n\n  private findDefaultStartNodeId(wf: WorkflowDefinition): NodeId {\n    return WorkflowExecutableNodeClassifierFactory.create(wf).findDefaultExecutableStartNodeId(wf);\n  }\n}\n","import type { WorkflowRepository } from \"../types\";\n\nimport { Engine } from \"../orchestration/Engine\";\n\nimport { EngineWorkflowRunnerService } from \"./EngineWorkflowRunnerService\";\n\nexport class EngineWorkflowRunnerServiceFactory {\n  create(engine: Engine, workflowRepository: WorkflowRepository): EngineWorkflowRunnerService {\n    return new EngineWorkflowRunnerService(engine, workflowRepository);\n  }\n}\n","import type { LiveWorkflowRepository, WorkflowDefinition, WorkflowId } from \"../types\";\n\nexport class InMemoryLiveWorkflowRepository implements LiveWorkflowRepository {\n  private readonly workflowsById = new Map<WorkflowId, WorkflowDefinition>();\n\n  setWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n    this.workflowsById.clear();\n    for (const workflow of workflows) {\n      this.workflowsById.set(workflow.id, workflow);\n    }\n  }\n\n  list(): ReadonlyArray<WorkflowDefinition> {\n    return [...this.workflowsById.values()];\n  }\n\n  get(workflowId: WorkflowId): WorkflowDefinition | undefined {\n    return this.workflowsById.get(workflowId);\n  }\n}\n","import type {\n  CurrentStateExecutionRequest,\n  HttpMethod,\n  Items,\n  NodeId,\n  RunCurrentState,\n  RunExecutionOptions,\n  RunResult,\n  RunStopCondition,\n  WebhookInvocationMatch,\n  WebhookRunResult,\n  WebhookTriggerResolution,\n  WorkflowDefinition,\n  WorkflowRepository,\n} from \"../types\";\n\nimport { Engine } from \"../orchestration/Engine\";\n\nexport type StartWorkflowIntent = {\n  workflow: WorkflowDefinition;\n  startAt?: string;\n  items: Items;\n  synthesizeTriggerItems?: boolean;\n  parent?: CurrentStateExecutionRequest[\"parent\"];\n  executionOptions?: RunExecutionOptions;\n  workflowSnapshot?: CurrentStateExecutionRequest[\"workflowSnapshot\"];\n  mutableState?: CurrentStateExecutionRequest[\"mutableState\"];\n  currentState?: RunCurrentState;\n  stopCondition?: RunStopCondition;\n  reset?: CurrentStateExecutionRequest[\"reset\"];\n};\n\nexport type RerunFromNodeIntent = {\n  workflow: WorkflowDefinition;\n  nodeId: NodeId;\n  currentState: RunCurrentState;\n  items?: Items;\n  synthesizeTriggerItems?: boolean;\n  parent?: CurrentStateExecutionRequest[\"parent\"];\n  executionOptions?: RunExecutionOptions;\n  workflowSnapshot?: CurrentStateExecutionRequest[\"workflowSnapshot\"];\n  mutableState?: CurrentStateExecutionRequest[\"mutableState\"];\n};\n\nexport type MatchedWebhookRunIntent = {\n  endpointPath: string;\n  method: HttpMethod;\n  requestItem: Items[number];\n};\n\nexport type WebhookMatchRunIntent = {\n  match: WebhookInvocationMatch;\n  requestItem: Items[number];\n};\n\nexport class RunIntentService {\n  constructor(\n    private readonly engine: Engine,\n    private readonly workflowRepository: WorkflowRepository,\n  ) {}\n\n  async startWorkflow(args: StartWorkflowIntent): Promise<RunResult> {\n    const items = await this.resolveStartWorkflowItems(args);\n    if (args.startAt && !args.currentState && !args.stopCondition && !args.reset) {\n      return await this.engine.runWorkflow(args.workflow, args.startAt, items, args.parent, args.executionOptions, {\n        workflowSnapshot: args.workflowSnapshot,\n        mutableState: args.mutableState,\n      });\n    }\n    return await this.engine.runWorkflowFromState({\n      workflow: args.workflow,\n      items,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      workflowSnapshot: args.workflowSnapshot,\n      mutableState: args.mutableState,\n      currentState: args.currentState,\n      stopCondition: args.stopCondition ?? { kind: \"workflowCompleted\" },\n      reset: args.reset,\n    });\n  }\n\n  async rerunFromNode(args: RerunFromNodeIntent): Promise<RunResult> {\n    const items = await this.resolveRerunItems(args);\n    if (items) {\n      return await this.engine.runWorkflow(args.workflow, args.nodeId, items, args.parent, args.executionOptions, {\n        workflowSnapshot: args.workflowSnapshot,\n        mutableState: args.mutableState,\n      });\n    }\n    return await this.engine.runWorkflowFromState({\n      workflow: args.workflow,\n      parent: args.parent,\n      executionOptions: args.executionOptions,\n      workflowSnapshot: args.workflowSnapshot,\n      mutableState: args.mutableState,\n      currentState: args.currentState,\n      stopCondition: { kind: \"workflowCompleted\" },\n      reset: { clearFromNodeId: args.nodeId },\n    });\n  }\n\n  private async resolveStartWorkflowItems(args: StartWorkflowIntent): Promise<Items> {\n    if (this.hasNonEmptyItems(args.items)) {\n      return args.items;\n    }\n    const triggerNodeId = this.resolveStartWorkflowTriggerNodeId(args);\n    if (!triggerNodeId) {\n      return args.items;\n    }\n    return (await this.engine.createTriggerTestItems({ workflow: args.workflow, nodeId: triggerNodeId })) ?? args.items;\n  }\n\n  private async resolveRerunItems(args: RerunFromNodeIntent): Promise<Items | undefined> {\n    if (this.hasNonEmptyItems(args.items)) {\n      return args.items;\n    }\n    const triggerNodeId = this.resolveRerunTriggerNodeId(args);\n    if (!triggerNodeId) {\n      return args.items;\n    }\n    return (await this.engine.createTriggerTestItems({ workflow: args.workflow, nodeId: triggerNodeId })) ?? args.items;\n  }\n\n  private resolveStartWorkflowTriggerNodeId(args: StartWorkflowIntent): NodeId | undefined {\n    if (args.stopCondition?.kind === \"nodeCompleted\" && this.isTriggerNode(args.workflow, args.stopCondition.nodeId)) {\n      return args.stopCondition.nodeId;\n    }\n    if (!args.synthesizeTriggerItems) {\n      return undefined;\n    }\n    if (args.startAt && this.isTriggerNode(args.workflow, args.startAt)) {\n      return args.startAt;\n    }\n    return this.firstTriggerNodeId(args.workflow);\n  }\n\n  private resolveRerunTriggerNodeId(args: RerunFromNodeIntent): NodeId | undefined {\n    if (this.isTriggerNode(args.workflow, args.nodeId)) {\n      return args.nodeId;\n    }\n    if (!args.synthesizeTriggerItems) {\n      return undefined;\n    }\n    return this.firstTriggerNodeId(args.workflow);\n  }\n\n  private firstTriggerNodeId(workflow: WorkflowDefinition): NodeId | undefined {\n    return workflow.nodes.find((node) => node.kind === \"trigger\")?.id;\n  }\n\n  private isTriggerNode(workflow: WorkflowDefinition, nodeId: string): boolean {\n    return workflow.nodes.find((node) => node.id === nodeId)?.kind === \"trigger\";\n  }\n\n  private hasNonEmptyItems(items: Items | undefined): boolean {\n    return (items?.length ?? 0) > 0;\n  }\n\n  resolveWebhookTrigger(args: { endpointPath: string; method: HttpMethod }): WebhookTriggerResolution {\n    return this.engine.resolveWebhookTrigger(args);\n  }\n\n  async runMatchedWebhook(args: MatchedWebhookRunIntent): Promise<WebhookRunResult> {\n    const resolution = this.resolveWebhookTrigger(args);\n    if (resolution.status === \"notFound\") {\n      throw new Error(\"Unknown webhook endpoint\");\n    }\n    if (resolution.status === \"methodNotAllowed\") {\n      throw new Error(\"Method not allowed\");\n    }\n    return await this.runWebhookMatch({\n      match: resolution.match,\n      requestItem: args.requestItem,\n    });\n  }\n\n  async runWebhookMatch(args: WebhookMatchRunIntent): Promise<WebhookRunResult> {\n    const workflow = this.workflowRepository.get(args.match.workflowId);\n    if (!workflow) {\n      throw new Error(`Unknown workflowId: ${args.match.workflowId}`);\n    }\n    const scheduled = await this.engine.runWorkflow(\n      workflow,\n      args.match.nodeId,\n      [args.requestItem],\n      undefined,\n      this.createWebhookExecutionOptions(),\n    );\n    if (scheduled.status === \"failed\") {\n      throw new Error(scheduled.error.message);\n    }\n    if (scheduled.status === \"completed\") {\n      return {\n        runId: scheduled.runId,\n        workflowId: scheduled.workflowId,\n        startedAt: scheduled.startedAt,\n        runStatus: \"completed\",\n        response: scheduled.outputs,\n      };\n    }\n    return await Promise.race([\n      this.engine.waitForWebhookResponse(scheduled.runId),\n      this.engine.waitForCompletion(scheduled.runId).then((completed) => {\n        if (completed.status === \"failed\") {\n          throw new Error(completed.error.message);\n        }\n        if (completed.status === \"halted\") {\n          throw new Error(`Run halted: ${completed.reason}`);\n        }\n        return {\n          runId: completed.runId,\n          workflowId: completed.workflowId,\n          startedAt: completed.startedAt,\n          runStatus: \"completed\" as const,\n          response: completed.outputs,\n        } satisfies WebhookRunResult;\n      }),\n    ]);\n  }\n\n  private createWebhookExecutionOptions(): RunExecutionOptions {\n    return {\n      localOnly: true,\n      webhook: true,\n    };\n  }\n}\n","import type { WorkflowRepository } from \"../types\";\n\nimport { Engine } from \"../orchestration/Engine\";\n\nimport { RunIntentService } from \"./RunIntentService\";\n\nexport class RunIntentServiceFactory {\n  create(engine: Engine, workflowRepository: WorkflowRepository): RunIntentService {\n    return new RunIntentService(engine, workflowRepository);\n  }\n}\n","import type {\n  HttpMethod,\n  NodeDefinition,\n  NodeId,\n  TriggerNodeConfig,\n  WebhookInvocationMatch,\n  WebhookTriggerMatcher,\n  WebhookTriggerRoutingDiagnostics,\n  WorkflowActivationPolicy,\n  WorkflowDefinition,\n  WorkflowId,\n  WorkflowRepository,\n} from \"../types\";\n\nexport class WorkflowRepositoryWebhookTriggerMatcher implements WebhookTriggerMatcher {\n  private readonly routeByPath = new Map<string, WebhookInvocationMatch>();\n  private engineRoutesActive = false;\n\n  constructor(\n    private readonly workflowRepository: WorkflowRepository,\n    private readonly workflowActivationPolicy: WorkflowActivationPolicy,\n    private readonly diagnostics?: WebhookTriggerRoutingDiagnostics,\n  ) {}\n\n  onEngineWorkflowsLoaded(): void {\n    this.engineRoutesActive = true;\n    this.rebuildRouteIndex();\n  }\n\n  onEngineStopped(): void {\n    this.engineRoutesActive = false;\n    this.routeByPath.clear();\n  }\n\n  reloadWebhookRoutes(): void {\n    if (!this.engineRoutesActive) {\n      return;\n    }\n    this.rebuildRouteIndex();\n  }\n\n  lookup(endpointPath: string): WebhookInvocationMatch | undefined {\n    if (!this.engineRoutesActive) {\n      return undefined;\n    }\n    const normalized = this.normalizeEndpointPath(endpointPath);\n    return this.routeByPath.get(normalized);\n  }\n\n  match(args: { endpointPath: string; method: HttpMethod }): WebhookInvocationMatch | undefined {\n    const entry = this.lookup(args.endpointPath);\n    if (!entry) {\n      return undefined;\n    }\n    return entry.methods.includes(args.method) ? entry : undefined;\n  }\n\n  private rebuildRouteIndex(): void {\n    this.routeByPath.clear();\n    for (const workflow of this.workflowRepository.list()) {\n      if (!this.workflowActivationPolicy.isActive(workflow.id)) {\n        const triggerCount = workflow.nodes.filter((n) => n.kind === \"trigger\").length;\n        if (triggerCount > 0) {\n          const paths = this.collectWebhookEndpointPaths(workflow);\n          if (paths.length > 0) {\n            this.diagnostics?.info?.(\n              `Workflow \"${workflow.name}\" (${workflow.id}) is inactive; webhook routes not registered: ${paths.map((p) => `\"${p}\"`).join(\", \")}`,\n            );\n          } else {\n            this.diagnostics?.info?.(\n              `Workflow \"${workflow.name}\" (${workflow.id}) is inactive; no repository webhook routes for its triggers (other trigger kinds are unchanged).`,\n            );\n          }\n        }\n        continue;\n      }\n      for (const def of workflow.nodes) {\n        const match = this.tryMatchFromTriggerNode(workflow, def);\n        if (!match) {\n          continue;\n        }\n        const key = this.normalizeEndpointPath(match.endpointPath);\n        const existing = this.routeByPath.get(key);\n        if (existing) {\n          this.diagnostics?.warn(\n            `Duplicate webhook endpoint path \"${key}\" (workflows \"${existing.workflowId}\" and \"${match.workflowId}\"); using \"${match.workflowId}\".`,\n          );\n        }\n        this.routeByPath.set(key, match);\n      }\n    }\n  }\n\n  private collectWebhookEndpointPaths(workflow: WorkflowDefinition): string[] {\n    const paths: string[] = [];\n    for (const def of workflow.nodes) {\n      if (def.kind !== \"trigger\") {\n        continue;\n      }\n      const match = this.tryMatchFromTriggerNode(workflow, def);\n      if (match) {\n        paths.push(match.endpointPath);\n      }\n    }\n    return paths;\n  }\n\n  private tryMatchFromTriggerNode(\n    workflow: WorkflowDefinition,\n    def: NodeDefinition,\n  ): WebhookInvocationMatch | undefined {\n    if (def.kind !== \"trigger\") {\n      return undefined;\n    }\n    const config = def.config as TriggerNodeConfig & {\n      endpointKey?: unknown;\n      methods?: unknown;\n      parseJsonBody?: (body: unknown) => unknown;\n    };\n    if (typeof config.endpointKey !== \"string\" || config.endpointKey.length === 0) {\n      return undefined;\n    }\n    if (!Array.isArray(config.methods) || config.methods.length === 0) {\n      return undefined;\n    }\n    const methods = config.methods as HttpMethod[];\n    const parseJsonBody = typeof config.parseJsonBody === \"function\" ? config.parseJsonBody.bind(config) : undefined;\n    return {\n      endpointPath: config.endpointKey,\n      workflowId: workflow.id as WorkflowId,\n      nodeId: def.id as NodeId,\n      methods: [...methods],\n      parseJsonBody,\n    };\n  }\n\n  private normalizeEndpointPath(endpointPath: string): string {\n    return endpointPath.trim();\n  }\n}\n","import type { WebhookTriggerRoutingDiagnostics, WorkflowActivationPolicy, WorkflowRepository } from \"../types\";\n\nimport { WorkflowRepositoryWebhookTriggerMatcher } from \"./WorkflowRepositoryWebhookTriggerMatcher\";\n\nexport class WorkflowRepositoryWebhookTriggerMatcherFactory {\n  create(\n    workflowRepository: WorkflowRepository,\n    workflowActivationPolicy: WorkflowActivationPolicy,\n    diagnostics?: WebhookTriggerRoutingDiagnostics,\n  ): WorkflowRepositoryWebhookTriggerMatcher {\n    return new WorkflowRepositoryWebhookTriggerMatcher(workflowRepository, workflowActivationPolicy, diagnostics);\n  }\n}\n"],"mappings":"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"}