@langchain/langgraph 1.0.12 → 1.0.13

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 (381) hide show
  1. package/dist/channels/any_value.cjs +46 -0
  2. package/dist/channels/any_value.cjs.map +1 -0
  3. package/dist/channels/any_value.d.cts +23 -0
  4. package/dist/channels/any_value.d.cts.map +1 -0
  5. package/dist/channels/any_value.d.ts +23 -0
  6. package/dist/channels/any_value.d.ts.map +1 -0
  7. package/dist/channels/any_value.js +46 -0
  8. package/dist/channels/any_value.js.map +1 -0
  9. package/dist/channels/base.cjs +101 -0
  10. package/dist/channels/base.cjs.map +1 -0
  11. package/dist/channels/base.d.cts +79 -0
  12. package/dist/channels/base.d.cts.map +1 -0
  13. package/dist/channels/base.d.ts +79 -0
  14. package/dist/channels/base.d.ts.map +1 -0
  15. package/dist/channels/base.js +97 -0
  16. package/dist/channels/base.js.map +1 -0
  17. package/dist/channels/binop.cjs +49 -0
  18. package/dist/channels/binop.cjs.map +1 -0
  19. package/dist/channels/binop.d.cts +22 -0
  20. package/dist/channels/binop.d.cts.map +1 -0
  21. package/dist/channels/binop.d.ts +22 -0
  22. package/dist/channels/binop.d.ts.map +1 -0
  23. package/dist/channels/binop.js +49 -0
  24. package/dist/channels/binop.js.map +1 -0
  25. package/dist/channels/dynamic_barrier_value.cjs +75 -0
  26. package/dist/channels/dynamic_barrier_value.cjs.map +1 -0
  27. package/dist/channels/dynamic_barrier_value.d.cts +40 -0
  28. package/dist/channels/dynamic_barrier_value.d.cts.map +1 -0
  29. package/dist/channels/dynamic_barrier_value.d.ts +40 -0
  30. package/dist/channels/dynamic_barrier_value.d.ts.map +1 -0
  31. package/dist/channels/dynamic_barrier_value.js +75 -0
  32. package/dist/channels/dynamic_barrier_value.js.map +1 -0
  33. package/dist/channels/ephemeral_value.cjs +46 -0
  34. package/dist/channels/ephemeral_value.cjs.map +1 -0
  35. package/dist/channels/ephemeral_value.d.cts +21 -0
  36. package/dist/channels/ephemeral_value.d.cts.map +1 -0
  37. package/dist/channels/ephemeral_value.d.ts +21 -0
  38. package/dist/channels/ephemeral_value.d.ts.map +1 -0
  39. package/dist/channels/ephemeral_value.js +46 -0
  40. package/dist/channels/ephemeral_value.js.map +1 -0
  41. package/dist/channels/index.cjs +21 -0
  42. package/dist/channels/index.d.cts +9 -0
  43. package/dist/channels/index.d.ts +9 -0
  44. package/dist/channels/index.js +10 -0
  45. package/dist/channels/last_value.cjs +98 -0
  46. package/dist/channels/last_value.cjs.map +1 -0
  47. package/dist/channels/last_value.d.cts +42 -0
  48. package/dist/channels/last_value.d.cts.map +1 -0
  49. package/dist/channels/last_value.d.ts +42 -0
  50. package/dist/channels/last_value.d.ts.map +1 -0
  51. package/dist/channels/last_value.js +97 -0
  52. package/dist/channels/last_value.js.map +1 -0
  53. package/dist/channels/named_barrier_value.cjs +116 -0
  54. package/dist/channels/named_barrier_value.cjs.map +1 -0
  55. package/dist/channels/named_barrier_value.d.cts +44 -0
  56. package/dist/channels/named_barrier_value.d.cts.map +1 -0
  57. package/dist/channels/named_barrier_value.d.ts +44 -0
  58. package/dist/channels/named_barrier_value.d.ts.map +1 -0
  59. package/dist/channels/named_barrier_value.js +114 -0
  60. package/dist/channels/named_barrier_value.js.map +1 -0
  61. package/dist/channels/topic.cjs +65 -0
  62. package/dist/channels/topic.cjs.map +1 -0
  63. package/dist/channels/topic.d.cts +32 -0
  64. package/dist/channels/topic.d.cts.map +1 -0
  65. package/dist/channels/topic.d.ts +32 -0
  66. package/dist/channels/topic.d.ts.map +1 -0
  67. package/dist/channels/topic.js +65 -0
  68. package/dist/channels/topic.js.map +1 -0
  69. package/dist/constants.cjs +406 -0
  70. package/dist/constants.cjs.map +1 -0
  71. package/dist/constants.d.cts +281 -0
  72. package/dist/constants.d.cts.map +1 -0
  73. package/dist/constants.d.ts +281 -0
  74. package/dist/constants.d.ts.map +1 -0
  75. package/dist/constants.js +362 -0
  76. package/dist/constants.js.map +1 -0
  77. package/dist/errors.cjs +163 -0
  78. package/dist/errors.cjs.map +1 -0
  79. package/dist/errors.d.cts +77 -0
  80. package/dist/errors.d.cts.map +1 -0
  81. package/dist/errors.d.ts +77 -0
  82. package/dist/errors.d.ts.map +1 -0
  83. package/dist/errors.js +146 -0
  84. package/dist/errors.js.map +1 -0
  85. package/dist/func/index.cjs +299 -0
  86. package/dist/func/index.cjs.map +1 -0
  87. package/dist/func/index.d.cts +288 -0
  88. package/dist/func/index.d.cts.map +1 -0
  89. package/dist/func/index.d.ts +288 -0
  90. package/dist/func/index.d.ts.map +1 -0
  91. package/dist/func/index.js +297 -0
  92. package/dist/func/index.js.map +1 -0
  93. package/dist/func/types.d.cts +62 -0
  94. package/dist/func/types.d.cts.map +1 -0
  95. package/dist/func/types.d.ts +62 -0
  96. package/dist/func/types.d.ts.map +1 -0
  97. package/dist/graph/annotation.cjs +101 -0
  98. package/dist/graph/annotation.cjs.map +1 -0
  99. package/dist/graph/annotation.d.cts +116 -0
  100. package/dist/graph/annotation.d.cts.map +1 -0
  101. package/dist/graph/annotation.d.ts +116 -0
  102. package/dist/graph/annotation.d.ts.map +1 -0
  103. package/dist/graph/annotation.js +99 -0
  104. package/dist/graph/annotation.js.map +1 -0
  105. package/dist/graph/graph.cjs +420 -0
  106. package/dist/graph/graph.cjs.map +1 -0
  107. package/dist/graph/graph.d.cts +108 -0
  108. package/dist/graph/graph.d.cts.map +1 -0
  109. package/dist/graph/graph.d.ts +108 -0
  110. package/dist/graph/graph.d.ts.map +1 -0
  111. package/dist/graph/graph.js +418 -0
  112. package/dist/graph/graph.js.map +1 -0
  113. package/dist/graph/index.cjs +5 -0
  114. package/dist/graph/index.js +7 -0
  115. package/dist/graph/message.cjs +97 -0
  116. package/dist/graph/message.cjs.map +1 -0
  117. package/dist/graph/message.d.cts +40 -0
  118. package/dist/graph/message.d.cts.map +1 -0
  119. package/dist/graph/message.d.ts +40 -0
  120. package/dist/graph/message.d.ts.map +1 -0
  121. package/dist/graph/message.js +94 -0
  122. package/dist/graph/message.js.map +1 -0
  123. package/dist/graph/messages_annotation.cjs +109 -0
  124. package/dist/graph/messages_annotation.cjs.map +1 -0
  125. package/dist/graph/messages_annotation.d.cts +112 -0
  126. package/dist/graph/messages_annotation.d.cts.map +1 -0
  127. package/dist/graph/messages_annotation.d.ts +112 -0
  128. package/dist/graph/messages_annotation.d.ts.map +1 -0
  129. package/dist/graph/messages_annotation.js +107 -0
  130. package/dist/graph/messages_annotation.js.map +1 -0
  131. package/dist/graph/state.cjs +494 -0
  132. package/dist/graph/state.cjs.map +1 -0
  133. package/dist/graph/state.d.cts +229 -0
  134. package/dist/graph/state.d.cts.map +1 -0
  135. package/dist/graph/state.d.ts +229 -0
  136. package/dist/graph/state.d.ts.map +1 -0
  137. package/dist/graph/state.js +493 -0
  138. package/dist/graph/state.js.map +1 -0
  139. package/dist/graph/zod/index.cjs +10 -0
  140. package/dist/graph/zod/index.d.cts +3 -0
  141. package/dist/graph/zod/index.d.ts +3 -0
  142. package/dist/graph/zod/index.js +5 -0
  143. package/dist/graph/zod/meta.cjs +144 -0
  144. package/dist/graph/zod/meta.cjs.map +1 -0
  145. package/dist/graph/zod/meta.d.cts +115 -0
  146. package/dist/graph/zod/meta.d.cts.map +1 -0
  147. package/dist/graph/zod/meta.d.ts +115 -0
  148. package/dist/graph/zod/meta.d.ts.map +1 -0
  149. package/dist/graph/zod/meta.js +141 -0
  150. package/dist/graph/zod/meta.js.map +1 -0
  151. package/dist/graph/zod/plugin.cjs +39 -0
  152. package/dist/graph/zod/plugin.cjs.map +1 -0
  153. package/dist/graph/zod/plugin.js +40 -0
  154. package/dist/graph/zod/plugin.js.map +1 -0
  155. package/dist/graph/zod/schema.cjs +98 -0
  156. package/dist/graph/zod/schema.cjs.map +1 -0
  157. package/dist/graph/zod/schema.d.cts +38 -0
  158. package/dist/graph/zod/schema.d.cts.map +1 -0
  159. package/dist/graph/zod/schema.d.ts +38 -0
  160. package/dist/graph/zod/schema.d.ts.map +1 -0
  161. package/dist/graph/zod/schema.js +94 -0
  162. package/dist/graph/zod/schema.js.map +1 -0
  163. package/dist/graph/zod/zod-registry.cjs +42 -0
  164. package/dist/graph/zod/zod-registry.cjs.map +1 -0
  165. package/dist/graph/zod/zod-registry.d.cts +49 -0
  166. package/dist/graph/zod/zod-registry.d.cts.map +1 -0
  167. package/dist/graph/zod/zod-registry.d.ts +49 -0
  168. package/dist/graph/zod/zod-registry.d.ts.map +1 -0
  169. package/dist/graph/zod/zod-registry.js +41 -0
  170. package/dist/graph/zod/zod-registry.js.map +1 -0
  171. package/dist/hash.cjs +265 -0
  172. package/dist/hash.cjs.map +1 -0
  173. package/dist/hash.js +263 -0
  174. package/dist/hash.js.map +1 -0
  175. package/dist/index.cjs +111 -0
  176. package/dist/index.cjs.map +1 -0
  177. package/dist/index.d.cts +26 -0
  178. package/dist/index.d.ts +26 -0
  179. package/dist/index.js +22 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/interrupt.cjs +79 -0
  182. package/dist/interrupt.cjs.map +1 -0
  183. package/dist/interrupt.d.cts +55 -0
  184. package/dist/interrupt.d.cts.map +1 -0
  185. package/dist/interrupt.d.ts +55 -0
  186. package/dist/interrupt.d.ts.map +1 -0
  187. package/dist/interrupt.js +79 -0
  188. package/dist/interrupt.js.map +1 -0
  189. package/dist/prebuilt/agentName.cjs +148 -0
  190. package/dist/prebuilt/agentName.cjs.map +1 -0
  191. package/dist/prebuilt/agentName.d.cts +42 -0
  192. package/dist/prebuilt/agentName.d.cts.map +1 -0
  193. package/dist/prebuilt/agentName.d.ts +42 -0
  194. package/dist/prebuilt/agentName.d.ts.map +1 -0
  195. package/dist/prebuilt/agentName.js +148 -0
  196. package/dist/prebuilt/agentName.js.map +1 -0
  197. package/dist/prebuilt/agent_executor.cjs +41 -0
  198. package/dist/prebuilt/agent_executor.cjs.map +1 -0
  199. package/dist/prebuilt/agent_executor.d.cts +58 -0
  200. package/dist/prebuilt/agent_executor.d.cts.map +1 -0
  201. package/dist/prebuilt/agent_executor.d.ts +58 -0
  202. package/dist/prebuilt/agent_executor.d.ts.map +1 -0
  203. package/dist/prebuilt/agent_executor.js +41 -0
  204. package/dist/prebuilt/agent_executor.js.map +1 -0
  205. package/dist/prebuilt/chat_agent_executor.cjs +62 -0
  206. package/dist/prebuilt/chat_agent_executor.cjs.map +1 -0
  207. package/dist/prebuilt/chat_agent_executor.d.cts +23 -0
  208. package/dist/prebuilt/chat_agent_executor.d.cts.map +1 -0
  209. package/dist/prebuilt/chat_agent_executor.d.ts +23 -0
  210. package/dist/prebuilt/chat_agent_executor.d.ts.map +1 -0
  211. package/dist/prebuilt/chat_agent_executor.js +62 -0
  212. package/dist/prebuilt/chat_agent_executor.js.map +1 -0
  213. package/dist/prebuilt/index.cjs +15 -0
  214. package/dist/prebuilt/index.d.cts +8 -0
  215. package/dist/prebuilt/index.d.ts +8 -0
  216. package/dist/prebuilt/index.js +8 -0
  217. package/dist/prebuilt/interrupt.d.cts +60 -0
  218. package/dist/prebuilt/interrupt.d.cts.map +1 -0
  219. package/dist/prebuilt/interrupt.d.ts +60 -0
  220. package/dist/prebuilt/interrupt.d.ts.map +1 -0
  221. package/dist/prebuilt/react_agent_executor.cjs +339 -0
  222. package/dist/prebuilt/react_agent_executor.cjs.map +1 -0
  223. package/dist/prebuilt/react_agent_executor.d.cts +211 -0
  224. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -0
  225. package/dist/prebuilt/react_agent_executor.d.ts +211 -0
  226. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -0
  227. package/dist/prebuilt/react_agent_executor.js +338 -0
  228. package/dist/prebuilt/react_agent_executor.js.map +1 -0
  229. package/dist/prebuilt/tool_executor.cjs +43 -0
  230. package/dist/prebuilt/tool_executor.cjs.map +1 -0
  231. package/dist/prebuilt/tool_executor.d.cts +40 -0
  232. package/dist/prebuilt/tool_executor.d.cts.map +1 -0
  233. package/dist/prebuilt/tool_executor.d.ts +40 -0
  234. package/dist/prebuilt/tool_executor.d.ts.map +1 -0
  235. package/dist/prebuilt/tool_executor.js +43 -0
  236. package/dist/prebuilt/tool_executor.js.map +1 -0
  237. package/dist/prebuilt/tool_node.cjs +247 -0
  238. package/dist/prebuilt/tool_node.cjs.map +1 -0
  239. package/dist/prebuilt/tool_node.d.cts +180 -0
  240. package/dist/prebuilt/tool_node.d.cts.map +1 -0
  241. package/dist/prebuilt/tool_node.d.ts +180 -0
  242. package/dist/prebuilt/tool_node.d.ts.map +1 -0
  243. package/dist/prebuilt/tool_node.js +246 -0
  244. package/dist/prebuilt/tool_node.js.map +1 -0
  245. package/dist/pregel/algo.cjs +565 -0
  246. package/dist/pregel/algo.cjs.map +1 -0
  247. package/dist/pregel/algo.d.cts +13 -0
  248. package/dist/pregel/algo.d.cts.map +1 -0
  249. package/dist/pregel/algo.d.ts +13 -0
  250. package/dist/pregel/algo.d.ts.map +1 -0
  251. package/dist/pregel/algo.js +560 -0
  252. package/dist/pregel/algo.js.map +1 -0
  253. package/dist/pregel/call.cjs +50 -0
  254. package/dist/pregel/call.cjs.map +1 -0
  255. package/dist/pregel/call.js +48 -0
  256. package/dist/pregel/call.js.map +1 -0
  257. package/dist/pregel/debug.cjs +172 -0
  258. package/dist/pregel/debug.cjs.map +1 -0
  259. package/dist/pregel/debug.js +166 -0
  260. package/dist/pregel/debug.js.map +1 -0
  261. package/dist/pregel/index.cjs +1163 -0
  262. package/dist/pregel/index.cjs.map +1 -0
  263. package/dist/pregel/index.d.cts +498 -0
  264. package/dist/pregel/index.d.cts.map +1 -0
  265. package/dist/pregel/index.d.ts +498 -0
  266. package/dist/pregel/index.d.ts.map +1 -0
  267. package/dist/pregel/index.js +1162 -0
  268. package/dist/pregel/index.js.map +1 -0
  269. package/dist/pregel/io.cjs +140 -0
  270. package/dist/pregel/io.cjs.map +1 -0
  271. package/dist/pregel/io.js +135 -0
  272. package/dist/pregel/io.js.map +1 -0
  273. package/dist/pregel/loop.cjs +545 -0
  274. package/dist/pregel/loop.cjs.map +1 -0
  275. package/dist/pregel/loop.js +545 -0
  276. package/dist/pregel/loop.js.map +1 -0
  277. package/dist/pregel/messages.cjs +107 -0
  278. package/dist/pregel/messages.cjs.map +1 -0
  279. package/dist/pregel/messages.js +107 -0
  280. package/dist/pregel/messages.js.map +1 -0
  281. package/dist/pregel/read.cjs +151 -0
  282. package/dist/pregel/read.cjs.map +1 -0
  283. package/dist/pregel/read.d.cts +45 -0
  284. package/dist/pregel/read.d.cts.map +1 -0
  285. package/dist/pregel/read.d.ts +45 -0
  286. package/dist/pregel/read.d.ts.map +1 -0
  287. package/dist/pregel/read.js +150 -0
  288. package/dist/pregel/read.js.map +1 -0
  289. package/dist/pregel/remote.cjs +341 -0
  290. package/dist/pregel/remote.cjs.map +1 -0
  291. package/dist/pregel/remote.d.cts +118 -0
  292. package/dist/pregel/remote.d.cts.map +1 -0
  293. package/dist/pregel/remote.d.ts +118 -0
  294. package/dist/pregel/remote.d.ts.map +1 -0
  295. package/dist/pregel/remote.js +341 -0
  296. package/dist/pregel/remote.js.map +1 -0
  297. package/dist/pregel/retry.cjs +91 -0
  298. package/dist/pregel/retry.cjs.map +1 -0
  299. package/dist/pregel/retry.js +91 -0
  300. package/dist/pregel/retry.js.map +1 -0
  301. package/dist/pregel/runnable_types.d.cts +43 -0
  302. package/dist/pregel/runnable_types.d.cts.map +1 -0
  303. package/dist/pregel/runnable_types.d.ts +43 -0
  304. package/dist/pregel/runnable_types.d.ts.map +1 -0
  305. package/dist/pregel/runner.cjs +228 -0
  306. package/dist/pregel/runner.cjs.map +1 -0
  307. package/dist/pregel/runner.js +228 -0
  308. package/dist/pregel/runner.js.map +1 -0
  309. package/dist/pregel/stream.cjs +197 -0
  310. package/dist/pregel/stream.cjs.map +1 -0
  311. package/dist/pregel/stream.js +195 -0
  312. package/dist/pregel/stream.js.map +1 -0
  313. package/dist/pregel/types.cjs +27 -0
  314. package/dist/pregel/types.cjs.map +1 -0
  315. package/dist/pregel/types.d.cts +440 -0
  316. package/dist/pregel/types.d.cts.map +1 -0
  317. package/dist/pregel/types.d.ts +440 -0
  318. package/dist/pregel/types.d.ts.map +1 -0
  319. package/dist/pregel/types.js +25 -0
  320. package/dist/pregel/types.js.map +1 -0
  321. package/dist/pregel/utils/config.cjs +121 -0
  322. package/dist/pregel/utils/config.cjs.map +1 -0
  323. package/dist/pregel/utils/config.d.cts +36 -0
  324. package/dist/pregel/utils/config.d.cts.map +1 -0
  325. package/dist/pregel/utils/config.d.ts +36 -0
  326. package/dist/pregel/utils/config.d.ts.map +1 -0
  327. package/dist/pregel/utils/config.js +115 -0
  328. package/dist/pregel/utils/config.js.map +1 -0
  329. package/dist/pregel/utils/index.cjs +102 -0
  330. package/dist/pregel/utils/index.cjs.map +1 -0
  331. package/dist/pregel/utils/index.d.cts +51 -0
  332. package/dist/pregel/utils/index.d.cts.map +1 -0
  333. package/dist/pregel/utils/index.d.ts +51 -0
  334. package/dist/pregel/utils/index.d.ts.map +1 -0
  335. package/dist/pregel/utils/index.js +96 -0
  336. package/dist/pregel/utils/index.js.map +1 -0
  337. package/dist/pregel/utils/subgraph.cjs +18 -0
  338. package/dist/pregel/utils/subgraph.cjs.map +1 -0
  339. package/dist/pregel/utils/subgraph.js +16 -0
  340. package/dist/pregel/utils/subgraph.js.map +1 -0
  341. package/dist/pregel/validate.cjs +45 -0
  342. package/dist/pregel/validate.cjs.map +1 -0
  343. package/dist/pregel/validate.js +44 -0
  344. package/dist/pregel/validate.js.map +1 -0
  345. package/dist/pregel/write.cjs +96 -0
  346. package/dist/pregel/write.cjs.map +1 -0
  347. package/dist/pregel/write.d.cts +31 -0
  348. package/dist/pregel/write.d.cts.map +1 -0
  349. package/dist/pregel/write.d.ts +31 -0
  350. package/dist/pregel/write.d.ts.map +1 -0
  351. package/dist/pregel/write.js +95 -0
  352. package/dist/pregel/write.js.map +1 -0
  353. package/dist/remote.cjs +3 -0
  354. package/dist/remote.d.cts +2 -0
  355. package/dist/remote.d.ts +2 -0
  356. package/dist/remote.js +3 -0
  357. package/dist/setup/async_local_storage.cjs +11 -0
  358. package/dist/setup/async_local_storage.cjs.map +1 -0
  359. package/dist/setup/async_local_storage.js +11 -0
  360. package/dist/setup/async_local_storage.js.map +1 -0
  361. package/dist/utils.cjs +86 -0
  362. package/dist/utils.cjs.map +1 -0
  363. package/dist/utils.d.cts +25 -0
  364. package/dist/utils.d.cts.map +1 -0
  365. package/dist/utils.d.ts +25 -0
  366. package/dist/utils.d.ts.map +1 -0
  367. package/dist/utils.js +80 -0
  368. package/dist/utils.js.map +1 -0
  369. package/dist/web.cjs +95 -0
  370. package/dist/web.d.cts +23 -0
  371. package/dist/web.d.ts +23 -0
  372. package/dist/web.js +15 -0
  373. package/dist/writer.cjs +14 -0
  374. package/dist/writer.cjs.map +1 -0
  375. package/dist/writer.d.cts +6 -0
  376. package/dist/writer.d.cts.map +1 -0
  377. package/dist/writer.d.ts +6 -0
  378. package/dist/writer.d.ts.map +1 -0
  379. package/dist/writer.js +14 -0
  380. package/dist/writer.js.map +1 -0
  381. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_node.js","names":["tool"],"sources":["../../src/prebuilt/tool_node.ts"],"sourcesContent":["import {\n BaseMessage,\n ToolMessage,\n AIMessage,\n isBaseMessage,\n isAIMessage,\n} from \"@langchain/core/messages\";\nimport { RunnableConfig, RunnableToolLike } from \"@langchain/core/runnables\";\nimport { DynamicTool, StructuredToolInterface } from \"@langchain/core/tools\";\nimport type { ToolCall } from \"@langchain/core/messages/tool\";\nimport { RunnableCallable } from \"../utils.js\";\nimport { MessagesAnnotation } from \"../graph/messages_annotation.js\";\nimport { isGraphInterrupt } from \"../errors.js\";\nimport { END, isCommand, Command, _isSend, Send } from \"../constants.js\";\n\nexport type ToolNodeOptions = {\n name?: string;\n tags?: string[];\n handleToolErrors?: boolean;\n};\n\nconst isBaseMessageArray = (input: unknown): input is BaseMessage[] =>\n Array.isArray(input) && input.every(isBaseMessage);\n\nconst isMessagesState = (\n input: unknown\n): input is { messages: BaseMessage[] } =>\n typeof input === \"object\" &&\n input != null &&\n \"messages\" in input &&\n isBaseMessageArray(input.messages);\n\nconst isSendInput = (input: unknown): input is { lg_tool_call: ToolCall } =>\n typeof input === \"object\" && input != null && \"lg_tool_call\" in input;\n\n/**\n * A node that runs the tools requested in the last AIMessage. It can be used\n * either in StateGraph with a \"messages\" key or in MessageGraph. If multiple\n * tool calls are requested, they will be run in parallel. The output will be\n * a list of ToolMessages, one for each tool call.\n *\n * @example\n * ```ts\n * import { ToolNode } from \"@langchain/langgraph/prebuilt\";\n * import { tool } from \"@langchain/core/tools\";\n * import { z } from \"zod\";\n * import { AIMessage } from \"@langchain/core/messages\";\n *\n * const getWeather = tool((input) => {\n * if ([\"sf\", \"san francisco\"].includes(input.location.toLowerCase())) {\n * return \"It's 60 degrees and foggy.\";\n * } else {\n * return \"It's 90 degrees and sunny.\";\n * }\n * }, {\n * name: \"get_weather\",\n * description: \"Call to get the current weather.\",\n * schema: z.object({\n * location: z.string().describe(\"Location to get the weather for.\"),\n * }),\n * });\n *\n * const tools = [getWeather];\n * const toolNode = new ToolNode(tools);\n *\n * const messageWithSingleToolCall = new AIMessage({\n * content: \"\",\n * tool_calls: [\n * {\n * name: \"get_weather\",\n * args: { location: \"sf\" },\n * id: \"tool_call_id\",\n * type: \"tool_call\",\n * }\n * ]\n * })\n *\n * await toolNode.invoke({ messages: [messageWithSingleToolCall] });\n * // Returns tool invocation responses as:\n * // { messages: ToolMessage[] }\n * ```\n *\n * @example\n * ```ts\n * import {\n * StateGraph,\n * MessagesAnnotation,\n * } from \"@langchain/langgraph\";\n * import { ToolNode } from \"@langchain/langgraph/prebuilt\";\n * import { tool } from \"@langchain/core/tools\";\n * import { z } from \"zod\";\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n *\n * const getWeather = tool((input) => {\n * if ([\"sf\", \"san francisco\"].includes(input.location.toLowerCase())) {\n * return \"It's 60 degrees and foggy.\";\n * } else {\n * return \"It's 90 degrees and sunny.\";\n * }\n * }, {\n * name: \"get_weather\",\n * description: \"Call to get the current weather.\",\n * schema: z.object({\n * location: z.string().describe(\"Location to get the weather for.\"),\n * }),\n * });\n *\n * const tools = [getWeather];\n * const modelWithTools = new ChatAnthropic({\n * model: \"claude-3-haiku-20240307\",\n * temperature: 0\n * }).bindTools(tools);\n *\n * const toolNodeForGraph = new ToolNode(tools)\n *\n * const shouldContinue = (state: typeof MessagesAnnotation.State) => {\n * const { messages } = state;\n * const lastMessage = messages[messages.length - 1];\n * if (\"tool_calls\" in lastMessage && Array.isArray(lastMessage.tool_calls) && lastMessage.tool_calls?.length) {\n * return \"tools\";\n * }\n * return \"__end__\";\n * }\n *\n * const callModel = async (state: typeof MessagesAnnotation.State) => {\n * const { messages } = state;\n * const response = await modelWithTools.invoke(messages);\n * return { messages: response };\n * }\n *\n * const graph = new StateGraph(MessagesAnnotation)\n * .addNode(\"agent\", callModel)\n * .addNode(\"tools\", toolNodeForGraph)\n * .addEdge(\"__start__\", \"agent\")\n * .addConditionalEdges(\"agent\", shouldContinue)\n * .addEdge(\"tools\", \"agent\")\n * .compile();\n *\n * const inputs = {\n * messages: [{ role: \"user\", content: \"what is the weather in SF?\" }],\n * };\n *\n * const stream = await graph.stream(inputs, {\n * streamMode: \"values\",\n * });\n *\n * for await (const { messages } of stream) {\n * console.log(messages);\n * }\n * // Returns the messages in the state at each step of execution\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class ToolNode<T = any> extends RunnableCallable<T, T> {\n tools: (StructuredToolInterface | DynamicTool | RunnableToolLike)[];\n\n handleToolErrors = true;\n\n trace = false;\n\n constructor(\n tools: (StructuredToolInterface | DynamicTool | RunnableToolLike)[],\n options?: ToolNodeOptions\n ) {\n const { name, tags, handleToolErrors } = options ?? {};\n super({ name, tags, func: (input, config) => this.run(input, config) });\n this.tools = tools;\n this.handleToolErrors = handleToolErrors ?? this.handleToolErrors;\n }\n\n protected async runTool(\n call: ToolCall,\n config: RunnableConfig\n ): Promise<ToolMessage | Command> {\n const tool = this.tools.find((tool) => tool.name === call.name);\n try {\n if (tool === undefined) {\n throw new Error(`Tool \"${call.name}\" not found.`);\n }\n const output = await tool.invoke({ ...call, type: \"tool_call\" }, config);\n\n if (\n (isBaseMessage(output) && output.getType() === \"tool\") ||\n isCommand(output)\n ) {\n return output as ToolMessage | Command;\n }\n\n return new ToolMessage({\n status: \"success\",\n name: tool.name,\n content: typeof output === \"string\" ? output : JSON.stringify(output),\n tool_call_id: call.id!,\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (!this.handleToolErrors) throw e;\n\n if (isGraphInterrupt(e)) {\n // `NodeInterrupt` errors are a breakpoint to bring a human into the loop.\n // As such, they are not recoverable by the agent and shouldn't be fed\n // back. Instead, re-throw these errors even when `handleToolErrors = true`.\n throw e;\n }\n\n return new ToolMessage({\n status: \"error\",\n content: `Error: ${e.message}\\n Please fix your mistakes.`,\n name: call.name,\n tool_call_id: call.id ?? \"\",\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected async run(input: unknown, config: RunnableConfig): Promise<T> {\n let outputs: (ToolMessage | Command)[];\n\n if (isSendInput(input)) {\n outputs = [await this.runTool(input.lg_tool_call, config)];\n } else {\n let messages: BaseMessage[];\n if (isBaseMessageArray(input)) {\n messages = input;\n } else if (isMessagesState(input)) {\n messages = input.messages;\n } else {\n throw new Error(\n \"ToolNode only accepts BaseMessage[] or { messages: BaseMessage[] } as input.\"\n );\n }\n\n const toolMessageIds: Set<string> = new Set(\n messages\n .filter((msg) => msg.getType() === \"tool\")\n .map((msg) => (msg as ToolMessage).tool_call_id)\n );\n\n let aiMessage: AIMessage | undefined;\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const message = messages[i];\n if (isAIMessage(message)) {\n aiMessage = message;\n break;\n }\n }\n\n if (aiMessage == null || !isAIMessage(aiMessage)) {\n throw new Error(\"ToolNode only accepts AIMessages as input.\");\n }\n\n outputs = await Promise.all(\n aiMessage.tool_calls\n ?.filter((call) => call.id == null || !toolMessageIds.has(call.id))\n .map((call) => this.runTool(call, config)) ?? []\n );\n }\n\n // Preserve existing behavior for non-command tool outputs for backwards compatibility\n if (!outputs.some(isCommand)) {\n return (Array.isArray(input) ? outputs : { messages: outputs }) as T;\n }\n\n // Handle mixed Command and non-Command outputs\n const combinedOutputs: (\n | { messages: BaseMessage[] }\n | BaseMessage[]\n | Command\n )[] = [];\n let parentCommand: Command | null = null;\n\n for (const output of outputs) {\n if (isCommand(output)) {\n if (\n output.graph === Command.PARENT &&\n Array.isArray(output.goto) &&\n output.goto.every((send) => _isSend(send))\n ) {\n if (parentCommand) {\n (parentCommand.goto as Send[]).push(...(output.goto as Send[]));\n } else {\n parentCommand = new Command({\n graph: Command.PARENT,\n goto: output.goto,\n });\n }\n } else {\n combinedOutputs.push(output);\n }\n } else {\n combinedOutputs.push(\n Array.isArray(input) ? [output] : { messages: [output] }\n );\n }\n }\n\n if (parentCommand) {\n combinedOutputs.push(parentCommand);\n }\n\n return combinedOutputs as T;\n }\n}\n\n/**\n * A conditional edge function that determines whether to route to a tools node or end the graph.\n *\n * This function is designed to be used as a conditional edge in a LangGraph state graph to implement\n * the common pattern of checking if an AI message contains tool calls that need to be executed.\n *\n * @param state - The current state of the graph, which can be either:\n * - An array of `BaseMessage` objects, where the last message is checked for tool calls\n * - A state object conforming to `MessagesAnnotation.State`, which contains a `messages` array\n *\n * @returns A string indicating the next node to route to:\n * - `\"tools\"` - If the last message contains tool calls that need to be executed\n * - `END` - If there are no tool calls, indicating the graph should terminate\n *\n * @example\n * ```typescript\n * import { StateGraph, MessagesAnnotation, END, START } from \"@langchain/langgraph\";\n * import { ToolNode, toolsCondition } from \"@langchain/langgraph/prebuilt\";\n *\n * const graph = new StateGraph(MessagesAnnotation)\n * .addNode(\"agent\", agentNode)\n * .addNode(\"tools\", new ToolNode([searchTool, calculatorTool]))\n * .addEdge(START, \"agent\")\n * .addConditionalEdges(\"agent\", toolsCondition, [\"tools\", END])\n * .addEdge(\"tools\", \"agent\")\n * .compile();\n * ```\n *\n * @remarks\n * The function checks the last message in the state for the presence of `tool_calls`.\n * If the message is an `AIMessage` with one or more tool calls, it returns `\"tools\"`,\n * indicating that the graph should route to a tools node (typically a `ToolNode`) to\n * execute those tool calls. Otherwise, it returns `END` to terminate the graph execution.\n *\n * This is a common pattern in agentic workflows where an AI model decides whether to\n * use tools or provide a final response.\n */\nexport function toolsCondition(\n state: BaseMessage[] | typeof MessagesAnnotation.State\n): \"tools\" | typeof END {\n const message = Array.isArray(state)\n ? state[state.length - 1]\n : state.messages[state.messages.length - 1];\n\n if (\n message !== undefined &&\n \"tool_calls\" in message &&\n ((message as AIMessage).tool_calls?.length ?? 0) > 0\n ) {\n return \"tools\";\n } else {\n return END;\n }\n}\n"],"mappings":";;;;;;AAqBA,MAAM,sBAAsB,UAC1B,MAAM,QAAQ,MAAM,IAAI,MAAM,MAAM,cAAc;AAEpD,MAAM,mBACJ,UAEA,OAAO,UAAU,YACjB,SAAS,QACT,cAAc,SACd,mBAAmB,MAAM,SAAS;AAEpC,MAAM,eAAe,UACnB,OAAO,UAAU,YAAY,SAAS,QAAQ,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwHlE,IAAa,WAAb,cAAuC,iBAAuB;CAC5D;CAEA,mBAAmB;CAEnB,QAAQ;CAER,YACE,OACA,SACA;EACA,MAAM,EAAE,MAAM,MAAM,qBAAqB,WAAW,EAAE;AACtD,QAAM;GAAE;GAAM;GAAM,OAAO,OAAO,WAAW,KAAK,IAAI,OAAO,OAAO;GAAE,CAAC;AACvE,OAAK,QAAQ;AACb,OAAK,mBAAmB,oBAAoB,KAAK;;CAGnD,MAAgB,QACd,MACA,QACgC;EAChC,MAAM,OAAO,KAAK,MAAM,MAAM,WAASA,OAAK,SAAS,KAAK,KAAK;AAC/D,MAAI;AACF,OAAI,SAAS,OACX,OAAM,IAAI,MAAM,SAAS,KAAK,KAAK,cAAc;GAEnD,MAAM,SAAS,MAAM,KAAK,OAAO;IAAE,GAAG;IAAM,MAAM;IAAa,EAAE,OAAO;AAExE,OACG,cAAc,OAAO,IAAI,OAAO,SAAS,KAAK,UAC/C,UAAU,OAAO,CAEjB,QAAO;AAGT,UAAO,IAAI,YAAY;IACrB,QAAQ;IACR,MAAM,KAAK;IACX,SAAS,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,OAAO;IACrE,cAAc,KAAK;IACpB,CAAC;WAEK,GAAQ;AACf,OAAI,CAAC,KAAK,iBAAkB,OAAM;AAElC,OAAI,iBAAiB,EAAE,CAIrB,OAAM;AAGR,UAAO,IAAI,YAAY;IACrB,QAAQ;IACR,SAAS,UAAU,EAAE,QAAQ;IAC7B,MAAM,KAAK;IACX,cAAc,KAAK,MAAM;IAC1B,CAAC;;;CAKN,MAAgB,IAAI,OAAgB,QAAoC;EACtE,IAAI;AAEJ,MAAI,YAAY,MAAM,CACpB,WAAU,CAAC,MAAM,KAAK,QAAQ,MAAM,cAAc,OAAO,CAAC;OACrD;GACL,IAAI;AACJ,OAAI,mBAAmB,MAAM,CAC3B,YAAW;YACF,gBAAgB,MAAM,CAC/B,YAAW,MAAM;OAEjB,OAAM,IAAI,MACR,+EACD;GAGH,MAAM,iBAA8B,IAAI,IACtC,SACG,QAAQ,QAAQ,IAAI,SAAS,KAAK,OAAO,CACzC,KAAK,QAAS,IAAoB,aAAa,CACnD;GAED,IAAI;AACJ,QAAK,IAAI,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;IAChD,MAAM,UAAU,SAAS;AACzB,QAAI,YAAY,QAAQ,EAAE;AACxB,iBAAY;AACZ;;;AAIJ,OAAI,aAAa,QAAQ,CAAC,YAAY,UAAU,CAC9C,OAAM,IAAI,MAAM,6CAA6C;AAG/D,aAAU,MAAM,QAAQ,IACtB,UAAU,YACN,QAAQ,SAAS,KAAK,MAAM,QAAQ,CAAC,eAAe,IAAI,KAAK,GAAG,CAAC,CAClE,KAAK,SAAS,KAAK,QAAQ,MAAM,OAAO,CAAC,IAAI,EAAE,CACnD;;AAIH,MAAI,CAAC,QAAQ,KAAK,UAAU,CAC1B,QAAQ,MAAM,QAAQ,MAAM,GAAG,UAAU,EAAE,UAAU,SAAS;EAIhE,MAAM,kBAIA,EAAE;EACR,IAAI,gBAAgC;AAEpC,OAAK,MAAM,UAAU,QACnB,KAAI,UAAU,OAAO,CACnB,KACE,OAAO,UAAU,QAAQ,UACzB,MAAM,QAAQ,OAAO,KAAK,IAC1B,OAAO,KAAK,OAAO,SAAS,QAAQ,KAAK,CAAC,CAE1C,KAAI,cACF,CAAC,cAAc,KAAgB,KAAK,GAAI,OAAO,KAAgB;MAE/D,iBAAgB,IAAI,QAAQ;GAC1B,OAAO,QAAQ;GACf,MAAM,OAAO;GACd,CAAC;MAGJ,iBAAgB,KAAK,OAAO;MAG9B,iBAAgB,KACd,MAAM,QAAQ,MAAM,GAAG,CAAC,OAAO,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,CACzD;AAIL,MAAI,cACF,iBAAgB,KAAK,cAAc;AAGrC,SAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCX,SAAgB,eACd,OACsB;CACtB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAChC,MAAM,MAAM,SAAS,KACrB,MAAM,SAAS,MAAM,SAAS,SAAS;AAE3C,KACE,YAAY,UACZ,gBAAgB,YACd,QAAsB,YAAY,UAAU,KAAK,EAEnD,QAAO;KAEP,QAAO"}
@@ -0,0 +1,565 @@
1
+ const require_errors = require('../errors.cjs');
2
+ const require_base = require('../channels/base.cjs');
3
+ const require_constants = require('../constants.cjs');
4
+ const require_hash = require('../hash.cjs');
5
+ const require_io = require('./io.cjs');
6
+ const require_types = require('./types.cjs');
7
+ const require_index = require('./utils/index.cjs');
8
+ const require_call = require('./call.cjs');
9
+ let _langchain_langgraph_checkpoint = require("@langchain/langgraph-checkpoint");
10
+ let _langchain_core_runnables = require("@langchain/core/runnables");
11
+
12
+ //#region src/pregel/algo.ts
13
+ const increment = (current) => {
14
+ return current !== void 0 ? current + 1 : 1;
15
+ };
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
+ }
21
+ function maxChannelMapVersion(channelVersions) {
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 = (0, _langchain_langgraph_checkpoint.maxChannelVersion)(maxVersion, channelVersions[chan]);
27
+ }
28
+ return maxVersion;
29
+ }
30
+ function shouldInterrupt(checkpoint, interruptNodes, tasks) {
31
+ const nullVersion = require_index.getNullChannelVersion(checkpoint.channel_versions);
32
+ const seen = checkpoint.versions_seen[require_constants.INTERRUPT] ?? {};
33
+ let anyChannelUpdated = false;
34
+ if ((checkpoint.channel_versions[require_constants.START] ?? nullVersion) > (seen[require_constants.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(require_constants.TAG_HIDDEN) : interruptNodes.includes(task.name));
43
+ return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;
44
+ }
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 = require_base.createCheckpoint(checkpoint, localChannels, -1);
58
+ const newChannels = require_base.emptyChannels(localChannels, newCheckpoint);
59
+ _applyWrites((0, _langchain_langgraph_checkpoint.copyCheckpoint)(newCheckpoint), newChannels, [task], void 0, void 0);
60
+ values = require_io.readChannels({
61
+ ...channels,
62
+ ...newChannels
63
+ }, select);
64
+ } else values = require_io.readChannels(channels, select);
65
+ return values;
66
+ }
67
+ function _localWrite(commit, processes, writes) {
68
+ for (const [chan, value] of writes) if ([require_constants.PUSH, require_constants.TASKS].includes(chan) && value != null) {
69
+ if (!require_constants._isSend(value)) throw new require_errors.InvalidUpdateError(`Invalid packet type, expected SendProtocol, got ${JSON.stringify(value)}`);
70
+ if (!(value.node in processes)) throw new require_errors.InvalidUpdateError(`Invalid node name "${value.node}" in Send packet`);
71
+ }
72
+ commit(writes);
73
+ }
74
+ const IGNORE = new Set([
75
+ require_constants.NO_WRITES,
76
+ require_constants.PUSH,
77
+ require_constants.RESUME,
78
+ require_constants.INTERRUPT,
79
+ require_constants.RETURN,
80
+ require_constants.ERROR
81
+ ]);
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 = require_base.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) => !require_constants.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 === require_errors.InvalidUpdateError.unminifiable_name) {
121
+ const wrappedError = new require_errors.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
+ if (channel.update([]) && getNextVersion !== void 0) {
136
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
137
+ if (channel.isAvailable()) updatedChannels.add(chan);
138
+ }
139
+ }
140
+ }
141
+ if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) for (const chan in onlyChannels) {
142
+ if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
143
+ const channel = onlyChannels[chan];
144
+ if (channel.finish() && getNextVersion !== void 0) {
145
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
146
+ if (channel.isAvailable()) updatedChannels.add(chan);
147
+ }
148
+ }
149
+ return updatedChannels;
150
+ }
151
+ function* candidateNodes(checkpoint, processes, extra) {
152
+ if (extra.updatedChannels != null && extra.triggerToNodes != null) {
153
+ const triggeredNodes = /* @__PURE__ */ new Set();
154
+ for (const channel of extra.updatedChannels) {
155
+ const nodeIds = extra.triggerToNodes[channel];
156
+ for (const id of nodeIds ?? []) triggeredNodes.add(id);
157
+ }
158
+ yield* [...triggeredNodes].sort();
159
+ return;
160
+ }
161
+ if ((() => {
162
+ for (const chan in checkpoint.channel_versions) if (checkpoint.channel_versions[chan] !== null) return false;
163
+ return true;
164
+ })()) return;
165
+ for (const name in processes) {
166
+ if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;
167
+ yield name;
168
+ }
169
+ }
170
+ /**
171
+ * Prepare the set of tasks that will make up the next Pregel step.
172
+ * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered
173
+ * by edges).
174
+ */
175
+ function _prepareNextTasks(checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
176
+ const tasks = {};
177
+ const tasksChannel = channels[require_constants.TASKS];
178
+ if (tasksChannel?.isAvailable()) {
179
+ const len = tasksChannel.get().length;
180
+ for (let i = 0; i < len; i += 1) {
181
+ const task = _prepareSingleTask([require_constants.PUSH, i], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
182
+ if (task !== void 0) tasks[task.id] = task;
183
+ }
184
+ }
185
+ for (const name of candidateNodes(checkpoint, processes, extra)) {
186
+ const task = _prepareSingleTask([require_constants.PULL, name], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
187
+ if (task !== void 0) tasks[task.id] = task;
188
+ }
189
+ return tasks;
190
+ }
191
+ /**
192
+ * Prepares a single task for the next Pregel step, given a task path, which
193
+ * uniquely identifies a PUSH or PULL task within the graph.
194
+ */
195
+ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
196
+ const { step, checkpointer, manager } = extra;
197
+ const configurable = config.configurable ?? {};
198
+ const parentNamespace = configurable.checkpoint_ns ?? "";
199
+ if (taskPath[0] === require_constants.PUSH && require_types.isCall(taskPath[taskPath.length - 1])) {
200
+ const call = taskPath[taskPath.length - 1];
201
+ const proc = require_call.getRunnableForFunc(call.name, call.func);
202
+ const triggers = [require_constants.PUSH];
203
+ const checkpointNamespace = parentNamespace === "" ? call.name : `${parentNamespace}${require_constants.CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;
204
+ const id = (0, _langchain_langgraph_checkpoint.uuid5)(JSON.stringify([
205
+ checkpointNamespace,
206
+ step.toString(),
207
+ call.name,
208
+ require_constants.PUSH,
209
+ taskPath[1],
210
+ taskPath[2]
211
+ ]), checkpoint.id);
212
+ const taskCheckpointNamespace = `${checkpointNamespace}${require_constants.CHECKPOINT_NAMESPACE_END}${id}`;
213
+ const outputTaskPath = [...taskPath.slice(0, 3), true];
214
+ const metadata = {
215
+ langgraph_step: step,
216
+ langgraph_node: call.name,
217
+ langgraph_triggers: triggers,
218
+ langgraph_path: outputTaskPath,
219
+ langgraph_checkpoint_ns: taskCheckpointNamespace
220
+ };
221
+ if (forExecution) {
222
+ const writes = [];
223
+ return {
224
+ name: call.name,
225
+ input: call.input,
226
+ proc,
227
+ writes,
228
+ config: (0, _langchain_core_runnables.patchConfig)((0, _langchain_core_runnables.mergeConfigs)(config, {
229
+ metadata,
230
+ store: extra.store ?? config.store
231
+ }), {
232
+ runName: call.name,
233
+ callbacks: manager?.getChild(`graph:step:${step}`),
234
+ configurable: {
235
+ [require_constants.CONFIG_KEY_TASK_ID]: id,
236
+ [require_constants.CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
237
+ [require_constants.CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
238
+ name: call.name,
239
+ writes,
240
+ triggers,
241
+ path: outputTaskPath
242
+ }, select_, fresh_),
243
+ [require_constants.CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[require_constants.CONFIG_KEY_CHECKPOINTER],
244
+ [require_constants.CONFIG_KEY_CHECKPOINT_MAP]: {
245
+ ...configurable[require_constants.CONFIG_KEY_CHECKPOINT_MAP],
246
+ [parentNamespace]: checkpoint.id
247
+ },
248
+ [require_constants.CONFIG_KEY_SCRATCHPAD]: _scratchpad({
249
+ pendingWrites: pendingWrites ?? [],
250
+ taskId: id,
251
+ currentTaskInput: call.input,
252
+ resumeMap: config.configurable?.[require_constants.CONFIG_KEY_RESUME_MAP],
253
+ namespaceHash: require_hash.XXH3(taskCheckpointNamespace)
254
+ }),
255
+ [require_constants.CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[require_constants.PREVIOUS],
256
+ checkpoint_id: void 0,
257
+ checkpoint_ns: taskCheckpointNamespace
258
+ }
259
+ }),
260
+ triggers,
261
+ retry_policy: call.retry,
262
+ cache_key: call.cache ? {
263
+ key: require_hash.XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),
264
+ ns: [require_constants.CACHE_NS_WRITES, call.name ?? "__dynamic__"],
265
+ ttl: call.cache.ttl
266
+ } : void 0,
267
+ id,
268
+ path: outputTaskPath,
269
+ writers: []
270
+ };
271
+ } else return {
272
+ id,
273
+ name: call.name,
274
+ interrupts: [],
275
+ path: outputTaskPath
276
+ };
277
+ } else if (taskPath[0] === require_constants.PUSH) {
278
+ const index = typeof taskPath[1] === "number" ? taskPath[1] : parseInt(taskPath[1], 10);
279
+ if (!channels[require_constants.TASKS]?.isAvailable()) return;
280
+ const sends = channels[require_constants.TASKS].get();
281
+ if (index < 0 || index >= sends.length) return;
282
+ const packet = require_constants._isSendInterface(sends[index]) && !require_constants._isSend(sends[index]) ? new require_constants.Send(sends[index].node, sends[index].args) : sends[index];
283
+ if (!require_constants._isSendInterface(packet)) {
284
+ console.warn(`Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`);
285
+ return;
286
+ }
287
+ if (!(packet.node in processes)) {
288
+ console.warn(`Ignoring unknown node name ${packet.node} in pending sends.`);
289
+ return;
290
+ }
291
+ const triggers = [require_constants.PUSH];
292
+ const checkpointNamespace = parentNamespace === "" ? packet.node : `${parentNamespace}${require_constants.CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;
293
+ const taskId = (0, _langchain_langgraph_checkpoint.uuid5)(JSON.stringify([
294
+ checkpointNamespace,
295
+ step.toString(),
296
+ packet.node,
297
+ require_constants.PUSH,
298
+ index.toString()
299
+ ]), checkpoint.id);
300
+ const taskCheckpointNamespace = `${checkpointNamespace}${require_constants.CHECKPOINT_NAMESPACE_END}${taskId}`;
301
+ let metadata = {
302
+ langgraph_step: step,
303
+ langgraph_node: packet.node,
304
+ langgraph_triggers: triggers,
305
+ langgraph_path: taskPath.slice(0, 3),
306
+ langgraph_checkpoint_ns: taskCheckpointNamespace
307
+ };
308
+ if (forExecution) {
309
+ const proc = processes[packet.node];
310
+ const node = proc.getNode();
311
+ if (node !== void 0) {
312
+ if (proc.metadata !== void 0) metadata = {
313
+ ...metadata,
314
+ ...proc.metadata
315
+ };
316
+ const writes = [];
317
+ return {
318
+ name: packet.node,
319
+ input: packet.args,
320
+ proc: node,
321
+ subgraphs: proc.subgraphs,
322
+ writes,
323
+ config: (0, _langchain_core_runnables.patchConfig)((0, _langchain_core_runnables.mergeConfigs)(config, {
324
+ metadata,
325
+ tags: proc.tags,
326
+ store: extra.store ?? config.store
327
+ }), {
328
+ runName: packet.node,
329
+ callbacks: manager?.getChild(`graph:step:${step}`),
330
+ configurable: {
331
+ [require_constants.CONFIG_KEY_TASK_ID]: taskId,
332
+ [require_constants.CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
333
+ [require_constants.CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
334
+ name: packet.node,
335
+ writes,
336
+ triggers,
337
+ path: taskPath
338
+ }, select_, fresh_),
339
+ [require_constants.CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[require_constants.CONFIG_KEY_CHECKPOINTER],
340
+ [require_constants.CONFIG_KEY_CHECKPOINT_MAP]: {
341
+ ...configurable[require_constants.CONFIG_KEY_CHECKPOINT_MAP],
342
+ [parentNamespace]: checkpoint.id
343
+ },
344
+ [require_constants.CONFIG_KEY_SCRATCHPAD]: _scratchpad({
345
+ pendingWrites: pendingWrites ?? [],
346
+ taskId,
347
+ currentTaskInput: packet.args,
348
+ resumeMap: config.configurable?.[require_constants.CONFIG_KEY_RESUME_MAP],
349
+ namespaceHash: require_hash.XXH3(taskCheckpointNamespace)
350
+ }),
351
+ [require_constants.CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[require_constants.PREVIOUS],
352
+ checkpoint_id: void 0,
353
+ checkpoint_ns: taskCheckpointNamespace
354
+ }
355
+ }),
356
+ triggers,
357
+ retry_policy: proc.retryPolicy,
358
+ cache_key: proc.cachePolicy ? {
359
+ key: require_hash.XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])),
360
+ ns: [
361
+ require_constants.CACHE_NS_WRITES,
362
+ proc.name ?? "__dynamic__",
363
+ packet.node
364
+ ],
365
+ ttl: proc.cachePolicy.ttl
366
+ } : void 0,
367
+ id: taskId,
368
+ path: taskPath,
369
+ writers: proc.getWriters()
370
+ };
371
+ }
372
+ } else return {
373
+ id: taskId,
374
+ name: packet.node,
375
+ interrupts: [],
376
+ path: taskPath
377
+ };
378
+ } else if (taskPath[0] === require_constants.PULL) {
379
+ const name = taskPath[1].toString();
380
+ const proc = processes[name];
381
+ if (proc === void 0) return;
382
+ if (pendingWrites?.length) {
383
+ const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${require_constants.CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
384
+ const taskId = (0, _langchain_langgraph_checkpoint.uuid5)(JSON.stringify([
385
+ checkpointNamespace,
386
+ step.toString(),
387
+ name,
388
+ require_constants.PULL,
389
+ name
390
+ ]), checkpoint.id);
391
+ if (pendingWrites.some((w) => w[0] === taskId && w[1] !== require_constants.ERROR)) return;
392
+ }
393
+ const nullVersion = require_index.getNullChannelVersion(checkpoint.channel_versions);
394
+ if (nullVersion === void 0) return;
395
+ const seen = checkpoint.versions_seen[name] ?? {};
396
+ const trigger = proc.triggers.find((chan) => {
397
+ if (!channels[chan].isAvailable()) return false;
398
+ return (checkpoint.channel_versions[chan] ?? nullVersion) > (seen[chan] ?? nullVersion);
399
+ });
400
+ if (trigger !== void 0) {
401
+ const val = _procInput(proc, channels, forExecution);
402
+ if (val === void 0) return;
403
+ const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${require_constants.CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
404
+ const taskId = (0, _langchain_langgraph_checkpoint.uuid5)(JSON.stringify([
405
+ checkpointNamespace,
406
+ step.toString(),
407
+ name,
408
+ require_constants.PULL,
409
+ [trigger]
410
+ ]), checkpoint.id);
411
+ const taskCheckpointNamespace = `${checkpointNamespace}${require_constants.CHECKPOINT_NAMESPACE_END}${taskId}`;
412
+ let metadata = {
413
+ langgraph_step: step,
414
+ langgraph_node: name,
415
+ langgraph_triggers: [trigger],
416
+ langgraph_path: taskPath,
417
+ langgraph_checkpoint_ns: taskCheckpointNamespace
418
+ };
419
+ if (forExecution) {
420
+ const node = proc.getNode();
421
+ if (node !== void 0) {
422
+ if (proc.metadata !== void 0) metadata = {
423
+ ...metadata,
424
+ ...proc.metadata
425
+ };
426
+ const writes = [];
427
+ return {
428
+ name,
429
+ input: val,
430
+ proc: node,
431
+ subgraphs: proc.subgraphs,
432
+ writes,
433
+ config: (0, _langchain_core_runnables.patchConfig)((0, _langchain_core_runnables.mergeConfigs)(config, {
434
+ metadata,
435
+ tags: proc.tags,
436
+ store: extra.store ?? config.store
437
+ }), {
438
+ runName: name,
439
+ callbacks: manager?.getChild(`graph:step:${step}`),
440
+ configurable: {
441
+ [require_constants.CONFIG_KEY_TASK_ID]: taskId,
442
+ [require_constants.CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => {
443
+ writes.push(...items);
444
+ }, processes, writes_),
445
+ [require_constants.CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
446
+ name,
447
+ writes,
448
+ triggers: [trigger],
449
+ path: taskPath
450
+ }, select_, fresh_),
451
+ [require_constants.CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[require_constants.CONFIG_KEY_CHECKPOINTER],
452
+ [require_constants.CONFIG_KEY_CHECKPOINT_MAP]: {
453
+ ...configurable[require_constants.CONFIG_KEY_CHECKPOINT_MAP],
454
+ [parentNamespace]: checkpoint.id
455
+ },
456
+ [require_constants.CONFIG_KEY_SCRATCHPAD]: _scratchpad({
457
+ pendingWrites: pendingWrites ?? [],
458
+ taskId,
459
+ currentTaskInput: val,
460
+ resumeMap: config.configurable?.[require_constants.CONFIG_KEY_RESUME_MAP],
461
+ namespaceHash: require_hash.XXH3(taskCheckpointNamespace)
462
+ }),
463
+ [require_constants.CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[require_constants.PREVIOUS],
464
+ checkpoint_id: void 0,
465
+ checkpoint_ns: taskCheckpointNamespace
466
+ }
467
+ }),
468
+ triggers: [trigger],
469
+ retry_policy: proc.retryPolicy,
470
+ cache_key: proc.cachePolicy ? {
471
+ key: require_hash.XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([val])),
472
+ ns: [
473
+ require_constants.CACHE_NS_WRITES,
474
+ proc.name ?? "__dynamic__",
475
+ name
476
+ ],
477
+ ttl: proc.cachePolicy.ttl
478
+ } : void 0,
479
+ id: taskId,
480
+ path: taskPath,
481
+ writers: proc.getWriters()
482
+ };
483
+ }
484
+ } else return {
485
+ id: taskId,
486
+ name,
487
+ interrupts: [],
488
+ path: taskPath
489
+ };
490
+ }
491
+ }
492
+ }
493
+ /**
494
+ * Function injected under CONFIG_KEY_READ in task config, to read current state.
495
+ * Used by conditional edges to read a copy of the state with reflecting the writes
496
+ * from that node only.
497
+ *
498
+ * @internal
499
+ */
500
+ function _procInput(proc, channels, forExecution) {
501
+ let val;
502
+ if (typeof proc.channels === "object" && !Array.isArray(proc.channels)) {
503
+ val = {};
504
+ for (const [k, chan] of Object.entries(proc.channels)) if (proc.triggers.includes(chan)) try {
505
+ val[k] = require_io.readChannel(channels, chan, false);
506
+ } catch (e) {
507
+ if (e.name === require_errors.EmptyChannelError.unminifiable_name) return;
508
+ else throw e;
509
+ }
510
+ else if (chan in channels) try {
511
+ val[k] = require_io.readChannel(channels, chan, false);
512
+ } catch (e) {
513
+ if (e.name === require_errors.EmptyChannelError.unminifiable_name) continue;
514
+ else throw e;
515
+ }
516
+ } else if (Array.isArray(proc.channels)) {
517
+ let successfulRead = false;
518
+ for (const chan of proc.channels) try {
519
+ val = require_io.readChannel(channels, chan, false);
520
+ successfulRead = true;
521
+ break;
522
+ } catch (e) {
523
+ if (e.name === require_errors.EmptyChannelError.unminifiable_name) continue;
524
+ else throw e;
525
+ }
526
+ if (!successfulRead) return;
527
+ } else throw new Error(`Invalid channels type, expected list or dict, got ${proc.channels}`);
528
+ if (forExecution && proc.mapper !== void 0) val = proc.mapper(val);
529
+ return val;
530
+ }
531
+ function _scratchpad({ pendingWrites, taskId, currentTaskInput, resumeMap, namespaceHash }) {
532
+ const nullResume = pendingWrites.find(([writeTaskId, chan]) => writeTaskId === require_constants.NULL_TASK_ID && chan === require_constants.RESUME)?.[2];
533
+ const scratchpad = {
534
+ callCounter: 0,
535
+ interruptCounter: -1,
536
+ resume: (() => {
537
+ const result = pendingWrites.filter(([writeTaskId, chan]) => writeTaskId === taskId && chan === require_constants.RESUME).flatMap(([_writeTaskId, _chan, resume]) => resume);
538
+ if (resumeMap != null && namespaceHash in resumeMap) {
539
+ const mappedResume = resumeMap[namespaceHash];
540
+ result.push(mappedResume);
541
+ }
542
+ return result;
543
+ })(),
544
+ nullResume,
545
+ subgraphCounter: 0,
546
+ currentTaskInput,
547
+ consumeNullResume: () => {
548
+ if (scratchpad.nullResume) {
549
+ delete scratchpad.nullResume;
550
+ pendingWrites.splice(pendingWrites.findIndex(([writeTaskId, chan]) => writeTaskId === require_constants.NULL_TASK_ID && chan === require_constants.RESUME), 1);
551
+ return nullResume;
552
+ }
553
+ }
554
+ };
555
+ return scratchpad;
556
+ }
557
+
558
+ //#endregion
559
+ exports._applyWrites = _applyWrites;
560
+ exports._localRead = _localRead;
561
+ exports._prepareNextTasks = _prepareNextTasks;
562
+ exports._prepareSingleTask = _prepareSingleTask;
563
+ exports.increment = increment;
564
+ exports.shouldInterrupt = shouldInterrupt;
565
+ //# sourceMappingURL=algo.cjs.map