@langchain/langgraph 0.4.9 → 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (505) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -2
  3. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  4. package/dist/channels/any_value.cjs +44 -63
  5. package/dist/channels/any_value.cjs.map +1 -0
  6. package/dist/channels/any_value.d.cts +24 -0
  7. package/dist/channels/any_value.d.cts.map +1 -0
  8. package/dist/channels/any_value.d.ts +16 -11
  9. package/dist/channels/any_value.d.ts.map +1 -0
  10. package/dist/channels/any_value.js +42 -57
  11. package/dist/channels/any_value.js.map +1 -1
  12. package/dist/channels/base.cjs +93 -133
  13. package/dist/channels/base.cjs.map +1 -0
  14. package/dist/channels/base.d.cts +79 -0
  15. package/dist/channels/base.d.cts.map +1 -0
  16. package/dist/channels/base.d.ts +77 -73
  17. package/dist/channels/base.d.ts.map +1 -0
  18. package/dist/channels/base.js +90 -127
  19. package/dist/channels/base.js.map +1 -1
  20. package/dist/channels/binop.cjs +47 -77
  21. package/dist/channels/binop.cjs.map +1 -0
  22. package/dist/channels/binop.d.cts +22 -0
  23. package/dist/channels/binop.d.cts.map +1 -0
  24. package/dist/channels/binop.d.ts +17 -12
  25. package/dist/channels/binop.d.ts.map +1 -0
  26. package/dist/channels/binop.js +45 -71
  27. package/dist/channels/binop.js.map +1 -1
  28. package/dist/channels/dynamic_barrier_value.cjs +72 -208
  29. package/dist/channels/dynamic_barrier_value.cjs.map +1 -0
  30. package/dist/channels/dynamic_barrier_value.d.cts +42 -0
  31. package/dist/channels/dynamic_barrier_value.d.cts.map +1 -0
  32. package/dist/channels/dynamic_barrier_value.d.ts +20 -35
  33. package/dist/channels/dynamic_barrier_value.d.ts.map +1 -0
  34. package/dist/channels/dynamic_barrier_value.js +69 -200
  35. package/dist/channels/dynamic_barrier_value.js.map +1 -1
  36. package/dist/channels/ephemeral_value.cjs +44 -70
  37. package/dist/channels/ephemeral_value.cjs.map +1 -0
  38. package/dist/channels/ephemeral_value.d.cts +22 -0
  39. package/dist/channels/ephemeral_value.d.cts.map +1 -0
  40. package/dist/channels/ephemeral_value.d.ts +18 -12
  41. package/dist/channels/ephemeral_value.d.ts.map +1 -0
  42. package/dist/channels/ephemeral_value.js +43 -65
  43. package/dist/channels/ephemeral_value.js.map +1 -1
  44. package/dist/channels/index.cjs +21 -10
  45. package/dist/channels/index.d.cts +9 -0
  46. package/dist/channels/index.d.ts +9 -7
  47. package/dist/channels/index.js +10 -3
  48. package/dist/channels/last_value.cjs +90 -140
  49. package/dist/channels/last_value.cjs.map +1 -0
  50. package/dist/channels/last_value.d.cts +42 -0
  51. package/dist/channels/last_value.d.cts.map +1 -0
  52. package/dist/channels/last_value.d.ts +27 -23
  53. package/dist/channels/last_value.d.ts.map +1 -0
  54. package/dist/channels/last_value.js +87 -133
  55. package/dist/channels/last_value.js.map +1 -1
  56. package/dist/channels/named_barrier_value.cjs +114 -170
  57. package/dist/channels/named_barrier_value.cjs.map +1 -0
  58. package/dist/channels/named_barrier_value.d.cts +46 -0
  59. package/dist/channels/named_barrier_value.d.cts.map +1 -0
  60. package/dist/channels/named_barrier_value.d.ts +32 -29
  61. package/dist/channels/named_barrier_value.d.ts.map +1 -0
  62. package/dist/channels/named_barrier_value.js +111 -163
  63. package/dist/channels/named_barrier_value.js.map +1 -1
  64. package/dist/channels/topic.cjs +63 -96
  65. package/dist/channels/topic.cjs.map +1 -0
  66. package/dist/channels/topic.d.cts +32 -0
  67. package/dist/channels/topic.d.cts.map +1 -0
  68. package/dist/channels/topic.d.ts +28 -19
  69. package/dist/channels/topic.d.ts.map +1 -0
  70. package/dist/channels/topic.js +61 -90
  71. package/dist/channels/topic.js.map +1 -1
  72. package/dist/constants.cjs +376 -452
  73. package/dist/constants.cjs.map +1 -0
  74. package/dist/constants.d.cts +285 -0
  75. package/dist/constants.d.cts.map +1 -0
  76. package/dist/constants.d.ts +113 -148
  77. package/dist/constants.d.ts.map +1 -0
  78. package/dist/constants.js +336 -444
  79. package/dist/constants.js.map +1 -1
  80. package/dist/errors.cjs +151 -179
  81. package/dist/errors.cjs.map +1 -0
  82. package/dist/errors.d.cts +81 -0
  83. package/dist/errors.d.cts.map +1 -0
  84. package/dist/errors.d.ts +56 -46
  85. package/dist/errors.d.ts.map +1 -0
  86. package/dist/errors.js +140 -165
  87. package/dist/errors.js.map +1 -1
  88. package/dist/func/index.cjs +292 -290
  89. package/dist/func/index.cjs.map +1 -0
  90. package/dist/func/index.d.cts +293 -0
  91. package/dist/func/index.d.cts.map +1 -0
  92. package/dist/func/index.d.ts +86 -72
  93. package/dist/func/index.d.ts.map +1 -0
  94. package/dist/func/index.js +288 -284
  95. package/dist/func/index.js.map +1 -1
  96. package/dist/func/types.d.cts +64 -0
  97. package/dist/func/types.d.cts.map +1 -0
  98. package/dist/func/types.d.ts +24 -19
  99. package/dist/func/types.d.ts.map +1 -0
  100. package/dist/graph/annotation.cjs +96 -120
  101. package/dist/graph/annotation.cjs.map +1 -0
  102. package/dist/graph/annotation.d.cts +116 -0
  103. package/dist/graph/annotation.d.cts.map +1 -0
  104. package/dist/graph/annotation.d.ts +33 -34
  105. package/dist/graph/annotation.d.ts.map +1 -0
  106. package/dist/graph/annotation.js +91 -112
  107. package/dist/graph/annotation.js.map +1 -1
  108. package/dist/graph/graph.cjs +419 -723
  109. package/dist/graph/graph.cjs.map +1 -0
  110. package/dist/graph/graph.d.cts +133 -0
  111. package/dist/graph/graph.d.cts.map +1 -0
  112. package/dist/graph/graph.d.ts +124 -91
  113. package/dist/graph/graph.d.ts.map +1 -0
  114. package/dist/graph/graph.js +412 -713
  115. package/dist/graph/graph.js.map +1 -1
  116. package/dist/graph/index.cjs +4 -17
  117. package/dist/graph/index.js +6 -5
  118. package/dist/graph/message.cjs +59 -104
  119. package/dist/graph/message.cjs.map +1 -0
  120. package/dist/graph/message.d.cts +19 -0
  121. package/dist/graph/message.d.cts.map +1 -0
  122. package/dist/graph/message.d.ts +11 -10
  123. package/dist/graph/message.d.ts.map +1 -0
  124. package/dist/graph/message.js +56 -98
  125. package/dist/graph/message.js.map +1 -1
  126. package/dist/graph/messages_annotation.cjs +106 -106
  127. package/dist/graph/messages_annotation.cjs.map +1 -0
  128. package/dist/graph/messages_annotation.d.cts +111 -0
  129. package/dist/graph/messages_annotation.d.cts.map +1 -0
  130. package/dist/graph/messages_annotation.d.ts +18 -9
  131. package/dist/graph/messages_annotation.d.ts.map +1 -0
  132. package/dist/graph/messages_annotation.js +100 -100
  133. package/dist/graph/messages_annotation.js.map +1 -1
  134. package/dist/graph/state.cjs +475 -779
  135. package/dist/graph/state.cjs.map +1 -0
  136. package/dist/graph/state.d.cts +231 -0
  137. package/dist/graph/state.d.cts.map +1 -0
  138. package/dist/graph/state.d.ts +148 -138
  139. package/dist/graph/state.d.ts.map +1 -0
  140. package/dist/graph/state.js +469 -769
  141. package/dist/graph/state.js.map +1 -1
  142. package/dist/graph/zod/index.cjs +10 -21
  143. package/dist/graph/zod/index.d.cts +3 -0
  144. package/dist/graph/zod/index.d.ts +3 -3
  145. package/dist/graph/zod/index.js +4 -4
  146. package/dist/graph/zod/meta.cjs +142 -177
  147. package/dist/graph/zod/meta.cjs.map +1 -0
  148. package/dist/graph/zod/meta.d.cts +116 -0
  149. package/dist/graph/zod/meta.d.cts.map +1 -0
  150. package/dist/graph/zod/meta.d.ts +99 -97
  151. package/dist/graph/zod/meta.d.ts.map +1 -0
  152. package/dist/graph/zod/meta.js +136 -170
  153. package/dist/graph/zod/meta.js.map +1 -1
  154. package/dist/graph/zod/plugin.cjs +36 -39
  155. package/dist/graph/zod/plugin.cjs.map +1 -0
  156. package/dist/graph/zod/plugin.js +34 -35
  157. package/dist/graph/zod/plugin.js.map +1 -1
  158. package/dist/graph/zod/schema.cjs +82 -110
  159. package/dist/graph/zod/schema.cjs.map +1 -0
  160. package/dist/graph/zod/schema.d.cts +38 -0
  161. package/dist/graph/zod/schema.d.cts.map +1 -0
  162. package/dist/graph/zod/schema.d.ts +12 -6
  163. package/dist/graph/zod/schema.d.ts.map +1 -0
  164. package/dist/graph/zod/schema.js +77 -103
  165. package/dist/graph/zod/schema.js.map +1 -1
  166. package/dist/graph/zod/zod-registry.cjs +41 -47
  167. package/dist/graph/zod/zod-registry.cjs.map +1 -0
  168. package/dist/graph/zod/zod-registry.d.cts +51 -0
  169. package/dist/graph/zod/zod-registry.d.cts.map +1 -0
  170. package/dist/graph/zod/zod-registry.d.ts +34 -26
  171. package/dist/graph/zod/zod-registry.d.ts.map +1 -0
  172. package/dist/graph/zod/zod-registry.js +37 -41
  173. package/dist/graph/zod/zod-registry.js.map +1 -1
  174. package/dist/hash.cjs +205 -267
  175. package/dist/hash.cjs.map +1 -0
  176. package/dist/hash.js +205 -265
  177. package/dist/hash.js.map +1 -1
  178. package/dist/index.cjs +111 -33
  179. package/dist/index.cjs.map +1 -0
  180. package/dist/index.d.cts +26 -0
  181. package/dist/index.d.ts +26 -5
  182. package/dist/index.js +19 -7
  183. package/dist/index.js.map +1 -1
  184. package/dist/interrupt.cjs +79 -85
  185. package/dist/interrupt.cjs.map +1 -0
  186. package/dist/interrupt.d.cts +49 -0
  187. package/dist/interrupt.d.cts.map +1 -0
  188. package/dist/interrupt.d.ts +6 -1
  189. package/dist/interrupt.d.ts.map +1 -0
  190. package/dist/interrupt.js +76 -80
  191. package/dist/interrupt.js.map +1 -1
  192. package/dist/prebuilt/agentName.cjs +139 -172
  193. package/dist/prebuilt/agentName.cjs.map +1 -0
  194. package/dist/prebuilt/agentName.d.cts +42 -0
  195. package/dist/prebuilt/agentName.d.cts.map +1 -0
  196. package/dist/prebuilt/agentName.d.ts +13 -21
  197. package/dist/prebuilt/agentName.d.ts.map +1 -0
  198. package/dist/prebuilt/agentName.js +139 -168
  199. package/dist/prebuilt/agentName.js.map +1 -1
  200. package/dist/prebuilt/agent_executor.cjs +42 -80
  201. package/dist/prebuilt/agent_executor.cjs.map +1 -0
  202. package/dist/prebuilt/agent_executor.d.cts +57 -0
  203. package/dist/prebuilt/agent_executor.d.cts.map +1 -0
  204. package/dist/prebuilt/agent_executor.d.ts +47 -38
  205. package/dist/prebuilt/agent_executor.d.ts.map +1 -0
  206. package/dist/prebuilt/agent_executor.js +40 -75
  207. package/dist/prebuilt/agent_executor.js.map +1 -1
  208. package/dist/prebuilt/chat_agent_executor.cjs +66 -128
  209. package/dist/prebuilt/chat_agent_executor.cjs.map +1 -0
  210. package/dist/prebuilt/chat_agent_executor.d.cts +23 -0
  211. package/dist/prebuilt/chat_agent_executor.d.cts.map +1 -0
  212. package/dist/prebuilt/chat_agent_executor.d.ts +18 -10
  213. package/dist/prebuilt/chat_agent_executor.d.ts.map +1 -0
  214. package/dist/prebuilt/chat_agent_executor.js +63 -123
  215. package/dist/prebuilt/chat_agent_executor.js.map +1 -1
  216. package/dist/prebuilt/index.cjs +15 -18
  217. package/dist/prebuilt/index.d.cts +8 -0
  218. package/dist/prebuilt/index.d.ts +8 -8
  219. package/dist/prebuilt/index.js +8 -7
  220. package/dist/prebuilt/interrupt.d.cts +73 -0
  221. package/dist/prebuilt/interrupt.d.cts.map +1 -0
  222. package/dist/prebuilt/interrupt.d.ts +32 -15
  223. package/dist/prebuilt/interrupt.d.ts.map +1 -0
  224. package/dist/prebuilt/react_agent_executor.cjs +317 -473
  225. package/dist/prebuilt/react_agent_executor.cjs.map +1 -0
  226. package/dist/prebuilt/react_agent_executor.d.cts +229 -0
  227. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -0
  228. package/dist/prebuilt/react_agent_executor.d.ts +171 -143
  229. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -0
  230. package/dist/prebuilt/react_agent_executor.js +315 -465
  231. package/dist/prebuilt/react_agent_executor.js.map +1 -1
  232. package/dist/prebuilt/tool_executor.cjs +45 -67
  233. package/dist/prebuilt/tool_executor.cjs.map +1 -0
  234. package/dist/prebuilt/tool_executor.d.cts +42 -0
  235. package/dist/prebuilt/tool_executor.d.cts.map +1 -0
  236. package/dist/prebuilt/tool_executor.d.ts +30 -24
  237. package/dist/prebuilt/tool_executor.d.ts.map +1 -0
  238. package/dist/prebuilt/tool_executor.js +44 -63
  239. package/dist/prebuilt/tool_executor.js.map +1 -1
  240. package/dist/prebuilt/tool_node.cjs +213 -275
  241. package/dist/prebuilt/tool_node.cjs.map +1 -0
  242. package/dist/prebuilt/tool_node.d.cts +151 -0
  243. package/dist/prebuilt/tool_node.d.cts.map +1 -0
  244. package/dist/prebuilt/tool_node.d.ts +30 -17
  245. package/dist/prebuilt/tool_node.d.ts.map +1 -0
  246. package/dist/prebuilt/tool_node.js +209 -268
  247. package/dist/prebuilt/tool_node.js.map +1 -1
  248. package/dist/pregel/algo.cjs +551 -692
  249. package/dist/pregel/algo.cjs.map +1 -0
  250. package/dist/pregel/algo.d.cts +13 -0
  251. package/dist/pregel/algo.d.cts.map +1 -0
  252. package/dist/pregel/algo.d.ts +8 -38
  253. package/dist/pregel/algo.d.ts.map +1 -0
  254. package/dist/pregel/algo.js +546 -683
  255. package/dist/pregel/algo.js.map +1 -1
  256. package/dist/pregel/call.cjs +46 -42
  257. package/dist/pregel/call.cjs.map +1 -0
  258. package/dist/pregel/call.js +43 -37
  259. package/dist/pregel/call.js.map +1 -1
  260. package/dist/pregel/debug.cjs +153 -223
  261. package/dist/pregel/debug.cjs.map +1 -0
  262. package/dist/pregel/debug.js +152 -215
  263. package/dist/pregel/debug.js.map +1 -1
  264. package/dist/pregel/index.cjs +1138 -1604
  265. package/dist/pregel/index.cjs.map +1 -0
  266. package/dist/pregel/index.d.cts +536 -0
  267. package/dist/pregel/index.d.cts.map +1 -0
  268. package/dist/pregel/index.d.ts +460 -422
  269. package/dist/pregel/index.d.ts.map +1 -0
  270. package/dist/pregel/index.js +1129 -1592
  271. package/dist/pregel/index.js.map +1 -1
  272. package/dist/pregel/io.cjs +127 -234
  273. package/dist/pregel/io.cjs.map +1 -0
  274. package/dist/pregel/io.js +122 -225
  275. package/dist/pregel/io.js.map +1 -1
  276. package/dist/pregel/loop.cjs +542 -954
  277. package/dist/pregel/loop.cjs.map +1 -0
  278. package/dist/pregel/loop.js +539 -948
  279. package/dist/pregel/loop.js.map +1 -1
  280. package/dist/pregel/messages.cjs +104 -196
  281. package/dist/pregel/messages.cjs.map +1 -0
  282. package/dist/pregel/messages.js +102 -191
  283. package/dist/pregel/messages.js.map +1 -1
  284. package/dist/pregel/read.cjs +150 -280
  285. package/dist/pregel/read.cjs.map +1 -0
  286. package/dist/pregel/read.d.cts +51 -0
  287. package/dist/pregel/read.d.cts.map +1 -0
  288. package/dist/pregel/read.d.ts +48 -46
  289. package/dist/pregel/read.d.ts.map +1 -0
  290. package/dist/pregel/read.js +147 -274
  291. package/dist/pregel/read.js.map +1 -1
  292. package/dist/pregel/remote.cjs +339 -458
  293. package/dist/pregel/remote.cjs.map +1 -0
  294. package/dist/pregel/remote.d.cts +121 -0
  295. package/dist/pregel/remote.d.cts.map +1 -0
  296. package/dist/pregel/remote.d.ts +79 -69
  297. package/dist/pregel/remote.d.ts.map +1 -0
  298. package/dist/pregel/remote.js +337 -453
  299. package/dist/pregel/remote.js.map +1 -1
  300. package/dist/pregel/retry.cjs +87 -138
  301. package/dist/pregel/retry.cjs.map +1 -0
  302. package/dist/pregel/retry.js +83 -130
  303. package/dist/pregel/retry.js.map +1 -1
  304. package/dist/pregel/runnable_types.d.cts +49 -0
  305. package/dist/pregel/runnable_types.d.cts.map +1 -0
  306. package/dist/pregel/runnable_types.d.ts +47 -17
  307. package/dist/pregel/runnable_types.d.ts.map +1 -0
  308. package/dist/pregel/runner.cjs +222 -315
  309. package/dist/pregel/runner.cjs.map +1 -0
  310. package/dist/pregel/runner.js +219 -308
  311. package/dist/pregel/runner.js.map +1 -1
  312. package/dist/pregel/stream.cjs +89 -130
  313. package/dist/pregel/stream.cjs.map +1 -0
  314. package/dist/pregel/stream.js +87 -125
  315. package/dist/pregel/stream.js.map +1 -1
  316. package/dist/pregel/types.cjs +25 -62
  317. package/dist/pregel/types.cjs.map +1 -0
  318. package/dist/pregel/types.d.cts +440 -0
  319. package/dist/pregel/types.d.cts.map +1 -0
  320. package/dist/pregel/types.d.ts +381 -432
  321. package/dist/pregel/types.d.ts.map +1 -0
  322. package/dist/pregel/types.js +23 -57
  323. package/dist/pregel/types.js.map +1 -1
  324. package/dist/pregel/utils/config.cjs +101 -147
  325. package/dist/pregel/utils/config.cjs.map +1 -0
  326. package/dist/pregel/utils/config.d.cts +36 -0
  327. package/dist/pregel/utils/config.d.cts.map +1 -0
  328. package/dist/pregel/utils/config.d.ts +12 -9
  329. package/dist/pregel/utils/config.d.ts.map +1 -0
  330. package/dist/pregel/utils/config.js +99 -143
  331. package/dist/pregel/utils/config.js.map +1 -1
  332. package/dist/pregel/utils/index.cjs +87 -125
  333. package/dist/pregel/utils/index.cjs.map +1 -0
  334. package/dist/pregel/utils/index.d.cts +51 -0
  335. package/dist/pregel/utils/index.d.cts.map +1 -0
  336. package/dist/pregel/utils/index.d.ts +45 -61
  337. package/dist/pregel/utils/index.d.ts.map +1 -0
  338. package/dist/pregel/utils/index.js +86 -120
  339. package/dist/pregel/utils/index.js.map +1 -1
  340. package/dist/pregel/utils/subgraph.cjs +15 -26
  341. package/dist/pregel/utils/subgraph.cjs.map +1 -0
  342. package/dist/pregel/utils/subgraph.js +12 -21
  343. package/dist/pregel/utils/subgraph.js.map +1 -1
  344. package/dist/pregel/validate.cjs +42 -92
  345. package/dist/pregel/validate.cjs.map +1 -0
  346. package/dist/pregel/validate.js +39 -84
  347. package/dist/pregel/validate.js.map +1 -1
  348. package/dist/pregel/write.cjs +87 -137
  349. package/dist/pregel/write.cjs.map +1 -0
  350. package/dist/pregel/write.d.cts +35 -0
  351. package/dist/pregel/write.d.cts.map +1 -0
  352. package/dist/pregel/write.d.ts +27 -23
  353. package/dist/pregel/write.d.ts.map +1 -0
  354. package/dist/pregel/write.js +83 -131
  355. package/dist/pregel/write.js.map +1 -1
  356. package/dist/remote.cjs +3 -6
  357. package/dist/remote.d.cts +2 -0
  358. package/dist/remote.d.ts +2 -1
  359. package/dist/remote.js +3 -2
  360. package/dist/setup/async_local_storage.cjs +10 -7
  361. package/dist/setup/async_local_storage.cjs.map +1 -0
  362. package/dist/setup/async_local_storage.js +7 -2
  363. package/dist/setup/async_local_storage.js.map +1 -1
  364. package/dist/ui/index.cjs +4 -0
  365. package/dist/ui/index.d.cts +5 -0
  366. package/dist/ui/index.d.ts +5 -0
  367. package/dist/ui/index.js +3 -0
  368. package/dist/ui/stream.cjs +145 -0
  369. package/dist/ui/stream.cjs.map +1 -0
  370. package/dist/ui/stream.d.cts +25 -0
  371. package/dist/ui/stream.d.cts.map +1 -0
  372. package/dist/ui/stream.d.ts +25 -0
  373. package/dist/ui/stream.d.ts.map +1 -0
  374. package/dist/ui/stream.js +143 -0
  375. package/dist/ui/stream.js.map +1 -0
  376. package/dist/ui/types.infer.d.cts +53 -0
  377. package/dist/ui/types.infer.d.cts.map +1 -0
  378. package/dist/ui/types.infer.d.ts +53 -0
  379. package/dist/ui/types.infer.d.ts.map +1 -0
  380. package/dist/ui/types.message.d.cts +95 -0
  381. package/dist/ui/types.message.d.cts.map +1 -0
  382. package/dist/ui/types.message.d.ts +95 -0
  383. package/dist/ui/types.message.d.ts.map +1 -0
  384. package/dist/ui/types.schema.d.cts +228 -0
  385. package/dist/ui/types.schema.d.cts.map +1 -0
  386. package/dist/ui/types.schema.d.ts +228 -0
  387. package/dist/ui/types.schema.d.ts.map +1 -0
  388. package/dist/utils.cjs +77 -147
  389. package/dist/utils.cjs.map +1 -0
  390. package/dist/utils.d.cts +32 -0
  391. package/dist/utils.d.cts.map +1 -0
  392. package/dist/utils.d.ts +29 -25
  393. package/dist/utils.d.ts.map +1 -0
  394. package/dist/utils.js +73 -140
  395. package/dist/utils.js.map +1 -1
  396. package/dist/web.cjs +96 -55
  397. package/dist/web.d.cts +23 -0
  398. package/dist/web.d.ts +23 -14
  399. package/dist/web.js +15 -8
  400. package/dist/writer.cjs +15 -0
  401. package/dist/writer.cjs.map +1 -0
  402. package/dist/writer.d.cts +5 -0
  403. package/dist/writer.d.cts.map +1 -0
  404. package/dist/writer.d.ts +5 -0
  405. package/dist/writer.d.ts.map +1 -0
  406. package/dist/writer.js +14 -0
  407. package/dist/writer.js.map +1 -0
  408. package/package.json +90 -83
  409. package/dist/channels/index.js.map +0 -1
  410. package/dist/func/types.cjs +0 -15
  411. package/dist/func/types.js +0 -12
  412. package/dist/func/types.js.map +0 -1
  413. package/dist/graph/index.d.ts +0 -4
  414. package/dist/graph/index.js.map +0 -1
  415. package/dist/graph/message.test.cjs +0 -196
  416. package/dist/graph/message.test.d.ts +0 -1
  417. package/dist/graph/message.test.js +0 -194
  418. package/dist/graph/message.test.js.map +0 -1
  419. package/dist/graph/zod/index.js.map +0 -1
  420. package/dist/graph/zod/plugin.d.ts +0 -28
  421. package/dist/hash.d.ts +0 -2
  422. package/dist/prebuilt/index.js.map +0 -1
  423. package/dist/prebuilt/interrupt.cjs +0 -3
  424. package/dist/prebuilt/interrupt.js +0 -2
  425. package/dist/prebuilt/interrupt.js.map +0 -1
  426. package/dist/pregel/call.d.ts +0 -16
  427. package/dist/pregel/debug.d.ts +0 -41
  428. package/dist/pregel/debug.test.cjs +0 -258
  429. package/dist/pregel/debug.test.d.ts +0 -1
  430. package/dist/pregel/debug.test.js +0 -256
  431. package/dist/pregel/debug.test.js.map +0 -1
  432. package/dist/pregel/io.d.ts +0 -30
  433. package/dist/pregel/io.mapCommand.test.cjs +0 -150
  434. package/dist/pregel/io.mapCommand.test.d.ts +0 -1
  435. package/dist/pregel/io.mapCommand.test.js +0 -148
  436. package/dist/pregel/io.mapCommand.test.js.map +0 -1
  437. package/dist/pregel/loop.d.ts +0 -147
  438. package/dist/pregel/messages.d.ts +0 -30
  439. package/dist/pregel/messages.test.cjs +0 -369
  440. package/dist/pregel/messages.test.d.ts +0 -1
  441. package/dist/pregel/messages.test.js +0 -367
  442. package/dist/pregel/messages.test.js.map +0 -1
  443. package/dist/pregel/read.test.cjs +0 -194
  444. package/dist/pregel/read.test.d.ts +0 -1
  445. package/dist/pregel/read.test.js +0 -192
  446. package/dist/pregel/read.test.js.map +0 -1
  447. package/dist/pregel/retry.d.ts +0 -17
  448. package/dist/pregel/runnable_types.cjs +0 -3
  449. package/dist/pregel/runnable_types.js +0 -2
  450. package/dist/pregel/runnable_types.js.map +0 -1
  451. package/dist/pregel/runner.d.ts +0 -79
  452. package/dist/pregel/runner.test.cjs +0 -66
  453. package/dist/pregel/runner.test.d.ts +0 -1
  454. package/dist/pregel/runner.test.js +0 -64
  455. package/dist/pregel/runner.test.js.map +0 -1
  456. package/dist/pregel/stream.d.ts +0 -40
  457. package/dist/pregel/utils/config.test.cjs +0 -214
  458. package/dist/pregel/utils/config.test.d.ts +0 -1
  459. package/dist/pregel/utils/config.test.js +0 -212
  460. package/dist/pregel/utils/config.test.js.map +0 -1
  461. package/dist/pregel/utils/subgraph.d.ts +0 -4
  462. package/dist/pregel/utils/subgraph.test.cjs +0 -83
  463. package/dist/pregel/utils/subgraph.test.d.ts +0 -1
  464. package/dist/pregel/utils/subgraph.test.js +0 -81
  465. package/dist/pregel/utils/subgraph.test.js.map +0 -1
  466. package/dist/pregel/validate.d.ts +0 -16
  467. package/dist/pregel/validate.test.cjs +0 -220
  468. package/dist/pregel/validate.test.d.ts +0 -1
  469. package/dist/pregel/validate.test.js +0 -218
  470. package/dist/pregel/validate.test.js.map +0 -1
  471. package/dist/pregel/write.test.cjs +0 -181
  472. package/dist/pregel/write.test.d.ts +0 -1
  473. package/dist/pregel/write.test.js +0 -179
  474. package/dist/pregel/write.test.js.map +0 -1
  475. package/dist/remote.js.map +0 -1
  476. package/dist/setup/async_local_storage.d.ts +0 -1
  477. package/dist/web.js.map +0 -1
  478. package/index.cjs +0 -1
  479. package/index.d.cts +0 -1
  480. package/index.d.ts +0 -1
  481. package/index.js +0 -1
  482. package/prebuilt.cjs +0 -1
  483. package/prebuilt.d.cts +0 -1
  484. package/prebuilt.d.ts +0 -1
  485. package/prebuilt.js +0 -1
  486. package/pregel.cjs +0 -1
  487. package/pregel.d.cts +0 -1
  488. package/pregel.d.ts +0 -1
  489. package/pregel.js +0 -1
  490. package/remote.cjs +0 -1
  491. package/remote.d.cts +0 -1
  492. package/remote.d.ts +0 -1
  493. package/remote.js +0 -1
  494. package/web.cjs +0 -1
  495. package/web.d.cts +0 -1
  496. package/web.d.ts +0 -1
  497. package/web.js +0 -1
  498. package/zod/schema.cjs +0 -1
  499. package/zod/schema.d.cts +0 -1
  500. package/zod/schema.d.ts +0 -1
  501. package/zod/schema.js +0 -1
  502. package/zod.cjs +0 -1
  503. package/zod.d.cts +0 -1
  504. package/zod.d.ts +0 -1
  505. package/zod.js +0 -1
@@ -1,704 +1,567 @@
1
- /* eslint-disable no-param-reassign */
2
- import { mergeConfigs, patchConfig, } from "@langchain/core/runnables";
3
- import { copyCheckpoint, uuid5, maxChannelVersion, } from "@langchain/langgraph-checkpoint";
4
- import { createCheckpoint, emptyChannels, getOnlyChannels, } from "../channels/base.js";
5
- import { readChannel, readChannels } from "./io.js";
6
- import { _isSend, _isSendInterface, CONFIG_KEY_CHECKPOINT_MAP, CHECKPOINT_NAMESPACE_SEPARATOR, CONFIG_KEY_CHECKPOINTER, CONFIG_KEY_READ, CONFIG_KEY_TASK_ID, CONFIG_KEY_SEND, INTERRUPT, RESERVED, Send, TAG_HIDDEN, TASKS, CHECKPOINT_NAMESPACE_END, PUSH, PULL, RESUME, NULL_TASK_ID, CONFIG_KEY_SCRATCHPAD, RETURN, ERROR, NO_WRITES, CONFIG_KEY_PREVIOUS_STATE, PREVIOUS, CACHE_NS_WRITES, CONFIG_KEY_RESUME_MAP, } from "../constants.js";
7
- import { isCall, } from "./types.js";
8
1
  import { EmptyChannelError, InvalidUpdateError } from "../errors.js";
2
+ import { createCheckpoint, emptyChannels, getOnlyChannels } from "../channels/base.js";
3
+ import { CACHE_NS_WRITES, CHECKPOINT_NAMESPACE_END, CHECKPOINT_NAMESPACE_SEPARATOR, CONFIG_KEY_CHECKPOINTER, CONFIG_KEY_CHECKPOINT_MAP, CONFIG_KEY_PREVIOUS_STATE, CONFIG_KEY_READ, CONFIG_KEY_RESUME_MAP, CONFIG_KEY_SCRATCHPAD, CONFIG_KEY_SEND, CONFIG_KEY_TASK_ID, ERROR, INTERRUPT, NO_WRITES, NULL_TASK_ID, PREVIOUS, PULL, PUSH, RESERVED, RESUME, RETURN, START, Send, TAG_HIDDEN, TASKS, _isSend, _isSendInterface } from "../constants.js";
4
+ import { XXH3 } from "../hash.js";
5
+ import { readChannel, readChannels } from "./io.js";
6
+ import { isCall } from "./types.js";
9
7
  import { getNullChannelVersion } from "./utils/index.js";
10
8
  import { getRunnableForFunc } from "./call.js";
11
- import { XXH3 } from "../hash.js";
12
- export const increment = (current) => {
13
- return current !== undefined ? current + 1 : 1;
9
+ import { copyCheckpoint, maxChannelVersion, uuid5 } from "@langchain/langgraph-checkpoint";
10
+ import { mergeConfigs, patchConfig } from "@langchain/core/runnables";
11
+
12
+ //#region src/pregel/algo.ts
13
+ const increment = (current) => {
14
+ return current !== void 0 ? current + 1 : 1;
14
15
  };
15
- // Avoids unnecessary double iteration
16
+ function triggersNextStep(updatedChannels, triggerToNodes) {
17
+ if (triggerToNodes == null) return false;
18
+ for (const chan of updatedChannels) if (triggerToNodes[chan]) return true;
19
+ return false;
20
+ }
16
21
  function maxChannelMapVersion(channelVersions) {
17
- let maxVersion;
18
- for (const chan in channelVersions) {
19
- if (!Object.prototype.hasOwnProperty.call(channelVersions, chan))
20
- continue;
21
- if (maxVersion == null) {
22
- maxVersion = channelVersions[chan];
23
- }
24
- else {
25
- maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);
26
- }
27
- }
28
- return maxVersion;
22
+ let maxVersion;
23
+ for (const chan in channelVersions) {
24
+ if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;
25
+ if (maxVersion == null) maxVersion = channelVersions[chan];
26
+ else maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);
27
+ }
28
+ return maxVersion;
29
29
  }
30
- export function shouldInterrupt(checkpoint, interruptNodes, tasks) {
31
- const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
32
- const seen = checkpoint.versions_seen[INTERRUPT] ?? {};
33
- let anyChannelUpdated = false;
34
- for (const chan in checkpoint.channel_versions) {
35
- if (!Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan))
36
- continue;
37
- if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {
38
- anyChannelUpdated = true;
39
- break;
40
- }
41
- }
42
- const anyTriggeredNodeInInterruptNodes = tasks.some((task) => interruptNodes === "*"
43
- ? !task.config?.tags?.includes(TAG_HIDDEN)
44
- : interruptNodes.includes(task.name));
45
- return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;
30
+ function shouldInterrupt(checkpoint, interruptNodes, tasks) {
31
+ const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
32
+ const seen = checkpoint.versions_seen[INTERRUPT] ?? {};
33
+ let anyChannelUpdated = false;
34
+ if ((checkpoint.channel_versions[START] ?? nullVersion) > (seen[START] ?? nullVersion)) anyChannelUpdated = true;
35
+ else for (const chan in checkpoint.channel_versions) {
36
+ if (!Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)) continue;
37
+ if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {
38
+ anyChannelUpdated = true;
39
+ break;
40
+ }
41
+ }
42
+ const anyTriggeredNodeInInterruptNodes = tasks.some((task) => interruptNodes === "*" ? !task.config?.tags?.includes(TAG_HIDDEN) : interruptNodes.includes(task.name));
43
+ return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;
46
44
  }
47
- export function _localRead(checkpoint, channels, task, select, fresh = false) {
48
- let updated = new Set();
49
- if (!Array.isArray(select)) {
50
- for (const [c] of task.writes) {
51
- if (c === select) {
52
- updated = new Set([c]);
53
- break;
54
- }
55
- }
56
- updated = updated || new Set();
57
- }
58
- else {
59
- updated = new Set(select.filter((c) => task.writes.some(([key, _]) => key === c)));
60
- }
61
- let values;
62
- if (fresh && updated.size > 0) {
63
- const localChannels = Object.fromEntries(Object.entries(channels).filter(([k, _]) => updated.has(k)));
64
- const newCheckpoint = createCheckpoint(checkpoint, localChannels, -1);
65
- const newChannels = emptyChannels(localChannels, newCheckpoint);
66
- _applyWrites(copyCheckpoint(newCheckpoint), newChannels, [task], undefined, undefined);
67
- values = readChannels({ ...channels, ...newChannels }, select);
68
- }
69
- else {
70
- values = readChannels(channels, select);
71
- }
72
- return values;
45
+ function _localRead(checkpoint, channels, task, select, fresh = false) {
46
+ let updated = /* @__PURE__ */ new Set();
47
+ if (!Array.isArray(select)) {
48
+ for (const [c] of task.writes) if (c === select) {
49
+ updated = new Set([c]);
50
+ break;
51
+ }
52
+ updated = updated || /* @__PURE__ */ new Set();
53
+ } else updated = new Set(select.filter((c) => task.writes.some(([key, _]) => key === c)));
54
+ let values;
55
+ if (fresh && updated.size > 0) {
56
+ const localChannels = Object.fromEntries(Object.entries(channels).filter(([k, _]) => updated.has(k)));
57
+ const newCheckpoint = createCheckpoint(checkpoint, localChannels, -1);
58
+ const newChannels = emptyChannels(localChannels, newCheckpoint);
59
+ _applyWrites(copyCheckpoint(newCheckpoint), newChannels, [task], void 0, void 0);
60
+ values = readChannels({
61
+ ...channels,
62
+ ...newChannels
63
+ }, select);
64
+ } else values = readChannels(channels, select);
65
+ return values;
73
66
  }
74
- export function _localWrite(
75
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
- commit, processes,
77
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
- writes) {
79
- for (const [chan, value] of writes) {
80
- if ([PUSH, TASKS].includes(chan) && value != null) {
81
- if (!_isSend(value)) {
82
- throw new InvalidUpdateError(`Invalid packet type, expected SendProtocol, got ${JSON.stringify(value)}`);
83
- }
84
- if (!(value.node in processes)) {
85
- throw new InvalidUpdateError(`Invalid node name "${value.node}" in Send packet`);
86
- }
87
- }
88
- }
89
- commit(writes);
67
+ function _localWrite(commit, processes, writes) {
68
+ for (const [chan, value] of writes) if ([PUSH, TASKS].includes(chan) && value != null) {
69
+ if (!_isSend(value)) throw new InvalidUpdateError(`Invalid packet type, expected SendProtocol, got ${JSON.stringify(value)}`);
70
+ if (!(value.node in processes)) throw new InvalidUpdateError(`Invalid node name "${value.node}" in Send packet`);
71
+ }
72
+ commit(writes);
90
73
  }
91
74
  const IGNORE = new Set([
92
- NO_WRITES,
93
- PUSH,
94
- RESUME,
95
- INTERRUPT,
96
- RETURN,
97
- ERROR,
75
+ NO_WRITES,
76
+ PUSH,
77
+ RESUME,
78
+ INTERRUPT,
79
+ RETURN,
80
+ ERROR
98
81
  ]);
99
- export function _applyWrites(checkpoint, channels, tasks,
100
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
- getNextVersion, triggerToNodes) {
102
- // Sort tasks by first 3 path elements for deterministic order
103
- // Later path parts (like task IDs) are ignored for sorting
104
- tasks.sort((a, b) => {
105
- const aPath = a.path?.slice(0, 3) || [];
106
- const bPath = b.path?.slice(0, 3) || [];
107
- // Compare each path element
108
- for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {
109
- if (aPath[i] < bPath[i])
110
- return -1;
111
- if (aPath[i] > bPath[i])
112
- return 1;
113
- }
114
- // If one path is shorter, it comes first
115
- return aPath.length - bPath.length;
116
- });
117
- // if no task has triggers this is applying writes from the null task only
118
- // so we don't do anything other than update the channels written to
119
- const bumpStep = tasks.some((task) => task.triggers.length > 0);
120
- // Filter out non instances of BaseChannel
121
- const onlyChannels = getOnlyChannels(channels);
122
- // Update seen versions
123
- for (const task of tasks) {
124
- checkpoint.versions_seen[task.name] ??= {};
125
- for (const chan of task.triggers) {
126
- if (chan in checkpoint.channel_versions) {
127
- checkpoint.versions_seen[task.name][chan] =
128
- checkpoint.channel_versions[chan];
129
- }
130
- }
131
- }
132
- // Find the highest version of all channels
133
- let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
134
- // Consume all channels that were read
135
- const channelsToConsume = new Set(tasks
136
- .flatMap((task) => task.triggers)
137
- .filter((chan) => !RESERVED.includes(chan)));
138
- for (const chan of channelsToConsume) {
139
- if (chan in onlyChannels && onlyChannels[chan].consume()) {
140
- if (getNextVersion !== undefined) {
141
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
142
- }
143
- }
144
- }
145
- // Group writes by channel
146
- const pendingWritesByChannel = {};
147
- for (const task of tasks) {
148
- for (const [chan, val] of task.writes) {
149
- if (IGNORE.has(chan)) {
150
- // do nothing
151
- }
152
- else if (chan in onlyChannels) {
153
- pendingWritesByChannel[chan] ??= [];
154
- pendingWritesByChannel[chan].push(val);
155
- }
156
- }
157
- }
158
- // Find the highest version of all channels
159
- maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
160
- const updatedChannels = new Set();
161
- // Apply writes to channels
162
- for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {
163
- if (chan in onlyChannels) {
164
- const channel = onlyChannels[chan];
165
- let updated;
166
- try {
167
- updated = channel.update(vals);
168
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
- }
170
- catch (e) {
171
- if (e.name === InvalidUpdateError.unminifiable_name) {
172
- const wrappedError = new InvalidUpdateError(`Invalid update for channel "${chan}" with values ${JSON.stringify(vals)}: ${e.message}`);
173
- wrappedError.lc_error_code = e.lc_error_code;
174
- throw wrappedError;
175
- }
176
- else {
177
- throw e;
178
- }
179
- }
180
- if (updated && getNextVersion !== undefined) {
181
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
182
- // unavailable channels can't trigger tasks, so don't add them
183
- if (channel.isAvailable())
184
- updatedChannels.add(chan);
185
- }
186
- }
187
- }
188
- // Channels that weren't updated in this step are notified of a new step
189
- if (bumpStep) {
190
- for (const chan in onlyChannels) {
191
- if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan))
192
- continue;
193
- const channel = onlyChannels[chan];
194
- if (channel.isAvailable() && !updatedChannels.has(chan)) {
195
- const updated = channel.update([]);
196
- if (updated && getNextVersion !== undefined) {
197
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
198
- // unavailable channels can't trigger tasks, so don't add them
199
- if (channel.isAvailable())
200
- updatedChannels.add(chan);
201
- }
202
- }
203
- }
204
- }
205
- // If this is (tentatively) the last superstep, notify all channels of finish
206
- if (bumpStep &&
207
- !Object.keys(triggerToNodes ?? {}).some((channel) => updatedChannels.has(channel))) {
208
- for (const chan in onlyChannels) {
209
- if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan))
210
- continue;
211
- const channel = onlyChannels[chan];
212
- if (channel.finish() && getNextVersion !== undefined) {
213
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
214
- // unavailable channels can't trigger tasks, so don't add them
215
- if (channel.isAvailable())
216
- updatedChannels.add(chan);
217
- }
218
- }
219
- }
82
+ function _applyWrites(checkpoint, channels, tasks, getNextVersion, triggerToNodes) {
83
+ tasks.sort((a, b) => {
84
+ const aPath = a.path?.slice(0, 3) || [];
85
+ const bPath = b.path?.slice(0, 3) || [];
86
+ for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {
87
+ if (aPath[i] < bPath[i]) return -1;
88
+ if (aPath[i] > bPath[i]) return 1;
89
+ }
90
+ return aPath.length - bPath.length;
91
+ });
92
+ const bumpStep = tasks.some((task) => task.triggers.length > 0);
93
+ const onlyChannels = getOnlyChannels(channels);
94
+ for (const task of tasks) {
95
+ checkpoint.versions_seen[task.name] ??= {};
96
+ for (const chan of task.triggers) if (chan in checkpoint.channel_versions) checkpoint.versions_seen[task.name][chan] = checkpoint.channel_versions[chan];
97
+ }
98
+ let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
99
+ const channelsToConsume = new Set(tasks.flatMap((task) => task.triggers).filter((chan) => !RESERVED.includes(chan)));
100
+ let usedNewVersion = false;
101
+ for (const chan of channelsToConsume) if (chan in onlyChannels && onlyChannels[chan].consume()) {
102
+ if (getNextVersion !== void 0) {
103
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
104
+ usedNewVersion = true;
105
+ }
106
+ }
107
+ const pendingWritesByChannel = {};
108
+ for (const task of tasks) for (const [chan, val] of task.writes) if (IGNORE.has(chan)) {} else if (chan in onlyChannels) {
109
+ pendingWritesByChannel[chan] ??= [];
110
+ pendingWritesByChannel[chan].push(val);
111
+ }
112
+ if (maxVersion != null && getNextVersion != null) maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;
113
+ const updatedChannels = /* @__PURE__ */ new Set();
114
+ for (const [chan, vals] of Object.entries(pendingWritesByChannel)) if (chan in onlyChannels) {
115
+ const channel = onlyChannels[chan];
116
+ let updated;
117
+ try {
118
+ updated = channel.update(vals);
119
+ } catch (e) {
120
+ if (e.name === InvalidUpdateError.unminifiable_name) {
121
+ const wrappedError = new InvalidUpdateError(`Invalid update for channel "${chan}" with values ${JSON.stringify(vals)}: ${e.message}`);
122
+ wrappedError.lc_error_code = e.lc_error_code;
123
+ throw wrappedError;
124
+ } else throw e;
125
+ }
126
+ if (updated && getNextVersion !== void 0) {
127
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
128
+ if (channel.isAvailable()) updatedChannels.add(chan);
129
+ }
130
+ }
131
+ if (bumpStep) for (const chan in onlyChannels) {
132
+ if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
133
+ const channel = onlyChannels[chan];
134
+ if (channel.isAvailable() && !updatedChannels.has(chan)) {
135
+ const updated = channel.update([]);
136
+ if (updated && getNextVersion !== void 0) {
137
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
138
+ if (channel.isAvailable()) updatedChannels.add(chan);
139
+ }
140
+ }
141
+ }
142
+ if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) for (const chan in onlyChannels) {
143
+ if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
144
+ const channel = onlyChannels[chan];
145
+ if (channel.finish() && getNextVersion !== void 0) {
146
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
147
+ if (channel.isAvailable()) updatedChannels.add(chan);
148
+ }
149
+ }
150
+ return updatedChannels;
151
+ }
152
+ function* candidateNodes(checkpoint, processes, extra) {
153
+ if (extra.updatedChannels != null && extra.triggerToNodes != null) {
154
+ const triggeredNodes = /* @__PURE__ */ new Set();
155
+ for (const channel of extra.updatedChannels) {
156
+ const nodeIds = extra.triggerToNodes[channel];
157
+ for (const id of nodeIds ?? []) triggeredNodes.add(id);
158
+ }
159
+ yield* [...triggeredNodes].sort();
160
+ return;
161
+ }
162
+ const isEmptyChannelVersions = (() => {
163
+ for (const chan in checkpoint.channel_versions) if (checkpoint.channel_versions[chan] !== null) return false;
164
+ return true;
165
+ })();
166
+ if (isEmptyChannelVersions) return;
167
+ for (const name in processes) {
168
+ if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;
169
+ yield name;
170
+ }
220
171
  }
221
172
  /**
222
- * Prepare the set of tasks that will make up the next Pregel step.
223
- * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered
224
- * by edges).
225
- */
226
- export function _prepareNextTasks(checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
227
- const tasks = {};
228
- // Consume pending tasks
229
- const tasksChannel = channels[TASKS];
230
- if (tasksChannel?.isAvailable()) {
231
- const len = tasksChannel.get().length;
232
- for (let i = 0; i < len; i += 1) {
233
- const task = _prepareSingleTask([PUSH, i], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
234
- if (task !== undefined) {
235
- tasks[task.id] = task;
236
- }
237
- }
238
- }
239
- // Check if any processes should be run in next step
240
- // If so, prepare the values to be passed to them
241
- for (const name in processes) {
242
- if (!Object.prototype.hasOwnProperty.call(processes, name))
243
- continue;
244
- const task = _prepareSingleTask([PULL, name], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
245
- if (task !== undefined) {
246
- tasks[task.id] = task;
247
- }
248
- }
249
- return tasks;
173
+ * Prepare the set of tasks that will make up the next Pregel step.
174
+ * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered
175
+ * by edges).
176
+ */
177
+ function _prepareNextTasks(checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
178
+ const tasks = {};
179
+ const tasksChannel = channels[TASKS];
180
+ if (tasksChannel?.isAvailable()) {
181
+ const len = tasksChannel.get().length;
182
+ for (let i = 0; i < len; i += 1) {
183
+ const task = _prepareSingleTask([PUSH, i], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
184
+ if (task !== void 0) tasks[task.id] = task;
185
+ }
186
+ }
187
+ for (const name of candidateNodes(checkpoint, processes, extra)) {
188
+ const task = _prepareSingleTask([PULL, name], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
189
+ if (task !== void 0) tasks[task.id] = task;
190
+ }
191
+ return tasks;
250
192
  }
251
193
  /**
252
- * Prepares a single task for the next Pregel step, given a task path, which
253
- * uniquely identifies a PUSH or PULL task within the graph.
254
- */
255
- export function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
256
- const { step, checkpointer, manager } = extra;
257
- const configurable = config.configurable ?? {};
258
- const parentNamespace = configurable.checkpoint_ns ?? "";
259
- if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {
260
- const call = taskPath[taskPath.length - 1];
261
- const proc = getRunnableForFunc(call.name, call.func);
262
- const triggers = [PUSH];
263
- const checkpointNamespace = parentNamespace === ""
264
- ? call.name
265
- : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;
266
- const id = uuid5(JSON.stringify([
267
- checkpointNamespace,
268
- step.toString(),
269
- call.name,
270
- PUSH,
271
- taskPath[1],
272
- taskPath[2],
273
- ]), checkpoint.id);
274
- const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;
275
- // we append `true` to the task path to indicate that a call is being made
276
- // so we should not return interrupts from this task (responsibility lies with the parent)
277
- const outputTaskPath = [...taskPath.slice(0, 3), true];
278
- const metadata = {
279
- langgraph_step: step,
280
- langgraph_node: call.name,
281
- langgraph_triggers: triggers,
282
- langgraph_path: outputTaskPath,
283
- langgraph_checkpoint_ns: taskCheckpointNamespace,
284
- };
285
- if (forExecution) {
286
- const writes = [];
287
- const task = {
288
- name: call.name,
289
- input: call.input,
290
- proc,
291
- writes,
292
- config: patchConfig(mergeConfigs(config, {
293
- metadata,
294
- store: extra.store ?? config.store,
295
- }), {
296
- runName: call.name,
297
- callbacks: manager?.getChild(`graph:step:${step}`),
298
- configurable: {
299
- [CONFIG_KEY_TASK_ID]: id,
300
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
301
- [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
302
- [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
303
- name: call.name,
304
- writes: writes,
305
- triggers,
306
- path: outputTaskPath,
307
- }, select_, fresh_),
308
- [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
309
- [CONFIG_KEY_CHECKPOINT_MAP]: {
310
- ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
311
- [parentNamespace]: checkpoint.id,
312
- },
313
- [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
314
- pendingWrites: pendingWrites ?? [],
315
- taskId: id,
316
- currentTaskInput: call.input,
317
- resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
318
- namespaceHash: XXH3(taskCheckpointNamespace),
319
- }),
320
- [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
321
- checkpoint_id: undefined,
322
- checkpoint_ns: taskCheckpointNamespace,
323
- },
324
- }),
325
- triggers,
326
- retry_policy: call.retry,
327
- cache_key: call.cache
328
- ? {
329
- key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),
330
- ns: [CACHE_NS_WRITES, call.name ?? "__dynamic__"],
331
- ttl: call.cache.ttl,
332
- }
333
- : undefined,
334
- id,
335
- path: outputTaskPath,
336
- writers: [],
337
- };
338
- return task;
339
- }
340
- else {
341
- return {
342
- id,
343
- name: call.name,
344
- interrupts: [],
345
- path: outputTaskPath,
346
- };
347
- }
348
- }
349
- else if (taskPath[0] === PUSH) {
350
- const index = typeof taskPath[1] === "number"
351
- ? taskPath[1]
352
- : parseInt(taskPath[1], 10);
353
- if (!channels[TASKS]?.isAvailable()) {
354
- return undefined;
355
- }
356
- const sends = channels[TASKS].get();
357
- if (index < 0 || index >= sends.length) {
358
- return undefined;
359
- }
360
- const packet = _isSendInterface(sends[index]) && !_isSend(sends[index])
361
- ? new Send(sends[index].node, sends[index].args)
362
- : sends[index];
363
- if (!_isSendInterface(packet)) {
364
- console.warn(`Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`);
365
- return undefined;
366
- }
367
- if (!(packet.node in processes)) {
368
- console.warn(`Ignoring unknown node name ${packet.node} in pending sends.`);
369
- return undefined;
370
- }
371
- const triggers = [PUSH];
372
- const checkpointNamespace = parentNamespace === ""
373
- ? packet.node
374
- : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;
375
- const taskId = uuid5(JSON.stringify([
376
- checkpointNamespace,
377
- step.toString(),
378
- packet.node,
379
- PUSH,
380
- index.toString(),
381
- ]), checkpoint.id);
382
- const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;
383
- let metadata = {
384
- langgraph_step: step,
385
- langgraph_node: packet.node,
386
- langgraph_triggers: triggers,
387
- langgraph_path: taskPath.slice(0, 3),
388
- langgraph_checkpoint_ns: taskCheckpointNamespace,
389
- };
390
- if (forExecution) {
391
- const proc = processes[packet.node];
392
- const node = proc.getNode();
393
- if (node !== undefined) {
394
- if (proc.metadata !== undefined) {
395
- metadata = { ...metadata, ...proc.metadata };
396
- }
397
- const writes = [];
398
- return {
399
- name: packet.node,
400
- input: packet.args,
401
- proc: node,
402
- subgraphs: proc.subgraphs,
403
- writes,
404
- config: patchConfig(mergeConfigs(config, {
405
- metadata,
406
- tags: proc.tags,
407
- store: extra.store ?? config.store,
408
- }), {
409
- runName: packet.node,
410
- callbacks: manager?.getChild(`graph:step:${step}`),
411
- configurable: {
412
- [CONFIG_KEY_TASK_ID]: taskId,
413
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
414
- [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
415
- [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
416
- name: packet.node,
417
- writes: writes,
418
- triggers,
419
- path: taskPath,
420
- }, select_, fresh_),
421
- [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
422
- [CONFIG_KEY_CHECKPOINT_MAP]: {
423
- ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
424
- [parentNamespace]: checkpoint.id,
425
- },
426
- [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
427
- pendingWrites: pendingWrites ?? [],
428
- taskId,
429
- currentTaskInput: packet.args,
430
- resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
431
- namespaceHash: XXH3(taskCheckpointNamespace),
432
- }),
433
- [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
434
- checkpoint_id: undefined,
435
- checkpoint_ns: taskCheckpointNamespace,
436
- },
437
- }),
438
- triggers,
439
- retry_policy: proc.retryPolicy,
440
- cache_key: proc.cachePolicy
441
- ? {
442
- key: XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])),
443
- ns: [CACHE_NS_WRITES, proc.name ?? "__dynamic__", packet.node],
444
- ttl: proc.cachePolicy.ttl,
445
- }
446
- : undefined,
447
- id: taskId,
448
- path: taskPath,
449
- writers: proc.getWriters(),
450
- };
451
- }
452
- }
453
- else {
454
- return {
455
- id: taskId,
456
- name: packet.node,
457
- interrupts: [],
458
- path: taskPath,
459
- };
460
- }
461
- }
462
- else if (taskPath[0] === PULL) {
463
- const name = taskPath[1].toString();
464
- const proc = processes[name];
465
- if (proc === undefined) {
466
- return undefined;
467
- }
468
- // Check if this task already has successful writes in the pending writes
469
- if (pendingWrites?.length) {
470
- // Find the task ID for this node/path
471
- const checkpointNamespace = parentNamespace === ""
472
- ? name
473
- : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
474
- const taskId = uuid5(JSON.stringify([
475
- checkpointNamespace,
476
- step.toString(),
477
- name,
478
- PULL,
479
- name,
480
- ]), checkpoint.id);
481
- // Check if there are successful writes (not ERROR) for this task ID
482
- const hasSuccessfulWrites = pendingWrites.some((w) => w[0] === taskId && w[1] !== ERROR);
483
- // If task completed successfully, don't include it in next tasks
484
- if (hasSuccessfulWrites) {
485
- return undefined;
486
- }
487
- }
488
- const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
489
- if (nullVersion === undefined) {
490
- return undefined;
491
- }
492
- const seen = checkpoint.versions_seen[name] ?? {};
493
- // Find the first trigger that is available and has a new version
494
- const trigger = proc.triggers.find((chan) => {
495
- if (!channels[chan].isAvailable())
496
- return false;
497
- return ((checkpoint.channel_versions[chan] ?? nullVersion) >
498
- (seen[chan] ?? nullVersion));
499
- });
500
- // If any of the channels read by this process were updated
501
- if (trigger !== undefined) {
502
- const val = _procInput(proc, channels, forExecution);
503
- if (val === undefined) {
504
- return undefined;
505
- }
506
- const checkpointNamespace = parentNamespace === ""
507
- ? name
508
- : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
509
- const taskId = uuid5(JSON.stringify([
510
- checkpointNamespace,
511
- step.toString(),
512
- name,
513
- PULL,
514
- [trigger],
515
- ]), checkpoint.id);
516
- const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;
517
- let metadata = {
518
- langgraph_step: step,
519
- langgraph_node: name,
520
- langgraph_triggers: [trigger],
521
- langgraph_path: taskPath,
522
- langgraph_checkpoint_ns: taskCheckpointNamespace,
523
- };
524
- if (forExecution) {
525
- const node = proc.getNode();
526
- if (node !== undefined) {
527
- if (proc.metadata !== undefined) {
528
- metadata = { ...metadata, ...proc.metadata };
529
- }
530
- const writes = [];
531
- return {
532
- name,
533
- input: val,
534
- proc: node,
535
- subgraphs: proc.subgraphs,
536
- writes,
537
- config: patchConfig(mergeConfigs(config, {
538
- metadata,
539
- tags: proc.tags,
540
- store: extra.store ?? config.store,
541
- }), {
542
- runName: name,
543
- callbacks: manager?.getChild(`graph:step:${step}`),
544
- configurable: {
545
- [CONFIG_KEY_TASK_ID]: taskId,
546
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
547
- [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => {
548
- writes.push(...items);
549
- }, processes, writes_),
550
- [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
551
- name,
552
- writes: writes,
553
- triggers: [trigger],
554
- path: taskPath,
555
- }, select_, fresh_),
556
- [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
557
- [CONFIG_KEY_CHECKPOINT_MAP]: {
558
- ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
559
- [parentNamespace]: checkpoint.id,
560
- },
561
- [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
562
- pendingWrites: pendingWrites ?? [],
563
- taskId,
564
- currentTaskInput: val,
565
- resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
566
- namespaceHash: XXH3(taskCheckpointNamespace),
567
- }),
568
- [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
569
- checkpoint_id: undefined,
570
- checkpoint_ns: taskCheckpointNamespace,
571
- },
572
- }),
573
- triggers: [trigger],
574
- retry_policy: proc.retryPolicy,
575
- cache_key: proc.cachePolicy
576
- ? {
577
- key: XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([val])),
578
- ns: [CACHE_NS_WRITES, proc.name ?? "__dynamic__", name],
579
- ttl: proc.cachePolicy.ttl,
580
- }
581
- : undefined,
582
- id: taskId,
583
- path: taskPath,
584
- writers: proc.getWriters(),
585
- };
586
- }
587
- }
588
- else {
589
- return {
590
- id: taskId,
591
- name,
592
- interrupts: [],
593
- path: taskPath,
594
- };
595
- }
596
- }
597
- }
598
- return undefined;
194
+ * Prepares a single task for the next Pregel step, given a task path, which
195
+ * uniquely identifies a PUSH or PULL task within the graph.
196
+ */
197
+ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
198
+ const { step, checkpointer, manager } = extra;
199
+ const configurable = config.configurable ?? {};
200
+ const parentNamespace = configurable.checkpoint_ns ?? "";
201
+ if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {
202
+ const call = taskPath[taskPath.length - 1];
203
+ const proc = getRunnableForFunc(call.name, call.func);
204
+ const triggers = [PUSH];
205
+ const checkpointNamespace = parentNamespace === "" ? call.name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;
206
+ const id = uuid5(JSON.stringify([
207
+ checkpointNamespace,
208
+ step.toString(),
209
+ call.name,
210
+ PUSH,
211
+ taskPath[1],
212
+ taskPath[2]
213
+ ]), checkpoint.id);
214
+ const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;
215
+ const outputTaskPath = [...taskPath.slice(0, 3), true];
216
+ const metadata = {
217
+ langgraph_step: step,
218
+ langgraph_node: call.name,
219
+ langgraph_triggers: triggers,
220
+ langgraph_path: outputTaskPath,
221
+ langgraph_checkpoint_ns: taskCheckpointNamespace
222
+ };
223
+ if (forExecution) {
224
+ const writes = [];
225
+ const task = {
226
+ name: call.name,
227
+ input: call.input,
228
+ proc,
229
+ writes,
230
+ config: patchConfig(mergeConfigs(config, {
231
+ metadata,
232
+ store: extra.store ?? config.store
233
+ }), {
234
+ runName: call.name,
235
+ callbacks: manager?.getChild(`graph:step:${step}`),
236
+ configurable: {
237
+ [CONFIG_KEY_TASK_ID]: id,
238
+ [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
239
+ [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
240
+ name: call.name,
241
+ writes,
242
+ triggers,
243
+ path: outputTaskPath
244
+ }, select_, fresh_),
245
+ [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
246
+ [CONFIG_KEY_CHECKPOINT_MAP]: {
247
+ ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
248
+ [parentNamespace]: checkpoint.id
249
+ },
250
+ [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
251
+ pendingWrites: pendingWrites ?? [],
252
+ taskId: id,
253
+ currentTaskInput: call.input,
254
+ resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
255
+ namespaceHash: XXH3(taskCheckpointNamespace)
256
+ }),
257
+ [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
258
+ checkpoint_id: void 0,
259
+ checkpoint_ns: taskCheckpointNamespace
260
+ }
261
+ }),
262
+ triggers,
263
+ retry_policy: call.retry,
264
+ cache_key: call.cache ? {
265
+ key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),
266
+ ns: [CACHE_NS_WRITES, call.name ?? "__dynamic__"],
267
+ ttl: call.cache.ttl
268
+ } : void 0,
269
+ id,
270
+ path: outputTaskPath,
271
+ writers: []
272
+ };
273
+ return task;
274
+ } else return {
275
+ id,
276
+ name: call.name,
277
+ interrupts: [],
278
+ path: outputTaskPath
279
+ };
280
+ } else if (taskPath[0] === PUSH) {
281
+ const index = typeof taskPath[1] === "number" ? taskPath[1] : parseInt(taskPath[1], 10);
282
+ if (!channels[TASKS]?.isAvailable()) return void 0;
283
+ const sends = channels[TASKS].get();
284
+ if (index < 0 || index >= sends.length) return void 0;
285
+ const packet = _isSendInterface(sends[index]) && !_isSend(sends[index]) ? new Send(sends[index].node, sends[index].args) : sends[index];
286
+ if (!_isSendInterface(packet)) {
287
+ console.warn(`Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`);
288
+ return void 0;
289
+ }
290
+ if (!(packet.node in processes)) {
291
+ console.warn(`Ignoring unknown node name ${packet.node} in pending sends.`);
292
+ return void 0;
293
+ }
294
+ const triggers = [PUSH];
295
+ const checkpointNamespace = parentNamespace === "" ? packet.node : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;
296
+ const taskId = uuid5(JSON.stringify([
297
+ checkpointNamespace,
298
+ step.toString(),
299
+ packet.node,
300
+ PUSH,
301
+ index.toString()
302
+ ]), checkpoint.id);
303
+ const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;
304
+ let metadata = {
305
+ langgraph_step: step,
306
+ langgraph_node: packet.node,
307
+ langgraph_triggers: triggers,
308
+ langgraph_path: taskPath.slice(0, 3),
309
+ langgraph_checkpoint_ns: taskCheckpointNamespace
310
+ };
311
+ if (forExecution) {
312
+ const proc = processes[packet.node];
313
+ const node = proc.getNode();
314
+ if (node !== void 0) {
315
+ if (proc.metadata !== void 0) metadata = {
316
+ ...metadata,
317
+ ...proc.metadata
318
+ };
319
+ const writes = [];
320
+ return {
321
+ name: packet.node,
322
+ input: packet.args,
323
+ proc: node,
324
+ subgraphs: proc.subgraphs,
325
+ writes,
326
+ config: patchConfig(mergeConfigs(config, {
327
+ metadata,
328
+ tags: proc.tags,
329
+ store: extra.store ?? config.store
330
+ }), {
331
+ runName: packet.node,
332
+ callbacks: manager?.getChild(`graph:step:${step}`),
333
+ configurable: {
334
+ [CONFIG_KEY_TASK_ID]: taskId,
335
+ [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
336
+ [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
337
+ name: packet.node,
338
+ writes,
339
+ triggers,
340
+ path: taskPath
341
+ }, select_, fresh_),
342
+ [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
343
+ [CONFIG_KEY_CHECKPOINT_MAP]: {
344
+ ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
345
+ [parentNamespace]: checkpoint.id
346
+ },
347
+ [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
348
+ pendingWrites: pendingWrites ?? [],
349
+ taskId,
350
+ currentTaskInput: packet.args,
351
+ resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
352
+ namespaceHash: XXH3(taskCheckpointNamespace)
353
+ }),
354
+ [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
355
+ checkpoint_id: void 0,
356
+ checkpoint_ns: taskCheckpointNamespace
357
+ }
358
+ }),
359
+ triggers,
360
+ retry_policy: proc.retryPolicy,
361
+ cache_key: proc.cachePolicy ? {
362
+ key: XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])),
363
+ ns: [
364
+ CACHE_NS_WRITES,
365
+ proc.name ?? "__dynamic__",
366
+ packet.node
367
+ ],
368
+ ttl: proc.cachePolicy.ttl
369
+ } : void 0,
370
+ id: taskId,
371
+ path: taskPath,
372
+ writers: proc.getWriters()
373
+ };
374
+ }
375
+ } else return {
376
+ id: taskId,
377
+ name: packet.node,
378
+ interrupts: [],
379
+ path: taskPath
380
+ };
381
+ } else if (taskPath[0] === PULL) {
382
+ const name = taskPath[1].toString();
383
+ const proc = processes[name];
384
+ if (proc === void 0) return void 0;
385
+ if (pendingWrites?.length) {
386
+ const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
387
+ const taskId = uuid5(JSON.stringify([
388
+ checkpointNamespace,
389
+ step.toString(),
390
+ name,
391
+ PULL,
392
+ name
393
+ ]), checkpoint.id);
394
+ const hasSuccessfulWrites = pendingWrites.some((w) => w[0] === taskId && w[1] !== ERROR);
395
+ if (hasSuccessfulWrites) return void 0;
396
+ }
397
+ const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
398
+ if (nullVersion === void 0) return void 0;
399
+ const seen = checkpoint.versions_seen[name] ?? {};
400
+ const trigger = proc.triggers.find((chan) => {
401
+ if (!channels[chan].isAvailable()) return false;
402
+ return (checkpoint.channel_versions[chan] ?? nullVersion) > (seen[chan] ?? nullVersion);
403
+ });
404
+ if (trigger !== void 0) {
405
+ const val = _procInput(proc, channels, forExecution);
406
+ if (val === void 0) return void 0;
407
+ const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
408
+ const taskId = uuid5(JSON.stringify([
409
+ checkpointNamespace,
410
+ step.toString(),
411
+ name,
412
+ PULL,
413
+ [trigger]
414
+ ]), checkpoint.id);
415
+ const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;
416
+ let metadata = {
417
+ langgraph_step: step,
418
+ langgraph_node: name,
419
+ langgraph_triggers: [trigger],
420
+ langgraph_path: taskPath,
421
+ langgraph_checkpoint_ns: taskCheckpointNamespace
422
+ };
423
+ if (forExecution) {
424
+ const node = proc.getNode();
425
+ if (node !== void 0) {
426
+ if (proc.metadata !== void 0) metadata = {
427
+ ...metadata,
428
+ ...proc.metadata
429
+ };
430
+ const writes = [];
431
+ return {
432
+ name,
433
+ input: val,
434
+ proc: node,
435
+ subgraphs: proc.subgraphs,
436
+ writes,
437
+ config: patchConfig(mergeConfigs(config, {
438
+ metadata,
439
+ tags: proc.tags,
440
+ store: extra.store ?? config.store
441
+ }), {
442
+ runName: name,
443
+ callbacks: manager?.getChild(`graph:step:${step}`),
444
+ configurable: {
445
+ [CONFIG_KEY_TASK_ID]: taskId,
446
+ [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => {
447
+ writes.push(...items);
448
+ }, processes, writes_),
449
+ [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
450
+ name,
451
+ writes,
452
+ triggers: [trigger],
453
+ path: taskPath
454
+ }, select_, fresh_),
455
+ [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
456
+ [CONFIG_KEY_CHECKPOINT_MAP]: {
457
+ ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
458
+ [parentNamespace]: checkpoint.id
459
+ },
460
+ [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
461
+ pendingWrites: pendingWrites ?? [],
462
+ taskId,
463
+ currentTaskInput: val,
464
+ resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
465
+ namespaceHash: XXH3(taskCheckpointNamespace)
466
+ }),
467
+ [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
468
+ checkpoint_id: void 0,
469
+ checkpoint_ns: taskCheckpointNamespace
470
+ }
471
+ }),
472
+ triggers: [trigger],
473
+ retry_policy: proc.retryPolicy,
474
+ cache_key: proc.cachePolicy ? {
475
+ key: XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([val])),
476
+ ns: [
477
+ CACHE_NS_WRITES,
478
+ proc.name ?? "__dynamic__",
479
+ name
480
+ ],
481
+ ttl: proc.cachePolicy.ttl
482
+ } : void 0,
483
+ id: taskId,
484
+ path: taskPath,
485
+ writers: proc.getWriters()
486
+ };
487
+ }
488
+ } else return {
489
+ id: taskId,
490
+ name,
491
+ interrupts: [],
492
+ path: taskPath
493
+ };
494
+ }
495
+ }
496
+ return void 0;
599
497
  }
600
498
  /**
601
- * Function injected under CONFIG_KEY_READ in task config, to read current state.
602
- * Used by conditional edges to read a copy of the state with reflecting the writes
603
- * from that node only.
604
- *
605
- * @internal
606
- */
499
+ * Function injected under CONFIG_KEY_READ in task config, to read current state.
500
+ * Used by conditional edges to read a copy of the state with reflecting the writes
501
+ * from that node only.
502
+ *
503
+ * @internal
504
+ */
607
505
  function _procInput(proc, channels, forExecution) {
608
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
609
- let val;
610
- if (typeof proc.channels === "object" && !Array.isArray(proc.channels)) {
611
- val = {};
612
- for (const [k, chan] of Object.entries(proc.channels)) {
613
- if (proc.triggers.includes(chan)) {
614
- try {
615
- val[k] = readChannel(channels, chan, false);
616
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
617
- }
618
- catch (e) {
619
- if (e.name === EmptyChannelError.unminifiable_name) {
620
- return undefined;
621
- }
622
- else {
623
- throw e;
624
- }
625
- }
626
- }
627
- else if (chan in channels) {
628
- try {
629
- val[k] = readChannel(channels, chan, false);
630
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
631
- }
632
- catch (e) {
633
- if (e.name === EmptyChannelError.unminifiable_name) {
634
- continue;
635
- }
636
- else {
637
- throw e;
638
- }
639
- }
640
- }
641
- }
642
- }
643
- else if (Array.isArray(proc.channels)) {
644
- let successfulRead = false;
645
- for (const chan of proc.channels) {
646
- try {
647
- val = readChannel(channels, chan, false);
648
- successfulRead = true;
649
- break;
650
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
651
- }
652
- catch (e) {
653
- if (e.name === EmptyChannelError.unminifiable_name) {
654
- continue;
655
- }
656
- else {
657
- throw e;
658
- }
659
- }
660
- }
661
- if (!successfulRead) {
662
- return undefined;
663
- }
664
- }
665
- else {
666
- throw new Error(`Invalid channels type, expected list or dict, got ${proc.channels}`);
667
- }
668
- // If the process has a mapper, apply it to the value
669
- if (forExecution && proc.mapper !== undefined) {
670
- val = proc.mapper(val);
671
- }
672
- return val;
506
+ let val;
507
+ if (typeof proc.channels === "object" && !Array.isArray(proc.channels)) {
508
+ val = {};
509
+ for (const [k, chan] of Object.entries(proc.channels)) if (proc.triggers.includes(chan)) try {
510
+ val[k] = readChannel(channels, chan, false);
511
+ } catch (e) {
512
+ if (e.name === EmptyChannelError.unminifiable_name) return void 0;
513
+ else throw e;
514
+ }
515
+ else if (chan in channels) try {
516
+ val[k] = readChannel(channels, chan, false);
517
+ } catch (e) {
518
+ if (e.name === EmptyChannelError.unminifiable_name) continue;
519
+ else throw e;
520
+ }
521
+ } else if (Array.isArray(proc.channels)) {
522
+ let successfulRead = false;
523
+ for (const chan of proc.channels) try {
524
+ val = readChannel(channels, chan, false);
525
+ successfulRead = true;
526
+ break;
527
+ } catch (e) {
528
+ if (e.name === EmptyChannelError.unminifiable_name) continue;
529
+ else throw e;
530
+ }
531
+ if (!successfulRead) return void 0;
532
+ } else throw new Error(`Invalid channels type, expected list or dict, got ${proc.channels}`);
533
+ if (forExecution && proc.mapper !== void 0) val = proc.mapper(val);
534
+ return val;
673
535
  }
674
- function _scratchpad({ pendingWrites, taskId, currentTaskInput, resumeMap, namespaceHash, }) {
675
- const nullResume = pendingWrites.find(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME)?.[2];
676
- const resume = (() => {
677
- const result = pendingWrites
678
- .filter(([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME)
679
- .flatMap(([_writeTaskId, _chan, resume]) => resume);
680
- if (resumeMap != null && namespaceHash in resumeMap) {
681
- const mappedResume = resumeMap[namespaceHash];
682
- result.push(mappedResume);
683
- }
684
- return result;
685
- })();
686
- const scratchpad = {
687
- callCounter: 0,
688
- interruptCounter: -1,
689
- resume,
690
- nullResume,
691
- subgraphCounter: 0,
692
- currentTaskInput,
693
- consumeNullResume: () => {
694
- if (scratchpad.nullResume) {
695
- delete scratchpad.nullResume;
696
- pendingWrites.splice(pendingWrites.findIndex(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME), 1);
697
- return nullResume;
698
- }
699
- return undefined;
700
- },
701
- };
702
- return scratchpad;
536
+ function _scratchpad({ pendingWrites, taskId, currentTaskInput, resumeMap, namespaceHash }) {
537
+ const nullResume = pendingWrites.find(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME)?.[2];
538
+ const resume = (() => {
539
+ const result = pendingWrites.filter(([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME).flatMap(([_writeTaskId, _chan, resume$1]) => resume$1);
540
+ if (resumeMap != null && namespaceHash in resumeMap) {
541
+ const mappedResume = resumeMap[namespaceHash];
542
+ result.push(mappedResume);
543
+ }
544
+ return result;
545
+ })();
546
+ const scratchpad = {
547
+ callCounter: 0,
548
+ interruptCounter: -1,
549
+ resume,
550
+ nullResume,
551
+ subgraphCounter: 0,
552
+ currentTaskInput,
553
+ consumeNullResume: () => {
554
+ if (scratchpad.nullResume) {
555
+ delete scratchpad.nullResume;
556
+ pendingWrites.splice(pendingWrites.findIndex(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME), 1);
557
+ return nullResume;
558
+ }
559
+ return void 0;
560
+ }
561
+ };
562
+ return scratchpad;
703
563
  }
564
+
565
+ //#endregion
566
+ export { _applyWrites, _localRead, _prepareNextTasks, _prepareSingleTask, increment, shouldInterrupt };
704
567
  //# sourceMappingURL=algo.js.map