{"version":3,"file":"algo.cjs","names":["maxVersion: number | string | undefined","getNullChannelVersion","INTERRUPT","START","TAG_HIDDEN","values: Record<string, unknown>","createCheckpoint","emptyChannels","readChannels","PUSH","TASKS","_isSend","InvalidUpdateError","NO_WRITES","RESUME","RETURN","ERROR","getOnlyChannels","RESERVED","updatedChannels: Set<string>","e: any","tasks:\n    | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n    | Record<string, PregelTaskDescription>","PULL","isCall","getRunnableForFunc","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","writes: [keyof Cc, unknown][]","CONFIG_KEY_TASK_ID","CONFIG_KEY_SEND","CONFIG_KEY_READ","CONFIG_KEY_CHECKPOINTER","CONFIG_KEY_CHECKPOINT_MAP","CONFIG_KEY_SCRATCHPAD","CONFIG_KEY_RESUME_MAP","XXH3","CONFIG_KEY_PREVIOUS_STATE","PREVIOUS","CACHE_NS_WRITES","_isSendInterface","Send","val: any","readChannel","EmptyChannelError","NULL_TASK_ID","resume"],"sources":["../../src/pregel/algo.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n  mergeConfigs,\n  patchConfig,\n  RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n  All,\n  BaseCheckpointSaver,\n  Checkpoint,\n  ReadonlyCheckpoint,\n  copyCheckpoint,\n  type PendingWrite,\n  type PendingWriteValue,\n  uuid5,\n  maxChannelVersion,\n  BaseStore,\n  CheckpointPendingWrite,\n  SendProtocol,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n  BaseChannel,\n  createCheckpoint,\n  emptyChannels,\n  getOnlyChannels,\n} from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { readChannel, readChannels } from \"./io.js\";\nimport {\n  _isSend,\n  _isSendInterface,\n  CONFIG_KEY_CHECKPOINT_MAP,\n  CHECKPOINT_NAMESPACE_SEPARATOR,\n  CONFIG_KEY_CHECKPOINTER,\n  CONFIG_KEY_READ,\n  CONFIG_KEY_TASK_ID,\n  CONFIG_KEY_SEND,\n  INTERRUPT,\n  RESERVED,\n  Send,\n  TAG_HIDDEN,\n  TASKS,\n  CHECKPOINT_NAMESPACE_END,\n  PUSH,\n  PULL,\n  RESUME,\n  NULL_TASK_ID,\n  CONFIG_KEY_SCRATCHPAD,\n  RETURN,\n  ERROR,\n  NO_WRITES,\n  CONFIG_KEY_PREVIOUS_STATE,\n  PREVIOUS,\n  CACHE_NS_WRITES,\n  CONFIG_KEY_RESUME_MAP,\n  START,\n} from \"../constants.js\";\nimport {\n  Call,\n  isCall,\n  PregelExecutableTask,\n  PregelScratchpad,\n  PregelTaskDescription,\n  SimpleTaskPath,\n  TaskPath,\n  VariadicTaskPath,\n} from \"./types.js\";\nimport { EmptyChannelError, InvalidUpdateError } from \"../errors.js\";\nimport { getNullChannelVersion } from \"./utils/index.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { getRunnableForFunc } from \"./call.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\nimport { XXH3 } from \"../hash.js\";\nimport { Topic } from \"../channels/topic.js\";\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n  [P in K]: T;\n};\n\nexport type WritesProtocol<C = string> = {\n  name: string;\n  writes: PendingWrite<C>[];\n  triggers: string[];\n  path?: TaskPath;\n};\n\nexport const increment = (current?: number) => {\n  return current !== undefined ? current + 1 : 1;\n};\n\nfunction triggersNextStep(\n  updatedChannels: Set<string>,\n  triggerToNodes: Record<string, string[]> | undefined\n) {\n  if (triggerToNodes == null) return false;\n\n  for (const chan of updatedChannels) {\n    if (triggerToNodes[chan]) return true;\n  }\n\n  return false;\n}\n\n// Avoids unnecessary double iteration\nfunction maxChannelMapVersion(\n  channelVersions: Record<string, number | string>\n): number | string | undefined {\n  let maxVersion: number | string | undefined;\n  for (const chan in channelVersions) {\n    if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;\n    if (maxVersion == null) {\n      maxVersion = channelVersions[chan];\n    } else {\n      maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);\n    }\n  }\n  return maxVersion;\n}\n\nexport function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(\n  checkpoint: Checkpoint,\n  interruptNodes: All | N[],\n  tasks: PregelExecutableTask<N, C>[]\n): boolean {\n  const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n  const seen = checkpoint.versions_seen[INTERRUPT] ?? {};\n\n  let anyChannelUpdated = false;\n\n  if (\n    (checkpoint.channel_versions[START] ?? nullVersion) >\n    (seen[START] ?? nullVersion)\n  ) {\n    anyChannelUpdated = true;\n  } else {\n    for (const chan in checkpoint.channel_versions) {\n      if (\n        !Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)\n      )\n        continue;\n\n      if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {\n        anyChannelUpdated = true;\n        break;\n      }\n    }\n  }\n\n  const anyTriggeredNodeInInterruptNodes = tasks.some((task) =>\n    interruptNodes === \"*\"\n      ? !task.config?.tags?.includes(TAG_HIDDEN)\n      : interruptNodes.includes(task.name)\n  );\n\n  return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;\n}\n\nexport function _localRead<Cc extends Record<string, BaseChannel>>(\n  checkpoint: ReadonlyCheckpoint,\n  channels: Cc,\n  task: WritesProtocol<keyof Cc>,\n  select: Array<keyof Cc> | keyof Cc,\n  fresh: boolean = false\n): Record<string, unknown> | unknown {\n  let updated = new Set<keyof Cc>();\n\n  if (!Array.isArray(select)) {\n    for (const [c] of task.writes) {\n      if (c === select) {\n        updated = new Set([c]);\n        break;\n      }\n    }\n    updated = updated || new Set();\n  } else {\n    updated = new Set(\n      select.filter((c) => task.writes.some(([key, _]) => key === c))\n    );\n  }\n\n  let values: Record<string, unknown>;\n\n  if (fresh && updated.size > 0) {\n    const localChannels = Object.fromEntries(\n      Object.entries(channels).filter(([k, _]) => updated.has(k as keyof Cc))\n    ) as Partial<Cc>;\n\n    const newCheckpoint = createCheckpoint(checkpoint, localChannels as Cc, -1);\n    const newChannels = emptyChannels(localChannels as Cc, newCheckpoint);\n\n    _applyWrites(\n      copyCheckpoint(newCheckpoint),\n      newChannels,\n      [task],\n      undefined,\n      undefined\n    );\n    values = readChannels({ ...channels, ...newChannels }, select);\n  } else {\n    values = readChannels(channels, select);\n  }\n\n  return values;\n}\n\nexport function _localWrite(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  commit: (writes: [string, any][]) => any,\n  processes: Record<string, PregelNode>,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  writes: [string, any][]\n) {\n  for (const [chan, value] of writes) {\n    if ([PUSH, TASKS].includes(chan) && value != null) {\n      if (!_isSend(value)) {\n        throw new InvalidUpdateError(\n          `Invalid packet type, expected SendProtocol, got ${JSON.stringify(\n            value\n          )}`\n        );\n      }\n      if (!(value.node in processes)) {\n        throw new InvalidUpdateError(\n          `Invalid node name \"${value.node}\" in Send packet`\n        );\n      }\n    }\n  }\n  commit(writes);\n}\n\nconst IGNORE = new Set<string | number | symbol>([\n  NO_WRITES,\n  PUSH,\n  RESUME,\n  INTERRUPT,\n  RETURN,\n  ERROR,\n]);\n\nexport function _applyWrites<Cc extends Record<string, BaseChannel>>(\n  checkpoint: Checkpoint,\n  channels: Cc,\n  tasks: WritesProtocol<keyof Cc>[],\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  getNextVersion: ((version: any) => any) | undefined,\n  triggerToNodes: Record<string, string[]> | undefined\n): Set<string> {\n  // Sort tasks by first 3 path elements for deterministic order\n  // Later path parts (like task IDs) are ignored for sorting\n  tasks.sort((a, b) => {\n    const aPath = a.path?.slice(0, 3) || [];\n    const bPath = b.path?.slice(0, 3) || [];\n\n    // Compare each path element\n    for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {\n      if (aPath[i] < bPath[i]) return -1;\n      if (aPath[i] > bPath[i]) return 1;\n    }\n\n    // If one path is shorter, it comes first\n    return aPath.length - bPath.length;\n  });\n\n  // if no task has triggers this is applying writes from the null task only\n  // so we don't do anything other than update the channels written to\n  const bumpStep = tasks.some((task) => task.triggers.length > 0);\n\n  // Filter out non instances of BaseChannel\n  const onlyChannels = getOnlyChannels(channels);\n\n  // Update seen versions\n  for (const task of tasks) {\n    checkpoint.versions_seen[task.name] ??= {};\n    for (const chan of task.triggers) {\n      if (chan in checkpoint.channel_versions) {\n        checkpoint.versions_seen[task.name][chan] =\n          checkpoint.channel_versions[chan];\n      }\n    }\n  }\n\n  // Find the highest version of all channels\n  let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n  // Consume all channels that were read\n  const channelsToConsume = new Set(\n    tasks\n      .flatMap((task) => task.triggers)\n      .filter((chan) => !RESERVED.includes(chan))\n  );\n\n  let usedNewVersion = false;\n  for (const chan of channelsToConsume) {\n    if (chan in onlyChannels && onlyChannels[chan].consume()) {\n      if (getNextVersion !== undefined) {\n        checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n        usedNewVersion = true;\n      }\n    }\n  }\n\n  // Group writes by channel\n  const pendingWritesByChannel = {} as Record<keyof Cc, PendingWriteValue[]>;\n  for (const task of tasks) {\n    for (const [chan, val] of task.writes) {\n      if (IGNORE.has(chan)) {\n        // do nothing\n      } else if (chan in onlyChannels) {\n        pendingWritesByChannel[chan] ??= [];\n        pendingWritesByChannel[chan].push(val);\n      }\n    }\n  }\n\n  // Find the highest version of all channels\n  if (maxVersion != null && getNextVersion != null) {\n    maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;\n  }\n\n  const updatedChannels: Set<string> = new Set();\n  // Apply writes to channels\n  for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {\n    if (chan in onlyChannels) {\n      const channel = onlyChannels[chan];\n      let updated;\n      try {\n        updated = channel.update(vals);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      } catch (e: any) {\n        if (e.name === InvalidUpdateError.unminifiable_name) {\n          const wrappedError = new InvalidUpdateError(\n            `Invalid update for channel \"${chan}\" with values ${JSON.stringify(\n              vals\n            )}: ${e.message}`\n          );\n          wrappedError.lc_error_code = e.lc_error_code;\n          throw wrappedError;\n        } else {\n          throw e;\n        }\n      }\n      if (updated && getNextVersion !== undefined) {\n        checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n        // unavailable channels can't trigger tasks, so don't add them\n        if (channel.isAvailable()) updatedChannels.add(chan);\n      }\n    }\n  }\n\n  // Channels that weren't updated in this step are notified of a new step\n  if (bumpStep) {\n    for (const chan in onlyChannels) {\n      if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n      const channel = onlyChannels[chan];\n      if (channel.isAvailable() && !updatedChannels.has(chan)) {\n        const updated = channel.update([]);\n\n        if (updated && getNextVersion !== undefined) {\n          checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n          // unavailable channels can't trigger tasks, so don't add them\n          if (channel.isAvailable()) updatedChannels.add(chan);\n        }\n      }\n    }\n  }\n\n  // If this is (tentatively) the last superstep, notify all channels of finish\n  if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) {\n    for (const chan in onlyChannels) {\n      if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n      const channel = onlyChannels[chan];\n      if (channel.finish() && getNextVersion !== undefined) {\n        checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n        // unavailable channels can't trigger tasks, so don't add them\n        if (channel.isAvailable()) updatedChannels.add(chan);\n      }\n    }\n  }\n\n  return updatedChannels;\n}\n\nfunction* candidateNodes(\n  checkpoint: ReadonlyCheckpoint,\n  processes: StrRecord<string, PregelNode>,\n  extra: NextTaskExtraFields\n) {\n  // This section is an optimization that allows which\n  // nodes will be active during the next step.\n  // When there's information about:\n  // 1. Which channels were updated in the previous step\n  // 2. Which nodes are triggered by which channels\n  // Then we can determine which nodes should be triggered\n  // in the next step without having to cycle through all nodes.\n  if (extra.updatedChannels != null && extra.triggerToNodes != null) {\n    const triggeredNodes = new Set<string>();\n\n    // Get all nodes that have triggers associated with an updated channel\n    for (const channel of extra.updatedChannels) {\n      const nodeIds = extra.triggerToNodes[channel];\n      for (const id of nodeIds ?? []) triggeredNodes.add(id);\n    }\n\n    // Sort the nodes to ensure deterministic order\n    yield* [...triggeredNodes].sort();\n    return;\n  }\n\n  // If there are no values in checkpoint, no need to run\n  // through all the PULL candidates\n  const isEmptyChannelVersions = (() => {\n    for (const chan in checkpoint.channel_versions) {\n      if (checkpoint.channel_versions[chan] !== null) return false;\n    }\n    return true;\n  })();\n\n  if (isEmptyChannelVersions) return;\n  for (const name in processes) {\n    if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;\n    yield name;\n  }\n}\n\nexport type NextTaskExtraFields = {\n  step: number;\n  isResuming?: boolean;\n  checkpointer?: BaseCheckpointSaver;\n  manager?: CallbackManagerForChainRun;\n  store?: BaseStore;\n  stream?: IterableReadableWritableStream;\n  triggerToNodes?: Record<string, string[]>;\n  updatedChannels?: Set<string>;\n};\n\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n  store?: BaseStore;\n};\n\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n  store?: never;\n};\n\nexport function _prepareNextTasks<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: [string, string, unknown][] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: RunnableConfig,\n  forExecution: false,\n  extra: NextTaskExtraFieldsWithoutStore\n): Record<string, PregelTaskDescription>;\n\nexport function _prepareNextTasks<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: [string, string, unknown][] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: RunnableConfig,\n  forExecution: true,\n  extra: NextTaskExtraFieldsWithStore\n): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\n\n/**\n * Prepare the set of tasks that will make up the next Pregel step.\n * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered\n * by edges).\n */\nexport function _prepareNextTasks<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: [string, string, unknown][] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: RunnableConfig,\n  forExecution: boolean,\n  extra: NextTaskExtraFieldsWithStore | NextTaskExtraFieldsWithoutStore\n):\n  | Record<string, PregelTaskDescription>\n  | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>> {\n  const tasks:\n    | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n    | Record<string, PregelTaskDescription> = {};\n\n  // Consume pending tasks\n  const tasksChannel = channels[TASKS] as Topic<SendProtocol> | undefined;\n\n  if (tasksChannel?.isAvailable()) {\n    const len = tasksChannel.get().length;\n    for (let i = 0; i < len; i += 1) {\n      const task = _prepareSingleTask(\n        [PUSH, i],\n        checkpoint,\n        pendingWrites,\n        processes,\n        channels,\n        config,\n        forExecution,\n        extra\n      );\n      if (task !== undefined) {\n        tasks[task.id] = task;\n      }\n    }\n  }\n\n  // Check if any processes should be run in next step\n  // If so, prepare the values to be passed to them\n  for (const name of candidateNodes(checkpoint, processes, extra)) {\n    const task = _prepareSingleTask(\n      [PULL, name],\n      checkpoint,\n      pendingWrites,\n      processes,\n      channels,\n      config,\n      forExecution,\n      extra\n    );\n    if (task !== undefined) {\n      tasks[task.id] = task;\n    }\n  }\n  return tasks;\n}\n\nexport function _prepareSingleTask<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  taskPath: SimpleTaskPath,\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: CheckpointPendingWrite[] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: RunnableConfig,\n  forExecution: false,\n  extra: NextTaskExtraFields\n): PregelTaskDescription | undefined;\n\nexport function _prepareSingleTask<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  taskPath: TaskPath,\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: CheckpointPendingWrite[] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: RunnableConfig,\n  forExecution: true,\n  extra: NextTaskExtraFields\n): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\nexport function _prepareSingleTask<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  taskPath: TaskPath,\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: CheckpointPendingWrite[] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: RunnableConfig,\n  forExecution: boolean,\n  extra: NextTaskExtraFieldsWithStore\n): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\n/**\n * Prepares a single task for the next Pregel step, given a task path, which\n * uniquely identifies a PUSH or PULL task within the graph.\n */\nexport function _prepareSingleTask<\n  Nn extends StrRecord<string, PregelNode>,\n  Cc extends StrRecord<string, BaseChannel>\n>(\n  taskPath: TaskPath,\n  checkpoint: ReadonlyCheckpoint,\n  pendingWrites: CheckpointPendingWrite[] | undefined,\n  processes: Nn,\n  channels: Cc,\n  config: LangGraphRunnableConfig,\n  forExecution: boolean,\n  extra: NextTaskExtraFields\n):\n  | PregelTaskDescription\n  | PregelExecutableTask<keyof Nn, keyof Cc>\n  | undefined {\n  const { step, checkpointer, manager } = extra;\n  const configurable = config.configurable ?? {};\n  const parentNamespace = configurable.checkpoint_ns ?? \"\";\n\n  if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {\n    const call = taskPath[taskPath.length - 1] as Call;\n    const proc = getRunnableForFunc(call.name, call.func);\n    const triggers = [PUSH];\n    const checkpointNamespace =\n      parentNamespace === \"\"\n        ? call.name\n        : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;\n    const id = uuid5(\n      JSON.stringify([\n        checkpointNamespace,\n        step.toString(),\n        call.name,\n        PUSH,\n        taskPath[1],\n        taskPath[2],\n      ]),\n      checkpoint.id\n    );\n    const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;\n\n    // we append `true` to the task path to indicate that a call is being made\n    // so we should not return interrupts from this task (responsibility lies with the parent)\n    const outputTaskPath = [...taskPath.slice(0, 3), true] as VariadicTaskPath;\n    const metadata = {\n      langgraph_step: step,\n      langgraph_node: call.name,\n      langgraph_triggers: triggers,\n      langgraph_path: outputTaskPath,\n      langgraph_checkpoint_ns: taskCheckpointNamespace,\n    };\n    if (forExecution) {\n      const writes: [keyof Cc, unknown][] = [];\n      const task = {\n        name: call.name,\n        input: call.input,\n        proc,\n        writes,\n        config: patchConfig(\n          mergeConfigs(config, {\n            metadata,\n            store: extra.store ?? config.store,\n          }),\n          {\n            runName: call.name,\n            callbacks: manager?.getChild(`graph:step:${step}`),\n            configurable: {\n              [CONFIG_KEY_TASK_ID]: id,\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n                _localWrite(\n                  (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n                  processes,\n                  writes_\n                ),\n              [CONFIG_KEY_READ]: (\n                select_: Array<keyof Cc> | keyof Cc,\n                fresh_: boolean = false\n              ) =>\n                _localRead(\n                  checkpoint,\n                  channels,\n                  {\n                    name: call.name,\n                    writes: writes as PendingWrite[],\n                    triggers,\n                    path: outputTaskPath,\n                  },\n                  select_,\n                  fresh_\n                ),\n              [CONFIG_KEY_CHECKPOINTER]:\n                checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n              [CONFIG_KEY_CHECKPOINT_MAP]: {\n                ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n                [parentNamespace]: checkpoint.id,\n              },\n              [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n                pendingWrites: pendingWrites ?? [],\n                taskId: id,\n                currentTaskInput: call.input,\n                resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n                namespaceHash: XXH3(taskCheckpointNamespace),\n              }),\n              [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],\n              checkpoint_id: undefined,\n              checkpoint_ns: taskCheckpointNamespace,\n            },\n          }\n        ),\n        triggers,\n        retry_policy: call.retry,\n        cache_key: call.cache\n          ? {\n              key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),\n              ns: [CACHE_NS_WRITES, call.name ?? \"__dynamic__\"],\n              ttl: call.cache.ttl,\n            }\n          : undefined,\n        id,\n        path: outputTaskPath,\n        writers: [],\n      } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n      return task;\n    } else {\n      return {\n        id,\n        name: call.name,\n        interrupts: [],\n        path: outputTaskPath,\n      };\n    }\n  } else if (taskPath[0] === PUSH) {\n    const index =\n      typeof taskPath[1] === \"number\"\n        ? taskPath[1]\n        : parseInt(taskPath[1] as string, 10);\n\n    if (!channels[TASKS]?.isAvailable()) {\n      return undefined;\n    }\n\n    const sends = channels[TASKS].get() as SendProtocol[];\n    if (index < 0 || index >= sends.length) {\n      return undefined;\n    }\n\n    const packet =\n      _isSendInterface(sends[index]) && !_isSend(sends[index])\n        ? new Send(sends[index].node, sends[index].args)\n        : sends[index];\n\n    if (!_isSendInterface(packet)) {\n      console.warn(\n        `Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`\n      );\n      return undefined;\n    }\n    if (!(packet.node in processes)) {\n      console.warn(\n        `Ignoring unknown node name ${packet.node} in pending sends.`\n      );\n      return undefined;\n    }\n    const triggers = [PUSH];\n    const checkpointNamespace =\n      parentNamespace === \"\"\n        ? packet.node\n        : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;\n    const taskId = uuid5(\n      JSON.stringify([\n        checkpointNamespace,\n        step.toString(),\n        packet.node,\n        PUSH,\n        index.toString(),\n      ]),\n      checkpoint.id\n    );\n    const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n    let metadata = {\n      langgraph_step: step,\n      langgraph_node: packet.node,\n      langgraph_triggers: triggers,\n      langgraph_path: taskPath.slice(0, 3),\n      langgraph_checkpoint_ns: taskCheckpointNamespace,\n    };\n    if (forExecution) {\n      const proc = processes[packet.node];\n      const node = proc.getNode();\n      if (node !== undefined) {\n        if (proc.metadata !== undefined) {\n          metadata = { ...metadata, ...proc.metadata };\n        }\n        const writes: [keyof Cc, unknown][] = [];\n        return {\n          name: packet.node,\n          input: packet.args,\n          proc: node,\n          subgraphs: proc.subgraphs,\n          writes,\n          config: patchConfig(\n            mergeConfigs(config, {\n              metadata,\n              tags: proc.tags,\n              store: extra.store ?? config.store,\n            }),\n            {\n              runName: packet.node,\n              callbacks: manager?.getChild(`graph:step:${step}`),\n              configurable: {\n                [CONFIG_KEY_TASK_ID]: taskId,\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n                  _localWrite(\n                    (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n                    processes,\n                    writes_\n                  ),\n                [CONFIG_KEY_READ]: (\n                  select_: Array<keyof Cc> | keyof Cc,\n                  fresh_: boolean = false\n                ) =>\n                  _localRead(\n                    checkpoint,\n                    channels,\n                    {\n                      name: packet.node,\n                      writes: writes as PendingWrite[],\n                      triggers,\n                      path: taskPath,\n                    },\n                    select_,\n                    fresh_\n                  ),\n                [CONFIG_KEY_CHECKPOINTER]:\n                  checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n                [CONFIG_KEY_CHECKPOINT_MAP]: {\n                  ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n                  [parentNamespace]: checkpoint.id,\n                },\n                [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n                  pendingWrites: pendingWrites ?? [],\n                  taskId,\n                  currentTaskInput: packet.args,\n                  resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n                  namespaceHash: XXH3(taskCheckpointNamespace),\n                }),\n                [CONFIG_KEY_PREVIOUS_STATE]:\n                  checkpoint.channel_values[PREVIOUS],\n                checkpoint_id: undefined,\n                checkpoint_ns: taskCheckpointNamespace,\n              },\n            }\n          ),\n          triggers,\n          retry_policy: proc.retryPolicy,\n          cache_key: proc.cachePolicy\n            ? {\n                key: XXH3(\n                  (proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])\n                ),\n                ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", packet.node],\n                ttl: proc.cachePolicy.ttl,\n              }\n            : undefined,\n          id: taskId,\n          path: taskPath,\n          writers: proc.getWriters(),\n        } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n      }\n    } else {\n      return {\n        id: taskId,\n        name: packet.node,\n        interrupts: [],\n        path: taskPath,\n      } satisfies PregelTaskDescription;\n    }\n  } else if (taskPath[0] === PULL) {\n    const name = taskPath[1].toString();\n    const proc = processes[name];\n    if (proc === undefined) {\n      return undefined;\n    }\n\n    // Check if this task already has successful writes in the pending writes\n    if (pendingWrites?.length) {\n      // Find the task ID for this node/path\n      const checkpointNamespace =\n        parentNamespace === \"\"\n          ? name\n          : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n\n      const taskId = uuid5(\n        JSON.stringify([\n          checkpointNamespace,\n          step.toString(),\n          name,\n          PULL,\n          name,\n        ]),\n        checkpoint.id\n      );\n\n      // Check if there are successful writes (not ERROR) for this task ID\n      const hasSuccessfulWrites = pendingWrites.some(\n        (w) => w[0] === taskId && w[1] !== ERROR\n      );\n\n      // If task completed successfully, don't include it in next tasks\n      if (hasSuccessfulWrites) {\n        return undefined;\n      }\n    }\n\n    const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n    if (nullVersion === undefined) {\n      return undefined;\n    }\n    const seen = checkpoint.versions_seen[name] ?? {};\n\n    // Find the first trigger that is available and has a new version\n    const trigger = proc.triggers.find((chan) => {\n      if (!channels[chan].isAvailable()) return false;\n\n      return (\n        (checkpoint.channel_versions[chan] ?? nullVersion) >\n        (seen[chan] ?? nullVersion)\n      );\n    });\n\n    // If any of the channels read by this process were updated\n    if (trigger !== undefined) {\n      const val = _procInput(proc, channels, forExecution);\n      if (val === undefined) {\n        return undefined;\n      }\n      const checkpointNamespace =\n        parentNamespace === \"\"\n          ? name\n          : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n      const taskId = uuid5(\n        JSON.stringify([\n          checkpointNamespace,\n          step.toString(),\n          name,\n          PULL,\n          [trigger],\n        ]),\n        checkpoint.id\n      );\n      const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n      let metadata = {\n        langgraph_step: step,\n        langgraph_node: name,\n        langgraph_triggers: [trigger],\n        langgraph_path: taskPath,\n        langgraph_checkpoint_ns: taskCheckpointNamespace,\n      };\n      if (forExecution) {\n        const node = proc.getNode();\n        if (node !== undefined) {\n          if (proc.metadata !== undefined) {\n            metadata = { ...metadata, ...proc.metadata };\n          }\n          const writes: [keyof Cc, unknown][] = [];\n          return {\n            name,\n            input: val,\n            proc: node,\n            subgraphs: proc.subgraphs,\n            writes,\n            config: patchConfig(\n              mergeConfigs(config, {\n                metadata,\n                tags: proc.tags,\n                store: extra.store ?? config.store,\n              }),\n              {\n                runName: name,\n                callbacks: manager?.getChild(`graph:step:${step}`),\n                configurable: {\n                  [CONFIG_KEY_TASK_ID]: taskId,\n                  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                  [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n                    _localWrite(\n                      (items: PendingWrite<keyof Cc>[]) => {\n                        writes.push(...items);\n                      },\n                      processes,\n                      writes_\n                    ),\n                  [CONFIG_KEY_READ]: (\n                    select_: Array<keyof Cc> | keyof Cc,\n                    fresh_: boolean = false\n                  ) =>\n                    _localRead(\n                      checkpoint,\n                      channels,\n                      {\n                        name,\n                        writes: writes as PendingWrite[],\n                        triggers: [trigger],\n                        path: taskPath,\n                      },\n                      select_,\n                      fresh_\n                    ),\n                  [CONFIG_KEY_CHECKPOINTER]:\n                    checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n                  [CONFIG_KEY_CHECKPOINT_MAP]: {\n                    ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n                    [parentNamespace]: checkpoint.id,\n                  },\n                  [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n                    pendingWrites: pendingWrites ?? [],\n                    taskId,\n                    currentTaskInput: val,\n                    resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n                    namespaceHash: XXH3(taskCheckpointNamespace),\n                  }),\n                  [CONFIG_KEY_PREVIOUS_STATE]:\n                    checkpoint.channel_values[PREVIOUS],\n                  checkpoint_id: undefined,\n                  checkpoint_ns: taskCheckpointNamespace,\n                },\n              }\n            ),\n            triggers: [trigger],\n            retry_policy: proc.retryPolicy,\n            cache_key: proc.cachePolicy\n              ? {\n                  key: XXH3(\n                    (proc.cachePolicy.keyFunc ?? JSON.stringify)([val])\n                  ),\n                  ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", name],\n                  ttl: proc.cachePolicy.ttl,\n                }\n              : undefined,\n            id: taskId,\n            path: taskPath,\n            writers: proc.getWriters(),\n          } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n        }\n      } else {\n        return {\n          id: taskId,\n          name,\n          interrupts: [],\n          path: taskPath,\n        } satisfies PregelTaskDescription;\n      }\n    }\n  }\n  return undefined;\n}\n\n/**\n *  Function injected under CONFIG_KEY_READ in task config, to read current state.\n *  Used by conditional edges to read a copy of the state with reflecting the writes\n *  from that node only.\n *\n * @internal\n */\nfunction _procInput(\n  proc: PregelNode,\n  channels: StrRecord<string, BaseChannel>,\n  forExecution: boolean\n) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let val: any;\n\n  if (typeof proc.channels === \"object\" && !Array.isArray(proc.channels)) {\n    val = {};\n    for (const [k, chan] of Object.entries(proc.channels)) {\n      if (proc.triggers.includes(chan)) {\n        try {\n          val[k] = readChannel(channels, chan, false);\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        } catch (e: any) {\n          if (e.name === EmptyChannelError.unminifiable_name) {\n            return undefined;\n          } else {\n            throw e;\n          }\n        }\n      } else if (chan in channels) {\n        try {\n          val[k] = readChannel(channels, chan, false);\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        } catch (e: any) {\n          if (e.name === EmptyChannelError.unminifiable_name) {\n            continue;\n          } else {\n            throw e;\n          }\n        }\n      }\n    }\n  } else if (Array.isArray(proc.channels)) {\n    let successfulRead = false;\n    for (const chan of proc.channels) {\n      try {\n        val = readChannel(channels, chan, false);\n        successfulRead = true;\n        break;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      } catch (e: any) {\n        if (e.name === EmptyChannelError.unminifiable_name) {\n          continue;\n        } else {\n          throw e;\n        }\n      }\n    }\n    if (!successfulRead) {\n      return undefined;\n    }\n  } else {\n    throw new Error(\n      `Invalid channels type, expected list or dict, got ${proc.channels}`\n    );\n  }\n\n  // If the process has a mapper, apply it to the value\n  if (forExecution && proc.mapper !== undefined) {\n    val = proc.mapper(val);\n  }\n\n  return val;\n}\n\nfunction _scratchpad({\n  pendingWrites,\n  taskId,\n  currentTaskInput,\n  resumeMap,\n  namespaceHash,\n}: {\n  pendingWrites: CheckpointPendingWrite[];\n  taskId: string;\n  currentTaskInput: unknown;\n  resumeMap: Record<string, unknown> | undefined;\n  namespaceHash: string;\n}): PregelScratchpad {\n  const nullResume = pendingWrites.find(\n    ([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME\n  )?.[2];\n\n  const resume = (() => {\n    const result = pendingWrites\n      .filter(\n        ([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME\n      )\n      .flatMap(([_writeTaskId, _chan, resume]) => resume);\n\n    if (resumeMap != null && namespaceHash in resumeMap) {\n      const mappedResume = resumeMap[namespaceHash];\n      result.push(mappedResume);\n    }\n\n    return result;\n  })();\n\n  const scratchpad = {\n    callCounter: 0,\n    interruptCounter: -1,\n    resume,\n    nullResume,\n    subgraphCounter: 0,\n    currentTaskInput,\n    consumeNullResume: () => {\n      if (scratchpad.nullResume) {\n        delete scratchpad.nullResume;\n        pendingWrites.splice(\n          pendingWrites.findIndex(\n            ([writeTaskId, chan]) =>\n              writeTaskId === NULL_TASK_ID && chan === RESUME\n          ),\n          1\n        );\n        return nullResume;\n      }\n\n      return undefined;\n    },\n  };\n  return scratchpad;\n}\n"],"mappings":"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"}