langchain 1.0.0-alpha.5 → 1.0.0-alpha.7

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 (405) hide show
  1. package/dist/agents/ReactAgent.cjs +5 -5
  2. package/dist/agents/ReactAgent.cjs.map +1 -1
  3. package/dist/agents/ReactAgent.d.cts +2 -5
  4. package/dist/agents/ReactAgent.d.cts.map +1 -1
  5. package/dist/agents/ReactAgent.d.ts +2 -5
  6. package/dist/agents/ReactAgent.d.ts.map +1 -1
  7. package/dist/agents/ReactAgent.js +6 -6
  8. package/dist/agents/ReactAgent.js.map +1 -1
  9. package/dist/agents/annotation.cjs.map +1 -1
  10. package/dist/agents/annotation.d.cts +13 -8
  11. package/dist/agents/annotation.d.cts.map +1 -1
  12. package/dist/agents/annotation.d.ts +13 -8
  13. package/dist/agents/annotation.d.ts.map +1 -1
  14. package/dist/agents/annotation.js.map +1 -1
  15. package/dist/agents/createAgent.cjs.map +1 -1
  16. package/dist/agents/createAgent.js.map +1 -1
  17. package/dist/agents/index.cjs +2 -2
  18. package/dist/agents/index.cjs.map +1 -1
  19. package/dist/agents/index.d.cts +50 -50
  20. package/dist/agents/index.d.cts.map +1 -1
  21. package/dist/agents/index.d.ts +50 -50
  22. package/dist/agents/index.d.ts.map +1 -1
  23. package/dist/agents/index.js +2 -2
  24. package/dist/agents/index.js.map +1 -1
  25. package/dist/agents/interrupt.d.cts +14 -1
  26. package/dist/agents/interrupt.d.cts.map +1 -1
  27. package/dist/agents/interrupt.d.ts +14 -1
  28. package/dist/agents/interrupt.d.ts.map +1 -1
  29. package/dist/agents/middlewareAgent/ReactAgent.cjs +273 -66
  30. package/dist/agents/middlewareAgent/ReactAgent.cjs.map +1 -1
  31. package/dist/agents/middlewareAgent/ReactAgent.d.cts +102 -16
  32. package/dist/agents/middlewareAgent/ReactAgent.d.cts.map +1 -1
  33. package/dist/agents/middlewareAgent/ReactAgent.d.ts +102 -16
  34. package/dist/agents/middlewareAgent/ReactAgent.d.ts.map +1 -1
  35. package/dist/agents/middlewareAgent/ReactAgent.js +275 -68
  36. package/dist/agents/middlewareAgent/ReactAgent.js.map +1 -1
  37. package/dist/agents/middlewareAgent/annotation.cjs +12 -6
  38. package/dist/agents/middlewareAgent/annotation.cjs.map +1 -1
  39. package/dist/agents/middlewareAgent/annotation.js +12 -6
  40. package/dist/agents/middlewareAgent/annotation.js.map +1 -1
  41. package/dist/agents/middlewareAgent/constants.d.cts +5 -0
  42. package/dist/agents/middlewareAgent/constants.d.cts.map +1 -0
  43. package/dist/agents/middlewareAgent/constants.d.ts +5 -0
  44. package/dist/agents/middlewareAgent/constants.d.ts.map +1 -0
  45. package/dist/agents/middlewareAgent/index.cjs.map +1 -1
  46. package/dist/agents/middlewareAgent/index.js.map +1 -1
  47. package/dist/agents/middlewareAgent/middleware/bigTool.cjs +162 -0
  48. package/dist/agents/middlewareAgent/middleware/bigTool.cjs.map +1 -0
  49. package/dist/agents/middlewareAgent/middleware/bigTool.d.cts +113 -0
  50. package/dist/agents/middlewareAgent/middleware/bigTool.d.cts.map +1 -0
  51. package/dist/agents/middlewareAgent/middleware/bigTool.d.ts +113 -0
  52. package/dist/agents/middlewareAgent/middleware/bigTool.d.ts.map +1 -0
  53. package/dist/agents/middlewareAgent/middleware/bigTool.js +161 -0
  54. package/dist/agents/middlewareAgent/middleware/bigTool.js.map +1 -0
  55. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.cjs +58 -0
  56. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.cjs.map +1 -0
  57. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.d.cts +46 -0
  58. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.d.cts.map +1 -0
  59. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.d.ts +46 -0
  60. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.d.ts.map +1 -0
  61. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.js +58 -0
  62. package/dist/agents/middlewareAgent/middleware/dynamicSystemPrompt.js.map +1 -0
  63. package/dist/agents/middlewareAgent/middleware/hitl.cjs +311 -0
  64. package/dist/agents/middlewareAgent/middleware/hitl.cjs.map +1 -0
  65. package/dist/agents/middlewareAgent/middleware/hitl.d.cts +419 -0
  66. package/dist/agents/middlewareAgent/middleware/hitl.d.cts.map +1 -0
  67. package/dist/agents/middlewareAgent/middleware/hitl.d.ts +419 -0
  68. package/dist/agents/middlewareAgent/middleware/hitl.d.ts.map +1 -0
  69. package/dist/agents/middlewareAgent/middleware/hitl.js +310 -0
  70. package/dist/agents/middlewareAgent/middleware/hitl.js.map +1 -0
  71. package/dist/agents/middlewareAgent/middleware/index.cjs +32 -0
  72. package/dist/agents/middlewareAgent/middleware/index.cjs.map +1 -0
  73. package/dist/agents/middlewareAgent/middleware/index.d.cts +6 -0
  74. package/dist/agents/middlewareAgent/middleware/index.d.ts +6 -0
  75. package/dist/agents/middlewareAgent/middleware/index.js +21 -0
  76. package/dist/agents/middlewareAgent/middleware/index.js.map +1 -0
  77. package/dist/agents/middlewareAgent/{middlewares → middleware}/promptCaching.cjs +72 -27
  78. package/dist/agents/middlewareAgent/middleware/promptCaching.cjs.map +1 -0
  79. package/dist/agents/middlewareAgent/{middlewares → middleware}/promptCaching.d.cts +60 -15
  80. package/dist/agents/middlewareAgent/middleware/promptCaching.d.cts.map +1 -0
  81. package/dist/agents/middlewareAgent/{middlewares → middleware}/promptCaching.d.ts +60 -15
  82. package/dist/agents/middlewareAgent/middleware/promptCaching.d.ts.map +1 -0
  83. package/dist/agents/middlewareAgent/{middlewares → middleware}/promptCaching.js +71 -26
  84. package/dist/agents/middlewareAgent/middleware/promptCaching.js.map +1 -0
  85. package/dist/agents/middlewareAgent/{middlewares → middleware}/summarization.cjs +35 -23
  86. package/dist/agents/middlewareAgent/middleware/summarization.cjs.map +1 -0
  87. package/dist/agents/middlewareAgent/{middlewares → middleware}/summarization.d.cts +7 -5
  88. package/dist/agents/middlewareAgent/middleware/summarization.d.cts.map +1 -0
  89. package/dist/agents/middlewareAgent/{middlewares → middleware}/summarization.d.ts +7 -5
  90. package/dist/agents/middlewareAgent/middleware/summarization.d.ts.map +1 -0
  91. package/dist/agents/middlewareAgent/{middlewares → middleware}/summarization.js +29 -17
  92. package/dist/agents/middlewareAgent/middleware/summarization.js.map +1 -0
  93. package/dist/agents/middlewareAgent/middleware.cjs +8 -5
  94. package/dist/agents/middlewareAgent/middleware.cjs.map +1 -1
  95. package/dist/agents/middlewareAgent/middleware.d.cts +67 -7
  96. package/dist/agents/middlewareAgent/middleware.d.cts.map +1 -1
  97. package/dist/agents/middlewareAgent/middleware.d.ts +67 -7
  98. package/dist/agents/middlewareAgent/middleware.d.ts.map +1 -1
  99. package/dist/agents/middlewareAgent/middleware.js +8 -5
  100. package/dist/agents/middlewareAgent/middleware.js.map +1 -1
  101. package/dist/agents/middlewareAgent/nodes/AfterModalNode.cjs +2 -2
  102. package/dist/agents/middlewareAgent/nodes/AfterModalNode.cjs.map +1 -1
  103. package/dist/agents/middlewareAgent/nodes/AfterModalNode.js +2 -2
  104. package/dist/agents/middlewareAgent/nodes/AfterModalNode.js.map +1 -1
  105. package/dist/agents/middlewareAgent/nodes/AgentNode.cjs +125 -83
  106. package/dist/agents/middlewareAgent/nodes/AgentNode.cjs.map +1 -1
  107. package/dist/agents/middlewareAgent/nodes/AgentNode.js +128 -86
  108. package/dist/agents/middlewareAgent/nodes/AgentNode.js.map +1 -1
  109. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.cjs +2 -2
  110. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.cjs.map +1 -1
  111. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.js +2 -2
  112. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.js.map +1 -1
  113. package/dist/agents/middlewareAgent/nodes/middleware.cjs +42 -17
  114. package/dist/agents/middlewareAgent/nodes/middleware.cjs.map +1 -1
  115. package/dist/agents/middlewareAgent/nodes/middleware.js +42 -18
  116. package/dist/agents/middlewareAgent/nodes/middleware.js.map +1 -1
  117. package/dist/agents/middlewareAgent/nodes/utils.cjs +30 -16
  118. package/dist/agents/middlewareAgent/nodes/utils.cjs.map +1 -1
  119. package/dist/agents/middlewareAgent/nodes/utils.js +28 -14
  120. package/dist/agents/middlewareAgent/nodes/utils.js.map +1 -1
  121. package/dist/agents/middlewareAgent/types.d.cts +162 -88
  122. package/dist/agents/middlewareAgent/types.d.cts.map +1 -1
  123. package/dist/agents/middlewareAgent/types.d.ts +162 -88
  124. package/dist/agents/middlewareAgent/types.d.ts.map +1 -1
  125. package/dist/agents/model.cjs +13 -0
  126. package/dist/agents/model.cjs.map +1 -0
  127. package/dist/agents/model.js +11 -0
  128. package/dist/agents/model.js.map +1 -0
  129. package/dist/agents/nodes/AgentNode.cjs +60 -32
  130. package/dist/agents/nodes/AgentNode.cjs.map +1 -1
  131. package/dist/agents/nodes/AgentNode.js +61 -33
  132. package/dist/agents/nodes/AgentNode.js.map +1 -1
  133. package/dist/agents/nodes/ToolNode.cjs +4 -4
  134. package/dist/agents/nodes/ToolNode.cjs.map +1 -1
  135. package/dist/agents/nodes/ToolNode.d.cts +2 -3
  136. package/dist/agents/nodes/ToolNode.d.cts.map +1 -1
  137. package/dist/agents/nodes/ToolNode.d.ts +1 -2
  138. package/dist/agents/nodes/ToolNode.d.ts.map +1 -1
  139. package/dist/agents/nodes/ToolNode.js +5 -5
  140. package/dist/agents/nodes/ToolNode.js.map +1 -1
  141. package/dist/agents/responses.cjs +53 -11
  142. package/dist/agents/responses.cjs.map +1 -1
  143. package/dist/agents/responses.d.cts +12 -20
  144. package/dist/agents/responses.d.cts.map +1 -1
  145. package/dist/agents/responses.d.ts +12 -20
  146. package/dist/agents/responses.d.ts.map +1 -1
  147. package/dist/agents/responses.js +53 -12
  148. package/dist/agents/responses.js.map +1 -1
  149. package/dist/agents/types.d.cts +3 -6
  150. package/dist/agents/types.d.cts.map +1 -1
  151. package/dist/agents/types.d.ts +3 -6
  152. package/dist/agents/types.d.ts.map +1 -1
  153. package/dist/agents/utils.cjs +11 -29
  154. package/dist/agents/utils.cjs.map +1 -1
  155. package/dist/agents/utils.js +9 -26
  156. package/dist/agents/utils.js.map +1 -1
  157. package/dist/agents/withAgentName.cjs.map +1 -1
  158. package/dist/agents/withAgentName.js.map +1 -1
  159. package/dist/chains/api/prompts.cjs.map +1 -1
  160. package/dist/chains/api/prompts.js.map +1 -1
  161. package/dist/chains/constitutional_ai/constitutional_chain.cjs.map +1 -1
  162. package/dist/chains/constitutional_ai/constitutional_chain.js.map +1 -1
  163. package/dist/chains/index.cjs +0 -3
  164. package/dist/chains/index.cjs.map +1 -1
  165. package/dist/chains/index.d.cts +1 -2
  166. package/dist/chains/index.d.ts +1 -2
  167. package/dist/chains/index.js +1 -3
  168. package/dist/chains/index.js.map +1 -1
  169. package/dist/chains/openai_functions/extraction.cjs.map +1 -1
  170. package/dist/chains/openai_functions/extraction.d.cts +1 -3
  171. package/dist/chains/openai_functions/extraction.d.cts.map +1 -1
  172. package/dist/chains/openai_functions/extraction.d.ts +1 -3
  173. package/dist/chains/openai_functions/extraction.d.ts.map +1 -1
  174. package/dist/chains/openai_functions/extraction.js.map +1 -1
  175. package/dist/chains/openai_functions/index.cjs +0 -5
  176. package/dist/chains/openai_functions/index.cjs.map +1 -1
  177. package/dist/chains/openai_functions/index.d.cts +1 -2
  178. package/dist/chains/openai_functions/index.d.ts +1 -2
  179. package/dist/chains/openai_functions/index.js +1 -4
  180. package/dist/chains/openai_functions/index.js.map +1 -1
  181. package/dist/chains/openai_functions/openapi.cjs +4 -4
  182. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  183. package/dist/chains/openai_functions/openapi.d.cts +1 -1
  184. package/dist/chains/openai_functions/openapi.js +4 -4
  185. package/dist/chains/openai_functions/openapi.js.map +1 -1
  186. package/dist/chains/openai_functions/tagging.cjs.map +1 -1
  187. package/dist/chains/openai_functions/tagging.d.cts +1 -3
  188. package/dist/chains/openai_functions/tagging.d.cts.map +1 -1
  189. package/dist/chains/openai_functions/tagging.d.ts +1 -3
  190. package/dist/chains/openai_functions/tagging.d.ts.map +1 -1
  191. package/dist/chains/openai_functions/tagging.js.map +1 -1
  192. package/dist/chains/query_constructor/index.cjs +4 -4
  193. package/dist/chains/query_constructor/index.cjs.map +1 -1
  194. package/dist/chains/query_constructor/index.d.cts +4 -2
  195. package/dist/chains/query_constructor/index.d.cts.map +1 -1
  196. package/dist/chains/query_constructor/index.d.ts +4 -2
  197. package/dist/chains/query_constructor/index.d.ts.map +1 -1
  198. package/dist/chains/query_constructor/index.js +1 -1
  199. package/dist/chains/query_constructor/index.js.map +1 -1
  200. package/dist/chains/question_answering/load.d.ts +2 -2
  201. package/dist/chains/question_answering/load.d.ts.map +1 -1
  202. package/dist/chains/question_answering/map_reduce_prompts.cjs.map +1 -1
  203. package/dist/chains/question_answering/map_reduce_prompts.js.map +1 -1
  204. package/dist/chains/question_answering/refine_prompts.cjs.map +1 -1
  205. package/dist/chains/question_answering/refine_prompts.js.map +1 -1
  206. package/dist/chains/question_answering/stuff_prompts.cjs.map +1 -1
  207. package/dist/chains/question_answering/stuff_prompts.js.map +1 -1
  208. package/dist/chains/router/multi_prompt.cjs +4 -4
  209. package/dist/chains/router/multi_prompt.cjs.map +1 -1
  210. package/dist/chains/router/multi_prompt.js +1 -1
  211. package/dist/chains/router/multi_prompt.js.map +1 -1
  212. package/dist/chains/router/multi_retrieval_qa.cjs +4 -4
  213. package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
  214. package/dist/chains/router/multi_retrieval_qa.js +1 -1
  215. package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
  216. package/dist/chains/sql_db/sql_db_prompt.cjs.map +1 -1
  217. package/dist/chains/sql_db/sql_db_prompt.d.cts.map +1 -1
  218. package/dist/chains/sql_db/sql_db_prompt.d.ts.map +1 -1
  219. package/dist/chains/sql_db/sql_db_prompt.js.map +1 -1
  220. package/dist/chains/summarization/stuff_prompts.cjs.map +1 -1
  221. package/dist/chains/summarization/stuff_prompts.js.map +1 -1
  222. package/dist/chat_models/universal.cjs +8 -5
  223. package/dist/chat_models/universal.cjs.map +1 -1
  224. package/dist/chat_models/universal.d.cts +2 -2
  225. package/dist/chat_models/universal.d.cts.map +1 -1
  226. package/dist/chat_models/universal.d.ts +2 -2
  227. package/dist/chat_models/universal.d.ts.map +1 -1
  228. package/dist/chat_models/universal.js +8 -5
  229. package/dist/chat_models/universal.js.map +1 -1
  230. package/dist/document_loaders/fs/directory.cjs.map +1 -1
  231. package/dist/document_loaders/fs/directory.d.cts +0 -1
  232. package/dist/document_loaders/fs/directory.d.cts.map +1 -1
  233. package/dist/document_loaders/fs/directory.d.ts +0 -1
  234. package/dist/document_loaders/fs/directory.d.ts.map +1 -1
  235. package/dist/document_loaders/fs/directory.js.map +1 -1
  236. package/dist/document_loaders/fs/json.cjs +7 -1
  237. package/dist/document_loaders/fs/json.cjs.map +1 -1
  238. package/dist/document_loaders/fs/json.js +7 -1
  239. package/dist/document_loaders/fs/json.js.map +1 -1
  240. package/dist/embeddings/cache_backed.cjs +1 -1
  241. package/dist/embeddings/cache_backed.cjs.map +1 -1
  242. package/dist/embeddings/cache_backed.d.cts +1 -1
  243. package/dist/embeddings/cache_backed.d.ts +2 -2
  244. package/dist/embeddings/cache_backed.js +2 -2
  245. package/dist/embeddings/cache_backed.js.map +1 -1
  246. package/dist/evaluation/agents/trajectory.d.cts.map +1 -1
  247. package/dist/evaluation/comparison/pairwise.d.cts.map +1 -1
  248. package/dist/evaluation/criteria/criteria.d.cts.map +1 -1
  249. package/dist/evaluation/embedding_distance/base.cjs +2 -4
  250. package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
  251. package/dist/evaluation/embedding_distance/base.js +2 -3
  252. package/dist/evaluation/embedding_distance/base.js.map +1 -1
  253. package/dist/evaluation/loader.cjs +7 -12
  254. package/dist/evaluation/loader.cjs.map +1 -1
  255. package/dist/evaluation/loader.d.cts +8 -2
  256. package/dist/evaluation/loader.d.cts.map +1 -1
  257. package/dist/evaluation/loader.d.ts +8 -2
  258. package/dist/evaluation/loader.d.ts.map +1 -1
  259. package/dist/evaluation/loader.js +7 -12
  260. package/dist/evaluation/loader.js.map +1 -1
  261. package/dist/hub/base.cjs.map +1 -1
  262. package/dist/hub/base.js.map +1 -1
  263. package/dist/index.cjs +38 -6
  264. package/dist/index.cjs.map +1 -1
  265. package/dist/index.d.cts +11 -4
  266. package/dist/index.d.ts +11 -4
  267. package/dist/index.js +18 -4
  268. package/dist/index.js.map +1 -1
  269. package/dist/langchain-core/dist/load/serializable.d.cts.map +1 -1
  270. package/dist/langchain-core/dist/messages/base.d.cts +24 -33
  271. package/dist/langchain-core/dist/messages/base.d.cts.map +1 -1
  272. package/dist/langchain-core/dist/messages/content/index.d.cts +21 -2
  273. package/dist/langchain-core/dist/messages/content/index.d.cts.map +1 -1
  274. package/dist/langchain-core/dist/messages/content/tools.d.cts +67 -6
  275. package/dist/langchain-core/dist/messages/content/tools.d.cts.map +1 -1
  276. package/dist/langchain-core/dist/messages/message.d.cts +598 -0
  277. package/dist/langchain-core/dist/messages/message.d.cts.map +1 -0
  278. package/dist/langchain-core/dist/messages/metadata.d.cts +97 -0
  279. package/dist/langchain-core/dist/messages/metadata.d.cts.map +1 -0
  280. package/dist/langchain-core/dist/messages/utils.d.cts +75 -0
  281. package/dist/langchain-core/dist/messages/utils.d.cts.map +1 -0
  282. package/dist/langchain-core/dist/prompt_values.d.cts.map +1 -1
  283. package/dist/langchain-core/dist/utils/types/index.d.cts.map +1 -1
  284. package/dist/libs/langchain-core/dist/load/serializable.d.ts.map +1 -1
  285. package/dist/libs/langchain-core/dist/messages/base.d.ts +24 -33
  286. package/dist/libs/langchain-core/dist/messages/base.d.ts.map +1 -1
  287. package/dist/libs/langchain-core/dist/messages/content/index.d.ts +21 -2
  288. package/dist/libs/langchain-core/dist/messages/content/index.d.ts.map +1 -1
  289. package/dist/libs/langchain-core/dist/messages/content/tools.d.ts +67 -6
  290. package/dist/libs/langchain-core/dist/messages/content/tools.d.ts.map +1 -1
  291. package/dist/libs/langchain-core/dist/messages/message.d.ts +598 -0
  292. package/dist/libs/langchain-core/dist/messages/message.d.ts.map +1 -0
  293. package/dist/libs/langchain-core/dist/messages/metadata.d.ts +97 -0
  294. package/dist/libs/langchain-core/dist/messages/metadata.d.ts.map +1 -0
  295. package/dist/libs/langchain-core/dist/messages/utils.d.ts +75 -0
  296. package/dist/libs/langchain-core/dist/messages/utils.d.ts.map +1 -0
  297. package/dist/libs/langchain-core/dist/prompt_values.d.ts.map +1 -1
  298. package/dist/libs/langchain-core/dist/utils/types/index.d.ts +2 -0
  299. package/dist/libs/langchain-core/dist/utils/types/index.d.ts.map +1 -1
  300. package/dist/libs/langchain-core/dist/utils/types/zod.d.ts +1 -0
  301. package/dist/load/import_map.cjs +3 -14
  302. package/dist/load/import_map.cjs.map +1 -1
  303. package/dist/load/import_map.js +3 -14
  304. package/dist/load/import_map.js.map +1 -1
  305. package/dist/memory/prompt.cjs.map +1 -1
  306. package/dist/memory/prompt.d.cts.map +1 -1
  307. package/dist/memory/prompt.d.ts.map +1 -1
  308. package/dist/memory/prompt.js.map +1 -1
  309. package/dist/output_parsers/combining.cjs +1 -1
  310. package/dist/output_parsers/combining.cjs.map +1 -1
  311. package/dist/output_parsers/combining.js +1 -1
  312. package/dist/output_parsers/combining.js.map +1 -1
  313. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs.map +1 -1
  314. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js.map +1 -1
  315. package/dist/output_parsers/expression_type_handlers/base.cjs +1 -1
  316. package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
  317. package/dist/output_parsers/expression_type_handlers/base.js +1 -1
  318. package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
  319. package/dist/output_parsers/regex.cjs.map +1 -1
  320. package/dist/output_parsers/regex.js.map +1 -1
  321. package/dist/output_parsers/structured.cjs +4 -4
  322. package/dist/output_parsers/structured.cjs.map +1 -1
  323. package/dist/output_parsers/structured.d.cts +1 -1
  324. package/dist/output_parsers/structured.d.cts.map +1 -1
  325. package/dist/output_parsers/structured.d.ts +1 -1
  326. package/dist/output_parsers/structured.d.ts.map +1 -1
  327. package/dist/output_parsers/structured.js +2 -2
  328. package/dist/output_parsers/structured.js.map +1 -1
  329. package/dist/retrievers/ensemble.cjs.map +1 -1
  330. package/dist/retrievers/ensemble.js.map +1 -1
  331. package/dist/storage/file_system.cjs +1 -1
  332. package/dist/storage/file_system.cjs.map +1 -1
  333. package/dist/storage/file_system.js +1 -1
  334. package/dist/storage/file_system.js.map +1 -1
  335. package/dist/tools/fs.cjs +5 -5
  336. package/dist/tools/fs.cjs.map +1 -1
  337. package/dist/tools/fs.d.cts +1 -1
  338. package/dist/tools/fs.d.cts.map +1 -1
  339. package/dist/tools/fs.d.ts +1 -1
  340. package/dist/tools/fs.d.ts.map +1 -1
  341. package/dist/tools/fs.js +1 -1
  342. package/dist/tools/fs.js.map +1 -1
  343. package/dist/tools/retriever.cjs +2 -2
  344. package/dist/tools/retriever.cjs.map +1 -1
  345. package/dist/tools/retriever.d.cts +1 -1
  346. package/dist/tools/retriever.d.cts.map +1 -1
  347. package/dist/tools/retriever.d.ts +1 -1
  348. package/dist/tools/retriever.d.ts.map +1 -1
  349. package/dist/tools/retriever.js +1 -1
  350. package/dist/tools/retriever.js.map +1 -1
  351. package/dist/tools/sql.cjs +1 -2
  352. package/dist/tools/sql.cjs.map +1 -1
  353. package/dist/tools/sql.d.cts +1 -1
  354. package/dist/tools/sql.d.cts.map +1 -1
  355. package/dist/tools/sql.d.ts +1 -1
  356. package/dist/tools/sql.d.ts.map +1 -1
  357. package/dist/tools/sql.js +1 -2
  358. package/dist/tools/sql.js.map +1 -1
  359. package/dist/types/expression-parser.d.cts +2 -0
  360. package/dist/types/expression-parser.d.cts.map +1 -1
  361. package/dist/types/expression-parser.d.ts +2 -0
  362. package/dist/types/expression-parser.d.ts.map +1 -1
  363. package/dist/util/hub.cjs +1 -1
  364. package/dist/util/hub.js +1 -1
  365. package/dist/util/openapi.cjs +1 -1
  366. package/dist/util/openapi.cjs.map +1 -1
  367. package/dist/util/openapi.js +1 -1
  368. package/dist/util/openapi.js.map +1 -1
  369. package/package.json +15 -21
  370. package/dist/agents/middlewareAgent/middlewares/hitl.cjs +0 -235
  371. package/dist/agents/middlewareAgent/middlewares/hitl.cjs.map +0 -1
  372. package/dist/agents/middlewareAgent/middlewares/hitl.d.cts +0 -199
  373. package/dist/agents/middlewareAgent/middlewares/hitl.d.cts.map +0 -1
  374. package/dist/agents/middlewareAgent/middlewares/hitl.d.ts +0 -199
  375. package/dist/agents/middlewareAgent/middlewares/hitl.d.ts.map +0 -1
  376. package/dist/agents/middlewareAgent/middlewares/hitl.js +0 -234
  377. package/dist/agents/middlewareAgent/middlewares/hitl.js.map +0 -1
  378. package/dist/agents/middlewareAgent/middlewares/index.cjs +0 -8
  379. package/dist/agents/middlewareAgent/middlewares/index.d.cts +0 -4
  380. package/dist/agents/middlewareAgent/middlewares/index.d.ts +0 -4
  381. package/dist/agents/middlewareAgent/middlewares/index.js +0 -5
  382. package/dist/agents/middlewareAgent/middlewares/promptCaching.cjs.map +0 -1
  383. package/dist/agents/middlewareAgent/middlewares/promptCaching.d.cts.map +0 -1
  384. package/dist/agents/middlewareAgent/middlewares/promptCaching.d.ts.map +0 -1
  385. package/dist/agents/middlewareAgent/middlewares/promptCaching.js.map +0 -1
  386. package/dist/agents/middlewareAgent/middlewares/summarization.cjs.map +0 -1
  387. package/dist/agents/middlewareAgent/middlewares/summarization.d.cts.map +0 -1
  388. package/dist/agents/middlewareAgent/middlewares/summarization.d.ts.map +0 -1
  389. package/dist/agents/middlewareAgent/middlewares/summarization.js.map +0 -1
  390. package/dist/chains/openai_functions/structured_output.cjs +0 -107
  391. package/dist/chains/openai_functions/structured_output.cjs.map +0 -1
  392. package/dist/chains/openai_functions/structured_output.d.cts +0 -38
  393. package/dist/chains/openai_functions/structured_output.d.cts.map +0 -1
  394. package/dist/chains/openai_functions/structured_output.d.ts +0 -38
  395. package/dist/chains/openai_functions/structured_output.d.ts.map +0 -1
  396. package/dist/chains/openai_functions/structured_output.js +0 -105
  397. package/dist/chains/openai_functions/structured_output.js.map +0 -1
  398. package/dist/chains/openai_moderation.cjs +0 -107
  399. package/dist/chains/openai_moderation.cjs.map +0 -1
  400. package/dist/chains/openai_moderation.d.cts +0 -74
  401. package/dist/chains/openai_moderation.d.cts.map +0 -1
  402. package/dist/chains/openai_moderation.d.ts +0 -74
  403. package/dist/chains/openai_moderation.d.ts.map +0 -1
  404. package/dist/chains/openai_moderation.js +0 -106
  405. package/dist/chains/openai_moderation.js.map +0 -1
@@ -1,5 +1,7 @@
1
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
1
2
  const require_RunnableCallable = require('../../RunnableCallable.cjs');
2
3
  const require_utils = require('./utils.cjs');
4
+ const __langchain_core_utils_types = require_rolldown_runtime.__toESM(require("@langchain/core/utils/types"));
3
5
 
4
6
  //#region src/agents/middlewareAgent/nodes/middleware.ts
5
7
  var MiddlewareNode = class extends require_RunnableCallable.RunnableCallable {
@@ -9,20 +11,22 @@ var MiddlewareNode = class extends require_RunnableCallable.RunnableCallable {
9
11
  */
10
12
  let filteredContext = {};
11
13
  /**
12
- * Check both config.context and config.configurable.context
14
+ * Parse context using middleware's contextSchema to apply defaults and validation
13
15
  */
14
- if (this.middleware.contextSchema && config?.context) {
16
+ if (this.middleware.contextSchema) {
15
17
  /**
16
18
  * Extract only the fields relevant to this middleware's schema
17
19
  */
18
20
  const schemaShape = this.middleware.contextSchema?.shape;
19
21
  if (schemaShape) {
20
22
  const relevantContext = {};
21
- for (const key of Object.keys(schemaShape)) if (key in config.context) relevantContext[key] = config.context[key];
23
+ const invokeContext = config?.context || {};
24
+ for (const key of Object.keys(schemaShape)) if (key in invokeContext) relevantContext[key] = invokeContext[key];
22
25
  /**
23
- * Parse to apply defaults and validation
26
+ * Parse to apply defaults and validation, even if relevantContext is empty
27
+ * This will throw if required fields are missing and no defaults exist
24
28
  */
25
- filteredContext = this.middleware.contextSchema.parse(relevantContext);
29
+ filteredContext = (0, __langchain_core_utils_types.interopParse)(this.middleware.contextSchema, relevantContext);
26
30
  }
27
31
  }
28
32
  /**
@@ -30,15 +34,11 @@ var MiddlewareNode = class extends require_RunnableCallable.RunnableCallable {
30
34
  */
31
35
  const runtime = {
32
36
  toolCalls: require_utils.parseToolCalls(state.messages),
33
- toolResults: require_utils.parseToolResults(state.messages),
34
- context: filteredContext
35
- };
36
- const controls = {
37
- jumpTo: (target, stateUpdate) => ({
38
- type: "jump",
39
- target,
40
- stateUpdate
41
- }),
37
+ context: filteredContext,
38
+ writer: config?.writer,
39
+ interrupt: config?.interrupt,
40
+ signal: config?.signal,
41
+ tools: this.middleware.tools ?? [],
42
42
  terminate: (result$1) => {
43
43
  if (result$1 instanceof Error) throw result$1;
44
44
  return {
@@ -47,20 +47,45 @@ var MiddlewareNode = class extends require_RunnableCallable.RunnableCallable {
47
47
  };
48
48
  }
49
49
  };
50
- const result = await this.runHook(state, runtime, controls);
50
+ const result = await this.runHook(state, runtime);
51
51
  /**
52
52
  * If result is undefined, return current state
53
53
  */
54
- if (!result) return state;
54
+ if (!result) return {
55
+ ...state,
56
+ jumpTo: void 0
57
+ };
58
+ /**
59
+ * Verify that the jump target is allowed for the middleware
60
+ */
61
+ const jumpToConstraint = this.name?.startsWith("BeforeModelNode_") ? this.middleware.beforeModelJumpTo : this.middleware.afterModelJumpTo;
62
+ if (typeof result.jumpTo === "string" && !jumpToConstraint?.includes(result.jumpTo)) {
63
+ const constraint = this.name?.startsWith("BeforeModelNode_") ? "beforeModelJumpTo" : "afterModelJumpTo";
64
+ const suggestion = jumpToConstraint && jumpToConstraint.length > 0 ? `must be one of: ${jumpToConstraint?.join(", ")}.` : `no ${constraint} defined in middleware ${this.middleware.name}.`;
65
+ throw new Error(`Invalid jump target: ${result.jumpTo}, ${suggestion}.`);
66
+ }
67
+ const jumpTo = require_utils.parseJumpToTarget(result.jumpTo);
55
68
  /**
56
69
  * If result is a control action, handle it
57
70
  */
71
+ if (typeof result === "object" && "type" in result) {
72
+ if (result.type === "terminate") {
73
+ if (result.error) throw result.error;
74
+ return {
75
+ ...state,
76
+ ...result.result || {},
77
+ jumpTo
78
+ };
79
+ }
80
+ throw new Error(`Invalid control action: ${JSON.stringify(result)}`);
81
+ }
58
82
  /**
59
83
  * If result is a state update, merge it with current state
60
84
  */
61
85
  return {
62
86
  ...state,
63
- ...result
87
+ ...result,
88
+ jumpTo
64
89
  };
65
90
  }
66
91
  get nodeOptions() {
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.cjs","names":["RunnableCallable","state: TStateSchema","config?: LangGraphRunnableConfig","relevantContext: Record<string, unknown>","runtime: Runtime<TContextSchema>","parseToolCalls","parseToolResults","controls: Controls<TStateSchema>","target: \"model\" | \"tools\"","stateUpdate?: Partial<TStateSchema>","result?: Partial<TStateSchema> | Error","result","derivePrivateState"],"sources":["../../../../src/agents/middlewareAgent/nodes/middleware.ts"],"sourcesContent":["/* eslint-disable no-instanceof/no-instanceof */\nimport { z } from \"zod\";\nimport { LangGraphRunnableConfig, Command } from \"@langchain/langgraph\";\n\nimport { RunnableCallable } from \"../../RunnableCallable.js\";\nimport type {\n Runtime,\n Controls,\n ControlAction,\n AgentMiddleware,\n MiddlewareResult,\n} from \"../types.js\";\nimport {\n derivePrivateState,\n parseToolCalls,\n parseToolResults,\n} from \"./utils.js\";\n\ntype NodeOutput<TStateSchema extends Record<string, any>> =\n | TStateSchema\n | Command<any, TStateSchema, string>;\n\nexport abstract class MiddlewareNode<\n TStateSchema extends Record<string, any>,\n TContextSchema extends Record<string, any>\n> extends RunnableCallable<TStateSchema, NodeOutput<TStateSchema>> {\n abstract middleware: AgentMiddleware<\n z.ZodObject<z.ZodRawShape>,\n z.ZodObject<z.ZodRawShape>\n >;\n\n abstract runHook(\n state: TStateSchema,\n config?: Runtime<TContextSchema>,\n controls?: Controls<TStateSchema>\n ): Promise<MiddlewareResult<TStateSchema>>;\n\n async invokeMiddleware(\n state: TStateSchema,\n config?: LangGraphRunnableConfig\n ): Promise<NodeOutput<TStateSchema>> {\n /**\n * Filter context based on middleware's contextSchema\n */\n let filteredContext = {} as TContextSchema;\n /**\n * Check both config.context and config.configurable.context\n */\n if (this.middleware.contextSchema && config?.context) {\n /**\n * Extract only the fields relevant to this middleware's schema\n */\n const schemaShape = this.middleware.contextSchema?.shape;\n if (schemaShape) {\n const relevantContext: Record<string, unknown> = {};\n for (const key of Object.keys(schemaShape)) {\n if (key in config.context) {\n relevantContext[key] = config.context[key];\n }\n }\n /**\n * Parse to apply defaults and validation\n */\n filteredContext = this.middleware.contextSchema.parse(\n relevantContext\n ) as TContextSchema;\n }\n }\n\n /**\n * ToDo: implement later\n */\n const runtime: Runtime<TContextSchema> = {\n toolCalls: parseToolCalls(state.messages),\n toolResults: parseToolResults(state.messages),\n context: filteredContext,\n };\n\n const controls: Controls<TStateSchema> = {\n jumpTo: (\n target: \"model\" | \"tools\",\n stateUpdate?: Partial<TStateSchema>\n ): ControlAction<TStateSchema> => ({\n type: \"jump\",\n target,\n stateUpdate,\n }),\n terminate: (\n result?: Partial<TStateSchema> | Error\n ): ControlAction<TStateSchema> => {\n if (result instanceof Error) {\n throw result;\n }\n return { type: \"terminate\", result };\n },\n };\n\n const result = await this.runHook(state, runtime, controls);\n\n /**\n * If result is undefined, return current state\n */\n if (!result) {\n return state;\n }\n\n /**\n * If result is a control action, handle it\n */\n // if (typeof result === \"object\" && \"type\" in result) {\n // // Handle control actions\n // const action = result as ControlAction<TStateSchema>;\n // if (action.type === \"terminate\") {\n // if (action.error) {\n // throw action.error;\n // }\n // return { ...state, ...(action.result || {}) };\n // }\n\n // if (action.type === \"jump\") {\n // return new Command<any, TStateSchema, string>({\n // goto: action.target,\n // update: { ...state, ...(action.stateUpdate || {}) },\n // });\n // }\n\n // throw new Error(`Invalid control action: ${JSON.stringify(action)}`);\n // }\n\n /**\n * If result is a state update, merge it with current state\n */\n return { ...state, ...result };\n }\n\n get nodeOptions(): {\n input: z.ZodObject<TStateSchema>;\n } {\n return {\n input: derivePrivateState(\n this.middleware.stateSchema\n ) as z.ZodObject<TStateSchema>,\n };\n }\n}\n"],"mappings":";;;;AAsBA,IAAsB,iBAAtB,cAGUA,0CAAyD;CAYjE,MAAM,iBACJC,OACAC,QACmC;;;;EAInC,IAAI,kBAAkB,CAAE;;;;AAIxB,MAAI,KAAK,WAAW,iBAAiB,QAAQ,SAAS;;;;GAIpD,MAAM,cAAc,KAAK,WAAW,eAAe;AACnD,OAAI,aAAa;IACf,MAAMC,kBAA2C,CAAE;AACnD,SAAK,MAAM,OAAO,OAAO,KAAK,YAAY,CACxC,KAAI,OAAO,OAAO,SAChB,gBAAgB,OAAO,OAAO,QAAQ;;;;IAM1C,kBAAkB,KAAK,WAAW,cAAc,MAC9C,gBACD;GACF;EACF;;;;EAKD,MAAMC,UAAmC;GACvC,WAAWC,6BAAe,MAAM,SAAS;GACzC,aAAaC,+BAAiB,MAAM,SAAS;GAC7C,SAAS;EACV;EAED,MAAMC,WAAmC;GACvC,QAAQ,CACNC,QACAC,iBACiC;IACjC,MAAM;IACN;IACA;GACD;GACD,WAAW,CACTC,aACgC;AAChC,QAAIC,oBAAkB,MACpB,OAAMA;AAER,WAAO;KAAE,MAAM;KAAa;IAAQ;GACrC;EACF;EAED,MAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,SAAS,SAAS;;;;AAK3D,MAAI,CAAC,OACH,QAAO;;;;;;;AA6BT,SAAO;GAAE,GAAG;GAAO,GAAG;EAAQ;CAC/B;CAED,IAAI,cAEF;AACA,SAAO,EACL,OAAOC,iCACL,KAAK,WAAW,YACjB,CACF;CACF;AACF"}
1
+ {"version":3,"file":"middleware.cjs","names":["RunnableCallable","state: TStateSchema","config?: LangGraphRunnableConfig","relevantContext: Record<string, unknown>","runtime: Runtime<TStateSchema, TContextSchema>","parseToolCalls","result?: Partial<TStateSchema> | Error","result","parseJumpToTarget","derivePrivateState"],"sources":["../../../../src/agents/middlewareAgent/nodes/middleware.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-instanceof/no-instanceof */\nimport { z } from \"zod/v3\";\nimport { LangGraphRunnableConfig, Command } from \"@langchain/langgraph\";\nimport { interopParse } from \"@langchain/core/utils/types\";\n\nimport { RunnableCallable } from \"../../RunnableCallable.js\";\nimport type {\n Runtime,\n ControlAction,\n AgentMiddleware,\n MiddlewareResult,\n JumpToTarget,\n} from \"../types.js\";\nimport {\n derivePrivateState,\n parseToolCalls,\n parseJumpToTarget,\n} from \"./utils.js\";\n\ntype NodeOutput<TStateSchema extends Record<string, any>> =\n | TStateSchema\n | Command<any, TStateSchema, string>;\n\nexport abstract class MiddlewareNode<\n TStateSchema extends Record<string, any>,\n TContextSchema extends Record<string, any>\n> extends RunnableCallable<TStateSchema, NodeOutput<TStateSchema>> {\n abstract middleware: AgentMiddleware<\n z.ZodObject<z.ZodRawShape>,\n z.ZodObject<z.ZodRawShape>\n >;\n\n abstract runHook(\n state: TStateSchema,\n config?: Runtime<TStateSchema, TContextSchema>\n ): Promise<MiddlewareResult<TStateSchema>>;\n\n async invokeMiddleware(\n state: TStateSchema,\n config?: LangGraphRunnableConfig\n ): Promise<NodeOutput<TStateSchema>> {\n /**\n * Filter context based on middleware's contextSchema\n */\n let filteredContext = {} as TContextSchema;\n /**\n * Parse context using middleware's contextSchema to apply defaults and validation\n */\n if (this.middleware.contextSchema) {\n /**\n * Extract only the fields relevant to this middleware's schema\n */\n const schemaShape = this.middleware.contextSchema?.shape;\n if (schemaShape) {\n const relevantContext: Record<string, unknown> = {};\n const invokeContext = config?.context || {};\n for (const key of Object.keys(schemaShape)) {\n if (key in invokeContext) {\n relevantContext[key] = invokeContext[key];\n }\n }\n /**\n * Parse to apply defaults and validation, even if relevantContext is empty\n * This will throw if required fields are missing and no defaults exist\n */\n filteredContext = interopParse(\n this.middleware.contextSchema,\n relevantContext\n ) as TContextSchema;\n }\n }\n\n /**\n * ToDo: implement later\n */\n const runtime: Runtime<TStateSchema, TContextSchema> = {\n toolCalls: parseToolCalls(state.messages),\n context: filteredContext,\n writer: config?.writer,\n interrupt: config?.interrupt,\n signal: config?.signal,\n tools: this.middleware.tools ?? [],\n terminate: (\n result?: Partial<TStateSchema> | Error\n ): ControlAction<TStateSchema> => {\n if (result instanceof Error) {\n throw result;\n }\n return { type: \"terminate\", result };\n },\n };\n\n const result = await this.runHook(state, runtime);\n\n /**\n * If result is undefined, return current state\n */\n if (!result) {\n return { ...state, jumpTo: undefined };\n }\n\n /**\n * Verify that the jump target is allowed for the middleware\n */\n const jumpToConstraint = this.name?.startsWith(\"BeforeModelNode_\")\n ? this.middleware.beforeModelJumpTo\n : this.middleware.afterModelJumpTo;\n if (\n typeof result.jumpTo === \"string\" &&\n !jumpToConstraint?.includes(result.jumpTo as JumpToTarget)\n ) {\n const constraint = this.name?.startsWith(\"BeforeModelNode_\")\n ? \"beforeModelJumpTo\"\n : \"afterModelJumpTo\";\n const suggestion =\n jumpToConstraint && jumpToConstraint.length > 0\n ? `must be one of: ${jumpToConstraint?.join(\", \")}.`\n : `no ${constraint} defined in middleware ${this.middleware.name}.`;\n throw new Error(`Invalid jump target: ${result.jumpTo}, ${suggestion}.`);\n }\n\n const jumpTo = parseJumpToTarget(result.jumpTo as string);\n\n /**\n * If result is a control action, handle it\n */\n if (typeof result === \"object\" && \"type\" in result) {\n // Handle control actions\n if (result.type === \"terminate\") {\n if (result.error) {\n throw result.error;\n }\n return {\n ...state,\n ...(result.result || {}),\n jumpTo,\n };\n }\n\n throw new Error(`Invalid control action: ${JSON.stringify(result)}`);\n }\n\n /**\n * If result is a state update, merge it with current state\n */\n return { ...state, ...result, jumpTo };\n }\n\n get nodeOptions(): {\n input: z.ZodObject<TStateSchema>;\n } {\n return {\n input: derivePrivateState(\n this.middleware.stateSchema\n ) as z.ZodObject<TStateSchema>,\n };\n }\n}\n"],"mappings":";;;;;;AAwBA,IAAsB,iBAAtB,cAGUA,0CAAyD;CAWjE,MAAM,iBACJC,OACAC,QACmC;;;;EAInC,IAAI,kBAAkB,CAAE;;;;AAIxB,MAAI,KAAK,WAAW,eAAe;;;;GAIjC,MAAM,cAAc,KAAK,WAAW,eAAe;AACnD,OAAI,aAAa;IACf,MAAMC,kBAA2C,CAAE;IACnD,MAAM,gBAAgB,QAAQ,WAAW,CAAE;AAC3C,SAAK,MAAM,OAAO,OAAO,KAAK,YAAY,CACxC,KAAI,OAAO,eACT,gBAAgB,OAAO,cAAc;;;;;IAOzC,iEACE,KAAK,WAAW,eAChB,gBACD;GACF;EACF;;;;EAKD,MAAMC,UAAiD;GACrD,WAAWC,6BAAe,MAAM,SAAS;GACzC,SAAS;GACT,QAAQ,QAAQ;GAChB,WAAW,QAAQ;GACnB,QAAQ,QAAQ;GAChB,OAAO,KAAK,WAAW,SAAS,CAAE;GAClC,WAAW,CACTC,aACgC;AAChC,QAAIC,oBAAkB,MACpB,OAAMA;AAER,WAAO;KAAE,MAAM;KAAa;IAAQ;GACrC;EACF;EAED,MAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,QAAQ;;;;AAKjD,MAAI,CAAC,OACH,QAAO;GAAE,GAAG;GAAO,QAAQ;EAAW;;;;EAMxC,MAAM,mBAAmB,KAAK,MAAM,WAAW,mBAAmB,GAC9D,KAAK,WAAW,oBAChB,KAAK,WAAW;AACpB,MACE,OAAO,OAAO,WAAW,YACzB,CAAC,kBAAkB,SAAS,OAAO,OAAuB,EAC1D;GACA,MAAM,aAAa,KAAK,MAAM,WAAW,mBAAmB,GACxD,sBACA;GACJ,MAAM,aACJ,oBAAoB,iBAAiB,SAAS,IAC1C,CAAC,gBAAgB,EAAE,kBAAkB,KAAK,KAAK,CAAC,CAAC,CAAC,GAClD,CAAC,GAAG,EAAE,WAAW,uBAAuB,EAAE,KAAK,WAAW,KAAK,CAAC,CAAC;AACvE,SAAM,IAAI,MAAM,CAAC,qBAAqB,EAAE,OAAO,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;EACxE;EAED,MAAM,SAASC,gCAAkB,OAAO,OAAiB;;;;AAKzD,MAAI,OAAO,WAAW,YAAY,UAAU,QAAQ;AAElD,OAAI,OAAO,SAAS,aAAa;AAC/B,QAAI,OAAO,MACT,OAAM,OAAO;AAEf,WAAO;KACL,GAAG;KACH,GAAI,OAAO,UAAU,CAAE;KACvB;IACD;GACF;AAED,SAAM,IAAI,MAAM,CAAC,wBAAwB,EAAE,KAAK,UAAU,OAAO,EAAE;EACpE;;;;AAKD,SAAO;GAAE,GAAG;GAAO,GAAG;GAAQ;EAAQ;CACvC;CAED,IAAI,cAEF;AACA,SAAO,EACL,OAAOC,iCACL,KAAK,WAAW,YACjB,CACF;CACF;AACF"}
@@ -1,5 +1,6 @@
1
1
  import { RunnableCallable } from "../../RunnableCallable.js";
2
- import { derivePrivateState, parseToolCalls, parseToolResults } from "./utils.js";
2
+ import { derivePrivateState, parseJumpToTarget, parseToolCalls } from "./utils.js";
3
+ import { interopParse } from "@langchain/core/utils/types";
3
4
 
4
5
  //#region src/agents/middlewareAgent/nodes/middleware.ts
5
6
  var MiddlewareNode = class extends RunnableCallable {
@@ -9,20 +10,22 @@ var MiddlewareNode = class extends RunnableCallable {
9
10
  */
10
11
  let filteredContext = {};
11
12
  /**
12
- * Check both config.context and config.configurable.context
13
+ * Parse context using middleware's contextSchema to apply defaults and validation
13
14
  */
14
- if (this.middleware.contextSchema && config?.context) {
15
+ if (this.middleware.contextSchema) {
15
16
  /**
16
17
  * Extract only the fields relevant to this middleware's schema
17
18
  */
18
19
  const schemaShape = this.middleware.contextSchema?.shape;
19
20
  if (schemaShape) {
20
21
  const relevantContext = {};
21
- for (const key of Object.keys(schemaShape)) if (key in config.context) relevantContext[key] = config.context[key];
22
+ const invokeContext = config?.context || {};
23
+ for (const key of Object.keys(schemaShape)) if (key in invokeContext) relevantContext[key] = invokeContext[key];
22
24
  /**
23
- * Parse to apply defaults and validation
25
+ * Parse to apply defaults and validation, even if relevantContext is empty
26
+ * This will throw if required fields are missing and no defaults exist
24
27
  */
25
- filteredContext = this.middleware.contextSchema.parse(relevantContext);
28
+ filteredContext = interopParse(this.middleware.contextSchema, relevantContext);
26
29
  }
27
30
  }
28
31
  /**
@@ -30,15 +33,11 @@ var MiddlewareNode = class extends RunnableCallable {
30
33
  */
31
34
  const runtime = {
32
35
  toolCalls: parseToolCalls(state.messages),
33
- toolResults: parseToolResults(state.messages),
34
- context: filteredContext
35
- };
36
- const controls = {
37
- jumpTo: (target, stateUpdate) => ({
38
- type: "jump",
39
- target,
40
- stateUpdate
41
- }),
36
+ context: filteredContext,
37
+ writer: config?.writer,
38
+ interrupt: config?.interrupt,
39
+ signal: config?.signal,
40
+ tools: this.middleware.tools ?? [],
42
41
  terminate: (result$1) => {
43
42
  if (result$1 instanceof Error) throw result$1;
44
43
  return {
@@ -47,20 +46,45 @@ var MiddlewareNode = class extends RunnableCallable {
47
46
  };
48
47
  }
49
48
  };
50
- const result = await this.runHook(state, runtime, controls);
49
+ const result = await this.runHook(state, runtime);
51
50
  /**
52
51
  * If result is undefined, return current state
53
52
  */
54
- if (!result) return state;
53
+ if (!result) return {
54
+ ...state,
55
+ jumpTo: void 0
56
+ };
57
+ /**
58
+ * Verify that the jump target is allowed for the middleware
59
+ */
60
+ const jumpToConstraint = this.name?.startsWith("BeforeModelNode_") ? this.middleware.beforeModelJumpTo : this.middleware.afterModelJumpTo;
61
+ if (typeof result.jumpTo === "string" && !jumpToConstraint?.includes(result.jumpTo)) {
62
+ const constraint = this.name?.startsWith("BeforeModelNode_") ? "beforeModelJumpTo" : "afterModelJumpTo";
63
+ const suggestion = jumpToConstraint && jumpToConstraint.length > 0 ? `must be one of: ${jumpToConstraint?.join(", ")}.` : `no ${constraint} defined in middleware ${this.middleware.name}.`;
64
+ throw new Error(`Invalid jump target: ${result.jumpTo}, ${suggestion}.`);
65
+ }
66
+ const jumpTo = parseJumpToTarget(result.jumpTo);
55
67
  /**
56
68
  * If result is a control action, handle it
57
69
  */
70
+ if (typeof result === "object" && "type" in result) {
71
+ if (result.type === "terminate") {
72
+ if (result.error) throw result.error;
73
+ return {
74
+ ...state,
75
+ ...result.result || {},
76
+ jumpTo
77
+ };
78
+ }
79
+ throw new Error(`Invalid control action: ${JSON.stringify(result)}`);
80
+ }
58
81
  /**
59
82
  * If result is a state update, merge it with current state
60
83
  */
61
84
  return {
62
85
  ...state,
63
- ...result
86
+ ...result,
87
+ jumpTo
64
88
  };
65
89
  }
66
90
  get nodeOptions() {
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":["state: TStateSchema","config?: LangGraphRunnableConfig","relevantContext: Record<string, unknown>","runtime: Runtime<TContextSchema>","controls: Controls<TStateSchema>","target: \"model\" | \"tools\"","stateUpdate?: Partial<TStateSchema>","result?: Partial<TStateSchema> | Error","result"],"sources":["../../../../src/agents/middlewareAgent/nodes/middleware.ts"],"sourcesContent":["/* eslint-disable no-instanceof/no-instanceof */\nimport { z } from \"zod\";\nimport { LangGraphRunnableConfig, Command } from \"@langchain/langgraph\";\n\nimport { RunnableCallable } from \"../../RunnableCallable.js\";\nimport type {\n Runtime,\n Controls,\n ControlAction,\n AgentMiddleware,\n MiddlewareResult,\n} from \"../types.js\";\nimport {\n derivePrivateState,\n parseToolCalls,\n parseToolResults,\n} from \"./utils.js\";\n\ntype NodeOutput<TStateSchema extends Record<string, any>> =\n | TStateSchema\n | Command<any, TStateSchema, string>;\n\nexport abstract class MiddlewareNode<\n TStateSchema extends Record<string, any>,\n TContextSchema extends Record<string, any>\n> extends RunnableCallable<TStateSchema, NodeOutput<TStateSchema>> {\n abstract middleware: AgentMiddleware<\n z.ZodObject<z.ZodRawShape>,\n z.ZodObject<z.ZodRawShape>\n >;\n\n abstract runHook(\n state: TStateSchema,\n config?: Runtime<TContextSchema>,\n controls?: Controls<TStateSchema>\n ): Promise<MiddlewareResult<TStateSchema>>;\n\n async invokeMiddleware(\n state: TStateSchema,\n config?: LangGraphRunnableConfig\n ): Promise<NodeOutput<TStateSchema>> {\n /**\n * Filter context based on middleware's contextSchema\n */\n let filteredContext = {} as TContextSchema;\n /**\n * Check both config.context and config.configurable.context\n */\n if (this.middleware.contextSchema && config?.context) {\n /**\n * Extract only the fields relevant to this middleware's schema\n */\n const schemaShape = this.middleware.contextSchema?.shape;\n if (schemaShape) {\n const relevantContext: Record<string, unknown> = {};\n for (const key of Object.keys(schemaShape)) {\n if (key in config.context) {\n relevantContext[key] = config.context[key];\n }\n }\n /**\n * Parse to apply defaults and validation\n */\n filteredContext = this.middleware.contextSchema.parse(\n relevantContext\n ) as TContextSchema;\n }\n }\n\n /**\n * ToDo: implement later\n */\n const runtime: Runtime<TContextSchema> = {\n toolCalls: parseToolCalls(state.messages),\n toolResults: parseToolResults(state.messages),\n context: filteredContext,\n };\n\n const controls: Controls<TStateSchema> = {\n jumpTo: (\n target: \"model\" | \"tools\",\n stateUpdate?: Partial<TStateSchema>\n ): ControlAction<TStateSchema> => ({\n type: \"jump\",\n target,\n stateUpdate,\n }),\n terminate: (\n result?: Partial<TStateSchema> | Error\n ): ControlAction<TStateSchema> => {\n if (result instanceof Error) {\n throw result;\n }\n return { type: \"terminate\", result };\n },\n };\n\n const result = await this.runHook(state, runtime, controls);\n\n /**\n * If result is undefined, return current state\n */\n if (!result) {\n return state;\n }\n\n /**\n * If result is a control action, handle it\n */\n // if (typeof result === \"object\" && \"type\" in result) {\n // // Handle control actions\n // const action = result as ControlAction<TStateSchema>;\n // if (action.type === \"terminate\") {\n // if (action.error) {\n // throw action.error;\n // }\n // return { ...state, ...(action.result || {}) };\n // }\n\n // if (action.type === \"jump\") {\n // return new Command<any, TStateSchema, string>({\n // goto: action.target,\n // update: { ...state, ...(action.stateUpdate || {}) },\n // });\n // }\n\n // throw new Error(`Invalid control action: ${JSON.stringify(action)}`);\n // }\n\n /**\n * If result is a state update, merge it with current state\n */\n return { ...state, ...result };\n }\n\n get nodeOptions(): {\n input: z.ZodObject<TStateSchema>;\n } {\n return {\n input: derivePrivateState(\n this.middleware.stateSchema\n ) as z.ZodObject<TStateSchema>,\n };\n }\n}\n"],"mappings":";;;;AAsBA,IAAsB,iBAAtB,cAGU,iBAAyD;CAYjE,MAAM,iBACJA,OACAC,QACmC;;;;EAInC,IAAI,kBAAkB,CAAE;;;;AAIxB,MAAI,KAAK,WAAW,iBAAiB,QAAQ,SAAS;;;;GAIpD,MAAM,cAAc,KAAK,WAAW,eAAe;AACnD,OAAI,aAAa;IACf,MAAMC,kBAA2C,CAAE;AACnD,SAAK,MAAM,OAAO,OAAO,KAAK,YAAY,CACxC,KAAI,OAAO,OAAO,SAChB,gBAAgB,OAAO,OAAO,QAAQ;;;;IAM1C,kBAAkB,KAAK,WAAW,cAAc,MAC9C,gBACD;GACF;EACF;;;;EAKD,MAAMC,UAAmC;GACvC,WAAW,eAAe,MAAM,SAAS;GACzC,aAAa,iBAAiB,MAAM,SAAS;GAC7C,SAAS;EACV;EAED,MAAMC,WAAmC;GACvC,QAAQ,CACNC,QACAC,iBACiC;IACjC,MAAM;IACN;IACA;GACD;GACD,WAAW,CACTC,aACgC;AAChC,QAAIC,oBAAkB,MACpB,OAAMA;AAER,WAAO;KAAE,MAAM;KAAa;IAAQ;GACrC;EACF;EAED,MAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,SAAS,SAAS;;;;AAK3D,MAAI,CAAC,OACH,QAAO;;;;;;;AA6BT,SAAO;GAAE,GAAG;GAAO,GAAG;EAAQ;CAC/B;CAED,IAAI,cAEF;AACA,SAAO,EACL,OAAO,mBACL,KAAK,WAAW,YACjB,CACF;CACF;AACF"}
1
+ {"version":3,"file":"middleware.js","names":["state: TStateSchema","config?: LangGraphRunnableConfig","relevantContext: Record<string, unknown>","runtime: Runtime<TStateSchema, TContextSchema>","result?: Partial<TStateSchema> | Error","result"],"sources":["../../../../src/agents/middlewareAgent/nodes/middleware.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-instanceof/no-instanceof */\nimport { z } from \"zod/v3\";\nimport { LangGraphRunnableConfig, Command } from \"@langchain/langgraph\";\nimport { interopParse } from \"@langchain/core/utils/types\";\n\nimport { RunnableCallable } from \"../../RunnableCallable.js\";\nimport type {\n Runtime,\n ControlAction,\n AgentMiddleware,\n MiddlewareResult,\n JumpToTarget,\n} from \"../types.js\";\nimport {\n derivePrivateState,\n parseToolCalls,\n parseJumpToTarget,\n} from \"./utils.js\";\n\ntype NodeOutput<TStateSchema extends Record<string, any>> =\n | TStateSchema\n | Command<any, TStateSchema, string>;\n\nexport abstract class MiddlewareNode<\n TStateSchema extends Record<string, any>,\n TContextSchema extends Record<string, any>\n> extends RunnableCallable<TStateSchema, NodeOutput<TStateSchema>> {\n abstract middleware: AgentMiddleware<\n z.ZodObject<z.ZodRawShape>,\n z.ZodObject<z.ZodRawShape>\n >;\n\n abstract runHook(\n state: TStateSchema,\n config?: Runtime<TStateSchema, TContextSchema>\n ): Promise<MiddlewareResult<TStateSchema>>;\n\n async invokeMiddleware(\n state: TStateSchema,\n config?: LangGraphRunnableConfig\n ): Promise<NodeOutput<TStateSchema>> {\n /**\n * Filter context based on middleware's contextSchema\n */\n let filteredContext = {} as TContextSchema;\n /**\n * Parse context using middleware's contextSchema to apply defaults and validation\n */\n if (this.middleware.contextSchema) {\n /**\n * Extract only the fields relevant to this middleware's schema\n */\n const schemaShape = this.middleware.contextSchema?.shape;\n if (schemaShape) {\n const relevantContext: Record<string, unknown> = {};\n const invokeContext = config?.context || {};\n for (const key of Object.keys(schemaShape)) {\n if (key in invokeContext) {\n relevantContext[key] = invokeContext[key];\n }\n }\n /**\n * Parse to apply defaults and validation, even if relevantContext is empty\n * This will throw if required fields are missing and no defaults exist\n */\n filteredContext = interopParse(\n this.middleware.contextSchema,\n relevantContext\n ) as TContextSchema;\n }\n }\n\n /**\n * ToDo: implement later\n */\n const runtime: Runtime<TStateSchema, TContextSchema> = {\n toolCalls: parseToolCalls(state.messages),\n context: filteredContext,\n writer: config?.writer,\n interrupt: config?.interrupt,\n signal: config?.signal,\n tools: this.middleware.tools ?? [],\n terminate: (\n result?: Partial<TStateSchema> | Error\n ): ControlAction<TStateSchema> => {\n if (result instanceof Error) {\n throw result;\n }\n return { type: \"terminate\", result };\n },\n };\n\n const result = await this.runHook(state, runtime);\n\n /**\n * If result is undefined, return current state\n */\n if (!result) {\n return { ...state, jumpTo: undefined };\n }\n\n /**\n * Verify that the jump target is allowed for the middleware\n */\n const jumpToConstraint = this.name?.startsWith(\"BeforeModelNode_\")\n ? this.middleware.beforeModelJumpTo\n : this.middleware.afterModelJumpTo;\n if (\n typeof result.jumpTo === \"string\" &&\n !jumpToConstraint?.includes(result.jumpTo as JumpToTarget)\n ) {\n const constraint = this.name?.startsWith(\"BeforeModelNode_\")\n ? \"beforeModelJumpTo\"\n : \"afterModelJumpTo\";\n const suggestion =\n jumpToConstraint && jumpToConstraint.length > 0\n ? `must be one of: ${jumpToConstraint?.join(\", \")}.`\n : `no ${constraint} defined in middleware ${this.middleware.name}.`;\n throw new Error(`Invalid jump target: ${result.jumpTo}, ${suggestion}.`);\n }\n\n const jumpTo = parseJumpToTarget(result.jumpTo as string);\n\n /**\n * If result is a control action, handle it\n */\n if (typeof result === \"object\" && \"type\" in result) {\n // Handle control actions\n if (result.type === \"terminate\") {\n if (result.error) {\n throw result.error;\n }\n return {\n ...state,\n ...(result.result || {}),\n jumpTo,\n };\n }\n\n throw new Error(`Invalid control action: ${JSON.stringify(result)}`);\n }\n\n /**\n * If result is a state update, merge it with current state\n */\n return { ...state, ...result, jumpTo };\n }\n\n get nodeOptions(): {\n input: z.ZodObject<TStateSchema>;\n } {\n return {\n input: derivePrivateState(\n this.middleware.stateSchema\n ) as z.ZodObject<TStateSchema>,\n };\n }\n}\n"],"mappings":";;;;;AAwBA,IAAsB,iBAAtB,cAGU,iBAAyD;CAWjE,MAAM,iBACJA,OACAC,QACmC;;;;EAInC,IAAI,kBAAkB,CAAE;;;;AAIxB,MAAI,KAAK,WAAW,eAAe;;;;GAIjC,MAAM,cAAc,KAAK,WAAW,eAAe;AACnD,OAAI,aAAa;IACf,MAAMC,kBAA2C,CAAE;IACnD,MAAM,gBAAgB,QAAQ,WAAW,CAAE;AAC3C,SAAK,MAAM,OAAO,OAAO,KAAK,YAAY,CACxC,KAAI,OAAO,eACT,gBAAgB,OAAO,cAAc;;;;;IAOzC,kBAAkB,aAChB,KAAK,WAAW,eAChB,gBACD;GACF;EACF;;;;EAKD,MAAMC,UAAiD;GACrD,WAAW,eAAe,MAAM,SAAS;GACzC,SAAS;GACT,QAAQ,QAAQ;GAChB,WAAW,QAAQ;GACnB,QAAQ,QAAQ;GAChB,OAAO,KAAK,WAAW,SAAS,CAAE;GAClC,WAAW,CACTC,aACgC;AAChC,QAAIC,oBAAkB,MACpB,OAAMA;AAER,WAAO;KAAE,MAAM;KAAa;IAAQ;GACrC;EACF;EAED,MAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,QAAQ;;;;AAKjD,MAAI,CAAC,OACH,QAAO;GAAE,GAAG;GAAO,QAAQ;EAAW;;;;EAMxC,MAAM,mBAAmB,KAAK,MAAM,WAAW,mBAAmB,GAC9D,KAAK,WAAW,oBAChB,KAAK,WAAW;AACpB,MACE,OAAO,OAAO,WAAW,YACzB,CAAC,kBAAkB,SAAS,OAAO,OAAuB,EAC1D;GACA,MAAM,aAAa,KAAK,MAAM,WAAW,mBAAmB,GACxD,sBACA;GACJ,MAAM,aACJ,oBAAoB,iBAAiB,SAAS,IAC1C,CAAC,gBAAgB,EAAE,kBAAkB,KAAK,KAAK,CAAC,CAAC,CAAC,GAClD,CAAC,GAAG,EAAE,WAAW,uBAAuB,EAAE,KAAK,WAAW,KAAK,CAAC,CAAC;AACvE,SAAM,IAAI,MAAM,CAAC,qBAAqB,EAAE,OAAO,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;EACxE;EAED,MAAM,SAAS,kBAAkB,OAAO,OAAiB;;;;AAKzD,MAAI,OAAO,WAAW,YAAY,UAAU,QAAQ;AAElD,OAAI,OAAO,SAAS,aAAa;AAC/B,QAAI,OAAO,MACT,OAAM,OAAO;AAEf,WAAO;KACL,GAAG;KACH,GAAI,OAAO,UAAU,CAAE;KACvB;IACD;GACF;AAED,SAAM,IAAI,MAAM,CAAC,wBAAwB,EAAE,KAAK,UAAU,OAAO,EAAE;EACpE;;;;AAKD,SAAO;GAAE,GAAG;GAAO,GAAG;GAAQ;EAAQ;CACvC;CAED,IAAI,cAEF;AACA,SAAO,EACL,OAAO,mBACL,KAAK,WAAW,YACjB,CACF;CACF;AACF"}
@@ -1,6 +1,8 @@
1
1
  const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
2
  const __langchain_core_messages = require_rolldown_runtime.__toESM(require("@langchain/core/messages"));
3
- const zod = require_rolldown_runtime.__toESM(require("zod"));
3
+ const __langchain_langgraph = require_rolldown_runtime.__toESM(require("@langchain/langgraph"));
4
+ const __langchain_core_utils_types = require_rolldown_runtime.__toESM(require("@langchain/core/utils/types"));
5
+ const zod_v3 = require_rolldown_runtime.__toESM(require("zod/v3"));
4
6
 
5
7
  //#region src/agents/middlewareAgent/nodes/utils.ts
6
8
  /**
@@ -10,15 +12,11 @@ const zod = require_rolldown_runtime.__toESM(require("zod"));
10
12
  * Private properties (starting with _) are automatically made optional since
11
13
  * users cannot provide them when invoking the agent.
12
14
  */
13
- function initializeMiddlewareStates(middlewares, state) {
15
+ async function initializeMiddlewareStates(middlewareList, state) {
14
16
  const middlewareStates = {};
15
- for (const middleware of middlewares) if (middleware.stateSchema) {
16
- const { shape } = middleware.stateSchema;
17
- const modifiedShape = {};
18
- for (const [key, value] of Object.entries(shape)) if (key.startsWith("_")) modifiedShape[key] = value.optional();
19
- else modifiedShape[key] = value;
20
- const modifiedSchema = zod.z.object(modifiedShape);
21
- const parseResult = modifiedSchema.safeParse(state);
17
+ for (const middleware of middlewareList) if (middleware.stateSchema) {
18
+ const modifiedSchema = (0, __langchain_core_utils_types.interopZodObjectMakeFieldsOptional)(middleware.stateSchema, (key) => key.startsWith("_"));
19
+ const parseResult = await (0, __langchain_core_utils_types.interopSafeParseAsync)(modifiedSchema, state);
22
20
  if (parseResult.success) {
23
21
  Object.assign(middlewareStates, parseResult.data);
24
22
  continue;
@@ -38,21 +36,30 @@ function initializeMiddlewareStates(middlewares, state) {
38
36
  * @returns A new schema containing only the private properties (underscore-prefixed), all made optional
39
37
  */
40
38
  function derivePrivateState(stateSchema) {
41
- const builtInStateSchema = { messages: zod.z.custom(() => []) };
42
- if (!stateSchema) return zod.z.object(builtInStateSchema);
39
+ const builtInStateSchema = { messages: zod_v3.z.custom(() => []) };
40
+ if (!stateSchema) return zod_v3.z.object(builtInStateSchema);
43
41
  const { shape } = stateSchema;
44
42
  const privateShape = builtInStateSchema;
45
43
  for (const [key, value] of Object.entries(shape)) if (key.startsWith("_")) privateShape[key] = value.optional();
46
44
  else privateShape[key] = value;
47
- return zod.z.object(privateShape);
45
+ return zod_v3.z.object(privateShape);
48
46
  }
49
47
  /**
50
- * Parse out all tool calls from the messages
48
+ * Parse out all tool calls from the messages and populate the results
51
49
  * @param messages - The messages to parse
52
50
  * @returns The tool calls
53
51
  */
54
52
  function parseToolCalls(messages) {
55
- return messages.filter((message) => (0, __langchain_core_messages.isAIMessage)(message) && message.tool_calls).map((message) => message.tool_calls).flat() || [];
53
+ const calls = messages.filter((message) => __langchain_core_messages.AIMessage.isInstance(message) && message.tool_calls).map((message) => message.tool_calls).flat() || [];
54
+ const results = parseToolResults(messages);
55
+ return calls.map((call) => {
56
+ const callResult = results.find((result) => result.id === call.id);
57
+ if (callResult) return {
58
+ ...call,
59
+ result: callResult.result
60
+ };
61
+ return call;
62
+ });
56
63
  }
57
64
  /**
58
65
  * Parse out all tool results from the messages
@@ -60,15 +67,22 @@ function parseToolCalls(messages) {
60
67
  * @returns The tool results
61
68
  */
62
69
  function parseToolResults(messages) {
63
- return messages.filter((message) => (0, __langchain_core_messages.isToolMessage)(message)).map((message) => ({
70
+ return messages.filter((message) => __langchain_core_messages.ToolMessage.isInstance(message)).map((message) => ({
64
71
  id: message.tool_call_id,
65
72
  result: message.content
66
73
  }));
67
74
  }
75
+ function parseJumpToTarget(target) {
76
+ if (!target) return void 0;
77
+ if (target === "model") return "model_request";
78
+ if (target === "tools") return "tools";
79
+ if (target === "end") return __langchain_langgraph.END;
80
+ throw new Error(`Invalid jump target: ${target}, must be "model", "tools" or "end".`);
81
+ }
68
82
 
69
83
  //#endregion
70
84
  exports.derivePrivateState = derivePrivateState;
71
85
  exports.initializeMiddlewareStates = initializeMiddlewareStates;
86
+ exports.parseJumpToTarget = parseJumpToTarget;
72
87
  exports.parseToolCalls = parseToolCalls;
73
- exports.parseToolResults = parseToolResults;
74
88
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":["middlewares: readonly AgentMiddleware<any, any, any>[]","state: unknown","middlewareStates: Record<string, any>","modifiedShape: Record<string, any>","z","issue: ZodIssue","stateSchema?: z.ZodObject<z.ZodRawShape>","privateShape: Record<string, any>","messages: BaseMessage[]"],"sources":["../../../../src/agents/middlewareAgent/nodes/utils.ts"],"sourcesContent":["import {\n type BaseMessage,\n type ToolMessage,\n type AIMessage,\n isToolMessage,\n isAIMessage,\n} from \"@langchain/core/messages\";\nimport { z, type ZodIssue, type ZodTypeAny } from \"zod\";\n\nimport type { AgentMiddleware, ToolCall, ToolResult } from \"../types.js\";\n\n/**\n * Helper function to initialize middleware state defaults.\n * This is used to ensure all middleware state properties are initialized.\n *\n * Private properties (starting with _) are automatically made optional since\n * users cannot provide them when invoking the agent.\n */\nexport function initializeMiddlewareStates(\n middlewares: readonly AgentMiddleware<any, any, any>[],\n state: unknown\n): Record<string, any> {\n const middlewareStates: Record<string, any> = {};\n\n for (const middleware of middlewares) {\n if (middleware.stateSchema) {\n // Create a modified schema where private properties are optional\n const { shape } = middleware.stateSchema;\n const modifiedShape: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(shape)) {\n if (key.startsWith(\"_\")) {\n // Make private properties optional\n modifiedShape[key] = (value as ZodTypeAny).optional();\n } else {\n // Keep public properties as-is\n modifiedShape[key] = value;\n }\n }\n\n const modifiedSchema = z.object(modifiedShape);\n\n // Use safeParse with the modified schema\n const parseResult = modifiedSchema.safeParse(state);\n\n if (parseResult.success) {\n Object.assign(middlewareStates, parseResult.data);\n continue;\n }\n\n /**\n * If safeParse fails, there are required public fields missing\n */\n const requiredFields = parseResult.error.issues\n .filter(\n (issue: ZodIssue) =>\n issue.code === \"invalid_type\" && issue.message === \"Required\"\n )\n .map(\n (issue: ZodIssue) => ` - ${issue.path.join(\".\")}: ${issue.message}`\n )\n .join(\"\\n\");\n\n throw new Error(\n `Middleware \"${middleware.name}\" has required state fields that must be initialized:\\n` +\n `${requiredFields}\\n\\n` +\n `To fix this, either:\\n` +\n `1. Provide default values in your middleware's state schema using .default():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().default(\"default value\")\\n` +\n ` })\\n\\n` +\n `2. Or make the fields optional using .optional():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().optional()\\n` +\n ` })\\n\\n` +\n `3. Or ensure you pass these values when invoking the agent:\\n` +\n ` agent.invoke({\\n` +\n ` messages: [...],\\n` +\n ` ${parseResult.error.issues[0]?.path.join(\".\")}: \"value\"\\n` +\n ` })`\n );\n }\n }\n\n return middlewareStates;\n}\n\n/**\n * Users can define private and public state for a middleware. Private state properties start with an underscore.\n * This function will return the private state properties from the state schema, making all of them optional.\n * @param stateSchema - The middleware state schema\n * @returns A new schema containing only the private properties (underscore-prefixed), all made optional\n */\nexport function derivePrivateState(stateSchema?: z.ZodObject<z.ZodRawShape>) {\n const builtInStateSchema = {\n messages: z.custom<BaseMessage[]>(() => []),\n };\n\n if (!stateSchema) {\n return z.object(builtInStateSchema);\n }\n\n const { shape } = stateSchema;\n const privateShape: Record<string, any> = builtInStateSchema;\n\n // Filter properties that start with underscore and make them optional\n for (const [key, value] of Object.entries(shape)) {\n if (key.startsWith(\"_\")) {\n // Make the private property optional\n privateShape[key] = value.optional();\n } else {\n privateShape[key] = value;\n }\n }\n\n // Return a new schema with only private properties (all optional)\n return z.object(privateShape);\n}\n\n/**\n * Parse out all tool calls from the messages\n * @param messages - The messages to parse\n * @returns The tool calls\n */\nexport function parseToolCalls(messages: BaseMessage[]): ToolCall[] {\n return (\n messages\n .filter(\n (message) => isAIMessage(message) && (message as AIMessage).tool_calls\n )\n .map((message) => (message as AIMessage).tool_calls as ToolCall[])\n .flat() || []\n );\n}\n\n/**\n * Parse out all tool results from the messages\n * @param messages - The messages to parse\n * @returns The tool results\n */\nexport function parseToolResults(messages: BaseMessage[]): ToolResult[] {\n return messages\n .filter((message) => isToolMessage(message))\n .map((message) => ({\n id: (message as ToolMessage).tool_call_id,\n result: (message as ToolMessage).content,\n }));\n}\n"],"mappings":";;;;;;;;;;;;AAkBA,SAAgB,2BACdA,aACAC,OACqB;CACrB,MAAMC,mBAAwC,CAAE;AAEhD,MAAK,MAAM,cAAc,YACvB,KAAI,WAAW,aAAa;EAE1B,MAAM,EAAE,OAAO,GAAG,WAAW;EAC7B,MAAMC,gBAAqC,CAAE;AAE7C,OAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,MAAM,CAC9C,KAAI,IAAI,WAAW,IAAI,EAErB,cAAc,OAAQ,MAAqB,UAAU;OAGrD,cAAc,OAAO;EAIzB,MAAM,iBAAiBC,MAAE,OAAO,cAAc;EAG9C,MAAM,cAAc,eAAe,UAAU,MAAM;AAEnD,MAAI,YAAY,SAAS;GACvB,OAAO,OAAO,kBAAkB,YAAY,KAAK;AACjD;EACD;;;;EAKD,MAAM,iBAAiB,YAAY,MAAM,OACtC,OACC,CAACC,UACC,MAAM,SAAS,kBAAkB,MAAM,YAAY,WACtD,CACA,IACC,CAACA,UAAoB,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,SAAS,CACrE,CACA,KAAK,KAAK;AAEb,QAAM,IAAI,MACR,CAAC,YAAY,EAAE,WAAW,KAAK,uDAAuD,EACjF,eAAe,0aAAI,EAad,YAAY,MAAM,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAW,CACxD;CAEZ;AAGH,QAAO;AACR;;;;;;;AAQD,SAAgB,mBAAmBC,aAA0C;CAC3E,MAAM,qBAAqB,EACzB,UAAUF,MAAE,OAAsB,MAAM,CAAE,EAAC,CAC5C;AAED,KAAI,CAAC,YACH,QAAOA,MAAE,OAAO,mBAAmB;CAGrC,MAAM,EAAE,OAAO,GAAG;CAClB,MAAMG,eAAoC;AAG1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,MAAM,CAC9C,KAAI,IAAI,WAAW,IAAI,EAErB,aAAa,OAAO,MAAM,UAAU;MAEpC,aAAa,OAAO;AAKxB,QAAOH,MAAE,OAAO,aAAa;AAC9B;;;;;;AAOD,SAAgB,eAAeI,UAAqC;AAClE,QACE,SACG,OACC,CAAC,uDAAwB,QAAQ,IAAK,QAAsB,WAC7D,CACA,IAAI,CAAC,YAAa,QAAsB,WAAyB,CACjE,MAAM,IAAI,CAAE;AAElB;;;;;;AAOD,SAAgB,iBAAiBA,UAAuC;AACtE,QAAO,SACJ,OAAO,CAAC,yDAA0B,QAAQ,CAAC,CAC3C,IAAI,CAAC,aAAa;EACjB,IAAK,QAAwB;EAC7B,QAAS,QAAwB;CAClC,GAAE;AACN"}
1
+ {"version":3,"file":"utils.cjs","names":["middlewareList: readonly AgentMiddleware<any, any, any>[]","state: unknown","middlewareStates: Record<string, any>","issue: ZodIssue","stateSchema?: z.ZodObject<z.ZodRawShape>","z","privateShape: Record<string, any>","messages: BaseMessage[]","AIMessage","ToolMessage","target?: string","END"],"sources":["../../../../src/agents/middlewareAgent/nodes/utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from \"zod/v3\";\nimport {\n type BaseMessage,\n ToolMessage,\n AIMessage,\n} from \"@langchain/core/messages\";\nimport {\n interopSafeParseAsync,\n interopZodObjectMakeFieldsOptional,\n} from \"@langchain/core/utils/types\";\nimport { type ZodIssue } from \"zod/v3\";\nimport { END } from \"@langchain/langgraph\";\n\nimport type {\n AgentMiddleware,\n ToolCall,\n ToolResult,\n JumpTo,\n} from \"../types.js\";\n\n/**\n * Helper function to initialize middleware state defaults.\n * This is used to ensure all middleware state properties are initialized.\n *\n * Private properties (starting with _) are automatically made optional since\n * users cannot provide them when invoking the agent.\n */\nexport async function initializeMiddlewareStates(\n middlewareList: readonly AgentMiddleware<any, any, any>[],\n state: unknown\n): Promise<Record<string, any>> {\n const middlewareStates: Record<string, any> = {};\n\n for (const middleware of middlewareList) {\n if (middleware.stateSchema) {\n // Create a modified schema where private properties are optional\n const modifiedSchema = interopZodObjectMakeFieldsOptional(\n middleware.stateSchema,\n (key) => key.startsWith(\"_\")\n );\n\n // Use safeParse with the modified schema\n const parseResult = await interopSafeParseAsync(modifiedSchema, state);\n\n if (parseResult.success) {\n Object.assign(middlewareStates, parseResult.data);\n continue;\n }\n\n /**\n * If safeParse fails, there are required public fields missing\n */\n const requiredFields = parseResult.error.issues\n .filter(\n (issue: ZodIssue) =>\n issue.code === \"invalid_type\" && issue.message === \"Required\"\n )\n .map(\n (issue: ZodIssue) => ` - ${issue.path.join(\".\")}: ${issue.message}`\n )\n .join(\"\\n\");\n\n throw new Error(\n `Middleware \"${middleware.name}\" has required state fields that must be initialized:\\n` +\n `${requiredFields}\\n\\n` +\n `To fix this, either:\\n` +\n `1. Provide default values in your middleware's state schema using .default():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().default(\"default value\")\\n` +\n ` })\\n\\n` +\n `2. Or make the fields optional using .optional():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().optional()\\n` +\n ` })\\n\\n` +\n `3. Or ensure you pass these values when invoking the agent:\\n` +\n ` agent.invoke({\\n` +\n ` messages: [...],\\n` +\n ` ${parseResult.error.issues[0]?.path.join(\".\")}: \"value\"\\n` +\n ` })`\n );\n }\n }\n\n return middlewareStates;\n}\n\n/**\n * Users can define private and public state for a middleware. Private state properties start with an underscore.\n * This function will return the private state properties from the state schema, making all of them optional.\n * @param stateSchema - The middleware state schema\n * @returns A new schema containing only the private properties (underscore-prefixed), all made optional\n */\nexport function derivePrivateState(\n stateSchema?: z.ZodObject<z.ZodRawShape>\n): z.ZodObject<z.ZodRawShape> {\n const builtInStateSchema = {\n messages: z.custom<BaseMessage[]>(() => []),\n };\n\n if (!stateSchema) {\n return z.object(builtInStateSchema);\n }\n\n const { shape } = stateSchema;\n const privateShape: Record<string, any> = builtInStateSchema;\n\n // Filter properties that start with underscore and make them optional\n for (const [key, value] of Object.entries(shape)) {\n if (key.startsWith(\"_\")) {\n // Make the private property optional\n privateShape[key] = value.optional();\n } else {\n privateShape[key] = value;\n }\n }\n\n // Return a new schema with only private properties (all optional)\n return z.object(privateShape);\n}\n\n/**\n * Parse out all tool calls from the messages and populate the results\n * @param messages - The messages to parse\n * @returns The tool calls\n */\nexport function parseToolCalls(messages: BaseMessage[]): ToolCall[] {\n const calls =\n messages\n .filter(\n (message) =>\n AIMessage.isInstance(message) && (message as AIMessage).tool_calls\n )\n .map((message) => (message as AIMessage).tool_calls as ToolCall[])\n .flat() || [];\n\n const results = parseToolResults(messages);\n return calls.map((call) => {\n const callResult = results.find((result) => result.id === call.id);\n if (callResult) {\n return {\n ...call,\n result: callResult.result,\n };\n }\n return call;\n });\n}\n\n/**\n * Parse out all tool results from the messages\n * @param messages - The messages to parse\n * @returns The tool results\n */\nfunction parseToolResults(messages: BaseMessage[]): ToolResult[] {\n return messages\n .filter((message) => ToolMessage.isInstance(message))\n .map((message) => ({\n id: (message as ToolMessage).tool_call_id,\n result: (message as ToolMessage).content,\n }));\n}\n\n/**\n * Parse `jumpTo` target from user facing labels to a LangGraph node names\n */\nexport function parseJumpToTarget(target: string): JumpTo;\nexport function parseJumpToTarget(target?: string): JumpTo | undefined {\n if (!target) {\n return undefined;\n }\n if (target === \"model\") {\n return \"model_request\";\n }\n if (target === \"tools\") {\n return \"tools\";\n }\n if (target === \"end\") {\n return END;\n }\n\n throw new Error(\n `Invalid jump target: ${target}, must be \"model\", \"tools\" or \"end\".`\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AA4BA,eAAsB,2BACpBA,gBACAC,OAC8B;CAC9B,MAAMC,mBAAwC,CAAE;AAEhD,MAAK,MAAM,cAAc,eACvB,KAAI,WAAW,aAAa;EAE1B,MAAM,sFACJ,WAAW,aACX,CAAC,QAAQ,IAAI,WAAW,IAAI,CAC7B;EAGD,MAAM,cAAc,8DAA4B,gBAAgB,MAAM;AAEtE,MAAI,YAAY,SAAS;GACvB,OAAO,OAAO,kBAAkB,YAAY,KAAK;AACjD;EACD;;;;EAKD,MAAM,iBAAiB,YAAY,MAAM,OACtC,OACC,CAACC,UACC,MAAM,SAAS,kBAAkB,MAAM,YAAY,WACtD,CACA,IACC,CAACA,UAAoB,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,SAAS,CACrE,CACA,KAAK,KAAK;AAEb,QAAM,IAAI,MACR,CAAC,YAAY,EAAE,WAAW,KAAK,uDAAuD,EACjF,eAAe,0aAAI,EAad,YAAY,MAAM,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAW,CACxD;CAEZ;AAGH,QAAO;AACR;;;;;;;AAQD,SAAgB,mBACdC,aAC4B;CAC5B,MAAM,qBAAqB,EACzB,UAAUC,SAAE,OAAsB,MAAM,CAAE,EAAC,CAC5C;AAED,KAAI,CAAC,YACH,QAAOA,SAAE,OAAO,mBAAmB;CAGrC,MAAM,EAAE,OAAO,GAAG;CAClB,MAAMC,eAAoC;AAG1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,MAAM,CAC9C,KAAI,IAAI,WAAW,IAAI,EAErB,aAAa,OAAO,MAAM,UAAU;MAEpC,aAAa,OAAO;AAKxB,QAAOD,SAAE,OAAO,aAAa;AAC9B;;;;;;AAOD,SAAgB,eAAeE,UAAqC;CAClE,MAAM,QACJ,SACG,OACC,CAAC,YACCC,oCAAU,WAAW,QAAQ,IAAK,QAAsB,WAC3D,CACA,IAAI,CAAC,YAAa,QAAsB,WAAyB,CACjE,MAAM,IAAI,CAAE;CAEjB,MAAM,UAAU,iBAAiB,SAAS;AAC1C,QAAO,MAAM,IAAI,CAAC,SAAS;EACzB,MAAM,aAAa,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,KAAK,GAAG;AAClE,MAAI,WACF,QAAO;GACL,GAAG;GACH,QAAQ,WAAW;EACpB;AAEH,SAAO;CACR,EAAC;AACH;;;;;;AAOD,SAAS,iBAAiBD,UAAuC;AAC/D,QAAO,SACJ,OAAO,CAAC,YAAYE,sCAAY,WAAW,QAAQ,CAAC,CACpD,IAAI,CAAC,aAAa;EACjB,IAAK,QAAwB;EAC7B,QAAS,QAAwB;CAClC,GAAE;AACN;AAMD,SAAgB,kBAAkBC,QAAqC;AACrE,KAAI,CAAC,OACH,QAAO;AAET,KAAI,WAAW,QACb,QAAO;AAET,KAAI,WAAW,QACb,QAAO;AAET,KAAI,WAAW,MACb,QAAOC;AAGT,OAAM,IAAI,MACR,CAAC,qBAAqB,EAAE,OAAO,oCAAoC,CAAC;AAEvE"}
@@ -1,5 +1,7 @@
1
- import { isAIMessage, isToolMessage } from "@langchain/core/messages";
2
- import { z } from "zod";
1
+ import { AIMessage, ToolMessage } from "@langchain/core/messages";
2
+ import { END } from "@langchain/langgraph";
3
+ import { interopSafeParseAsync, interopZodObjectMakeFieldsOptional } from "@langchain/core/utils/types";
4
+ import { z } from "zod/v3";
3
5
 
4
6
  //#region src/agents/middlewareAgent/nodes/utils.ts
5
7
  /**
@@ -9,15 +11,11 @@ import { z } from "zod";
9
11
  * Private properties (starting with _) are automatically made optional since
10
12
  * users cannot provide them when invoking the agent.
11
13
  */
12
- function initializeMiddlewareStates(middlewares, state) {
14
+ async function initializeMiddlewareStates(middlewareList, state) {
13
15
  const middlewareStates = {};
14
- for (const middleware of middlewares) if (middleware.stateSchema) {
15
- const { shape } = middleware.stateSchema;
16
- const modifiedShape = {};
17
- for (const [key, value] of Object.entries(shape)) if (key.startsWith("_")) modifiedShape[key] = value.optional();
18
- else modifiedShape[key] = value;
19
- const modifiedSchema = z.object(modifiedShape);
20
- const parseResult = modifiedSchema.safeParse(state);
16
+ for (const middleware of middlewareList) if (middleware.stateSchema) {
17
+ const modifiedSchema = interopZodObjectMakeFieldsOptional(middleware.stateSchema, (key) => key.startsWith("_"));
18
+ const parseResult = await interopSafeParseAsync(modifiedSchema, state);
21
19
  if (parseResult.success) {
22
20
  Object.assign(middlewareStates, parseResult.data);
23
21
  continue;
@@ -46,12 +44,21 @@ function derivePrivateState(stateSchema) {
46
44
  return z.object(privateShape);
47
45
  }
48
46
  /**
49
- * Parse out all tool calls from the messages
47
+ * Parse out all tool calls from the messages and populate the results
50
48
  * @param messages - The messages to parse
51
49
  * @returns The tool calls
52
50
  */
53
51
  function parseToolCalls(messages) {
54
- return messages.filter((message) => isAIMessage(message) && message.tool_calls).map((message) => message.tool_calls).flat() || [];
52
+ const calls = messages.filter((message) => AIMessage.isInstance(message) && message.tool_calls).map((message) => message.tool_calls).flat() || [];
53
+ const results = parseToolResults(messages);
54
+ return calls.map((call) => {
55
+ const callResult = results.find((result) => result.id === call.id);
56
+ if (callResult) return {
57
+ ...call,
58
+ result: callResult.result
59
+ };
60
+ return call;
61
+ });
55
62
  }
56
63
  /**
57
64
  * Parse out all tool results from the messages
@@ -59,12 +66,19 @@ function parseToolCalls(messages) {
59
66
  * @returns The tool results
60
67
  */
61
68
  function parseToolResults(messages) {
62
- return messages.filter((message) => isToolMessage(message)).map((message) => ({
69
+ return messages.filter((message) => ToolMessage.isInstance(message)).map((message) => ({
63
70
  id: message.tool_call_id,
64
71
  result: message.content
65
72
  }));
66
73
  }
74
+ function parseJumpToTarget(target) {
75
+ if (!target) return void 0;
76
+ if (target === "model") return "model_request";
77
+ if (target === "tools") return "tools";
78
+ if (target === "end") return END;
79
+ throw new Error(`Invalid jump target: ${target}, must be "model", "tools" or "end".`);
80
+ }
67
81
 
68
82
  //#endregion
69
- export { derivePrivateState, initializeMiddlewareStates, parseToolCalls, parseToolResults };
83
+ export { derivePrivateState, initializeMiddlewareStates, parseJumpToTarget, parseToolCalls };
70
84
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["middlewares: readonly AgentMiddleware<any, any, any>[]","state: unknown","middlewareStates: Record<string, any>","modifiedShape: Record<string, any>","issue: ZodIssue","stateSchema?: z.ZodObject<z.ZodRawShape>","privateShape: Record<string, any>","messages: BaseMessage[]"],"sources":["../../../../src/agents/middlewareAgent/nodes/utils.ts"],"sourcesContent":["import {\n type BaseMessage,\n type ToolMessage,\n type AIMessage,\n isToolMessage,\n isAIMessage,\n} from \"@langchain/core/messages\";\nimport { z, type ZodIssue, type ZodTypeAny } from \"zod\";\n\nimport type { AgentMiddleware, ToolCall, ToolResult } from \"../types.js\";\n\n/**\n * Helper function to initialize middleware state defaults.\n * This is used to ensure all middleware state properties are initialized.\n *\n * Private properties (starting with _) are automatically made optional since\n * users cannot provide them when invoking the agent.\n */\nexport function initializeMiddlewareStates(\n middlewares: readonly AgentMiddleware<any, any, any>[],\n state: unknown\n): Record<string, any> {\n const middlewareStates: Record<string, any> = {};\n\n for (const middleware of middlewares) {\n if (middleware.stateSchema) {\n // Create a modified schema where private properties are optional\n const { shape } = middleware.stateSchema;\n const modifiedShape: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(shape)) {\n if (key.startsWith(\"_\")) {\n // Make private properties optional\n modifiedShape[key] = (value as ZodTypeAny).optional();\n } else {\n // Keep public properties as-is\n modifiedShape[key] = value;\n }\n }\n\n const modifiedSchema = z.object(modifiedShape);\n\n // Use safeParse with the modified schema\n const parseResult = modifiedSchema.safeParse(state);\n\n if (parseResult.success) {\n Object.assign(middlewareStates, parseResult.data);\n continue;\n }\n\n /**\n * If safeParse fails, there are required public fields missing\n */\n const requiredFields = parseResult.error.issues\n .filter(\n (issue: ZodIssue) =>\n issue.code === \"invalid_type\" && issue.message === \"Required\"\n )\n .map(\n (issue: ZodIssue) => ` - ${issue.path.join(\".\")}: ${issue.message}`\n )\n .join(\"\\n\");\n\n throw new Error(\n `Middleware \"${middleware.name}\" has required state fields that must be initialized:\\n` +\n `${requiredFields}\\n\\n` +\n `To fix this, either:\\n` +\n `1. Provide default values in your middleware's state schema using .default():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().default(\"default value\")\\n` +\n ` })\\n\\n` +\n `2. Or make the fields optional using .optional():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().optional()\\n` +\n ` })\\n\\n` +\n `3. Or ensure you pass these values when invoking the agent:\\n` +\n ` agent.invoke({\\n` +\n ` messages: [...],\\n` +\n ` ${parseResult.error.issues[0]?.path.join(\".\")}: \"value\"\\n` +\n ` })`\n );\n }\n }\n\n return middlewareStates;\n}\n\n/**\n * Users can define private and public state for a middleware. Private state properties start with an underscore.\n * This function will return the private state properties from the state schema, making all of them optional.\n * @param stateSchema - The middleware state schema\n * @returns A new schema containing only the private properties (underscore-prefixed), all made optional\n */\nexport function derivePrivateState(stateSchema?: z.ZodObject<z.ZodRawShape>) {\n const builtInStateSchema = {\n messages: z.custom<BaseMessage[]>(() => []),\n };\n\n if (!stateSchema) {\n return z.object(builtInStateSchema);\n }\n\n const { shape } = stateSchema;\n const privateShape: Record<string, any> = builtInStateSchema;\n\n // Filter properties that start with underscore and make them optional\n for (const [key, value] of Object.entries(shape)) {\n if (key.startsWith(\"_\")) {\n // Make the private property optional\n privateShape[key] = value.optional();\n } else {\n privateShape[key] = value;\n }\n }\n\n // Return a new schema with only private properties (all optional)\n return z.object(privateShape);\n}\n\n/**\n * Parse out all tool calls from the messages\n * @param messages - The messages to parse\n * @returns The tool calls\n */\nexport function parseToolCalls(messages: BaseMessage[]): ToolCall[] {\n return (\n messages\n .filter(\n (message) => isAIMessage(message) && (message as AIMessage).tool_calls\n )\n .map((message) => (message as AIMessage).tool_calls as ToolCall[])\n .flat() || []\n );\n}\n\n/**\n * Parse out all tool results from the messages\n * @param messages - The messages to parse\n * @returns The tool results\n */\nexport function parseToolResults(messages: BaseMessage[]): ToolResult[] {\n return messages\n .filter((message) => isToolMessage(message))\n .map((message) => ({\n id: (message as ToolMessage).tool_call_id,\n result: (message as ToolMessage).content,\n }));\n}\n"],"mappings":";;;;;;;;;;;AAkBA,SAAgB,2BACdA,aACAC,OACqB;CACrB,MAAMC,mBAAwC,CAAE;AAEhD,MAAK,MAAM,cAAc,YACvB,KAAI,WAAW,aAAa;EAE1B,MAAM,EAAE,OAAO,GAAG,WAAW;EAC7B,MAAMC,gBAAqC,CAAE;AAE7C,OAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,MAAM,CAC9C,KAAI,IAAI,WAAW,IAAI,EAErB,cAAc,OAAQ,MAAqB,UAAU;OAGrD,cAAc,OAAO;EAIzB,MAAM,iBAAiB,EAAE,OAAO,cAAc;EAG9C,MAAM,cAAc,eAAe,UAAU,MAAM;AAEnD,MAAI,YAAY,SAAS;GACvB,OAAO,OAAO,kBAAkB,YAAY,KAAK;AACjD;EACD;;;;EAKD,MAAM,iBAAiB,YAAY,MAAM,OACtC,OACC,CAACC,UACC,MAAM,SAAS,kBAAkB,MAAM,YAAY,WACtD,CACA,IACC,CAACA,UAAoB,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,SAAS,CACrE,CACA,KAAK,KAAK;AAEb,QAAM,IAAI,MACR,CAAC,YAAY,EAAE,WAAW,KAAK,uDAAuD,EACjF,eAAe,0aAAI,EAad,YAAY,MAAM,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAW,CACxD;CAEZ;AAGH,QAAO;AACR;;;;;;;AAQD,SAAgB,mBAAmBC,aAA0C;CAC3E,MAAM,qBAAqB,EACzB,UAAU,EAAE,OAAsB,MAAM,CAAE,EAAC,CAC5C;AAED,KAAI,CAAC,YACH,QAAO,EAAE,OAAO,mBAAmB;CAGrC,MAAM,EAAE,OAAO,GAAG;CAClB,MAAMC,eAAoC;AAG1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,MAAM,CAC9C,KAAI,IAAI,WAAW,IAAI,EAErB,aAAa,OAAO,MAAM,UAAU;MAEpC,aAAa,OAAO;AAKxB,QAAO,EAAE,OAAO,aAAa;AAC9B;;;;;;AAOD,SAAgB,eAAeC,UAAqC;AAClE,QACE,SACG,OACC,CAAC,YAAY,YAAY,QAAQ,IAAK,QAAsB,WAC7D,CACA,IAAI,CAAC,YAAa,QAAsB,WAAyB,CACjE,MAAM,IAAI,CAAE;AAElB;;;;;;AAOD,SAAgB,iBAAiBA,UAAuC;AACtE,QAAO,SACJ,OAAO,CAAC,YAAY,cAAc,QAAQ,CAAC,CAC3C,IAAI,CAAC,aAAa;EACjB,IAAK,QAAwB;EAC7B,QAAS,QAAwB;CAClC,GAAE;AACN"}
1
+ {"version":3,"file":"utils.js","names":["middlewareList: readonly AgentMiddleware<any, any, any>[]","state: unknown","middlewareStates: Record<string, any>","issue: ZodIssue","stateSchema?: z.ZodObject<z.ZodRawShape>","privateShape: Record<string, any>","messages: BaseMessage[]","target?: string"],"sources":["../../../../src/agents/middlewareAgent/nodes/utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from \"zod/v3\";\nimport {\n type BaseMessage,\n ToolMessage,\n AIMessage,\n} from \"@langchain/core/messages\";\nimport {\n interopSafeParseAsync,\n interopZodObjectMakeFieldsOptional,\n} from \"@langchain/core/utils/types\";\nimport { type ZodIssue } from \"zod/v3\";\nimport { END } from \"@langchain/langgraph\";\n\nimport type {\n AgentMiddleware,\n ToolCall,\n ToolResult,\n JumpTo,\n} from \"../types.js\";\n\n/**\n * Helper function to initialize middleware state defaults.\n * This is used to ensure all middleware state properties are initialized.\n *\n * Private properties (starting with _) are automatically made optional since\n * users cannot provide them when invoking the agent.\n */\nexport async function initializeMiddlewareStates(\n middlewareList: readonly AgentMiddleware<any, any, any>[],\n state: unknown\n): Promise<Record<string, any>> {\n const middlewareStates: Record<string, any> = {};\n\n for (const middleware of middlewareList) {\n if (middleware.stateSchema) {\n // Create a modified schema where private properties are optional\n const modifiedSchema = interopZodObjectMakeFieldsOptional(\n middleware.stateSchema,\n (key) => key.startsWith(\"_\")\n );\n\n // Use safeParse with the modified schema\n const parseResult = await interopSafeParseAsync(modifiedSchema, state);\n\n if (parseResult.success) {\n Object.assign(middlewareStates, parseResult.data);\n continue;\n }\n\n /**\n * If safeParse fails, there are required public fields missing\n */\n const requiredFields = parseResult.error.issues\n .filter(\n (issue: ZodIssue) =>\n issue.code === \"invalid_type\" && issue.message === \"Required\"\n )\n .map(\n (issue: ZodIssue) => ` - ${issue.path.join(\".\")}: ${issue.message}`\n )\n .join(\"\\n\");\n\n throw new Error(\n `Middleware \"${middleware.name}\" has required state fields that must be initialized:\\n` +\n `${requiredFields}\\n\\n` +\n `To fix this, either:\\n` +\n `1. Provide default values in your middleware's state schema using .default():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().default(\"default value\")\\n` +\n ` })\\n\\n` +\n `2. Or make the fields optional using .optional():\\n` +\n ` stateSchema: z.object({\\n` +\n ` myField: z.string().optional()\\n` +\n ` })\\n\\n` +\n `3. Or ensure you pass these values when invoking the agent:\\n` +\n ` agent.invoke({\\n` +\n ` messages: [...],\\n` +\n ` ${parseResult.error.issues[0]?.path.join(\".\")}: \"value\"\\n` +\n ` })`\n );\n }\n }\n\n return middlewareStates;\n}\n\n/**\n * Users can define private and public state for a middleware. Private state properties start with an underscore.\n * This function will return the private state properties from the state schema, making all of them optional.\n * @param stateSchema - The middleware state schema\n * @returns A new schema containing only the private properties (underscore-prefixed), all made optional\n */\nexport function derivePrivateState(\n stateSchema?: z.ZodObject<z.ZodRawShape>\n): z.ZodObject<z.ZodRawShape> {\n const builtInStateSchema = {\n messages: z.custom<BaseMessage[]>(() => []),\n };\n\n if (!stateSchema) {\n return z.object(builtInStateSchema);\n }\n\n const { shape } = stateSchema;\n const privateShape: Record<string, any> = builtInStateSchema;\n\n // Filter properties that start with underscore and make them optional\n for (const [key, value] of Object.entries(shape)) {\n if (key.startsWith(\"_\")) {\n // Make the private property optional\n privateShape[key] = value.optional();\n } else {\n privateShape[key] = value;\n }\n }\n\n // Return a new schema with only private properties (all optional)\n return z.object(privateShape);\n}\n\n/**\n * Parse out all tool calls from the messages and populate the results\n * @param messages - The messages to parse\n * @returns The tool calls\n */\nexport function parseToolCalls(messages: BaseMessage[]): ToolCall[] {\n const calls =\n messages\n .filter(\n (message) =>\n AIMessage.isInstance(message) && (message as AIMessage).tool_calls\n )\n .map((message) => (message as AIMessage).tool_calls as ToolCall[])\n .flat() || [];\n\n const results = parseToolResults(messages);\n return calls.map((call) => {\n const callResult = results.find((result) => result.id === call.id);\n if (callResult) {\n return {\n ...call,\n result: callResult.result,\n };\n }\n return call;\n });\n}\n\n/**\n * Parse out all tool results from the messages\n * @param messages - The messages to parse\n * @returns The tool results\n */\nfunction parseToolResults(messages: BaseMessage[]): ToolResult[] {\n return messages\n .filter((message) => ToolMessage.isInstance(message))\n .map((message) => ({\n id: (message as ToolMessage).tool_call_id,\n result: (message as ToolMessage).content,\n }));\n}\n\n/**\n * Parse `jumpTo` target from user facing labels to a LangGraph node names\n */\nexport function parseJumpToTarget(target: string): JumpTo;\nexport function parseJumpToTarget(target?: string): JumpTo | undefined {\n if (!target) {\n return undefined;\n }\n if (target === \"model\") {\n return \"model_request\";\n }\n if (target === \"tools\") {\n return \"tools\";\n }\n if (target === \"end\") {\n return END;\n }\n\n throw new Error(\n `Invalid jump target: ${target}, must be \"model\", \"tools\" or \"end\".`\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA4BA,eAAsB,2BACpBA,gBACAC,OAC8B;CAC9B,MAAMC,mBAAwC,CAAE;AAEhD,MAAK,MAAM,cAAc,eACvB,KAAI,WAAW,aAAa;EAE1B,MAAM,iBAAiB,mCACrB,WAAW,aACX,CAAC,QAAQ,IAAI,WAAW,IAAI,CAC7B;EAGD,MAAM,cAAc,MAAM,sBAAsB,gBAAgB,MAAM;AAEtE,MAAI,YAAY,SAAS;GACvB,OAAO,OAAO,kBAAkB,YAAY,KAAK;AACjD;EACD;;;;EAKD,MAAM,iBAAiB,YAAY,MAAM,OACtC,OACC,CAACC,UACC,MAAM,SAAS,kBAAkB,MAAM,YAAY,WACtD,CACA,IACC,CAACA,UAAoB,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,SAAS,CACrE,CACA,KAAK,KAAK;AAEb,QAAM,IAAI,MACR,CAAC,YAAY,EAAE,WAAW,KAAK,uDAAuD,EACjF,eAAe,0aAAI,EAad,YAAY,MAAM,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAW,CACxD;CAEZ;AAGH,QAAO;AACR;;;;;;;AAQD,SAAgB,mBACdC,aAC4B;CAC5B,MAAM,qBAAqB,EACzB,UAAU,EAAE,OAAsB,MAAM,CAAE,EAAC,CAC5C;AAED,KAAI,CAAC,YACH,QAAO,EAAE,OAAO,mBAAmB;CAGrC,MAAM,EAAE,OAAO,GAAG;CAClB,MAAMC,eAAoC;AAG1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,MAAM,CAC9C,KAAI,IAAI,WAAW,IAAI,EAErB,aAAa,OAAO,MAAM,UAAU;MAEpC,aAAa,OAAO;AAKxB,QAAO,EAAE,OAAO,aAAa;AAC9B;;;;;;AAOD,SAAgB,eAAeC,UAAqC;CAClE,MAAM,QACJ,SACG,OACC,CAAC,YACC,UAAU,WAAW,QAAQ,IAAK,QAAsB,WAC3D,CACA,IAAI,CAAC,YAAa,QAAsB,WAAyB,CACjE,MAAM,IAAI,CAAE;CAEjB,MAAM,UAAU,iBAAiB,SAAS;AAC1C,QAAO,MAAM,IAAI,CAAC,SAAS;EACzB,MAAM,aAAa,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,KAAK,GAAG;AAClE,MAAI,WACF,QAAO;GACL,GAAG;GACH,QAAQ,WAAW;EACpB;AAEH,SAAO;CACR,EAAC;AACH;;;;;;AAOD,SAAS,iBAAiBA,UAAuC;AAC/D,QAAO,SACJ,OAAO,CAAC,YAAY,YAAY,WAAW,QAAQ,CAAC,CACpD,IAAI,CAAC,aAAa;EACjB,IAAK,QAAwB;EAC7B,QAAS,QAAwB;CAClC,GAAE;AACN;AAMD,SAAgB,kBAAkBC,QAAqC;AACrE,KAAI,CAAC,OACH,QAAO;AAET,KAAI,WAAW,QACb,QAAO;AAET,KAAI,WAAW,QACb,QAAO;AAET,KAAI,WAAW,MACb,QAAO;AAGT,OAAM,IAAI,MACR,CAAC,qBAAqB,EAAE,OAAO,oCAAoC,CAAC;AAEvE"}