{"version":3,"file":"bootstrap-CTB53rEF.cjs","names":["EngineExecutionLimitsPolicy","ENGINE_EXECUTION_LIMITS_DEFAULTS","RunFinishedAtFactory","out: RunPruneCandidate[]","RunFinishedAtFactory","engine: TestSuiteOrchestratorEngine","testSuiteRunIdFactory: TestSuiteRunIdFactory","credentialResolverFactory: CredentialResolverFactory","abortControllerFactory: AbortControllerFactory","eventBus: RunEventBus | undefined","currentDate: () => Date","setupContext: TestTriggerSetupContext","cases: TestSuiteCaseOutcome[]","waitForSlot: Promise<void> | undefined","releaseSlot: (() => void) | undefined","queue: Array<Promise<void>>","generationError: Error | undefined","status: TestSuiteRunStatus","executionOptions: RunExecutionOptions","terminal: Extract<RunResult, { status: \"completed\" | \"failed\" | \"halted\" }>","status: TestCaseRunStatus","workflowExecutionRepository: WorkflowExecutionRepository","humanTaskStore?: HumanTaskStore","tokenSigner?: HitlResumeTokenSignerSeam","timeoutScheduler?: HitlTimeoutJobSchedulerSeam","workspaceId?: string","handle: HumanTaskHandle","CodemationTelemetryAttributeNames","deliveryRef: Awaited<ReturnType<typeof deliver>>","record: HumanTaskRecord","entry: PersistedSuspensionEntry","updatedState: PersistedRunState","RunSuspendedError","z","InlineDrivingScheduler","CoreTokens","NoOpAgentMcpIntegration","ItemExprResolver","NodeOutputNormalizer","RunnableOutputBehaviorResolver","ChildExecutionScopeFactory","NodeInstanceFactoryFactory","DefaultAsyncSleeper","InProcessRetryRunnerFactory","NodeExecutorFactory","RunIntentServiceFactory","EngineWorkflowRunnerServiceFactory","WorkflowRepositoryWebhookTriggerMatcherFactory","NodeExecutor","HumanTaskStoreToken","HitlResumeTokenSignerToken","HitlTimeoutJobSchedulerToken","HitlWorkspaceIdToken","InlineDrivingScheduler","EngineFactory","Engine","RunIntentService"],"sources":["../src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts","../src/runStorage/RunSummaryMapper.ts","../src/runStorage/InMemoryWorkflowExecutionRepository.ts","../src/orchestration/AbortControllerFactory.ts","../src/orchestration/TestSuiteOrchestrator.ts","../src/orchestration/TestSuiteRunIdFactory.ts","../src/execution/NodeSuspensionHandler.ts","../src/scheduler/InlineDrivingSchedulerFactory.ts","../src/bootstrap/runtime/EngineRuntimeRegistrar.ts"],"sourcesContent":["import {\n  EngineExecutionLimitsPolicy,\n  ENGINE_EXECUTION_LIMITS_DEFAULTS,\n  type EngineExecutionLimitsPolicyConfig,\n} from \"./EngineExecutionLimitsPolicy\";\n\nexport class EngineExecutionLimitsPolicyFactory {\n  create(overrides?: Partial<EngineExecutionLimitsPolicyConfig>): EngineExecutionLimitsPolicy {\n    return new EngineExecutionLimitsPolicy({ ...ENGINE_EXECUTION_LIMITS_DEFAULTS, ...overrides });\n  }\n}\n","import { RunFinishedAtFactory } from \"../contracts/runFinishedAtFactory\";\nimport type { PersistedRunState, RunSummary } from \"../types\";\n\nexport class RunSummaryMapper {\n  static fromPersistedState(state: PersistedRunState): RunSummary {\n    return {\n      runId: state.runId,\n      workflowId: state.workflowId,\n      startedAt: state.startedAt,\n      status: state.status,\n      finishedAt: RunFinishedAtFactory.resolveIso(state),\n      parent: state.parent,\n      executionOptions: state.executionOptions,\n    };\n  }\n}\n","import type {\n  EngineRunCounters,\n  NodeId,\n  NodeOutputs,\n  ParentExecutionRef,\n  PersistedRunSchedulingState,\n  PersistedRunState,\n  RunId,\n  RunSummary,\n  WorkflowExecutionListingRepository,\n  WorkflowExecutionPruneRepository,\n  WorkflowExecutionRepository,\n  RunPruneCandidate,\n  WorkflowId,\n} from \"../types\";\nimport { RunFinishedAtFactory } from \"../contracts/runFinishedAtFactory\";\nimport { RunSummaryMapper } from \"./RunSummaryMapper\";\n\nexport class InMemoryWorkflowExecutionRepository\n  implements WorkflowExecutionRepository, WorkflowExecutionListingRepository, WorkflowExecutionPruneRepository\n{\n  private readonly runs = new Map<RunId, PersistedRunState>();\n\n  async createRun(args: {\n    runId: RunId;\n    workflowId: WorkflowId;\n    startedAt: string;\n    parent?: ParentExecutionRef;\n    executionOptions?: PersistedRunState[\"executionOptions\"];\n    control?: PersistedRunState[\"control\"];\n    workflowSnapshot?: PersistedRunState[\"workflowSnapshot\"];\n    mutableState?: PersistedRunState[\"mutableState\"];\n    policySnapshot?: PersistedRunState[\"policySnapshot\"];\n    engineCounters?: EngineRunCounters;\n  }): Promise<void> {\n    this.runs.set(args.runId, {\n      runId: args.runId,\n      workflowId: args.workflowId,\n      startedAt: args.startedAt,\n      revision: 0,\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      status: \"running\",\n      queue: [],\n      outputsByNode: {} as Record<NodeId, NodeOutputs>,\n      nodeSnapshotsByNodeId: {},\n      connectionInvocations: [],\n    });\n  }\n\n  async load(runId: RunId): Promise<PersistedRunState | undefined> {\n    return this.runs.get(runId);\n  }\n\n  async loadSchedulingState(runId: RunId): Promise<PersistedRunSchedulingState | undefined> {\n    const state = this.runs.get(runId);\n    if (!state) {\n      return undefined;\n    }\n    return {\n      pending: state.pending ? { ...state.pending } : undefined,\n      queue: state.queue.map((entry) => ({ ...entry })),\n    };\n  }\n\n  async save(state: PersistedRunState): Promise<void> {\n    this.runs.set(state.runId, { ...state, revision: (state.revision ?? 0) + 1 });\n  }\n\n  async deleteRun(runId: RunId): Promise<void> {\n    this.runs.delete(runId);\n  }\n\n  async listRuns(args?: Readonly<{ workflowId?: WorkflowId; limit?: number }>): Promise<ReadonlyArray<RunSummary>> {\n    const limit = args?.limit ?? 50;\n    const summaries = [...this.runs.values()]\n      .filter((s) => (args?.workflowId ? s.workflowId === args.workflowId : true))\n      .sort((a, b) => b.startedAt.localeCompare(a.startedAt))\n      .slice(0, limit)\n      .map((s) => RunSummaryMapper.fromPersistedState(s));\n    return summaries;\n  }\n\n  async listRunsOlderThan(\n    args: Readonly<{ nowIso: string; defaultRetentionSeconds: number; limit?: number }>,\n  ): Promise<ReadonlyArray<RunPruneCandidate>> {\n    const limit = args.limit ?? 100;\n    const out: RunPruneCandidate[] = [];\n    for (const s of this.runs.values()) {\n      if (s.status !== \"completed\" && s.status !== \"failed\") continue;\n      const finishedAt = RunFinishedAtFactory.resolveIso(s);\n      const retentionSeconds = s.policySnapshot?.retentionSeconds ?? args.defaultRetentionSeconds;\n      const cutoffIso = new Date(new Date(args.nowIso).getTime() - retentionSeconds * 1000).toISOString();\n      if (!finishedAt || finishedAt >= cutoffIso) continue;\n      out.push({\n        runId: s.runId,\n        workflowId: s.workflowId,\n        startedAt: s.startedAt,\n        finishedAt,\n      });\n    }\n    out.sort((a, b) => a.finishedAt.localeCompare(b.finishedAt));\n    return out.slice(0, limit);\n  }\n}\n","export class AbortControllerFactory {\n  create(): AbortController {\n    return new AbortController();\n  }\n}\n","import type { CredentialResolverFactory } from \"../execution/CredentialResolverFactory\";\nimport type { RunEventBus, TestCaseRunStatus, TestSuiteRunStatus } from \"../events/runEvents\";\nimport type {\n  Item,\n  Items,\n  NodeId,\n  ParentExecutionRef,\n  RunExecutionOptions,\n  RunId,\n  RunResult,\n  TestSuiteRunId,\n  TestTriggerNodeConfig,\n  TestTriggerSetupContext,\n  TriggerNodeConfig,\n  WorkflowDefinition,\n  WorkflowId,\n} from \"../types\";\n\nimport type { AbortControllerFactory } from \"./AbortControllerFactory\";\nimport { TestSuiteRunIdFactory } from \"./TestSuiteRunIdFactory\";\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport interface TestSuiteOrchestratorEngine {\n  runWorkflow(\n    wf: WorkflowDefinition,\n    startAt: NodeId,\n    items: Items,\n    parent?: ParentExecutionRef,\n    executionOptions?: RunExecutionOptions,\n  ): Promise<RunResult>;\n  waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" | \"halted\" }>>;\n}\n\nexport interface TestSuiteCaseOutcome {\n  readonly testCaseIndex: number;\n  readonly runId: RunId;\n  readonly status: TestCaseRunStatus;\n}\n\nexport interface TestSuiteRunResult {\n  readonly testSuiteRunId: TestSuiteRunId;\n  readonly workflowId: WorkflowId;\n  readonly triggerNodeId: NodeId;\n  readonly status: TestSuiteRunStatus;\n  readonly totalCases: number;\n  readonly passedCases: number;\n  readonly failedCases: number;\n  readonly cases: ReadonlyArray<TestSuiteCaseOutcome>;\n}\n\nexport interface RunTestSuiteArgs {\n  readonly workflow: WorkflowDefinition;\n  readonly triggerNodeId: NodeId;\n  readonly testSuiteRunId?: TestSuiteRunId;\n  readonly concurrency?: number;\n  readonly signal?: AbortSignal;\n}\n\nexport class TestSuiteOrchestrator {\n  constructor(\n    private readonly engine: TestSuiteOrchestratorEngine,\n    private readonly testSuiteRunIdFactory: TestSuiteRunIdFactory,\n    private readonly credentialResolverFactory: CredentialResolverFactory,\n    private readonly abortControllerFactory: AbortControllerFactory,\n    private readonly eventBus: RunEventBus | undefined,\n    private readonly currentDate: () => Date = () => new Date(),\n  ) {}\n\n  async runSuite(args: RunTestSuiteArgs): Promise<TestSuiteRunResult> {\n    const triggerNodeId = args.triggerNodeId;\n    const definition = args.workflow.nodes.find((n) => n.id === triggerNodeId);\n    if (!definition) {\n      throw new Error(`Unknown trigger nodeId: ${triggerNodeId}`);\n    }\n    if (definition.kind !== \"trigger\") {\n      throw new Error(`Node ${triggerNodeId} is not a trigger`);\n    }\n    const triggerConfig = definition.config as TriggerNodeConfig;\n    if (triggerConfig.triggerKind !== \"test\") {\n      throw new Error(\n        `Node ${triggerNodeId} is not a test trigger (triggerKind=\"${triggerConfig.triggerKind ?? \"live\"}\")`,\n      );\n    }\n    const testTriggerConfig = triggerConfig as TestTriggerNodeConfig<unknown>;\n    if (typeof testTriggerConfig.generateItems !== \"function\") {\n      throw new Error(`Test trigger ${triggerNodeId} is missing a generateItems implementation`);\n    }\n\n    const testSuiteRunId = args.testSuiteRunId ?? this.testSuiteRunIdFactory.makeTestSuiteRunId();\n    const concurrency = Math.max(1, args.concurrency ?? testTriggerConfig.concurrency ?? DEFAULT_CONCURRENCY);\n    const externalSignal = args.signal;\n    const internalAbort = this.abortControllerFactory.create();\n    const onExternalAbort = () => internalAbort.abort(externalSignal?.reason);\n    if (externalSignal) {\n      if (externalSignal.aborted) {\n        internalAbort.abort(externalSignal.reason);\n      } else {\n        externalSignal.addEventListener(\"abort\", onExternalAbort, { once: true });\n      }\n    }\n\n    const triggerNodeName = definition.name ?? testTriggerConfig.name;\n\n    await this.publish({\n      kind: \"testSuiteStarted\",\n      testSuiteRunId,\n      workflowId: args.workflow.id,\n      triggerNodeId,\n      ...(triggerNodeName ? { triggerNodeName } : {}),\n      concurrency,\n      at: this.now(),\n    });\n\n    const setupContext: TestTriggerSetupContext = {\n      workflowId: args.workflow.id,\n      nodeId: triggerNodeId,\n      config: testTriggerConfig,\n      testSuiteRunId,\n      getCredential: this.credentialResolverFactory.create(args.workflow.id, triggerNodeId, testTriggerConfig),\n      signal: internalAbort.signal,\n    };\n\n    const cases: TestSuiteCaseOutcome[] = [];\n    let nextIndex = 0;\n    let inFlight = 0;\n    let waitForSlot: Promise<void> | undefined;\n    let releaseSlot: (() => void) | undefined;\n    const queue: Array<Promise<void>> = [];\n    let generationError: Error | undefined;\n\n    const acquireSlot = async (): Promise<void> => {\n      while (inFlight >= concurrency) {\n        if (!waitForSlot) {\n          waitForSlot = new Promise<void>((resolve) => {\n            releaseSlot = resolve;\n          });\n        }\n        await waitForSlot;\n      }\n      inFlight += 1;\n    };\n\n    const release = (): void => {\n      inFlight -= 1;\n      if (releaseSlot) {\n        const fn = releaseSlot;\n        releaseSlot = undefined;\n        waitForSlot = undefined;\n        fn();\n      }\n    };\n\n    try {\n      for await (const item of testTriggerConfig.generateItems(setupContext) as AsyncIterable<Item<unknown>>) {\n        if (internalAbort.signal.aborted) {\n          break;\n        }\n        await acquireSlot();\n        if (internalAbort.signal.aborted) {\n          release();\n          break;\n        }\n        const testCaseIndex = nextIndex++;\n        const testCaseLabel = this.resolveCaseLabel(testTriggerConfig, item);\n        queue.push(\n          this.runOneCase({\n            workflow: args.workflow,\n            triggerNodeId,\n            testSuiteRunId,\n            testCaseIndex,\n            testCaseLabel,\n            item,\n          })\n            .then((outcome) => {\n              cases.push(outcome);\n            })\n            .finally(release),\n        );\n      }\n    } catch (err) {\n      generationError = err instanceof Error ? err : new Error(String(err));\n    } finally {\n      if (externalSignal) {\n        externalSignal.removeEventListener(\"abort\", onExternalAbort);\n      }\n    }\n\n    await Promise.all(queue);\n\n    cases.sort((a, b) => a.testCaseIndex - b.testCaseIndex);\n    const totalCases = cases.length;\n    const passedCases = cases.filter((c) => c.status === \"succeeded\").length;\n    const failedCases = cases.filter((c) => c.status === \"failed\").length;\n    const status: TestSuiteRunStatus = this.deriveSuiteStatus({\n      generationError,\n      cancelled: internalAbort.signal.aborted,\n      totalCases,\n      passedCases,\n      failedCases,\n    });\n\n    await this.publish({\n      kind: \"testSuiteFinished\",\n      testSuiteRunId,\n      workflowId: args.workflow.id,\n      status,\n      totalCases,\n      passedCases,\n      failedCases,\n      at: this.now(),\n    });\n\n    if (generationError && status === \"errored\") {\n      throw generationError;\n    }\n\n    return {\n      testSuiteRunId,\n      workflowId: args.workflow.id,\n      triggerNodeId,\n      status,\n      totalCases,\n      passedCases,\n      failedCases,\n      cases,\n    };\n  }\n\n  private async runOneCase(args: {\n    workflow: WorkflowDefinition;\n    triggerNodeId: NodeId;\n    testSuiteRunId: TestSuiteRunId;\n    testCaseIndex: number;\n    testCaseLabel: string | undefined;\n    item: Item<unknown>;\n  }): Promise<TestSuiteCaseOutcome> {\n    const executionOptions: RunExecutionOptions = {\n      testContext: {\n        testSuiteRunId: args.testSuiteRunId,\n        testCaseIndex: args.testCaseIndex,\n        ...(args.testCaseLabel !== undefined ? { testCaseLabel: args.testCaseLabel } : {}),\n      },\n    };\n\n    const initial = await this.engine.runWorkflow(\n      args.workflow,\n      args.triggerNodeId,\n      [args.item],\n      undefined,\n      executionOptions,\n    );\n\n    const runId = initial.runId;\n    await this.publish({\n      kind: \"testCaseStarted\",\n      testSuiteRunId: args.testSuiteRunId,\n      testCaseIndex: args.testCaseIndex,\n      runId,\n      workflowId: args.workflow.id,\n      at: this.now(),\n      ...(args.testCaseLabel !== undefined ? { testCaseLabel: args.testCaseLabel } : {}),\n    });\n\n    let terminal: Extract<RunResult, { status: \"completed\" | \"failed\" | \"halted\" }>;\n    if (initial.status === \"completed\" || initial.status === \"failed\") {\n      terminal = initial;\n    } else {\n      terminal = await this.engine.waitForCompletion(runId);\n    }\n\n    const status: TestCaseRunStatus = terminal.status === \"completed\" ? \"succeeded\" : \"failed\";\n    await this.publish({\n      kind: \"testCaseCompleted\",\n      testSuiteRunId: args.testSuiteRunId,\n      testCaseIndex: args.testCaseIndex,\n      runId,\n      workflowId: args.workflow.id,\n      status,\n      at: this.now(),\n    });\n    return { testCaseIndex: args.testCaseIndex, runId, status };\n  }\n\n  private deriveSuiteStatus(args: {\n    generationError: Error | undefined;\n    cancelled: boolean;\n    totalCases: number;\n    passedCases: number;\n    failedCases: number;\n  }): TestSuiteRunStatus {\n    if (args.generationError && args.totalCases === 0) {\n      return \"errored\";\n    }\n    if (args.cancelled) {\n      return \"cancelled\";\n    }\n    if (args.generationError) {\n      return \"errored\";\n    }\n    if (args.totalCases === 0) {\n      return \"succeeded\";\n    }\n    if (args.failedCases === 0) {\n      return \"succeeded\";\n    }\n    if (args.passedCases === 0) {\n      return \"failed\";\n    }\n    return \"partial\";\n  }\n\n  private now(): string {\n    return this.currentDate().toISOString();\n  }\n\n  private resolveCaseLabel(config: TestTriggerNodeConfig<unknown>, item: Item<unknown>): string | undefined {\n    if (typeof config.caseLabel !== \"function\") return undefined;\n    try {\n      const result = config.caseLabel(item);\n      if (typeof result !== \"string\") return undefined;\n      const trimmed = result.trim();\n      return trimmed.length === 0 ? undefined : trimmed;\n    } catch {\n      return undefined;\n    }\n  }\n\n  private async publish(event: Parameters<RunEventBus[\"publish\"]>[0]): Promise<void> {\n    if (!this.eventBus) return;\n    await this.eventBus.publish(event);\n  }\n}\n","import type { TestSuiteRunId } from \"../contracts/testTriggerTypes\";\n\nexport class TestSuiteRunIdFactory {\n  makeTestSuiteRunId(): TestSuiteRunId {\n    return `tsr_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n  }\n}\n","import { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\n\nimport type { HitlResumeTokenSignerSeam, HitlTimeoutJobSchedulerSeam } from \"../contracts/hitlSeamTypes\";\nimport type { HumanTaskRecord, HumanTaskStore } from \"../contracts/humanTaskStoreTypes\";\nimport type {\n  HumanTaskHandle,\n  NodeActivationId,\n  NodeId,\n  PersistedRunState,\n  PersistedSuspensionEntry,\n  RunId,\n  SuspensionRequest,\n  WorkflowExecutionRepository,\n} from \"../types\";\nimport type { TelemetryScope } from \"../contracts/telemetryTypes\";\nimport { CodemationTelemetryAttributeNames } from \"../contracts/CodemationTelemetryAttributeNames\";\n\nimport { RunSuspendedError } from \"./RunSuspendedError\";\nexport { RunSuspendedError };\n\nexport class NodeSuspensionHandler {\n  constructor(\n    private readonly workflowExecutionRepository: WorkflowExecutionRepository,\n    private readonly humanTaskStore?: HumanTaskStore,\n    private readonly tokenSigner?: HitlResumeTokenSignerSeam,\n    private readonly timeoutScheduler?: HitlTimeoutJobSchedulerSeam,\n    private readonly workspaceId?: string,\n  ) {}\n\n  async handle(args: {\n    runId: RunId;\n    nodeId: NodeId;\n    activationId: NodeActivationId;\n    itemIndex: number;\n    suspensionRequest: SuspensionRequest;\n    state: PersistedRunState;\n    telemetry?: TelemetryScope;\n  }): Promise<never> {\n    const taskId = `htask_${globalThis.crypto.randomUUID()}`;\n    const { timeout, onTimeout, deliver, decisionSchema, subject, metadata } = args.suspensionRequest.request;\n\n    const timeoutMs = this.parseDurationMs(timeout);\n    const expiresAt = new Date(Date.now() + timeoutMs);\n\n    const decisionSchemaHash = this.hashSchema(decisionSchema);\n    const decisionSchemaJson = this.schemaToJson(decisionSchema);\n\n    let resumeUrl = \"\";\n    let resumeTokenHash = \"\";\n    if (this.tokenSigner) {\n      const token = this.tokenSigner.sign({ taskId, expiresAt, schemaHash: decisionSchemaHash });\n      resumeUrl = token;\n      resumeTokenHash = this.tokenSigner.hashToken(token);\n    }\n\n    const handle: HumanTaskHandle = {\n      taskId,\n      runId: args.runId,\n      nodeId: args.nodeId,\n      expiresAt,\n      resumeUrl,\n      ...(metadata !== undefined ? { metadata } : {}),\n    };\n\n    const channel = (metadata as Record<string, unknown> | undefined)?.[\"channel\"];\n    await args.telemetry?.addSpanEvent?.({\n      name: \"hitl.task.created\",\n      attributes: {\n        [CodemationTelemetryAttributeNames.hitlTaskId]: taskId,\n        [CodemationTelemetryAttributeNames.hitlChannel]: typeof channel === \"string\" ? channel : \"unknown\",\n        [CodemationTelemetryAttributeNames.runId]: args.runId,\n        [CodemationTelemetryAttributeNames.nodeId]: args.nodeId,\n        expiresAt: expiresAt.toISOString(),\n      },\n    });\n\n    let deliveryRef: Awaited<ReturnType<typeof deliver>>;\n    try {\n      deliveryRef = await deliver(handle);\n    } catch (deliverError) {\n      await args.telemetry?.addSpanEvent?.({\n        name: \"hitl.task.delivery_failed\",\n        attributes: {\n          [CodemationTelemetryAttributeNames.hitlTaskId]: taskId,\n          [CodemationTelemetryAttributeNames.hitlChannel]: typeof channel === \"string\" ? channel : \"unknown\",\n          error: deliverError instanceof Error ? deliverError.message : String(deliverError),\n        },\n      });\n      throw deliverError;\n    }\n\n    if (this.humanTaskStore) {\n      const record: HumanTaskRecord = {\n        id: taskId,\n        runId: args.runId,\n        workflowId: args.state.workflowId,\n        workspaceId: this.workspaceId ?? undefined,\n        nodeId: args.nodeId,\n        activationId: args.activationId,\n        itemIndex: args.itemIndex,\n        status: \"pending\",\n        channel: \"local\",\n        subject,\n        metadata: (metadata as Record<string, import(\"../contracts/workflowTypes\").JsonValue>) ?? {},\n        decisionSchemaJson,\n        decisionSchemaHash,\n        onTimeout,\n        deliveryRef,\n        resumeTokenHash: resumeTokenHash || \"no-token\",\n        expiresAt,\n        createdAt: new Date(),\n      };\n      await this.humanTaskStore.create(record);\n    }\n\n    if (this.timeoutScheduler) {\n      await this.timeoutScheduler.enqueueTimeoutJob({ taskId, expiresAt });\n    }\n\n    const entry: PersistedSuspensionEntry = {\n      taskId,\n      nodeId: args.nodeId,\n      activationId: args.activationId,\n      itemIndex: args.itemIndex,\n      decisionSchemaHash,\n      deliveryRef,\n      timeoutAt: expiresAt.toISOString(),\n      onTimeout,\n    };\n\n    const existingSuspensions = args.state.suspension ?? [];\n    const updatedState: PersistedRunState = {\n      ...args.state,\n      status: \"suspended\",\n      suspension: [...existingSuspensions, entry],\n    };\n\n    await this.workflowExecutionRepository.save(updatedState);\n\n    throw new RunSuspendedError(args.runId, taskId);\n  }\n\n  private parseDurationMs(duration: string): number {\n    const shorthand = /^(\\d+(?:\\.\\d+)?)(s|m|h|d)$/i.exec(duration);\n    if (shorthand) {\n      const value = parseFloat(shorthand[1]!);\n      const unit = shorthand[2]!.toLowerCase();\n      const multipliers: Record<string, number> = {\n        s: 1_000,\n        m: 60_000,\n        h: 3_600_000,\n        d: 86_400_000,\n      };\n      return value * multipliers[unit]!;\n    }\n    const iso = /^P(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$/.exec(duration);\n    if (iso) {\n      const days = parseFloat(iso[1] ?? \"0\");\n      const hours = parseFloat(iso[2] ?? \"0\");\n      const minutes = parseFloat(iso[3] ?? \"0\");\n      const seconds = parseFloat(iso[4] ?? \"0\");\n      return (days * 86_400 + hours * 3_600 + minutes * 60 + seconds) * 1_000;\n    }\n    throw new Error(`NodeSuspensionHandler: unrecognised duration format: \"${duration}\"`);\n  }\n\n  private hashSchema(schema: unknown): string {\n    const json = this.schemaToJson(schema);\n    return createHash(\"sha256\").update(json).digest(\"hex\");\n  }\n\n  private schemaToJson(schema: unknown): string {\n    if (schema instanceof z.ZodType) {\n      return JSON.stringify(z.toJSONSchema(schema));\n    }\n    if (typeof (schema as { toJSON?: unknown }).toJSON === \"function\") {\n      return JSON.stringify((schema as { toJSON: () => unknown }).toJSON());\n    }\n    return JSON.stringify(schema);\n  }\n}\n","import { NodeExecutor } from \"../execution/NodeExecutor\";\n\nimport { InlineDrivingScheduler } from \"./InlineDrivingScheduler\";\n\nexport class InlineDrivingSchedulerFactory {\n  create(nodeExecutor: NodeExecutor): InlineDrivingScheduler {\n    return new InlineDrivingScheduler(nodeExecutor);\n  }\n}\n","import { instanceCachingFactory, type DependencyContainer } from \"../../di\";\nimport { CoreTokens } from \"../../di\";\nimport { NoOpAgentMcpIntegration } from \"../../contracts/NoOpAgentMcpIntegration\";\nimport { EngineExecutionLimitsPolicyFactory } from \"../../policies/executionLimits/EngineExecutionLimitsPolicyFactory\";\nimport {\n  ChildExecutionScopeFactory,\n  DefaultAsyncSleeper,\n  InProcessRetryRunnerFactory,\n  ItemExprResolver,\n  NodeExecutor,\n  NodeExecutorFactory,\n  NodeInstanceFactoryFactory,\n  NodeOutputNormalizer,\n  RunnableOutputBehaviorResolver,\n} from \"../../execution\";\nimport { NodeSuspensionHandler } from \"../../execution/NodeSuspensionHandler\";\nimport { HumanTaskStoreToken } from \"../../contracts/humanTaskStoreTypes\";\nimport {\n  HitlResumeTokenSignerToken,\n  HitlTimeoutJobSchedulerToken,\n  HitlWorkspaceIdToken,\n} from \"../../contracts/hitlSeamTypes\";\nimport {\n  EngineFactory,\n  EngineWorkflowRunnerServiceFactory,\n  RunIntentServiceFactory,\n  RunIntentService,\n  WorkflowRepositoryWebhookTriggerMatcherFactory,\n} from \"../../runtime\";\nimport { InlineDrivingScheduler } from \"../../scheduler/InlineDrivingScheduler\";\nimport { InlineDrivingSchedulerFactory } from \"../../scheduler/InlineDrivingSchedulerFactory\";\nimport { Engine } from \"../../orchestration/Engine\";\nimport type { EngineRuntimeRegistrationOptions } from \"./EngineRuntimeRegistration.types\";\nimport type { WebhookTriggerMatcherProvider } from \"./EngineRuntimeRegistration.types\";\n\nexport class EngineRuntimeRegistrar {\n  register(container: DependencyContainer, options?: EngineRuntimeRegistrationOptions): void {\n    this.registerSupportFactories(container);\n    this.registerExecutionLimitsPolicy(container, options);\n    this.ensureWorkflowNodeInstanceFactory(container);\n    this.ensureNodeExecutor(container);\n    this.registerDefaultActivationScheduler(container);\n    this.registerEngine(container, options);\n    this.registerIntentServices(container);\n    this.registerAgentMcpIntegration(container);\n  }\n\n  private registerAgentMcpIntegration(container: DependencyContainer): void {\n    if (container.isRegistered(CoreTokens.AgentMcpIntegration, true)) {\n      return;\n    }\n    container.registerInstance(CoreTokens.AgentMcpIntegration, new NoOpAgentMcpIntegration());\n  }\n\n  private registerSupportFactories(container: DependencyContainer): void {\n    if (!container.isRegistered(ItemExprResolver, true)) {\n      container.registerSingleton(ItemExprResolver, ItemExprResolver);\n    }\n    if (!container.isRegistered(NodeOutputNormalizer, true)) {\n      container.registerSingleton(NodeOutputNormalizer, NodeOutputNormalizer);\n    }\n    if (!container.isRegistered(RunnableOutputBehaviorResolver, true)) {\n      container.registerSingleton(RunnableOutputBehaviorResolver, RunnableOutputBehaviorResolver);\n    }\n    if (!container.isRegistered(ChildExecutionScopeFactory, true)) {\n      container.register(ChildExecutionScopeFactory, {\n        useFactory: instanceCachingFactory((dependencyContainer) => {\n          return new ChildExecutionScopeFactory(dependencyContainer.resolve(CoreTokens.ActivationIdFactory));\n        }),\n      });\n    }\n    container.registerSingleton(EngineExecutionLimitsPolicyFactory, EngineExecutionLimitsPolicyFactory);\n    container.registerSingleton(NodeInstanceFactoryFactory, NodeInstanceFactoryFactory);\n    container.registerSingleton(DefaultAsyncSleeper, DefaultAsyncSleeper);\n    container.registerSingleton(InProcessRetryRunnerFactory, InProcessRetryRunnerFactory);\n    container.registerSingleton(NodeExecutorFactory, NodeExecutorFactory);\n    container.registerSingleton(InlineDrivingSchedulerFactory, InlineDrivingSchedulerFactory);\n    container.registerSingleton(RunIntentServiceFactory, RunIntentServiceFactory);\n    container.registerSingleton(EngineWorkflowRunnerServiceFactory, EngineWorkflowRunnerServiceFactory);\n    container.registerSingleton(\n      WorkflowRepositoryWebhookTriggerMatcherFactory,\n      WorkflowRepositoryWebhookTriggerMatcherFactory,\n    );\n  }\n\n  private registerExecutionLimitsPolicy(\n    container: DependencyContainer,\n    options: EngineRuntimeRegistrationOptions | undefined,\n  ): void {\n    if (container.isRegistered(CoreTokens.EngineExecutionLimitsPolicy, true)) {\n      return;\n    }\n    container.register(CoreTokens.EngineExecutionLimitsPolicy, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        const fromResolver = options?.resolveEngineExecutionLimits?.();\n        const merged = fromResolver ?? options?.engineExecutionLimits;\n        return dependencyContainer.resolve(EngineExecutionLimitsPolicyFactory).create(merged);\n      }),\n    });\n  }\n\n  private ensureWorkflowNodeInstanceFactory(container: DependencyContainer): void {\n    if (container.isRegistered(CoreTokens.WorkflowNodeInstanceFactory, true)) {\n      return;\n    }\n    container.register(CoreTokens.WorkflowNodeInstanceFactory, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        return dependencyContainer\n          .resolve(NodeInstanceFactoryFactory)\n          .create(dependencyContainer.resolve(CoreTokens.NodeResolver));\n      }),\n    });\n  }\n\n  private ensureNodeExecutor(container: DependencyContainer): void {\n    if (container.isRegistered(NodeExecutor, true)) {\n      return;\n    }\n    container.register(NodeExecutor, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        const retryRunner = dependencyContainer\n          .resolve(InProcessRetryRunnerFactory)\n          .create(dependencyContainer.resolve(DefaultAsyncSleeper));\n        const workflowExecutionRepository = dependencyContainer.resolve(CoreTokens.WorkflowExecutionRepository);\n        const humanTaskStore = dependencyContainer.isRegistered(HumanTaskStoreToken, true)\n          ? dependencyContainer.resolve(HumanTaskStoreToken)\n          : undefined;\n        const tokenSigner = dependencyContainer.isRegistered(HitlResumeTokenSignerToken, true)\n          ? dependencyContainer.resolve(HitlResumeTokenSignerToken)\n          : undefined;\n        const timeoutScheduler = dependencyContainer.isRegistered(HitlTimeoutJobSchedulerToken, true)\n          ? dependencyContainer.resolve(HitlTimeoutJobSchedulerToken)\n          : undefined;\n        const workspaceId = dependencyContainer.isRegistered(HitlWorkspaceIdToken, true)\n          ? dependencyContainer.resolve(HitlWorkspaceIdToken)\n          : undefined;\n        const suspensionHandler = new NodeSuspensionHandler(\n          workflowExecutionRepository,\n          humanTaskStore ?? undefined,\n          tokenSigner ?? undefined,\n          timeoutScheduler ?? undefined,\n          workspaceId ?? undefined,\n        );\n        return dependencyContainer\n          .resolve(NodeExecutorFactory)\n          .create(\n            dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory),\n            retryRunner,\n            dependencyContainer.resolve(RunnableOutputBehaviorResolver),\n            suspensionHandler,\n            (runId) => workflowExecutionRepository.load(runId),\n          );\n      }),\n    });\n  }\n\n  private registerDefaultActivationScheduler(container: DependencyContainer): void {\n    if (container.isRegistered(CoreTokens.NodeActivationScheduler, true)) {\n      return;\n    }\n    container.register(InlineDrivingScheduler, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        return dependencyContainer\n          .resolve(InlineDrivingSchedulerFactory)\n          .create(dependencyContainer.resolve(NodeExecutor));\n      }),\n    });\n    container.register(CoreTokens.NodeActivationScheduler, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        return dependencyContainer.resolve(InlineDrivingScheduler);\n      }),\n    });\n  }\n\n  private registerEngine(container: DependencyContainer, options: EngineRuntimeRegistrationOptions | undefined): void {\n    container.registerSingleton(EngineFactory, EngineFactory);\n    const matcherProvider = this.resolveMatcherProvider(options);\n    container.register(Engine, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        const liveWorkflowRepository = dependencyContainer.resolve(CoreTokens.LiveWorkflowRepository);\n        const nodeResolver = dependencyContainer.resolve(CoreTokens.NodeResolver);\n        const tokenRegistryLike = dependencyContainer.resolve(CoreTokens.PersistedWorkflowTokenRegistry);\n        const workflowActivationPolicy = dependencyContainer.resolve(CoreTokens.WorkflowActivationPolicy);\n        const webhookTriggerMatcher = matcherProvider.createMatcher(dependencyContainer);\n        const workflowNodeInstanceFactory = dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory);\n        const triggerRuntimeDiagnostics = options?.triggerRuntimeDiagnosticsProvider?.create(dependencyContainer);\n        return dependencyContainer.resolve(EngineFactory).create({\n          credentialSessions: dependencyContainer.resolve(CoreTokens.CredentialSessionService),\n          liveWorkflowRepository,\n          workflowRepository: dependencyContainer.resolve(CoreTokens.WorkflowRepository),\n          workflowActivationPolicy,\n          nodeResolver,\n          triggerSetupStateRepository: dependencyContainer.resolve(CoreTokens.TriggerSetupStateRepository),\n          webhookTriggerMatcher,\n          runIdFactory: dependencyContainer.resolve(CoreTokens.RunIdFactory),\n          activationIdFactory: dependencyContainer.resolve(CoreTokens.ActivationIdFactory),\n          workflowExecutionRepository: dependencyContainer.resolve(CoreTokens.WorkflowExecutionRepository),\n          activationScheduler: dependencyContainer.resolve(CoreTokens.NodeActivationScheduler),\n          runDataFactory: dependencyContainer.resolve(CoreTokens.RunDataFactory),\n          executionContextFactory: dependencyContainer.resolve(CoreTokens.ExecutionContextFactory),\n          nodeExecutor: dependencyContainer.resolve(NodeExecutor),\n          eventBus: dependencyContainer.resolve(CoreTokens.RunEventBus),\n          tokenRegistry: tokenRegistryLike,\n          workflowNodeInstanceFactory,\n          executionLimitsPolicy: dependencyContainer.resolve(CoreTokens.EngineExecutionLimitsPolicy),\n          workflowPolicyRuntimeDefaults: options?.workflowPolicyRuntimeDefaults,\n          triggerRuntimeDiagnostics,\n        });\n      }),\n    });\n  }\n\n  private registerIntentServices(container: DependencyContainer): void {\n    container.register(RunIntentService, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        return dependencyContainer\n          .resolve(RunIntentServiceFactory)\n          .create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));\n      }),\n    });\n    container.register(CoreTokens.WorkflowRunnerService, {\n      useFactory: instanceCachingFactory((dependencyContainer) => {\n        return dependencyContainer\n          .resolve(EngineWorkflowRunnerServiceFactory)\n          .create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));\n      }),\n    });\n  }\n\n  private resolveMatcherProvider(options: EngineRuntimeRegistrationOptions | undefined): WebhookTriggerMatcherProvider {\n    if (options?.webhookTriggerMatcherProvider) {\n      return options.webhookTriggerMatcherProvider;\n    }\n    return {\n      createMatcher: (container) =>\n        container\n          .resolve(WorkflowRepositoryWebhookTriggerMatcherFactory)\n          .create(\n            container.resolve(CoreTokens.WorkflowRepository),\n            container.resolve(CoreTokens.WorkflowActivationPolicy),\n            options?.webhookTriggerRoutingDiagnostics,\n          ),\n    };\n  }\n}\n"],"mappings":"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"}