@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,321 +1,228 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PregelRunner = void 0;
4
- const types_js_1 = require("./types.cjs");
5
- const index_js_1 = require("./utils/index.cjs");
6
- const constants_js_1 = require("../constants.cjs");
7
- const errors_js_1 = require("../errors.cjs");
8
- const retry_js_1 = require("./retry.cjs");
1
+ const require_errors = require('../errors.cjs');
2
+ const require_constants = require('../constants.cjs');
3
+ const require_types = require('./types.cjs');
4
+ const require_index = require('./utils/index.cjs');
5
+ const require_retry = require('./retry.cjs');
6
+
7
+ //#region src/pregel/runner.ts
9
8
  const PROMISE_ADDED_SYMBOL = Symbol.for("promiseAdded");
10
9
  function createPromiseBarrier() {
11
- const barrier = {
12
- next: () => void 0,
13
- wait: Promise.resolve(PROMISE_ADDED_SYMBOL),
14
- };
15
- function waitHandler(resolve) {
16
- barrier.next = () => {
17
- barrier.wait = new Promise(waitHandler);
18
- resolve(PROMISE_ADDED_SYMBOL);
19
- };
20
- }
21
- barrier.wait = new Promise(waitHandler);
22
- return barrier;
10
+ const barrier = {
11
+ next: () => void 0,
12
+ wait: Promise.resolve(PROMISE_ADDED_SYMBOL)
13
+ };
14
+ function waitHandler(resolve) {
15
+ barrier.next = () => {
16
+ barrier.wait = new Promise(waitHandler);
17
+ resolve(PROMISE_ADDED_SYMBOL);
18
+ };
19
+ }
20
+ barrier.wait = new Promise(waitHandler);
21
+ return barrier;
23
22
  }
24
23
  /**
25
- * Responsible for handling task execution on each tick of the {@link PregelLoop}.
26
- */
27
- class PregelRunner {
28
- /**
29
- * Construct a new PregelRunner, which executes tasks from the provided PregelLoop.
30
- * @param loop - The PregelLoop that produces tasks for this runner to execute.
31
- */
32
- constructor({ loop, nodeFinished, }) {
33
- Object.defineProperty(this, "nodeFinished", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: void 0
38
- });
39
- Object.defineProperty(this, "loop", {
40
- enumerable: true,
41
- configurable: true,
42
- writable: true,
43
- value: void 0
44
- });
45
- this.loop = loop;
46
- this.nodeFinished = nodeFinished;
47
- }
48
- /**
49
- * Execute tasks from the current step of the PregelLoop.
50
- *
51
- * Note: this method does NOT call {@link PregelLoop}#tick. That must be handled externally.
52
- * @param options - Options for the execution.
53
- */
54
- async tick(options = {}) {
55
- const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;
56
- const nodeErrors = new Set();
57
- let graphBubbleUp;
58
- const exceptionSignalController = new AbortController();
59
- const exceptionSignal = exceptionSignalController.signal;
60
- const stepTimeoutSignal = timeout
61
- ? AbortSignal.timeout(timeout)
62
- : undefined;
63
- // Start task execution
64
- const pendingTasks = Object.values(this.loop.tasks).filter((t) => t.writes.length === 0);
65
- const { signals, disposeCombinedSignal } = this._initializeAbortSignals({
66
- exceptionSignal,
67
- stepTimeoutSignal,
68
- signal: options.signal,
69
- });
70
- const taskStream = this._executeTasksWithRetry(pendingTasks, {
71
- signals,
72
- retryPolicy,
73
- maxConcurrency,
74
- });
75
- for await (const { task, error, signalAborted } of taskStream) {
76
- this._commit(task, error);
77
- if ((0, errors_js_1.isGraphInterrupt)(error)) {
78
- graphBubbleUp = error;
79
- }
80
- else if ((0, errors_js_1.isGraphBubbleUp)(error) && !(0, errors_js_1.isGraphInterrupt)(graphBubbleUp)) {
81
- graphBubbleUp = error;
82
- }
83
- else if (error && (nodeErrors.size === 0 || !signalAborted)) {
84
- /*
85
- * The goal here is to capture the exception that causes the graph to terminate early. In
86
- * theory it's possible for multiple nodes to throw, so this also handles the edge case of
87
- * capturing concurrent exceptions thrown before the node saw an abort. This is checked via
88
- * the signalAborted flag, which records the state of the abort signal at the time the node
89
- * execution finished.
90
- *
91
- * There is a case however where one node throws some error causing us to trigger an abort,
92
- * which then causes other concurrently executing nodes to throw their own AbortErrors. In
93
- * this case we don't care about reporting the abort errors thrown by the other nodes,
94
- * because they don't tell the user anything about what caused the graph execution to
95
- * terminate early, so we ignore them (and any other errors that occur after the node sees
96
- * an abort signal).
97
- */
98
- exceptionSignalController.abort();
99
- nodeErrors.add(error);
100
- }
101
- }
102
- disposeCombinedSignal?.();
103
- onStepWrite?.(this.loop.step, Object.values(this.loop.tasks)
104
- .map((task) => task.writes)
105
- .flat());
106
- if (nodeErrors.size === 1) {
107
- throw Array.from(nodeErrors)[0];
108
- }
109
- else if (nodeErrors.size > 1) {
110
- throw new AggregateError(Array.from(nodeErrors), `Multiple errors occurred during superstep ${this.loop.step}. See the "errors" field of this exception for more details.`);
111
- }
112
- if ((0, errors_js_1.isGraphInterrupt)(graphBubbleUp)) {
113
- throw graphBubbleUp;
114
- }
115
- if ((0, errors_js_1.isGraphBubbleUp)(graphBubbleUp) && this.loop.isNested) {
116
- throw graphBubbleUp;
117
- }
118
- }
119
- /**
120
- * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
121
- * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
122
- * while still allowing nodes to gracefully exit.
123
- *
124
- * This method must only be called once per PregelRunner#tick. It has the side effect of updating
125
- * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
126
- * ticks and subgraph calls.
127
- *
128
- * @param options - Options for the initialization.
129
- * @returns The current abort signals.
130
- * @internal
131
- */
132
- _initializeAbortSignals({ exceptionSignal, stepTimeoutSignal, signal, }) {
133
- const previousSignals = (this.loop.config.configurable?.[constants_js_1.CONFIG_KEY_ABORT_SIGNALS] ?? {});
134
- // We always inherit the external abort signal from AsyncLocalStorage,
135
- // since that's the only way the signal is inherited by the subgraph calls.
136
- const externalAbortSignal = previousSignals.externalAbortSignal ?? signal;
137
- // inherit the step timeout signal from parent graph
138
- const timeoutAbortSignal = stepTimeoutSignal ?? previousSignals.timeoutAbortSignal;
139
- const { signal: composedAbortSignal, dispose: disposeCombinedSignal } = (0, index_js_1.combineAbortSignals)(externalAbortSignal, timeoutAbortSignal, exceptionSignal);
140
- const signals = {
141
- externalAbortSignal,
142
- timeoutAbortSignal,
143
- composedAbortSignal,
144
- };
145
- this.loop.config = (0, index_js_1.patchConfigurable)(this.loop.config, {
146
- [constants_js_1.CONFIG_KEY_ABORT_SIGNALS]: signals,
147
- });
148
- return { signals, disposeCombinedSignal };
149
- }
150
- /**
151
- * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
152
- * @param tasks - The tasks to execute.
153
- * @param options - Options for the execution.
154
- */
155
- async *_executeTasksWithRetry(tasks, options) {
156
- const { retryPolicy, maxConcurrency, signals } = options ?? {};
157
- const barrier = createPromiseBarrier();
158
- const executingTasksMap = {};
159
- const thisCall = {
160
- executingTasksMap,
161
- barrier,
162
- retryPolicy,
163
- scheduleTask: async (task, writeIdx, call) => this.loop.acceptPush(task, writeIdx, call),
164
- };
165
- if (signals?.composedAbortSignal?.aborted) {
166
- // note: don't use throwIfAborted here because it throws a DOMException,
167
- // which isn't consistent with how we throw on abort below.
168
- throw new Error("Abort");
169
- }
170
- let startedTasksCount = 0;
171
- let listener;
172
- const timeoutOrCancelSignal = (0, index_js_1.combineAbortSignals)(signals?.externalAbortSignal, signals?.timeoutAbortSignal);
173
- const abortPromise = timeoutOrCancelSignal.signal
174
- ? new Promise((_resolve, reject) => {
175
- listener = () => reject(new Error("Abort"));
176
- timeoutOrCancelSignal.signal?.addEventListener("abort", listener, {
177
- once: true,
178
- });
179
- })
180
- : undefined;
181
- while ((startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) &&
182
- tasks.length) {
183
- for (; Object.values(executingTasksMap).length <
184
- (maxConcurrency ?? tasks.length) && startedTasksCount < tasks.length; startedTasksCount += 1) {
185
- const task = tasks[startedTasksCount];
186
- executingTasksMap[task.id] = (0, retry_js_1._runWithRetry)(task, retryPolicy, { [constants_js_1.CONFIG_KEY_CALL]: call?.bind(thisCall, this, task) }, signals?.composedAbortSignal).catch((error) => {
187
- return {
188
- task,
189
- error,
190
- signalAborted: signals?.composedAbortSignal?.aborted,
191
- };
192
- });
193
- }
194
- const settledTask = await Promise.race([
195
- ...Object.values(executingTasksMap),
196
- ...(abortPromise ? [abortPromise] : []),
197
- barrier.wait,
198
- ]);
199
- if (settledTask === PROMISE_ADDED_SYMBOL) {
200
- continue;
201
- }
202
- yield settledTask;
203
- if (listener != null) {
204
- timeoutOrCancelSignal.signal?.removeEventListener("abort", listener);
205
- timeoutOrCancelSignal.dispose?.();
206
- }
207
- delete executingTasksMap[settledTask.task.id];
208
- }
209
- }
210
- /**
211
- * Determines what writes to apply based on whether the task completed successfully, and what type of error occurred.
212
- *
213
- * Throws an error if the error is a {@link GraphBubbleUp} error and {@link PregelLoop}#isNested is true.
214
- *
215
- * @param task - The task to commit.
216
- * @param error - The error that occurred, if any.
217
- */
218
- _commit(task, error) {
219
- if (error !== undefined) {
220
- if ((0, errors_js_1.isGraphInterrupt)(error)) {
221
- if (error.interrupts.length) {
222
- const interrupts = error.interrupts.map((interrupt) => [constants_js_1.INTERRUPT, interrupt]);
223
- const resumes = task.writes.filter((w) => w[0] === constants_js_1.RESUME);
224
- if (resumes.length) {
225
- interrupts.push(...resumes);
226
- }
227
- this.loop.putWrites(task.id, interrupts);
228
- }
229
- }
230
- else if ((0, errors_js_1.isGraphBubbleUp)(error) && task.writes.length) {
231
- this.loop.putWrites(task.id, task.writes);
232
- }
233
- else {
234
- this.loop.putWrites(task.id, [
235
- [constants_js_1.ERROR, { message: error.message, name: error.name }],
236
- ]);
237
- }
238
- }
239
- else {
240
- if (this.nodeFinished &&
241
- (task.config?.tags == null || !task.config.tags.includes(constants_js_1.TAG_HIDDEN))) {
242
- this.nodeFinished(String(task.name));
243
- }
244
- if (task.writes.length === 0) {
245
- // Add no writes marker
246
- task.writes.push([constants_js_1.NO_WRITES, null]);
247
- }
248
- // Save task writes to checkpointer
249
- this.loop.putWrites(task.id, task.writes);
250
- }
251
- }
252
- }
253
- exports.PregelRunner = PregelRunner;
24
+ * Responsible for handling task execution on each tick of the {@link PregelLoop}.
25
+ */
26
+ var PregelRunner = class {
27
+ nodeFinished;
28
+ loop;
29
+ /**
30
+ * Construct a new PregelRunner, which executes tasks from the provided PregelLoop.
31
+ * @param loop - The PregelLoop that produces tasks for this runner to execute.
32
+ */
33
+ constructor({ loop, nodeFinished }) {
34
+ this.loop = loop;
35
+ this.nodeFinished = nodeFinished;
36
+ }
37
+ /**
38
+ * Execute tasks from the current step of the PregelLoop.
39
+ *
40
+ * Note: this method does NOT call {@link PregelLoop}#tick. That must be handled externally.
41
+ * @param options - Options for the execution.
42
+ */
43
+ async tick(options = {}) {
44
+ const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;
45
+ const nodeErrors = /* @__PURE__ */ new Set();
46
+ let graphBubbleUp;
47
+ const exceptionSignalController = new AbortController();
48
+ const exceptionSignal = exceptionSignalController.signal;
49
+ const stepTimeoutSignal = timeout ? AbortSignal.timeout(timeout) : void 0;
50
+ const pendingTasks = Object.values(this.loop.tasks).filter((t) => t.writes.length === 0);
51
+ const { signals, disposeCombinedSignal } = this._initializeAbortSignals({
52
+ exceptionSignal,
53
+ stepTimeoutSignal,
54
+ signal: options.signal
55
+ });
56
+ const taskStream = this._executeTasksWithRetry(pendingTasks, {
57
+ signals,
58
+ retryPolicy,
59
+ maxConcurrency
60
+ });
61
+ for await (const { task, error, signalAborted } of taskStream) {
62
+ this._commit(task, error);
63
+ if (require_errors.isGraphInterrupt(error)) graphBubbleUp = error;
64
+ else if (require_errors.isGraphBubbleUp(error) && !require_errors.isGraphInterrupt(graphBubbleUp)) graphBubbleUp = error;
65
+ else if (error && (nodeErrors.size === 0 || !signalAborted)) {
66
+ exceptionSignalController.abort();
67
+ nodeErrors.add(error);
68
+ }
69
+ }
70
+ disposeCombinedSignal?.();
71
+ onStepWrite?.(this.loop.step, Object.values(this.loop.tasks).map((task) => task.writes).flat());
72
+ if (nodeErrors.size === 1) throw Array.from(nodeErrors)[0];
73
+ else if (nodeErrors.size > 1) throw new AggregateError(Array.from(nodeErrors), `Multiple errors occurred during superstep ${this.loop.step}. See the "errors" field of this exception for more details.`);
74
+ if (require_errors.isGraphInterrupt(graphBubbleUp)) throw graphBubbleUp;
75
+ if (require_errors.isGraphBubbleUp(graphBubbleUp) && this.loop.isNested) throw graphBubbleUp;
76
+ }
77
+ /**
78
+ * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
79
+ * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
80
+ * while still allowing nodes to gracefully exit.
81
+ *
82
+ * This method must only be called once per PregelRunner#tick. It has the side effect of updating
83
+ * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
84
+ * ticks and subgraph calls.
85
+ *
86
+ * @param options - Options for the initialization.
87
+ * @returns The current abort signals.
88
+ * @internal
89
+ */
90
+ _initializeAbortSignals({ exceptionSignal, stepTimeoutSignal, signal }) {
91
+ const previousSignals = this.loop.config.configurable?.[require_constants.CONFIG_KEY_ABORT_SIGNALS] ?? {};
92
+ const externalAbortSignal = previousSignals.externalAbortSignal ?? signal;
93
+ const timeoutAbortSignal = stepTimeoutSignal ?? previousSignals.timeoutAbortSignal;
94
+ const { signal: composedAbortSignal, dispose: disposeCombinedSignal } = require_index.combineAbortSignals(externalAbortSignal, timeoutAbortSignal, exceptionSignal);
95
+ const signals = {
96
+ externalAbortSignal,
97
+ timeoutAbortSignal,
98
+ composedAbortSignal
99
+ };
100
+ this.loop.config = require_index.patchConfigurable(this.loop.config, { [require_constants.CONFIG_KEY_ABORT_SIGNALS]: signals });
101
+ return {
102
+ signals,
103
+ disposeCombinedSignal
104
+ };
105
+ }
106
+ /**
107
+ * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
108
+ * @param tasks - The tasks to execute.
109
+ * @param options - Options for the execution.
110
+ */
111
+ async *_executeTasksWithRetry(tasks, options) {
112
+ const { retryPolicy, maxConcurrency, signals } = options ?? {};
113
+ const barrier = createPromiseBarrier();
114
+ const executingTasksMap = {};
115
+ const thisCall = {
116
+ executingTasksMap,
117
+ barrier,
118
+ retryPolicy,
119
+ scheduleTask: async (task, writeIdx, call$1) => this.loop.acceptPush(task, writeIdx, call$1)
120
+ };
121
+ if (signals?.composedAbortSignal?.aborted) throw new Error("Abort");
122
+ let startedTasksCount = 0;
123
+ let listener;
124
+ const timeoutOrCancelSignal = require_index.combineAbortSignals(signals?.externalAbortSignal, signals?.timeoutAbortSignal);
125
+ const abortPromise = timeoutOrCancelSignal.signal ? new Promise((_resolve, reject) => {
126
+ listener = () => reject(/* @__PURE__ */ new Error("Abort"));
127
+ timeoutOrCancelSignal.signal?.addEventListener("abort", listener, { once: true });
128
+ }) : void 0;
129
+ while ((startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) && tasks.length) {
130
+ for (; Object.values(executingTasksMap).length < (maxConcurrency ?? tasks.length) && startedTasksCount < tasks.length; startedTasksCount += 1) {
131
+ const task = tasks[startedTasksCount];
132
+ executingTasksMap[task.id] = require_retry._runWithRetry(task, retryPolicy, { [require_constants.CONFIG_KEY_CALL]: call?.bind(thisCall, this, task) }, signals?.composedAbortSignal).catch((error) => {
133
+ return {
134
+ task,
135
+ error,
136
+ signalAborted: signals?.composedAbortSignal?.aborted
137
+ };
138
+ });
139
+ }
140
+ const settledTask = await Promise.race([
141
+ ...Object.values(executingTasksMap),
142
+ ...abortPromise ? [abortPromise] : [],
143
+ barrier.wait
144
+ ]);
145
+ if (settledTask === PROMISE_ADDED_SYMBOL) continue;
146
+ yield settledTask;
147
+ if (listener != null) {
148
+ timeoutOrCancelSignal.signal?.removeEventListener("abort", listener);
149
+ timeoutOrCancelSignal.dispose?.();
150
+ }
151
+ delete executingTasksMap[settledTask.task.id];
152
+ }
153
+ }
154
+ /**
155
+ * Determines what writes to apply based on whether the task completed successfully, and what type of error occurred.
156
+ *
157
+ * Throws an error if the error is a {@link GraphBubbleUp} error and {@link PregelLoop}#isNested is true.
158
+ *
159
+ * @param task - The task to commit.
160
+ * @param error - The error that occurred, if any.
161
+ */
162
+ _commit(task, error) {
163
+ if (error !== void 0) if (require_errors.isGraphInterrupt(error)) {
164
+ if (error.interrupts.length) {
165
+ const interrupts = error.interrupts.map((interrupt) => [require_constants.INTERRUPT, interrupt]);
166
+ const resumes = task.writes.filter((w) => w[0] === require_constants.RESUME);
167
+ if (resumes.length) interrupts.push(...resumes);
168
+ this.loop.putWrites(task.id, interrupts);
169
+ }
170
+ } else if (require_errors.isGraphBubbleUp(error) && task.writes.length) this.loop.putWrites(task.id, task.writes);
171
+ else this.loop.putWrites(task.id, [[require_constants.ERROR, {
172
+ message: error.message,
173
+ name: error.name
174
+ }]]);
175
+ else {
176
+ if (this.nodeFinished && (task.config?.tags == null || !task.config.tags.includes(require_constants.TAG_HIDDEN))) this.nodeFinished(String(task.name));
177
+ if (task.writes.length === 0) task.writes.push([require_constants.NO_WRITES, null]);
178
+ this.loop.putWrites(task.id, task.writes);
179
+ }
180
+ }
181
+ };
254
182
  async function call(runner, task, func, name, input, options = {}) {
255
- // Schedule PUSH tasks, collect promises
256
- const scratchpad = task.config?.configurable?.[constants_js_1.CONFIG_KEY_SCRATCHPAD];
257
- if (!scratchpad) {
258
- throw new Error(`BUG: No scratchpad found on task ${task.name}__${task.id}`);
259
- }
260
- const cnt = scratchpad.callCounter;
261
- scratchpad.callCounter += 1;
262
- // schedule the next task, if the callback returns one
263
- const wcall = new types_js_1.Call({
264
- func,
265
- name,
266
- input,
267
- cache: options.cache,
268
- retry: options.retry,
269
- callbacks: options.callbacks,
270
- });
271
- const nextTask = await this.scheduleTask(task, cnt, wcall);
272
- if (!nextTask)
273
- return undefined;
274
- // Check if this task is already running
275
- const existingPromise = this.executingTasksMap[nextTask.id];
276
- if (existingPromise !== undefined) {
277
- // If the parent task was retried, the next task might already be running
278
- return existingPromise;
279
- }
280
- if (nextTask.writes.length > 0) {
281
- // If it already ran, return the result
282
- const returns = nextTask.writes.filter(([c]) => c === constants_js_1.RETURN);
283
- const errors = nextTask.writes.filter(([c]) => c === constants_js_1.ERROR);
284
- if (returns.length > 0) {
285
- // Task completed successfully
286
- if (returns.length === 1)
287
- return Promise.resolve(returns[0][1]);
288
- // should be unreachable
289
- throw new Error(`BUG: multiple returns found for task ${nextTask.name}__${nextTask.id}`);
290
- }
291
- if (errors.length > 0) {
292
- // Task failed
293
- if (errors.length === 1) {
294
- const errorValue = errors[0][1];
295
- const error =
296
- // eslint-disable-next-line no-instanceof/no-instanceof
297
- errorValue instanceof Error
298
- ? errorValue
299
- : new Error(String(errorValue));
300
- return Promise.reject(error);
301
- }
302
- // the only way this should happen is if the task executes multiple times and writes aren't cleared
303
- throw new Error(`BUG: multiple errors found for task ${nextTask.name}__${nextTask.id}`);
304
- }
305
- return undefined;
306
- }
307
- else {
308
- // Schedule the next task with retry
309
- const prom = (0, retry_js_1._runWithRetry)(nextTask, options.retry, {
310
- [constants_js_1.CONFIG_KEY_CALL]: call.bind(this, runner, nextTask),
311
- });
312
- this.executingTasksMap[nextTask.id] = prom;
313
- this.barrier.next();
314
- return prom.then(({ result, error }) => {
315
- if (error)
316
- return Promise.reject(error);
317
- return result;
318
- });
319
- }
183
+ const scratchpad = task.config?.configurable?.[require_constants.CONFIG_KEY_SCRATCHPAD];
184
+ if (!scratchpad) throw new Error(`BUG: No scratchpad found on task ${task.name}__${task.id}`);
185
+ const cnt = scratchpad.callCounter;
186
+ scratchpad.callCounter += 1;
187
+ const wcall = new require_types.Call({
188
+ func,
189
+ name,
190
+ input,
191
+ cache: options.cache,
192
+ retry: options.retry,
193
+ callbacks: options.callbacks
194
+ });
195
+ const nextTask = await this.scheduleTask(task, cnt, wcall);
196
+ if (!nextTask) return void 0;
197
+ const existingPromise = this.executingTasksMap[nextTask.id];
198
+ if (existingPromise !== void 0) return existingPromise;
199
+ if (nextTask.writes.length > 0) {
200
+ const returns = nextTask.writes.filter(([c]) => c === require_constants.RETURN);
201
+ const errors = nextTask.writes.filter(([c]) => c === require_constants.ERROR);
202
+ if (returns.length > 0) {
203
+ if (returns.length === 1) return Promise.resolve(returns[0][1]);
204
+ throw new Error(`BUG: multiple returns found for task ${nextTask.name}__${nextTask.id}`);
205
+ }
206
+ if (errors.length > 0) {
207
+ if (errors.length === 1) {
208
+ const errorValue = errors[0][1];
209
+ const error = errorValue instanceof Error ? errorValue : new Error(String(errorValue));
210
+ return Promise.reject(error);
211
+ }
212
+ throw new Error(`BUG: multiple errors found for task ${nextTask.name}__${nextTask.id}`);
213
+ }
214
+ return void 0;
215
+ } else {
216
+ const prom = require_retry._runWithRetry(nextTask, options.retry, { [require_constants.CONFIG_KEY_CALL]: call.bind(this, runner, nextTask) });
217
+ this.executingTasksMap[nextTask.id] = prom;
218
+ this.barrier.next();
219
+ return prom.then(({ result, error }) => {
220
+ if (error) return Promise.reject(error);
221
+ return result;
222
+ });
223
+ }
320
224
  }
321
- //# sourceMappingURL=runner.js.map
225
+
226
+ //#endregion
227
+ exports.PregelRunner = PregelRunner;
228
+ //# sourceMappingURL=runner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.cjs","names":["barrier: {\n next: () => void;\n wait: Promise<unknown>;\n }","nodeErrors: Set<Error>","graphBubbleUp: GraphBubbleUp | undefined","isGraphInterrupt","isGraphBubbleUp","CONFIG_KEY_ABORT_SIGNALS","combineAbortSignals","signals: PregelAbortSignals","patchConfigurable","executingTasksMap: Record<\n string,\n Promise<{\n task: PregelExecutableTask<string, string>;\n result?: unknown;\n error?: Error;\n }>\n >","call","listener: (() => void) | undefined","_runWithRetry","CONFIG_KEY_CALL","interrupts: PendingWrite<string>[]","INTERRUPT","RESUME","ERROR","TAG_HIDDEN","NO_WRITES","CONFIG_KEY_SCRATCHPAD","Call","RETURN"],"sources":["../../src/pregel/runner.ts"],"sourcesContent":["import { PendingWrite } from \"@langchain/langgraph-checkpoint\";\nimport {\n Call,\n PregelAbortSignals,\n PregelExecutableTask,\n PregelScratchpad,\n} from \"./types.js\";\nimport {\n CachePolicy,\n combineAbortSignals,\n patchConfigurable,\n RetryPolicy,\n} from \"./utils/index.js\";\nimport {\n CONFIG_KEY_SCRATCHPAD,\n ERROR,\n INTERRUPT,\n RESUME,\n NO_WRITES,\n TAG_HIDDEN,\n RETURN,\n CONFIG_KEY_CALL,\n CONFIG_KEY_ABORT_SIGNALS,\n} from \"../constants.js\";\nimport { GraphBubbleUp, isGraphBubbleUp, isGraphInterrupt } from \"../errors.js\";\nimport { _runWithRetry, SettledPregelTask } from \"./retry.js\";\nimport { PregelLoop } from \"./loop.js\";\n\nconst PROMISE_ADDED_SYMBOL = Symbol.for(\"promiseAdded\");\n\nfunction createPromiseBarrier() {\n const barrier: {\n next: () => void;\n wait: Promise<unknown>;\n } = {\n next: () => void 0,\n wait: Promise.resolve(PROMISE_ADDED_SYMBOL),\n };\n\n function waitHandler(resolve: (value: typeof PROMISE_ADDED_SYMBOL) => void) {\n barrier.next = () => {\n barrier.wait = new Promise(waitHandler);\n resolve(PROMISE_ADDED_SYMBOL);\n };\n }\n barrier.wait = new Promise(waitHandler);\n return barrier;\n}\n\n/**\n * Options for the {@link PregelRunner#tick} method.\n */\nexport type TickOptions = {\n /**\n * The deadline before which all tasks must be completed.\n */\n timeout?: number;\n\n /**\n * An optional {@link AbortSignal} to cancel processing of tasks.\n */\n signal?: AbortSignal;\n\n /**\n * The {@link RetryPolicy} to use for the tick.\n */\n retryPolicy?: RetryPolicy;\n\n /**\n * An optional callback to be called after all task writes are completed.\n */\n onStepWrite?: (step: number, writes: PendingWrite[]) => void;\n\n /**\n * The maximum number of tasks to execute concurrently.\n */\n maxConcurrency?: number;\n};\n\n/**\n * Responsible for handling task execution on each tick of the {@link PregelLoop}.\n */\nexport class PregelRunner {\n private nodeFinished?: (id: string) => void;\n\n private loop: PregelLoop;\n\n /**\n * Construct a new PregelRunner, which executes tasks from the provided PregelLoop.\n * @param loop - The PregelLoop that produces tasks for this runner to execute.\n */\n constructor({\n loop,\n nodeFinished,\n }: {\n loop: PregelLoop;\n nodeFinished?: (id: string) => void;\n }) {\n this.loop = loop;\n this.nodeFinished = nodeFinished;\n }\n\n /**\n * Execute tasks from the current step of the PregelLoop.\n *\n * Note: this method does NOT call {@link PregelLoop}#tick. That must be handled externally.\n * @param options - Options for the execution.\n */\n async tick(options: TickOptions = {}) {\n const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;\n\n const nodeErrors: Set<Error> = new Set();\n let graphBubbleUp: GraphBubbleUp | undefined;\n\n const exceptionSignalController = new AbortController();\n const exceptionSignal = exceptionSignalController.signal;\n const stepTimeoutSignal = timeout\n ? AbortSignal.timeout(timeout)\n : undefined;\n\n // Start task execution\n const pendingTasks = Object.values(this.loop.tasks).filter(\n (t) => t.writes.length === 0\n );\n\n const { signals, disposeCombinedSignal } = this._initializeAbortSignals({\n exceptionSignal,\n stepTimeoutSignal,\n signal: options.signal,\n });\n\n const taskStream = this._executeTasksWithRetry(pendingTasks, {\n signals,\n retryPolicy,\n maxConcurrency,\n });\n\n for await (const { task, error, signalAborted } of taskStream) {\n this._commit(task, error);\n if (isGraphInterrupt(error)) {\n graphBubbleUp = error;\n } else if (isGraphBubbleUp(error) && !isGraphInterrupt(graphBubbleUp)) {\n graphBubbleUp = error;\n } else if (error && (nodeErrors.size === 0 || !signalAborted)) {\n /*\n * The goal here is to capture the exception that causes the graph to terminate early. In\n * theory it's possible for multiple nodes to throw, so this also handles the edge case of\n * capturing concurrent exceptions thrown before the node saw an abort. This is checked via\n * the signalAborted flag, which records the state of the abort signal at the time the node\n * execution finished.\n *\n * There is a case however where one node throws some error causing us to trigger an abort,\n * which then causes other concurrently executing nodes to throw their own AbortErrors. In\n * this case we don't care about reporting the abort errors thrown by the other nodes,\n * because they don't tell the user anything about what caused the graph execution to\n * terminate early, so we ignore them (and any other errors that occur after the node sees\n * an abort signal).\n */\n exceptionSignalController.abort();\n nodeErrors.add(error);\n }\n }\n\n disposeCombinedSignal?.();\n\n onStepWrite?.(\n this.loop.step,\n Object.values(this.loop.tasks)\n .map((task) => task.writes)\n .flat()\n );\n\n if (nodeErrors.size === 1) {\n throw Array.from(nodeErrors)[0];\n } else if (nodeErrors.size > 1) {\n throw new AggregateError(\n Array.from(nodeErrors),\n `Multiple errors occurred during superstep ${this.loop.step}. See the \"errors\" field of this exception for more details.`\n );\n }\n\n if (isGraphInterrupt(graphBubbleUp)) {\n throw graphBubbleUp;\n }\n\n if (isGraphBubbleUp(graphBubbleUp) && this.loop.isNested) {\n throw graphBubbleUp;\n }\n }\n\n /**\n * Initializes the current AbortSignals for the PregelRunner, handling the various ways that\n * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary\n * while still allowing nodes to gracefully exit.\n *\n * This method must only be called once per PregelRunner#tick. It has the side effect of updating\n * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future\n * ticks and subgraph calls.\n *\n * @param options - Options for the initialization.\n * @returns The current abort signals.\n * @internal\n */\n private _initializeAbortSignals({\n exceptionSignal,\n stepTimeoutSignal,\n signal,\n }: {\n exceptionSignal: AbortSignal;\n stepTimeoutSignal?: AbortSignal;\n signal?: AbortSignal;\n }): { signals: PregelAbortSignals; disposeCombinedSignal?: () => void } {\n const previousSignals = (this.loop.config.configurable?.[\n CONFIG_KEY_ABORT_SIGNALS\n ] ?? {}) as PregelAbortSignals;\n\n // We always inherit the external abort signal from AsyncLocalStorage,\n // since that's the only way the signal is inherited by the subgraph calls.\n const externalAbortSignal = previousSignals.externalAbortSignal ?? signal;\n\n // inherit the step timeout signal from parent graph\n const timeoutAbortSignal =\n stepTimeoutSignal ?? previousSignals.timeoutAbortSignal;\n\n const { signal: composedAbortSignal, dispose: disposeCombinedSignal } =\n combineAbortSignals(\n externalAbortSignal,\n timeoutAbortSignal,\n exceptionSignal\n );\n\n const signals: PregelAbortSignals = {\n externalAbortSignal,\n timeoutAbortSignal,\n composedAbortSignal,\n };\n\n this.loop.config = patchConfigurable(this.loop.config, {\n [CONFIG_KEY_ABORT_SIGNALS]: signals,\n });\n\n return { signals, disposeCombinedSignal };\n }\n\n /**\n * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.\n * @param tasks - The tasks to execute.\n * @param options - Options for the execution.\n */\n private async *_executeTasksWithRetry(\n tasks: PregelExecutableTask<string, string>[],\n options?: {\n signals?: PregelAbortSignals;\n retryPolicy?: RetryPolicy;\n maxConcurrency?: number;\n }\n ): AsyncGenerator<SettledPregelTask> {\n const { retryPolicy, maxConcurrency, signals } = options ?? {};\n\n const barrier = createPromiseBarrier();\n const executingTasksMap: Record<\n string,\n Promise<{\n task: PregelExecutableTask<string, string>;\n result?: unknown;\n error?: Error;\n }>\n > = {};\n\n const thisCall = {\n executingTasksMap,\n barrier,\n retryPolicy,\n scheduleTask: async (\n task: PregelExecutableTask<string, string>,\n writeIdx: number,\n call?: Call\n ) => this.loop.acceptPush(task, writeIdx, call),\n };\n\n if (signals?.composedAbortSignal?.aborted) {\n // note: don't use throwIfAborted here because it throws a DOMException,\n // which isn't consistent with how we throw on abort below.\n throw new Error(\"Abort\");\n }\n\n let startedTasksCount = 0;\n\n let listener: (() => void) | undefined;\n const timeoutOrCancelSignal = combineAbortSignals(\n signals?.externalAbortSignal,\n signals?.timeoutAbortSignal\n );\n\n const abortPromise = timeoutOrCancelSignal.signal\n ? new Promise<never>((_resolve, reject) => {\n listener = () => reject(new Error(\"Abort\"));\n timeoutOrCancelSignal.signal?.addEventListener(\"abort\", listener, {\n once: true,\n });\n })\n : undefined;\n\n while (\n (startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) &&\n tasks.length\n ) {\n for (\n ;\n Object.values(executingTasksMap).length <\n (maxConcurrency ?? tasks.length) && startedTasksCount < tasks.length;\n startedTasksCount += 1\n ) {\n const task = tasks[startedTasksCount];\n\n executingTasksMap[task.id] = _runWithRetry(\n task,\n retryPolicy,\n { [CONFIG_KEY_CALL]: call?.bind(thisCall, this, task) },\n signals?.composedAbortSignal\n ).catch((error) => {\n return {\n task,\n error,\n signalAborted: signals?.composedAbortSignal?.aborted,\n };\n });\n }\n\n const settledTask = await Promise.race([\n ...Object.values(executingTasksMap),\n ...(abortPromise ? [abortPromise] : []),\n barrier.wait,\n ]);\n\n if (settledTask === PROMISE_ADDED_SYMBOL) {\n continue;\n }\n\n yield settledTask as SettledPregelTask;\n\n if (listener != null) {\n timeoutOrCancelSignal.signal?.removeEventListener(\"abort\", listener);\n timeoutOrCancelSignal.dispose?.();\n }\n\n delete executingTasksMap[(settledTask as SettledPregelTask).task.id];\n }\n }\n\n /**\n * Determines what writes to apply based on whether the task completed successfully, and what type of error occurred.\n *\n * Throws an error if the error is a {@link GraphBubbleUp} error and {@link PregelLoop}#isNested is true.\n *\n * @param task - The task to commit.\n * @param error - The error that occurred, if any.\n */\n private _commit(task: PregelExecutableTask<string, string>, error?: Error) {\n if (error !== undefined) {\n if (isGraphInterrupt(error)) {\n if (error.interrupts.length) {\n const interrupts: PendingWrite<string>[] = error.interrupts.map(\n (interrupt) => [INTERRUPT, interrupt]\n );\n const resumes = task.writes.filter((w) => w[0] === RESUME);\n if (resumes.length) {\n interrupts.push(...resumes);\n }\n this.loop.putWrites(task.id, interrupts);\n }\n } else if (isGraphBubbleUp(error) && task.writes.length) {\n this.loop.putWrites(task.id, task.writes);\n } else {\n this.loop.putWrites(task.id, [\n [ERROR, { message: error.message, name: error.name }],\n ]);\n }\n } else {\n if (\n this.nodeFinished &&\n (task.config?.tags == null || !task.config.tags.includes(TAG_HIDDEN))\n ) {\n this.nodeFinished(String(task.name));\n }\n\n if (task.writes.length === 0) {\n // Add no writes marker\n task.writes.push([NO_WRITES, null]);\n }\n\n // Save task writes to checkpointer\n this.loop.putWrites(task.id, task.writes);\n }\n }\n}\n\nasync function call(\n this: {\n executingTasksMap: Record<\n string,\n Promise<{\n task: PregelExecutableTask<string, string>;\n result?: unknown;\n error?: Error;\n }>\n >;\n\n barrier: {\n next: () => void;\n wait: Promise<unknown>;\n };\n\n retryPolicy?: RetryPolicy;\n\n scheduleTask: (\n task: PregelExecutableTask<string, string>,\n writeIdx: number,\n call?: Call\n ) => Promise<PregelExecutableTask<string, string> | void>;\n },\n runner: PregelRunner,\n task: PregelExecutableTask<string, string>,\n func: (...args: unknown[]) => unknown | Promise<unknown>,\n name: string,\n input: unknown,\n options: {\n retry?: RetryPolicy;\n cache?: CachePolicy;\n callbacks?: unknown;\n } = {}\n): Promise<unknown> {\n // Schedule PUSH tasks, collect promises\n const scratchpad = task.config?.configurable?.[CONFIG_KEY_SCRATCHPAD] as\n | PregelScratchpad<unknown>\n | undefined;\n\n if (!scratchpad) {\n throw new Error(\n `BUG: No scratchpad found on task ${task.name}__${task.id}`\n );\n }\n\n const cnt = scratchpad.callCounter;\n scratchpad.callCounter += 1;\n\n // schedule the next task, if the callback returns one\n const wcall = new Call({\n func,\n name,\n input,\n cache: options.cache,\n retry: options.retry,\n callbacks: options.callbacks,\n });\n const nextTask = await this.scheduleTask(task, cnt, wcall);\n if (!nextTask) return undefined;\n\n // Check if this task is already running\n const existingPromise = this.executingTasksMap[nextTask.id];\n\n if (existingPromise !== undefined) {\n // If the parent task was retried, the next task might already be running\n return existingPromise;\n }\n\n if (nextTask.writes.length > 0) {\n // If it already ran, return the result\n const returns = nextTask.writes.filter(([c]) => c === RETURN);\n const errors = nextTask.writes.filter(([c]) => c === ERROR);\n\n if (returns.length > 0) {\n // Task completed successfully\n if (returns.length === 1) return Promise.resolve(returns[0][1]);\n\n // should be unreachable\n throw new Error(\n `BUG: multiple returns found for task ${nextTask.name}__${nextTask.id}`\n );\n }\n\n if (errors.length > 0) {\n // Task failed\n if (errors.length === 1) {\n const errorValue = errors[0][1];\n const error =\n // eslint-disable-next-line no-instanceof/no-instanceof\n errorValue instanceof Error\n ? errorValue\n : new Error(String(errorValue));\n\n return Promise.reject(error);\n }\n\n // the only way this should happen is if the task executes multiple times and writes aren't cleared\n throw new Error(\n `BUG: multiple errors found for task ${nextTask.name}__${nextTask.id}`\n );\n }\n\n return undefined;\n } else {\n // Schedule the next task with retry\n const prom = _runWithRetry<string, string>(nextTask, options.retry, {\n [CONFIG_KEY_CALL]: call.bind(this, runner, nextTask),\n });\n\n this.executingTasksMap[nextTask.id] = prom;\n this.barrier.next();\n\n return prom.then(({ result, error }) => {\n if (error) return Promise.reject(error);\n return result;\n });\n }\n}\n"],"mappings":"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"}