@langchain/langgraph 1.0.15 → 1.1.0

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 (183) hide show
  1. package/dist/channels/base.cjs +11 -0
  2. package/dist/channels/base.cjs.map +1 -1
  3. package/dist/channels/base.d.cts +9 -0
  4. package/dist/channels/base.d.cts.map +1 -1
  5. package/dist/channels/base.d.ts +9 -0
  6. package/dist/channels/base.d.ts.map +1 -1
  7. package/dist/channels/base.js +11 -0
  8. package/dist/channels/base.js.map +1 -1
  9. package/dist/channels/binop.cjs +13 -0
  10. package/dist/channels/binop.cjs.map +1 -1
  11. package/dist/channels/binop.d.cts +6 -0
  12. package/dist/channels/binop.d.cts.map +1 -1
  13. package/dist/channels/binop.d.ts +6 -0
  14. package/dist/channels/binop.d.ts.map +1 -1
  15. package/dist/channels/binop.js +13 -0
  16. package/dist/channels/binop.js.map +1 -1
  17. package/dist/channels/index.cjs +2 -0
  18. package/dist/channels/index.d.cts +2 -1
  19. package/dist/channels/index.d.ts +2 -1
  20. package/dist/channels/index.js +2 -1
  21. package/dist/channels/untracked_value.cjs +83 -0
  22. package/dist/channels/untracked_value.cjs.map +1 -0
  23. package/dist/channels/untracked_value.d.cts +64 -0
  24. package/dist/channels/untracked_value.d.cts.map +1 -0
  25. package/dist/channels/untracked_value.d.ts +64 -0
  26. package/dist/channels/untracked_value.d.ts.map +1 -0
  27. package/dist/channels/untracked_value.js +83 -0
  28. package/dist/channels/untracked_value.js.map +1 -0
  29. package/dist/constants.cjs.map +1 -1
  30. package/dist/constants.d.cts +2 -2
  31. package/dist/constants.d.cts.map +1 -1
  32. package/dist/constants.d.ts +2 -2
  33. package/dist/constants.d.ts.map +1 -1
  34. package/dist/constants.js.map +1 -1
  35. package/dist/errors.cjs +36 -0
  36. package/dist/errors.cjs.map +1 -1
  37. package/dist/errors.d.cts +30 -1
  38. package/dist/errors.d.cts.map +1 -1
  39. package/dist/errors.d.ts +30 -1
  40. package/dist/errors.d.ts.map +1 -1
  41. package/dist/errors.js +36 -1
  42. package/dist/errors.js.map +1 -1
  43. package/dist/func/index.cjs +1 -1
  44. package/dist/func/index.cjs.map +1 -1
  45. package/dist/func/index.js +1 -1
  46. package/dist/func/index.js.map +1 -1
  47. package/dist/graph/index.cjs +1 -0
  48. package/dist/graph/index.js +2 -1
  49. package/dist/graph/message.cjs +2 -47
  50. package/dist/graph/message.cjs.map +1 -1
  51. package/dist/graph/message.d.cts +2 -9
  52. package/dist/graph/message.d.cts.map +1 -1
  53. package/dist/graph/message.d.ts +4 -11
  54. package/dist/graph/message.d.ts.map +1 -1
  55. package/dist/graph/message.js +2 -45
  56. package/dist/graph/message.js.map +1 -1
  57. package/dist/graph/messages_annotation.cjs +3 -3
  58. package/dist/graph/messages_annotation.cjs.map +1 -1
  59. package/dist/graph/messages_annotation.d.cts +2 -2
  60. package/dist/graph/messages_annotation.d.cts.map +1 -1
  61. package/dist/graph/messages_annotation.d.ts +6 -6
  62. package/dist/graph/messages_annotation.d.ts.map +1 -1
  63. package/dist/graph/messages_annotation.js +1 -1
  64. package/dist/graph/messages_annotation.js.map +1 -1
  65. package/dist/graph/messages_reducer.cjs +85 -0
  66. package/dist/graph/messages_reducer.cjs.map +1 -0
  67. package/dist/graph/messages_reducer.d.cts +54 -0
  68. package/dist/graph/messages_reducer.d.cts.map +1 -0
  69. package/dist/graph/messages_reducer.d.ts +54 -0
  70. package/dist/graph/messages_reducer.d.ts.map +1 -0
  71. package/dist/graph/messages_reducer.js +84 -0
  72. package/dist/graph/messages_reducer.js.map +1 -0
  73. package/dist/graph/state.cjs +30 -10
  74. package/dist/graph/state.cjs.map +1 -1
  75. package/dist/graph/state.d.cts +24 -15
  76. package/dist/graph/state.d.cts.map +1 -1
  77. package/dist/graph/state.d.ts +24 -15
  78. package/dist/graph/state.d.ts.map +1 -1
  79. package/dist/graph/state.js +31 -11
  80. package/dist/graph/state.js.map +1 -1
  81. package/dist/graph/types.d.cts +127 -0
  82. package/dist/graph/types.d.cts.map +1 -0
  83. package/dist/graph/types.d.ts +127 -0
  84. package/dist/graph/types.d.ts.map +1 -0
  85. package/dist/graph/zod/plugin.cjs +2 -2
  86. package/dist/graph/zod/plugin.cjs.map +1 -1
  87. package/dist/graph/zod/plugin.js +3 -3
  88. package/dist/graph/zod/plugin.js.map +1 -1
  89. package/dist/hash.cjs +4 -4
  90. package/dist/hash.cjs.map +1 -1
  91. package/dist/hash.js +4 -4
  92. package/dist/hash.js.map +1 -1
  93. package/dist/index.cjs +21 -3
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.d.cts +12 -3
  96. package/dist/index.d.ts +12 -3
  97. package/dist/index.js +11 -3
  98. package/dist/index.js.map +1 -1
  99. package/dist/prebuilt/agent_executor.d.cts +5 -5
  100. package/dist/prebuilt/agent_executor.d.cts.map +1 -1
  101. package/dist/prebuilt/agent_executor.d.ts +5 -5
  102. package/dist/prebuilt/agent_executor.d.ts.map +1 -1
  103. package/dist/prebuilt/react_agent_executor.cjs +7 -6
  104. package/dist/prebuilt/react_agent_executor.cjs.map +1 -1
  105. package/dist/prebuilt/react_agent_executor.d.cts +4 -4
  106. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -1
  107. package/dist/prebuilt/react_agent_executor.d.ts +4 -4
  108. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -1
  109. package/dist/prebuilt/react_agent_executor.js +5 -4
  110. package/dist/prebuilt/react_agent_executor.js.map +1 -1
  111. package/dist/pregel/algo.cjs +19 -0
  112. package/dist/pregel/algo.cjs.map +1 -1
  113. package/dist/pregel/algo.d.cts.map +1 -1
  114. package/dist/pregel/algo.d.ts.map +1 -1
  115. package/dist/pregel/algo.js +19 -1
  116. package/dist/pregel/algo.js.map +1 -1
  117. package/dist/pregel/loop.cjs +18 -3
  118. package/dist/pregel/loop.cjs.map +1 -1
  119. package/dist/pregel/loop.js +20 -5
  120. package/dist/pregel/loop.js.map +1 -1
  121. package/dist/pregel/runner.cjs +1 -1
  122. package/dist/pregel/runner.cjs.map +1 -1
  123. package/dist/pregel/runner.js +1 -1
  124. package/dist/pregel/runner.js.map +1 -1
  125. package/dist/state/adapter.cjs +53 -0
  126. package/dist/state/adapter.cjs.map +1 -0
  127. package/dist/state/adapter.d.cts +33 -0
  128. package/dist/state/adapter.d.cts.map +1 -0
  129. package/dist/state/adapter.d.ts +33 -0
  130. package/dist/state/adapter.d.ts.map +1 -0
  131. package/dist/state/adapter.js +52 -0
  132. package/dist/state/adapter.js.map +1 -0
  133. package/dist/state/index.cjs +8 -0
  134. package/dist/state/index.js +10 -0
  135. package/dist/state/prebuilt/index.cjs +1 -0
  136. package/dist/state/prebuilt/index.js +3 -0
  137. package/dist/state/prebuilt/messages.cjs +19 -0
  138. package/dist/state/prebuilt/messages.cjs.map +1 -0
  139. package/dist/state/prebuilt/messages.d.cts +10 -0
  140. package/dist/state/prebuilt/messages.d.cts.map +1 -0
  141. package/dist/state/prebuilt/messages.d.ts +10 -0
  142. package/dist/state/prebuilt/messages.d.ts.map +1 -0
  143. package/dist/state/prebuilt/messages.js +19 -0
  144. package/dist/state/prebuilt/messages.js.map +1 -0
  145. package/dist/state/schema.cjs +171 -0
  146. package/dist/state/schema.cjs.map +1 -0
  147. package/dist/state/schema.d.cts +208 -0
  148. package/dist/state/schema.d.cts.map +1 -0
  149. package/dist/state/schema.d.ts +208 -0
  150. package/dist/state/schema.d.ts.map +1 -0
  151. package/dist/state/schema.js +171 -0
  152. package/dist/state/schema.js.map +1 -0
  153. package/dist/state/types.cjs +17 -0
  154. package/dist/state/types.cjs.map +1 -0
  155. package/dist/state/types.d.cts +128 -0
  156. package/dist/state/types.d.cts.map +1 -0
  157. package/dist/state/types.d.ts +128 -0
  158. package/dist/state/types.d.ts.map +1 -0
  159. package/dist/state/types.js +14 -0
  160. package/dist/state/types.js.map +1 -0
  161. package/dist/state/values/index.cjs +2 -0
  162. package/dist/state/values/index.js +4 -0
  163. package/dist/state/values/reduced.cjs +72 -0
  164. package/dist/state/values/reduced.cjs.map +1 -0
  165. package/dist/state/values/reduced.d.cts +155 -0
  166. package/dist/state/values/reduced.d.cts.map +1 -0
  167. package/dist/state/values/reduced.d.ts +155 -0
  168. package/dist/state/values/reduced.d.ts.map +1 -0
  169. package/dist/state/values/reduced.js +71 -0
  170. package/dist/state/values/reduced.js.map +1 -0
  171. package/dist/state/values/untracked.cjs +64 -0
  172. package/dist/state/values/untracked.cjs.map +1 -0
  173. package/dist/state/values/untracked.d.cts +74 -0
  174. package/dist/state/values/untracked.d.cts.map +1 -0
  175. package/dist/state/values/untracked.d.ts +74 -0
  176. package/dist/state/values/untracked.d.ts.map +1 -0
  177. package/dist/state/values/untracked.js +63 -0
  178. package/dist/state/values/untracked.js.map +1 -0
  179. package/dist/web.cjs +26 -7
  180. package/dist/web.d.cts +12 -3
  181. package/dist/web.d.ts +12 -3
  182. package/dist/web.js +13 -4
  183. package/package.json +5 -4
@@ -0,0 +1,84 @@
1
+ import { v4 } from "uuid";
2
+ import { RemoveMessage, coerceMessageLikeToMessage } from "@langchain/core/messages";
3
+
4
+ //#region src/graph/messages_reducer.ts
5
+ /**
6
+ * Special value that signifies the intent to remove all previous messages in the state reducer.
7
+ * Used as the unique identifier for a `RemoveMessage` instance which, when encountered,
8
+ * causes all prior messages to be discarded, leaving only those following this marker.
9
+ */
10
+ const REMOVE_ALL_MESSAGES = "__remove_all__";
11
+ /**
12
+ * Reducer function for combining two sets of messages in LangGraph's state system.
13
+ *
14
+ * This reducer handles several tasks:
15
+ * 1. Normalizes both `left` and `right` message inputs to arrays.
16
+ * 2. Coerces any message-like objects into real `BaseMessage` instances.
17
+ * 3. Ensures all messages have unique, stable IDs by generating missing ones.
18
+ * 4. If a `RemoveMessage` instance is encountered in `right` with the ID `REMOVE_ALL_MESSAGES`,
19
+ * all previous messages are discarded and only the subsequent messages in `right` are returned.
20
+ * 5. Otherwise, merges `left` and `right` messages together following these rules:
21
+ * - If a message in `right` shares an ID with a message in `left`:
22
+ * - If it is a `RemoveMessage`, that message (by ID) is marked for removal.
23
+ * - If it is a normal message, it replaces the message with the same ID from `left`.
24
+ * - If a message in `right` **does not exist** in `left`:
25
+ * - If it is a `RemoveMessage`, this is considered an error (cannot remove non-existent ID).
26
+ * - Otherwise, the message is appended.
27
+ * - Messages flagged for removal are omitted from the final output.
28
+ *
29
+ * @param left - The existing array (or single message) of messages from current state.
30
+ * @param right - The new array (or single message) of messages to be applied.
31
+ * @returns A new array of `BaseMessage` objects representing the updated state.
32
+ *
33
+ * @throws Error if a `RemoveMessage` is used to delete a message with an ID that does not exist in the merged list.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * const msg1 = new AIMessage("hello");
38
+ * const msg2 = new HumanMessage("hi");
39
+ * const removal = new RemoveMessage({ id: msg1.id });
40
+ * const newState = messagesStateReducer([msg1], [msg2, removal]);
41
+ * // newState will only contain msg2 (msg1 is removed)
42
+ * ```
43
+ */
44
+ function messagesStateReducer(left, right) {
45
+ const leftArray = Array.isArray(left) ? left : [left];
46
+ const rightArray = Array.isArray(right) ? right : [right];
47
+ const leftMessages = leftArray.map(coerceMessageLikeToMessage);
48
+ const rightMessages = rightArray.map(coerceMessageLikeToMessage);
49
+ for (const m of leftMessages) if (m.id === null || m.id === void 0) {
50
+ m.id = v4();
51
+ m.lc_kwargs.id = m.id;
52
+ }
53
+ let removeAllIdx;
54
+ for (let i = 0; i < rightMessages.length; i += 1) {
55
+ const m = rightMessages[i];
56
+ if (m.id === null || m.id === void 0) {
57
+ m.id = v4();
58
+ m.lc_kwargs.id = m.id;
59
+ }
60
+ if (RemoveMessage.isInstance(m) && m.id === REMOVE_ALL_MESSAGES) removeAllIdx = i;
61
+ }
62
+ if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);
63
+ const merged = [...leftMessages];
64
+ const mergedById = new Map(merged.map((m, i) => [m.id, i]));
65
+ const idsToRemove = /* @__PURE__ */ new Set();
66
+ for (const m of rightMessages) {
67
+ const existingIdx = mergedById.get(m.id);
68
+ if (existingIdx !== void 0) if (RemoveMessage.isInstance(m)) idsToRemove.add(m.id);
69
+ else {
70
+ idsToRemove.delete(m.id);
71
+ merged[existingIdx] = m;
72
+ }
73
+ else {
74
+ if (RemoveMessage.isInstance(m)) throw new Error(`Attempting to delete a message with an ID that doesn't exist ('${m.id}')`);
75
+ mergedById.set(m.id, merged.length);
76
+ merged.push(m);
77
+ }
78
+ }
79
+ return merged.filter((m) => !idsToRemove.has(m.id));
80
+ }
81
+
82
+ //#endregion
83
+ export { REMOVE_ALL_MESSAGES, messagesStateReducer };
84
+ //# sourceMappingURL=messages_reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages_reducer.js","names":[],"sources":["../../src/graph/messages_reducer.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n RemoveMessage,\n} from \"@langchain/core/messages\";\nimport { v4 } from \"uuid\";\n\n/**\n * Special value that signifies the intent to remove all previous messages in the state reducer.\n * Used as the unique identifier for a `RemoveMessage` instance which, when encountered,\n * causes all prior messages to be discarded, leaving only those following this marker.\n */\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\n/**\n * Type that represents an acceptable input for the messages state reducer.\n *\n * - Can be a single `BaseMessage` or `BaseMessageLike`.\n * - Can be an array of `BaseMessage` or `BaseMessageLike`.\n */\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Reducer function for combining two sets of messages in LangGraph's state system.\n *\n * This reducer handles several tasks:\n * 1. Normalizes both `left` and `right` message inputs to arrays.\n * 2. Coerces any message-like objects into real `BaseMessage` instances.\n * 3. Ensures all messages have unique, stable IDs by generating missing ones.\n * 4. If a `RemoveMessage` instance is encountered in `right` with the ID `REMOVE_ALL_MESSAGES`,\n * all previous messages are discarded and only the subsequent messages in `right` are returned.\n * 5. Otherwise, merges `left` and `right` messages together following these rules:\n * - If a message in `right` shares an ID with a message in `left`:\n * - If it is a `RemoveMessage`, that message (by ID) is marked for removal.\n * - If it is a normal message, it replaces the message with the same ID from `left`.\n * - If a message in `right` **does not exist** in `left`:\n * - If it is a `RemoveMessage`, this is considered an error (cannot remove non-existent ID).\n * - Otherwise, the message is appended.\n * - Messages flagged for removal are omitted from the final output.\n *\n * @param left - The existing array (or single message) of messages from current state.\n * @param right - The new array (or single message) of messages to be applied.\n * @returns A new array of `BaseMessage` objects representing the updated state.\n *\n * @throws Error if a `RemoveMessage` is used to delete a message with an ID that does not exist in the merged list.\n *\n * @example\n * ```ts\n * const msg1 = new AIMessage(\"hello\");\n * const msg2 = new HumanMessage(\"hi\");\n * const removal = new RemoveMessage({ id: msg1.id });\n * const newState = messagesStateReducer([msg1], [msg2, removal]);\n * // newState will only contain msg2 (msg1 is removed)\n * ```\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n // Ensure both left and right are arrays\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n\n // Convert all input to BaseMessage instances\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n\n // Assign missing IDs to any message in the left array\n for (const m of leftMessages) {\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n }\n\n // Assign missing IDs and check for \"remove all\" marker in right array\n let removeAllIdx: number | undefined;\n for (let i = 0; i < rightMessages.length; i += 1) {\n const m = rightMessages[i];\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n\n // If RemoveMessage with special REMOVE_ALL_MESSAGES id is found\n if (RemoveMessage.isInstance(m) && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n // If remove-all is present, all previous messages are wiped; return only subsequent ones\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // Begin normal merging logic\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n // Case: updating or removing an existing message by id\n if (RemoveMessage.isInstance(m)) {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n // Case: inserting a completely new message\n if (RemoveMessage.isInstance(m)) {\n throw new Error(\n `Attempting to delete a message with an ID that doesn't exist ('${m.id}')`\n );\n }\n mergedById.set(m.id, merged.length);\n merged.push(m);\n }\n }\n\n // Remove any messages whose IDs are marked for removal\n return merged.filter((m) => !idsToRemove.has(m.id));\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CnC,SAAgB,qBACd,MACA,OACe;CAEf,MAAM,YAAY,MAAM,QAAQ,KAAK,GAAG,OAAO,CAAC,KAAK;CACrD,MAAM,aAAa,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM;CAGzD,MAAM,eAAgB,UAAgC,IACpD,2BACD;CACD,MAAM,gBAAiB,WAAiC,IACtD,2BACD;AAGD,MAAK,MAAM,KAAK,aACd,KAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,IAAE,KAAK,IAAI;AACX,IAAE,UAAU,KAAK,EAAE;;CAKvB,IAAI;AACJ,MAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAAG;EAChD,MAAM,IAAI,cAAc;AACxB,MAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,KAAE,KAAK,IAAI;AACX,KAAE,UAAU,KAAK,EAAE;;AAIrB,MAAI,cAAc,WAAW,EAAE,IAAI,EAAE,OAAO,oBAC1C,gBAAe;;AAKnB,KAAI,gBAAgB,KAAM,QAAO,cAAc,MAAM,eAAe,EAAE;CAGtE,MAAM,SAAS,CAAC,GAAG,aAAa;CAChC,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;CAC3D,MAAM,8BAAc,IAAI,KAAK;AAE7B,MAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE,GAAG;AACxC,MAAI,gBAAgB,OAElB,KAAI,cAAc,WAAW,EAAE,CAC7B,aAAY,IAAI,EAAE,GAAG;OAChB;AACL,eAAY,OAAO,EAAE,GAAG;AACxB,UAAO,eAAe;;OAEnB;AAEL,OAAI,cAAc,WAAW,EAAE,CAC7B,OAAM,IAAI,MACR,kEAAkE,EAAE,GAAG,IACxE;AAEH,cAAW,IAAI,EAAE,IAAI,OAAO,OAAO;AACnC,UAAO,KAAK,EAAE;;;AAKlB,QAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE,GAAG,CAAC"}
@@ -10,6 +10,8 @@ const require_subgraph = require('../pregel/utils/subgraph.cjs');
10
10
  const require_ephemeral_value = require('../channels/ephemeral_value.cjs');
11
11
  const require_graph = require('./graph.cjs');
12
12
  const require_named_barrier_value = require('../channels/named_barrier_value.cjs');
13
+ const require_schema = require('../state/schema.cjs');
14
+ require('../state/index.cjs');
13
15
  const require_meta = require('./zod/meta.cjs');
14
16
  let _langchain_core_runnables = require("@langchain/core/runnables");
15
17
  let _langchain_core_utils_types = require("@langchain/core/utils/types");
@@ -111,7 +113,14 @@ var StateGraph = class extends require_graph.Graph {
111
113
  _writer;
112
114
  constructor(fields, contextSchema) {
113
115
  super();
114
- if (isZodStateGraphArgsWithStateSchema(fields)) {
116
+ if (require_schema.StateSchema.isInstance(fields)) {
117
+ const channels = fields.getChannels();
118
+ this._schemaDefinition = channels;
119
+ this.channels = channels;
120
+ this._schemaRuntimeDefinition = fields;
121
+ this._inputRuntimeDefinition = PartialStateSchema;
122
+ this._outputRuntimeDefinition = fields;
123
+ } else if (isZodStateGraphArgsWithStateSchema(fields)) {
115
124
  const stateDef = this._metaRegistry.getChannelsForSchema(fields.state);
116
125
  const inputDef = fields.input != null ? this._metaRegistry.getChannelsForSchema(fields.input) : stateDef;
117
126
  const outputDef = fields.output != null ? this._metaRegistry.getChannelsForSchema(fields.output) : stateDef;
@@ -139,7 +148,7 @@ var StateGraph = class extends require_graph.Graph {
139
148
  this._outputDefinition = fields.output?.spec ?? this._schemaDefinition;
140
149
  } else if (isStateDefinition(fields) || isAnnotationRoot(fields)) this._schemaDefinition = isAnnotationRoot(fields) ? fields.spec : fields;
141
150
  else if (isStateGraphArgs(fields)) this._schemaDefinition = _getChannels(fields.channels);
142
- else throw new Error("Invalid StateGraph input. Make sure to pass a valid Annotation.Root or Zod schema.");
151
+ else throw new require_errors.StateGraphInputError();
143
152
  this._inputDefinition ??= this._schemaDefinition;
144
153
  this._outputDefinition ??= this._schemaDefinition;
145
154
  this._addSchema(this._schemaDefinition);
@@ -165,7 +174,7 @@ var StateGraph = class extends require_graph.Graph {
165
174
  if (typeof val === "function") channel = val();
166
175
  else channel = val;
167
176
  if (this.channels[key] !== void 0) {
168
- if (this.channels[key] !== channel) {
177
+ if (!this.channels[key].equals(channel)) {
169
178
  if (channel.lc_graph_name !== "LastValue") throw new Error(`Channel "${key}" already exists with a different type.`);
170
179
  }
171
180
  } else this.channels[key] = channel;
@@ -415,15 +424,26 @@ var CompiledStateGraph = class extends require_graph.CompiledGraph {
415
424
  }
416
425
  async _validateInput(input) {
417
426
  if (input == null) return input;
427
+ const inputDef = this.builder._inputRuntimeDefinition;
428
+ const schemaDef = this.builder._schemaRuntimeDefinition;
429
+ if (require_schema.StateSchema.isInstance(schemaDef)) {
430
+ if (require_constants.isCommand(input)) {
431
+ const parsedInput = input;
432
+ if (input.update) parsedInput.update = await schemaDef.validateInput(Array.isArray(input.update) ? Object.fromEntries(input.update) : input.update);
433
+ return parsedInput;
434
+ }
435
+ return await schemaDef.validateInput(input);
436
+ }
418
437
  const schema = (() => {
419
- const input$1 = this.builder._inputRuntimeDefinition;
420
- const schema$1 = this.builder._schemaRuntimeDefinition;
421
- const apply = (schema$2) => {
422
- if (schema$2 == null) return void 0;
423
- return this._metaRegistry.getExtendedChannelSchemas(schema$2, { withReducerSchema: true });
438
+ const apply = (schema$1) => {
439
+ if (schema$1 == null) return void 0;
440
+ return this._metaRegistry.getExtendedChannelSchemas(schema$1, { withReducerSchema: true });
424
441
  };
425
- if ((0, _langchain_core_utils_types.isInteropZodObject)(input$1)) return apply(input$1);
426
- if (input$1 === PartialStateSchema) return (0, _langchain_core_utils_types.interopZodObjectPartial)(apply(schema$1));
442
+ if ((0, _langchain_core_utils_types.isInteropZodObject)(inputDef)) return apply(inputDef);
443
+ if (inputDef === PartialStateSchema) {
444
+ if ((0, _langchain_core_utils_types.isInteropZodObject)(schemaDef)) return (0, _langchain_core_utils_types.interopZodObjectPartial)(apply(schemaDef));
445
+ return;
446
+ }
427
447
  })();
428
448
  if (require_constants.isCommand(input)) {
429
449
  const parsedInput = input;
@@ -1 +1 @@
1
- {"version":3,"file":"state.cjs","names":["Graph","schemaMetaRegistry","args","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","END","START","Runnable","RunnableCallable","isPregelLike","EphemeralValue","SELF","name","getChannel","CompiledGraph","isCommand","Command","InvalidUpdateError","PASSTHROUGH","PregelNode","TAG_HIDDEN","ChannelWrite","LastValueAfterFinish","NamedBarrierValueAfterFinish","NamedBarrierValue","_isSend","ChannelRead","input","schema","isInterrupted","isBaseChannel","ParentCommand","Branch"],"sources":["../../src/graph/state.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { _coerceToRunnable, Runnable } from \"@langchain/core/runnables\";\nimport {\n All,\n type BaseCache,\n BaseCheckpointSaver,\n BaseStore,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n type InteropZodObject,\n interopParse,\n interopZodObjectPartial,\n isInteropZodObject,\n} from \"@langchain/core/utils/types\";\nimport type {\n RunnableLike,\n LangGraphRunnableConfig,\n Runtime,\n} from \"../pregel/runnable_types.js\";\nimport { BaseChannel, isBaseChannel } from \"../channels/base.js\";\nimport {\n CompiledGraph,\n Graph,\n Branch,\n AddNodeOptions,\n NodeSpec,\n} from \"./graph.js\";\nimport {\n ChannelWrite,\n ChannelWriteEntry,\n ChannelWriteTupleEntry,\n PASSTHROUGH,\n} from \"../pregel/write.js\";\nimport { ChannelRead, PregelNode } from \"../pregel/read.js\";\nimport {\n NamedBarrierValue,\n NamedBarrierValueAfterFinish,\n} from \"../channels/named_barrier_value.js\";\nimport { EphemeralValue } from \"../channels/ephemeral_value.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport {\n isCommand,\n _isSend,\n CHECKPOINT_NAMESPACE_END,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n Command,\n END,\n SELF,\n Send,\n START,\n TAG_HIDDEN,\n CommandInstance,\n isInterrupted,\n Interrupt,\n INTERRUPT,\n} from \"../constants.js\";\nimport { InvalidUpdateError, ParentCommand } from \"../errors.js\";\nimport {\n AnnotationRoot,\n getChannel,\n SingleReducer,\n StateDefinition,\n StateType,\n UpdateType,\n} from \"./annotation.js\";\nimport type { CachePolicy, RetryPolicy } from \"../pregel/utils/index.js\";\nimport { isPregelLike } from \"../pregel/utils/subgraph.js\";\nimport { LastValueAfterFinish } from \"../channels/last_value.js\";\nimport {\n type SchemaMetaRegistry,\n InteropZodToStateDefinition,\n schemaMetaRegistry,\n} from \"./zod/meta.js\";\nimport type {\n InferInterruptResumeType,\n InferInterruptInputType,\n} from \"../interrupt.js\";\nimport type { InferWriterType } from \"../writer.js\";\n\nconst ROOT = \"__root__\";\n\nexport type ChannelReducers<Channels extends object> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof Channels]: SingleReducer<Channels[K], any>;\n};\n\nexport interface StateGraphArgs<Channels extends object | unknown> {\n channels: Channels extends object\n ? Channels extends unknown[]\n ? ChannelReducers<{ __root__: Channels }>\n : ChannelReducers<Channels>\n : ChannelReducers<{ __root__: Channels }>;\n}\n\nexport type StateGraphNodeSpec<RunInput, RunOutput> = NodeSpec<\n RunInput,\n RunOutput\n> & {\n input?: StateDefinition;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n};\n\nexport type StateGraphAddNodeOptions<Nodes extends string = string> = {\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy | boolean;\n // TODO: Fix generic typing for annotations\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input?: AnnotationRoot<any> | InteropZodObject;\n} & AddNodeOptions<Nodes>;\n\nexport type StateGraphArgsWithStateSchema<\n SD extends StateDefinition,\n I extends StateDefinition,\n O extends StateDefinition\n> = {\n stateSchema: AnnotationRoot<SD>;\n input?: AnnotationRoot<I>;\n output?: AnnotationRoot<O>;\n};\n\nexport type StateGraphArgsWithInputOutputSchemas<\n SD extends StateDefinition,\n O extends StateDefinition = SD\n> = {\n input: AnnotationRoot<SD>;\n output: AnnotationRoot<O>;\n};\n\ntype ZodStateGraphArgsWithStateSchema<\n SD extends InteropZodObject,\n I extends SDZod,\n O extends SDZod\n> = { state: SD; input?: I; output?: O };\n\ntype SDZod = StateDefinition | InteropZodObject;\n\ntype ToStateDefinition<T> = T extends InteropZodObject\n ? InteropZodToStateDefinition<T>\n : T extends StateDefinition\n ? T\n : never;\n\ntype NodeAction<\n S,\n U,\n C extends SDZod,\n InterruptType,\n WriterType\n> = RunnableLike<\n S,\n U extends object ? U & Record<string, any> : U, // eslint-disable-line @typescript-eslint/no-explicit-any\n Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>\n>;\n\ntype StrictNodeAction<\n S,\n U,\n C extends SDZod,\n Nodes extends string,\n InterruptType,\n WriterType\n> = RunnableLike<\n Prettify<S>,\n | U\n | Command<\n InferInterruptResumeType<InterruptType>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n U & Record<string, any>,\n Nodes\n >,\n Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>\n>;\n\nconst PartialStateSchema = Symbol.for(\"langgraph.state.partial\");\ntype PartialStateSchema = typeof PartialStateSchema;\n\ntype MergeReturnType<Prev, Curr> = Prev & Curr extends infer T\n ? { [K in keyof T]: T[K] } & unknown\n : never;\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n\n/**\n * A graph whose nodes communicate by reading and writing to a shared state.\n * Each node takes a defined `State` as input and returns a `Partial<State>`.\n *\n * Each state key can optionally be annotated with a reducer function that\n * will be used to aggregate the values of that key received from multiple nodes.\n * The signature of a reducer function is (left: Value, right: UpdateValue) => Value.\n *\n * See {@link Annotation} for more on defining state.\n *\n * After adding nodes and edges to your graph, you must call `.compile()` on it before\n * you can use it.\n *\n * @example\n * ```ts\n * import {\n * type BaseMessage,\n * AIMessage,\n * HumanMessage,\n * } from \"@langchain/core/messages\";\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single key named \"messages\" that will\n * // combine a returned BaseMessage or arrays of BaseMessages\n * const StateAnnotation = Annotation.Root({\n * sentiment: Annotation<string>,\n * messages: Annotation<BaseMessage[]>({\n * reducer: (left: BaseMessage[], right: BaseMessage | BaseMessage[]) => {\n * if (Array.isArray(right)) {\n * return left.concat(right);\n * }\n * return left.concat([right]);\n * },\n * default: () => [],\n * }),\n * });\n *\n * const graphBuilder = new StateGraph(StateAnnotation);\n *\n * // A node in the graph that returns an object with a \"messages\" key\n * // will update the state by combining the existing value with the returned one.\n * const myNode = (state: typeof StateAnnotation.State) => {\n * return {\n * messages: [new AIMessage(\"Some new response\")],\n * sentiment: \"positive\",\n * };\n * };\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * .addEdge(\"__start__\", \"myNode\")\n * .addEdge(\"myNode\", \"__end__\")\n * .compile();\n *\n * await graph.invoke({ messages: [new HumanMessage(\"how are you?\")] });\n *\n * // {\n * // messages: [HumanMessage(\"how are you?\"), AIMessage(\"Some new response\")],\n * // sentiment: \"positive\",\n * // }\n * ```\n */\nexport class StateGraph<\n SD extends SDZod | unknown,\n S = SD extends SDZod ? StateType<ToStateDefinition<SD>> : SD,\n U = SD extends SDZod ? UpdateType<ToStateDefinition<SD>> : Partial<S>,\n N extends string = typeof START,\n I extends SDZod = SD extends SDZod ? ToStateDefinition<SD> : StateDefinition,\n O extends SDZod = SD extends SDZod ? ToStateDefinition<SD> : StateDefinition,\n C extends SDZod = StateDefinition,\n NodeReturnType = unknown,\n InterruptType = unknown,\n WriterType = unknown\n> extends Graph<N, S, U, StateGraphNodeSpec<S, U>, ToStateDefinition<C>> {\n channels: Record<string, BaseChannel> = {};\n\n // TODO: this doesn't dedupe edges as in py, so worth fixing at some point\n waitingEdges: Set<[N[], N]> = new Set();\n\n /** @internal */\n _schemaDefinition: StateDefinition;\n\n /** @internal */\n _schemaRuntimeDefinition: InteropZodObject | undefined;\n\n /** @internal */\n _inputDefinition: I;\n\n /** @internal */\n _inputRuntimeDefinition: InteropZodObject | PartialStateSchema | undefined;\n\n /** @internal */\n _outputDefinition: O;\n\n /** @internal */\n _outputRuntimeDefinition: InteropZodObject | undefined;\n\n /**\n * Map schemas to managed values\n * @internal\n */\n _schemaDefinitions = new Map();\n\n /** @internal */\n _metaRegistry: SchemaMetaRegistry = schemaMetaRegistry;\n\n /** @internal Used only for typing. */\n _configSchema: ToStateDefinition<C> | undefined;\n\n /** @internal */\n _configRuntimeSchema: InteropZodObject | undefined;\n\n /** @internal */\n _interrupt: InterruptType;\n\n /** @internal */\n _writer: WriterType;\n\n declare Node: StrictNodeAction<S, U, C, N, InterruptType, WriterType>;\n\n constructor(\n state: SD extends StateDefinition ? AnnotationRoot<SD> : never,\n options?: {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n\n interrupt?: InterruptType;\n writer?: WriterType;\n\n nodes?: N[];\n }\n );\n\n constructor(\n state: SD extends InteropZodObject ? SD : never,\n options?: {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n\n interrupt?: InterruptType;\n writer?: WriterType;\n\n nodes?: N[];\n }\n );\n\n constructor(\n fields: SD extends StateDefinition\n ? StateGraphArgsWithInputOutputSchemas<SD, ToStateDefinition<O>>\n : never,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n constructor(\n fields: SD extends StateDefinition\n ?\n | AnnotationRoot<SD>\n | StateGraphArgsWithStateSchema<\n SD,\n ToStateDefinition<I>,\n ToStateDefinition<O>\n >\n : never,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n /** @deprecated Use `Annotation.Root` or `zod` for state definition instead. */\n constructor(\n fields: SD extends StateDefinition\n ? SD | StateGraphArgs<S>\n : StateGraphArgs<S>,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n constructor(\n fields: SD extends InteropZodObject\n ? SD | ZodStateGraphArgsWithStateSchema<SD, I, O>\n : never,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n constructor(\n fields: SD extends InteropZodObject\n ? SD | ZodStateGraphArgsWithStateSchema<SD, I, O>\n : SD extends StateDefinition\n ?\n | SD\n | AnnotationRoot<SD>\n | StateGraphArgs<S>\n | StateGraphArgsWithStateSchema<\n SD,\n ToStateDefinition<I>,\n ToStateDefinition<O>\n >\n | StateGraphArgsWithInputOutputSchemas<SD, ToStateDefinition<O>>\n : StateGraphArgs<S>,\n contextSchema?:\n | C\n | AnnotationRoot<ToStateDefinition<C>>\n | {\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n interrupt?: InterruptType;\n writer?: WriterType;\n nodes?: N[];\n }\n ) {\n super();\n\n if (isZodStateGraphArgsWithStateSchema(fields)) {\n const stateDef = this._metaRegistry.getChannelsForSchema(fields.state);\n const inputDef =\n fields.input != null\n ? this._metaRegistry.getChannelsForSchema(fields.input)\n : stateDef;\n const outputDef =\n fields.output != null\n ? this._metaRegistry.getChannelsForSchema(fields.output)\n : stateDef;\n\n this._schemaDefinition = stateDef;\n this._schemaRuntimeDefinition = fields.state;\n\n this._inputDefinition = inputDef as I;\n this._inputRuntimeDefinition = fields.input ?? PartialStateSchema;\n\n this._outputDefinition = outputDef as O;\n this._outputRuntimeDefinition = fields.output ?? fields.state;\n } else if (isInteropZodObject(fields)) {\n const stateDef = this._metaRegistry.getChannelsForSchema(fields);\n\n this._schemaDefinition = stateDef;\n this._schemaRuntimeDefinition = fields;\n\n this._inputDefinition = stateDef as I;\n this._inputRuntimeDefinition = PartialStateSchema;\n\n this._outputDefinition = stateDef as O;\n this._outputRuntimeDefinition = fields;\n } else if (\n isStateGraphArgsWithInputOutputSchemas<\n SD extends StateDefinition ? SD : never,\n O extends StateDefinition ? O : never\n >(fields)\n ) {\n this._schemaDefinition = fields.input.spec;\n this._inputDefinition = fields.input.spec as unknown as I;\n this._outputDefinition = fields.output.spec;\n } else if (isStateGraphArgsWithStateSchema(fields)) {\n this._schemaDefinition = fields.stateSchema.spec;\n this._inputDefinition = (fields.input?.spec ??\n this._schemaDefinition) as I;\n this._outputDefinition = (fields.output?.spec ??\n this._schemaDefinition) as O;\n } else if (isStateDefinition(fields) || isAnnotationRoot(fields)) {\n const spec = isAnnotationRoot(fields) ? fields.spec : fields;\n this._schemaDefinition = spec;\n } else if (isStateGraphArgs(fields)) {\n const spec = _getChannels(fields.channels);\n this._schemaDefinition = spec;\n } else {\n throw new Error(\n \"Invalid StateGraph input. Make sure to pass a valid Annotation.Root or Zod schema.\"\n );\n }\n\n this._inputDefinition ??= this._schemaDefinition as I;\n this._outputDefinition ??= this._schemaDefinition as O;\n\n this._addSchema(this._schemaDefinition);\n this._addSchema(this._inputDefinition);\n this._addSchema(this._outputDefinition);\n\n function isOptions(options: unknown): options is {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n interrupt?: InterruptType;\n writer?: WriterType;\n nodes?: N[];\n } {\n return (\n typeof options === \"object\" &&\n options != null &&\n !(\"spec\" in options) &&\n !isInteropZodObject(options)\n );\n }\n\n // Handle runtime config options\n if (isOptions(contextSchema)) {\n if (isInteropZodObject(contextSchema.context)) {\n this._configRuntimeSchema = contextSchema.context;\n }\n this._interrupt = contextSchema.interrupt as InterruptType;\n this._writer = contextSchema.writer as WriterType;\n } else if (isInteropZodObject(contextSchema)) {\n this._configRuntimeSchema = contextSchema;\n }\n }\n\n get allEdges(): Set<[string, string]> {\n return new Set([\n ...this.edges,\n ...Array.from(this.waitingEdges).flatMap(([starts, end]) =>\n starts.map((start) => [start, end] as [string, string])\n ),\n ]);\n }\n\n _addSchema(stateDefinition: SDZod) {\n if (this._schemaDefinitions.has(stateDefinition)) {\n return;\n }\n // TODO: Support managed values\n this._schemaDefinitions.set(stateDefinition, stateDefinition);\n for (const [key, val] of Object.entries(stateDefinition)) {\n let channel;\n if (typeof val === \"function\") {\n channel = val();\n } else {\n channel = val;\n }\n if (this.channels[key] !== undefined) {\n if (this.channels[key] !== channel) {\n if (channel.lc_graph_name !== \"LastValue\") {\n throw new Error(\n `Channel \"${key}\" already exists with a different type.`\n );\n }\n }\n } else {\n this.channels[key] = channel;\n }\n }\n }\n\n override addNode<\n K extends string,\n NodeMap extends Record<K, NodeAction<S, U, C, InterruptType, WriterType>>\n >(\n nodes: NodeMap\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<\n NodeReturnType,\n {\n [key in keyof NodeMap]: NodeMap[key] extends NodeAction<\n S,\n infer U,\n C,\n InterruptType,\n WriterType\n >\n ? U\n : never;\n }\n >\n >;\n\n override addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(\n nodes:\n | [\n key: K,\n action: NodeAction<\n NodeInput,\n NodeOutput,\n C,\n InterruptType,\n WriterType\n >,\n options?: StateGraphAddNodeOptions\n ][]\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n\n override addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n\n override addNode<K extends string, NodeInput = S>(\n key: K,\n action: NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ): StateGraph<SD, S, U, N | K, I, O, C, NodeReturnType>;\n\n override addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(\n ...args:\n | [\n key: K,\n action: NodeAction<\n NodeInput,\n NodeOutput,\n C,\n InterruptType,\n WriterType\n >,\n options?: StateGraphAddNodeOptions\n ]\n | [\n nodes:\n | Record<K, NodeAction<NodeInput, U, C, InterruptType, WriterType>>\n | [\n key: K,\n action: NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ][]\n ]\n ): StateGraph<SD, S, U, N | K, I, O, C> {\n function isMultipleNodes(\n args: unknown[]\n ): args is [\n nodes:\n | Record<K, NodeAction<NodeInput, U, C, InterruptType, WriterType>>\n | [\n key: K,\n action: NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n options?: AddNodeOptions\n ][]\n ] {\n return args.length >= 1 && typeof args[0] !== \"string\";\n }\n\n const nodes = (\n isMultipleNodes(args) // eslint-disable-line no-nested-ternary\n ? Array.isArray(args[0])\n ? args[0]\n : Object.entries(args[0]).map(([key, action]) => [key, action])\n : [[args[0], args[1], args[2]]]\n ) as [\n K,\n NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n StateGraphAddNodeOptions | undefined\n ][];\n\n if (nodes.length === 0) {\n throw new Error(\"No nodes provided in `addNode`\");\n }\n\n for (const [key, action, options] of nodes) {\n if (key in this.channels) {\n throw new Error(\n `${key} is already being used as a state attribute (a.k.a. a channel), cannot also be used as a node name.`\n );\n }\n\n for (const reservedChar of [\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CHECKPOINT_NAMESPACE_END,\n ]) {\n if (key.includes(reservedChar)) {\n throw new Error(\n `\"${reservedChar}\" is a reserved character and is not allowed in node names.`\n );\n }\n }\n this.warnIfCompiled(\n `Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`\n );\n\n if (key in this.nodes) {\n throw new Error(`Node \\`${key}\\` already present.`);\n }\n if (key === END || key === START) {\n throw new Error(`Node \\`${key}\\` is reserved.`);\n }\n\n let inputSpec = this._schemaDefinition;\n if (options?.input !== undefined) {\n if (isInteropZodObject(options.input)) {\n inputSpec = this._metaRegistry.getChannelsForSchema(options.input);\n } else if (options.input.spec !== undefined) {\n inputSpec = options.input.spec;\n }\n }\n if (inputSpec !== undefined) {\n this._addSchema(inputSpec);\n }\n\n let runnable;\n if (Runnable.isRunnable(action)) {\n runnable = action;\n } else if (typeof action === \"function\") {\n runnable = new RunnableCallable({\n func: action,\n name: key,\n trace: false,\n });\n } else {\n runnable = _coerceToRunnable(action);\n }\n\n let cachePolicy = options?.cachePolicy;\n if (typeof cachePolicy === \"boolean\") {\n cachePolicy = cachePolicy ? {} : undefined;\n }\n\n const nodeSpec: StateGraphNodeSpec<S, U> = {\n runnable: runnable as unknown as Runnable<S, U>,\n retryPolicy: options?.retryPolicy,\n cachePolicy,\n metadata: options?.metadata,\n input: inputSpec ?? this._schemaDefinition,\n subgraphs: isPregelLike(runnable)\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [runnable as any]\n : options?.subgraphs,\n ends: options?.ends,\n defer: options?.defer,\n };\n\n this.nodes[key as unknown as N] = nodeSpec;\n }\n\n return this as StateGraph<SD, S, U, N | K, I, O, C>;\n }\n\n override addEdge(\n startKey: typeof START | N | N[],\n endKey: N | typeof END\n ): this {\n if (typeof startKey === \"string\") {\n return super.addEdge(startKey, endKey);\n }\n\n if (this.compiled) {\n console.warn(\n \"Adding an edge to a graph that has already been compiled. This will \" +\n \"not be reflected in the compiled graph.\"\n );\n }\n\n for (const start of startKey) {\n if (start === END) {\n throw new Error(\"END cannot be a start node\");\n }\n if (!Object.keys(this.nodes).some((node) => node === start)) {\n throw new Error(`Need to add a node named \"${start}\" first`);\n }\n }\n if (endKey === END) {\n throw new Error(\"END cannot be an end node\");\n }\n if (!Object.keys(this.nodes).some((node) => node === endKey)) {\n throw new Error(`Need to add a node named \"${endKey}\" first`);\n }\n\n this.waitingEdges.add([startKey, endKey]);\n\n return this;\n }\n\n addSequence<K extends string, NodeInput = S, NodeOutput extends U = U>(\n nodes: [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ][]\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n\n addSequence<\n K extends string,\n NodeMap extends Record<K, NodeAction<S, U, C, InterruptType, WriterType>>\n >(\n nodes: NodeMap\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<\n NodeReturnType,\n {\n [key in keyof NodeMap]: NodeMap[key] extends NodeAction<\n S,\n infer U,\n C,\n InterruptType,\n WriterType\n >\n ? U\n : never;\n }\n >\n >;\n\n addSequence<K extends string, NodeInput = S, NodeOutput extends U = U>(\n nodes:\n | [\n key: K,\n action: NodeAction<\n NodeInput,\n NodeOutput,\n C,\n InterruptType,\n WriterType\n >,\n options?: StateGraphAddNodeOptions\n ][]\n | Record<\n K,\n NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>\n >\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n > {\n const parsedNodes = Array.isArray(nodes) ? nodes : Object.entries(nodes);\n\n if (parsedNodes.length === 0) {\n throw new Error(\"Sequence requires at least one node.\");\n }\n\n let previousNode: N | undefined;\n for (const [key, action, options] of parsedNodes) {\n if (key in this.nodes) {\n throw new Error(\n `Node names must be unique: node with the name \"${key}\" already exists.`\n );\n }\n\n const validKey = key as unknown as N;\n this.addNode(\n validKey,\n action as NodeAction<S, U, C, InterruptType, WriterType>,\n options\n );\n if (previousNode != null) {\n this.addEdge(previousNode, validKey);\n }\n\n previousNode = validKey;\n }\n\n return this as StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n }\n\n override compile({\n checkpointer,\n store,\n cache,\n interruptBefore,\n interruptAfter,\n name,\n description,\n }: {\n checkpointer?: BaseCheckpointSaver | boolean;\n store?: BaseStore;\n cache?: BaseCache;\n interruptBefore?: N[] | All;\n interruptAfter?: N[] | All;\n name?: string;\n description?: string;\n } = {}): CompiledStateGraph<\n Prettify<S>,\n Prettify<U>,\n N,\n I,\n O,\n C,\n NodeReturnType,\n InterruptType,\n WriterType\n > {\n // validate the graph\n this.validate([\n ...(Array.isArray(interruptBefore) ? interruptBefore : []),\n ...(Array.isArray(interruptAfter) ? interruptAfter : []),\n ]);\n\n // prepare output channels\n const outputKeys = Object.keys(\n this._schemaDefinitions.get(this._outputDefinition)\n );\n const outputChannels =\n outputKeys.length === 1 && outputKeys[0] === ROOT ? ROOT : outputKeys;\n\n const streamKeys = Object.keys(this.channels);\n const streamChannels =\n streamKeys.length === 1 && streamKeys[0] === ROOT ? ROOT : streamKeys;\n\n const userInterrupt = this._interrupt;\n // create empty compiled graph\n const compiled = new CompiledStateGraph<\n S,\n U,\n N,\n I,\n O,\n C,\n NodeReturnType,\n InterruptType,\n WriterType\n >({\n builder: this,\n checkpointer,\n interruptAfter,\n interruptBefore,\n autoValidate: false,\n nodes: {} as Record<N | typeof START, PregelNode<S, U>>,\n channels: {\n ...this.channels,\n [START]: new EphemeralValue(),\n } as Record<N | typeof START | typeof END | string, BaseChannel>,\n inputChannels: START,\n outputChannels,\n streamChannels,\n streamMode: \"updates\",\n store,\n cache,\n name,\n description,\n userInterrupt,\n });\n\n // attach nodes, edges and branches\n compiled.attachNode(START);\n for (const [key, node] of Object.entries<StateGraphNodeSpec<S, U>>(\n this.nodes\n )) {\n compiled.attachNode(key as N, node);\n }\n compiled.attachBranch(START, SELF, _getControlBranch() as Branch<S, N>, {\n withReader: false,\n });\n for (const [key] of Object.entries<StateGraphNodeSpec<S, U>>(this.nodes)) {\n compiled.attachBranch(\n key as N,\n SELF,\n _getControlBranch() as Branch<S, N>,\n {\n withReader: false,\n }\n );\n }\n for (const [start, end] of this.edges) {\n compiled.attachEdge(start, end);\n }\n for (const [starts, end] of this.waitingEdges) {\n compiled.attachEdge(starts, end);\n }\n for (const [start, branches] of Object.entries(this.branches)) {\n for (const [name, branch] of Object.entries(branches)) {\n compiled.attachBranch(start as N, name, branch);\n }\n }\n\n return compiled.validate();\n }\n}\n\nfunction _getChannels<Channels extends Record<string, unknown> | unknown>(\n schema: StateGraphArgs<Channels>[\"channels\"]\n): Record<string, BaseChannel> {\n const channels: Record<string, BaseChannel> = {};\n for (const [name, val] of Object.entries(schema)) {\n if (name === ROOT) {\n channels[name] = getChannel<Channels>(val as SingleReducer<Channels>);\n } else {\n const key = name as keyof Channels;\n channels[name] = getChannel<Channels[typeof key]>(\n val as SingleReducer<Channels[typeof key]>\n );\n }\n }\n return channels;\n}\n\n/**\n * Final result from building and compiling a {@link StateGraph}.\n * Should not be instantiated directly, only using the StateGraph `.compile()`\n * instance method.\n */\nexport class CompiledStateGraph<\n S,\n U,\n N extends string = typeof START,\n I extends SDZod = StateDefinition,\n O extends SDZod = StateDefinition,\n C extends SDZod = StateDefinition,\n NodeReturnType = unknown,\n InterruptType = unknown,\n WriterType = unknown\n> extends CompiledGraph<\n N,\n S,\n U,\n StateType<ToStateDefinition<C>>,\n UpdateType<ToStateDefinition<I>>,\n StateType<ToStateDefinition<O>>,\n NodeReturnType,\n CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>,\n InferWriterType<WriterType>\n> {\n declare builder: StateGraph<unknown, S, U, N, I, O, C, NodeReturnType>;\n\n /**\n * The description of the compiled graph.\n * This is used by the supervisor agent to describe the handoff to the agent.\n */\n description?: string;\n\n /** @internal */\n _metaRegistry: SchemaMetaRegistry = schemaMetaRegistry;\n\n constructor({\n description,\n ...rest\n }: { description?: string } & ConstructorParameters<\n typeof CompiledGraph<\n N,\n S,\n U,\n StateType<ToStateDefinition<C>>,\n UpdateType<ToStateDefinition<I>>,\n StateType<ToStateDefinition<O>>,\n NodeReturnType,\n CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>,\n InferWriterType<WriterType>\n >\n >[0]) {\n super(rest);\n this.description = description;\n }\n\n attachNode(key: typeof START, node?: never): void;\n\n attachNode(key: N, node: StateGraphNodeSpec<S, U>): void;\n\n attachNode(key: N | typeof START, node?: StateGraphNodeSpec<S, U>): void {\n let outputKeys: string[];\n if (key === START) {\n // Get input schema keys excluding managed values\n outputKeys = Object.entries(\n this.builder._schemaDefinitions.get(this.builder._inputDefinition)\n ).map(([k]) => k);\n } else {\n outputKeys = Object.keys(this.builder.channels);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _getRoot(input: unknown): [string, any][] | null {\n if (isCommand(input)) {\n if (input.graph === Command.PARENT) {\n return null;\n }\n return input._updateAsTuples();\n } else if (\n Array.isArray(input) &&\n input.length > 0 &&\n input.some((i) => isCommand(i))\n ) {\n const updates: [string, unknown][] = [];\n for (const i of input) {\n if (isCommand(i)) {\n if (i.graph === Command.PARENT) {\n continue;\n }\n updates.push(...i._updateAsTuples());\n } else {\n updates.push([ROOT, i]);\n }\n }\n return updates;\n } else if (input != null) {\n return [[ROOT, input]];\n }\n return null;\n }\n\n // to avoid name collision below\n const nodeKey = key;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _getUpdates(input: U): [string, any][] | null {\n if (!input) {\n return null;\n } else if (isCommand(input)) {\n if (input.graph === Command.PARENT) {\n return null;\n }\n return input._updateAsTuples().filter(([k]) => outputKeys.includes(k));\n } else if (\n Array.isArray(input) &&\n input.length > 0 &&\n input.some(isCommand)\n ) {\n const updates: [string, unknown][] = [];\n for (const item of input) {\n if (isCommand(item)) {\n if (item.graph === Command.PARENT) {\n continue;\n }\n updates.push(\n ...item._updateAsTuples().filter(([k]) => outputKeys.includes(k))\n );\n } else {\n const itemUpdates = _getUpdates(item);\n if (itemUpdates) {\n updates.push(...(itemUpdates ?? []));\n }\n }\n }\n return updates;\n } else if (typeof input === \"object\" && !Array.isArray(input)) {\n return Object.entries(input).filter(([k]) => outputKeys.includes(k));\n } else {\n const typeofInput = Array.isArray(input) ? \"array\" : typeof input;\n throw new InvalidUpdateError(\n `Expected node \"${nodeKey.toString()}\" to return an object or an array containing at least one Command object, received ${typeofInput}`,\n {\n lc_error_code: \"INVALID_GRAPH_NODE_RETURN_VALUE\",\n }\n );\n }\n }\n\n const stateWriteEntries: (ChannelWriteTupleEntry | ChannelWriteEntry)[] = [\n {\n value: PASSTHROUGH,\n mapper: new RunnableCallable({\n func:\n outputKeys.length && outputKeys[0] === ROOT\n ? _getRoot\n : _getUpdates,\n trace: false,\n recurse: false,\n }),\n },\n ];\n\n // add node and output channel\n if (key === START) {\n this.nodes[key] = new PregelNode<S, U>({\n tags: [TAG_HIDDEN],\n triggers: [START],\n channels: [START],\n writers: [new ChannelWrite(stateWriteEntries, [TAG_HIDDEN])],\n });\n } else {\n const inputDefinition = node?.input ?? this.builder._schemaDefinition;\n const inputValues = Object.fromEntries(\n Object.keys(this.builder._schemaDefinitions.get(inputDefinition)).map(\n (k) => [k, k]\n )\n );\n const isSingleInput =\n Object.keys(inputValues).length === 1 && ROOT in inputValues;\n const branchChannel = `branch:to:${key}` as string | N;\n this.channels[branchChannel] = node?.defer\n ? new LastValueAfterFinish()\n : new EphemeralValue(false);\n this.nodes[key] = new PregelNode<S, U>({\n triggers: [branchChannel],\n // read state keys\n channels: isSingleInput ? Object.keys(inputValues) : inputValues,\n // publish to state keys\n writers: [new ChannelWrite(stateWriteEntries, [TAG_HIDDEN])],\n mapper: isSingleInput\n ? undefined\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (input: Record<string, any>) => {\n return Object.fromEntries(\n Object.entries(input).filter(([k]) => k in inputValues)\n );\n },\n bound: node?.runnable,\n metadata: node?.metadata,\n retryPolicy: node?.retryPolicy,\n cachePolicy: node?.cachePolicy,\n subgraphs: node?.subgraphs,\n ends: node?.ends,\n });\n }\n }\n\n attachEdge(starts: N | N[] | \"__start__\", end: N | \"__end__\"): void {\n if (end === END) return;\n if (typeof starts === \"string\") {\n this.nodes[starts].writers.push(\n new ChannelWrite(\n [{ channel: `branch:to:${end}`, value: null }],\n [TAG_HIDDEN]\n )\n );\n } else if (Array.isArray(starts)) {\n const channelName = `join:${starts.join(\"+\")}:${end}`;\n // register channel\n this.channels[channelName as string | N] = this.builder.nodes[end].defer\n ? new NamedBarrierValueAfterFinish(new Set(starts))\n : new NamedBarrierValue(new Set(starts));\n // subscribe to channel\n this.nodes[end].triggers.push(channelName);\n // publish to channel\n for (const start of starts) {\n this.nodes[start].writers.push(\n new ChannelWrite(\n [{ channel: channelName, value: start }],\n [TAG_HIDDEN]\n )\n );\n }\n }\n }\n\n attachBranch(\n start: N | typeof START,\n _: string,\n branch: Branch<S, N>,\n options: { withReader?: boolean } = { withReader: true }\n ): void {\n const branchWriter = async (\n packets: (string | Send)[],\n config: LangGraphRunnableConfig\n ) => {\n const filteredPackets = packets.filter((p) => p !== END);\n if (!filteredPackets.length) return;\n\n const writes: (ChannelWriteEntry | Send)[] = filteredPackets.map((p) => {\n if (_isSend(p)) return p;\n return { channel: p === END ? p : `branch:to:${p}`, value: start };\n });\n await ChannelWrite.doWrite(\n { ...config, tags: (config.tags ?? []).concat([TAG_HIDDEN]) },\n writes\n );\n };\n // attach branch publisher\n this.nodes[start].writers.push(\n branch.run(\n branchWriter,\n // reader\n options.withReader\n ? (config) =>\n ChannelRead.doRead<S>(\n config,\n this.streamChannels ?? this.outputChannels,\n true\n )\n : undefined\n )\n );\n }\n\n protected async _validateInput(\n input: UpdateType<ToStateDefinition<I>>\n ): Promise<UpdateType<ToStateDefinition<I>>> {\n if (input == null) return input;\n\n const schema = (() => {\n const input = this.builder._inputRuntimeDefinition;\n const schema = this.builder._schemaRuntimeDefinition;\n\n const apply = (schema: InteropZodObject | undefined) => {\n if (schema == null) return undefined;\n return this._metaRegistry.getExtendedChannelSchemas(schema, {\n withReducerSchema: true,\n });\n };\n\n if (isInteropZodObject(input)) return apply(input);\n if (input === PartialStateSchema) {\n return interopZodObjectPartial(apply(schema)!);\n }\n return undefined;\n })();\n\n if (isCommand(input)) {\n const parsedInput = input;\n if (input.update && schema != null)\n parsedInput.update = interopParse(schema, input.update);\n return parsedInput;\n }\n if (schema != null) return interopParse(schema, input);\n return input;\n }\n\n public isInterrupted(input: unknown): input is {\n [INTERRUPT]: Interrupt<InferInterruptInputType<InterruptType>>[];\n } {\n return isInterrupted(input);\n }\n\n protected async _validateContext(\n config: Partial<Record<string, unknown>>\n ): Promise<Partial<Record<string, unknown>>> {\n const configSchema = this.builder._configRuntimeSchema;\n if (isInteropZodObject(configSchema)) interopParse(configSchema, config);\n return config;\n }\n}\n\nfunction isStateDefinition(obj: unknown): obj is StateDefinition {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n !Array.isArray(obj) &&\n Object.keys(obj).length > 0 &&\n Object.values(obj).every((v) => typeof v === \"function\" || isBaseChannel(v))\n );\n}\n\nfunction isAnnotationRoot<SD extends StateDefinition>(\n obj: unknown | AnnotationRoot<SD>\n): obj is AnnotationRoot<SD> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"lc_graph_name\" in obj &&\n obj.lc_graph_name === \"AnnotationRoot\"\n );\n}\n\nfunction isStateGraphArgs<Channels extends object | unknown>(\n obj: unknown | StateGraphArgs<Channels>\n): obj is StateGraphArgs<Channels> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n (obj as StateGraphArgs<Channels>).channels !== undefined\n );\n}\n\nfunction isStateGraphArgsWithStateSchema<\n SD extends StateDefinition,\n I extends StateDefinition,\n O extends StateDefinition\n>(\n obj: unknown | StateGraphArgsWithStateSchema<SD, I, O>\n): obj is StateGraphArgsWithStateSchema<SD, I, O> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n (obj as StateGraphArgsWithStateSchema<SD, I, O>).stateSchema !== undefined\n );\n}\n\nfunction isStateGraphArgsWithInputOutputSchemas<\n SD extends StateDefinition,\n O extends StateDefinition\n>(\n obj: unknown | StateGraphArgsWithInputOutputSchemas<SD, O>\n): obj is StateGraphArgsWithInputOutputSchemas<SD, O> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (obj as any).stateSchema === undefined &&\n (obj as StateGraphArgsWithInputOutputSchemas<SD, O>).input !== undefined &&\n (obj as StateGraphArgsWithInputOutputSchemas<SD, O>).output !== undefined\n );\n}\n\nfunction isZodStateGraphArgsWithStateSchema<\n SD extends InteropZodObject,\n I extends InteropZodObject,\n O extends InteropZodObject\n>(value: unknown): value is ZodStateGraphArgsWithStateSchema<SD, I, O> {\n if (typeof value !== \"object\" || value == null) {\n return false;\n }\n\n if (!(\"state\" in value) || !isInteropZodObject(value.state)) {\n return false;\n }\n\n if (\"input\" in value && !isInteropZodObject(value.input)) {\n return false;\n }\n\n if (\"output\" in value && !isInteropZodObject(value.output)) {\n return false;\n }\n\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _controlBranch(value: any): (string | Send)[] {\n if (_isSend(value)) {\n return [value];\n }\n const commands = [];\n if (isCommand(value)) {\n commands.push(value);\n } else if (Array.isArray(value)) {\n commands.push(...value.filter(isCommand));\n }\n const destinations: (string | Send)[] = [];\n\n for (const command of commands) {\n if (command.graph === Command.PARENT) {\n throw new ParentCommand(command);\n }\n\n if (_isSend(command.goto)) {\n destinations.push(command.goto);\n } else if (typeof command.goto === \"string\") {\n destinations.push(command.goto);\n } else {\n if (Array.isArray(command.goto)) {\n destinations.push(...command.goto);\n }\n }\n }\n return destinations;\n}\n\nfunction _getControlBranch() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const CONTROL_BRANCH_PATH = new RunnableCallable<any, (string | Send)[]>({\n func: _controlBranch,\n tags: [TAG_HIDDEN],\n trace: false,\n recurse: false,\n name: \"<control_branch>\",\n });\n return new Branch({\n path: CONTROL_BRANCH_PATH,\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"state.cjs","names":["Graph","schemaMetaRegistry","StateSchema","StateGraphInputError","args","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","END","START","Runnable","RunnableCallable","isPregelLike","EphemeralValue","SELF","name","getChannel","CompiledGraph","isCommand","Command","InvalidUpdateError","PASSTHROUGH","PregelNode","TAG_HIDDEN","ChannelWrite","LastValueAfterFinish","NamedBarrierValueAfterFinish","NamedBarrierValue","_isSend","ChannelRead","schema","isInterrupted","isBaseChannel","ParentCommand","Branch"],"sources":["../../src/graph/state.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { _coerceToRunnable, Runnable } from \"@langchain/core/runnables\";\nimport {\n All,\n type BaseCache,\n BaseCheckpointSaver,\n BaseStore,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n type InteropZodObject,\n interopParse,\n interopZodObjectPartial,\n isInteropZodObject,\n} from \"@langchain/core/utils/types\";\nimport type {\n RunnableLike,\n LangGraphRunnableConfig,\n Runtime,\n} from \"../pregel/runnable_types.js\";\nimport { BaseChannel, isBaseChannel } from \"../channels/base.js\";\nimport {\n CompiledGraph,\n Graph,\n Branch,\n AddNodeOptions,\n NodeSpec,\n} from \"./graph.js\";\nimport {\n ChannelWrite,\n ChannelWriteEntry,\n ChannelWriteTupleEntry,\n PASSTHROUGH,\n} from \"../pregel/write.js\";\nimport { ChannelRead, PregelNode } from \"../pregel/read.js\";\nimport {\n NamedBarrierValue,\n NamedBarrierValueAfterFinish,\n} from \"../channels/named_barrier_value.js\";\nimport { EphemeralValue } from \"../channels/ephemeral_value.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport {\n isCommand,\n _isSend,\n CHECKPOINT_NAMESPACE_END,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n Command,\n SELF,\n Send,\n START,\n END,\n TAG_HIDDEN,\n CommandInstance,\n isInterrupted,\n Interrupt,\n INTERRUPT,\n} from \"../constants.js\";\nimport {\n InvalidUpdateError,\n ParentCommand,\n StateGraphInputError,\n} from \"../errors.js\";\nimport {\n AnnotationRoot,\n getChannel,\n SingleReducer,\n StateDefinition,\n StateType,\n} from \"./annotation.js\";\nimport { StateSchema } from \"../state/index.js\";\nimport type { CachePolicy, RetryPolicy } from \"../pregel/utils/index.js\";\nimport { isPregelLike } from \"../pregel/utils/subgraph.js\";\nimport { LastValueAfterFinish } from \"../channels/last_value.js\";\nimport { type SchemaMetaRegistry, schemaMetaRegistry } from \"./zod/meta.js\";\nimport type {\n InferInterruptResumeType,\n InferInterruptInputType,\n} from \"../interrupt.js\";\nimport type { InferWriterType } from \"../writer.js\";\nimport type { AnyStateSchema } from \"../state/schema.js\";\nimport {\n ExtractStateType,\n ExtractUpdateType,\n ToStateDefinition,\n type StateDefinitionInit,\n} from \"./types.js\";\n\nconst ROOT = \"__root__\";\n\nexport type ChannelReducers<Channels extends object> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof Channels]: SingleReducer<Channels[K], any>;\n};\n\nexport interface StateGraphArgs<Channels extends object | unknown> {\n channels: Channels extends object\n ? Channels extends unknown[]\n ? ChannelReducers<{ __root__: Channels }>\n : ChannelReducers<Channels>\n : ChannelReducers<{ __root__: Channels }>;\n}\n\nexport type StateGraphNodeSpec<RunInput, RunOutput> = NodeSpec<\n RunInput,\n RunOutput\n> & {\n input?: StateDefinition;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n};\n\nexport type StateGraphAddNodeOptions<Nodes extends string = string> = {\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy | boolean;\n // TODO: Fix generic typing for annotations\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input?: AnnotationRoot<any> | InteropZodObject;\n} & AddNodeOptions<Nodes>;\n\nexport type StateGraphArgsWithStateSchema<\n SD extends StateDefinition,\n I extends StateDefinition,\n O extends StateDefinition\n> = {\n stateSchema: AnnotationRoot<SD>;\n input?: AnnotationRoot<I>;\n output?: AnnotationRoot<O>;\n};\n\nexport type StateGraphArgsWithInputOutputSchemas<\n SD extends StateDefinition,\n O extends StateDefinition = SD\n> = {\n input: AnnotationRoot<SD>;\n output: AnnotationRoot<O>;\n};\n\ntype ZodStateGraphArgsWithStateSchema<\n SD extends InteropZodObject,\n I extends StateDefinitionInit,\n O extends StateDefinitionInit\n> = { state: SD; input?: I; output?: O };\n\ntype ExtractStateDefinition<T> = T extends AnyStateSchema\n ? T // Keep StateSchema as-is to preserve type information\n : T extends StateDefinitionInit\n ? ToStateDefinition<T>\n : StateDefinition;\n\ntype NodeAction<\n S,\n U,\n C extends StateDefinitionInit,\n InterruptType,\n WriterType\n> = RunnableLike<\n S,\n U extends object ? U & Record<string, any> : U, // eslint-disable-line @typescript-eslint/no-explicit-any\n Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>\n>;\n\ntype StrictNodeAction<\n S,\n U,\n C extends StateDefinitionInit,\n Nodes extends string,\n InterruptType,\n WriterType\n> = RunnableLike<\n Prettify<S>,\n | U\n | Command<\n InferInterruptResumeType<InterruptType>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n U & Record<string, any>,\n Nodes\n >,\n Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>\n>;\n\nconst PartialStateSchema = Symbol.for(\"langgraph.state.partial\");\ntype PartialStateSchema = typeof PartialStateSchema;\n\ntype MergeReturnType<Prev, Curr> = Prev & Curr extends infer T\n ? { [K in keyof T]: T[K] } & unknown\n : never;\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n\n/**\n * A graph whose nodes communicate by reading and writing to a shared state.\n * Each node takes a defined `State` as input and returns a `Partial<State>`.\n *\n * Each state key can optionally be annotated with a reducer function that\n * will be used to aggregate the values of that key received from multiple nodes.\n * The signature of a reducer function is (left: Value, right: UpdateValue) => Value.\n *\n * See {@link Annotation} for more on defining state.\n *\n * After adding nodes and edges to your graph, you must call `.compile()` on it before\n * you can use it.\n *\n * @example\n * ```ts\n * import {\n * type BaseMessage,\n * AIMessage,\n * HumanMessage,\n * } from \"@langchain/core/messages\";\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single key named \"messages\" that will\n * // combine a returned BaseMessage or arrays of BaseMessages\n * const StateAnnotation = Annotation.Root({\n * sentiment: Annotation<string>,\n * messages: Annotation<BaseMessage[]>({\n * reducer: (left: BaseMessage[], right: BaseMessage | BaseMessage[]) => {\n * if (Array.isArray(right)) {\n * return left.concat(right);\n * }\n * return left.concat([right]);\n * },\n * default: () => [],\n * }),\n * });\n *\n * const graphBuilder = new StateGraph(StateAnnotation);\n *\n * // A node in the graph that returns an object with a \"messages\" key\n * // will update the state by combining the existing value with the returned one.\n * const myNode = (state: typeof StateAnnotation.State) => {\n * return {\n * messages: [new AIMessage(\"Some new response\")],\n * sentiment: \"positive\",\n * };\n * };\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * .addEdge(\"__start__\", \"myNode\")\n * .addEdge(\"myNode\", \"__end__\")\n * .compile();\n *\n * await graph.invoke({ messages: [new HumanMessage(\"how are you?\")] });\n *\n * // {\n * // messages: [HumanMessage(\"how are you?\"), AIMessage(\"Some new response\")],\n * // sentiment: \"positive\",\n * // }\n * ```\n */\nexport class StateGraph<\n SD extends StateDefinitionInit | unknown,\n S = ExtractStateType<SD>,\n U = ExtractUpdateType<SD, S>,\n N extends string = typeof START,\n I extends StateDefinitionInit = ExtractStateDefinition<SD>,\n O extends StateDefinitionInit = ExtractStateDefinition<SD>,\n C extends StateDefinitionInit = StateDefinition,\n NodeReturnType = unknown,\n InterruptType = unknown,\n WriterType = unknown\n> extends Graph<N, S, U, StateGraphNodeSpec<S, U>, ToStateDefinition<C>> {\n channels: Record<string, BaseChannel> = {};\n\n // TODO: this doesn't dedupe edges as in py, so worth fixing at some point\n waitingEdges: Set<[N[], N]> = new Set();\n\n /** @internal */\n _schemaDefinition: StateDefinition;\n\n /** @internal */\n _schemaRuntimeDefinition: InteropZodObject | AnyStateSchema | undefined;\n\n /** @internal */\n _inputDefinition: I;\n\n /** @internal */\n _inputRuntimeDefinition:\n | InteropZodObject\n | AnyStateSchema\n | PartialStateSchema\n | undefined;\n\n /** @internal */\n _outputDefinition: O;\n\n /** @internal */\n _outputRuntimeDefinition: InteropZodObject | AnyStateSchema | undefined;\n\n /**\n * Map schemas to managed values\n * @internal\n */\n _schemaDefinitions = new Map();\n\n /** @internal */\n _metaRegistry: SchemaMetaRegistry = schemaMetaRegistry;\n\n /** @internal Used only for typing. */\n _configSchema: ToStateDefinition<C> | undefined;\n\n /** @internal */\n _configRuntimeSchema: InteropZodObject | undefined;\n\n /** @internal */\n _interrupt: InterruptType;\n\n /** @internal */\n _writer: WriterType;\n\n declare Node: StrictNodeAction<S, U, C, N, InterruptType, WriterType>;\n\n constructor(\n state: SD extends StateDefinition ? AnnotationRoot<SD> : never,\n options?: {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n\n interrupt?: InterruptType;\n writer?: WriterType;\n\n nodes?: N[];\n }\n );\n\n constructor(\n state: SD extends AnyStateSchema ? SD : never,\n options?: {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n\n interrupt?: InterruptType;\n writer?: WriterType;\n\n nodes?: N[];\n }\n );\n\n constructor(\n state: SD extends InteropZodObject ? SD : never,\n options?: {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n\n interrupt?: InterruptType;\n writer?: WriterType;\n\n nodes?: N[];\n }\n );\n\n constructor(\n fields: SD extends StateDefinition\n ? StateGraphArgsWithInputOutputSchemas<SD, ToStateDefinition<O>>\n : never,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n constructor(\n fields: SD extends StateDefinition\n ?\n | AnnotationRoot<SD>\n | StateGraphArgsWithStateSchema<\n SD,\n ToStateDefinition<I>,\n ToStateDefinition<O>\n >\n : never,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n /** @deprecated Use `Annotation.Root` or `zod` for state definition instead. */\n constructor(\n fields: SD extends StateDefinition\n ? SD | StateGraphArgs<S>\n : StateGraphArgs<S>,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n constructor(\n fields: SD extends InteropZodObject\n ? SD | ZodStateGraphArgsWithStateSchema<SD, I, O>\n : never,\n contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>\n );\n\n constructor(\n fields: SD extends AnyStateSchema\n ? SD\n : SD extends InteropZodObject\n ? SD | ZodStateGraphArgsWithStateSchema<SD, I, O>\n : SD extends StateDefinition\n ?\n | SD\n | AnnotationRoot<SD>\n | StateGraphArgs<S>\n | StateGraphArgsWithStateSchema<\n SD,\n ToStateDefinition<I>,\n ToStateDefinition<O>\n >\n | StateGraphArgsWithInputOutputSchemas<SD, ToStateDefinition<O>>\n : StateGraphArgs<S>,\n contextSchema?:\n | C\n | AnnotationRoot<ToStateDefinition<C>>\n | {\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n interrupt?: InterruptType;\n writer?: WriterType;\n nodes?: N[];\n }\n ) {\n super();\n\n if (StateSchema.isInstance(fields)) {\n const channels = fields.getChannels();\n this._schemaDefinition = channels;\n this.channels = channels;\n\n this._schemaRuntimeDefinition = fields;\n this._inputRuntimeDefinition = PartialStateSchema;\n this._outputRuntimeDefinition = fields;\n } else if (isZodStateGraphArgsWithStateSchema(fields)) {\n const stateDef = this._metaRegistry.getChannelsForSchema(fields.state);\n const inputDef =\n fields.input != null\n ? this._metaRegistry.getChannelsForSchema(fields.input)\n : stateDef;\n const outputDef =\n fields.output != null\n ? this._metaRegistry.getChannelsForSchema(fields.output)\n : stateDef;\n\n this._schemaDefinition = stateDef;\n this._schemaRuntimeDefinition = fields.state;\n\n this._inputDefinition = inputDef as I;\n this._inputRuntimeDefinition = fields.input ?? PartialStateSchema;\n\n this._outputDefinition = outputDef as O;\n this._outputRuntimeDefinition = fields.output ?? fields.state;\n } else if (isInteropZodObject(fields)) {\n const stateDef = this._metaRegistry.getChannelsForSchema(fields);\n\n this._schemaDefinition = stateDef;\n this._schemaRuntimeDefinition = fields;\n\n this._inputDefinition = stateDef as I;\n this._inputRuntimeDefinition = PartialStateSchema;\n\n this._outputDefinition = stateDef as O;\n this._outputRuntimeDefinition = fields;\n } else if (\n isStateGraphArgsWithInputOutputSchemas<\n SD extends StateDefinition ? SD : never,\n O extends StateDefinition ? O : never\n >(fields)\n ) {\n this._schemaDefinition = fields.input.spec;\n this._inputDefinition = fields.input.spec as unknown as I;\n this._outputDefinition = fields.output.spec;\n } else if (isStateGraphArgsWithStateSchema(fields)) {\n this._schemaDefinition = fields.stateSchema.spec;\n this._inputDefinition = (fields.input?.spec ??\n this._schemaDefinition) as I;\n this._outputDefinition = (fields.output?.spec ??\n this._schemaDefinition) as O;\n } else if (isStateDefinition(fields) || isAnnotationRoot(fields)) {\n const spec = isAnnotationRoot(fields) ? fields.spec : fields;\n this._schemaDefinition = spec;\n } else if (isStateGraphArgs(fields)) {\n const spec = _getChannels(fields.channels);\n this._schemaDefinition = spec;\n } else {\n throw new StateGraphInputError();\n }\n\n this._inputDefinition ??= this._schemaDefinition as I;\n this._outputDefinition ??= this._schemaDefinition as O;\n\n this._addSchema(this._schemaDefinition);\n this._addSchema(this._inputDefinition);\n this._addSchema(this._outputDefinition);\n\n function isOptions(options: unknown): options is {\n context?: C | AnnotationRoot<ToStateDefinition<C>>;\n input?: I | AnnotationRoot<ToStateDefinition<I>>;\n output?: O | AnnotationRoot<ToStateDefinition<O>>;\n interrupt?: InterruptType;\n writer?: WriterType;\n nodes?: N[];\n } {\n return (\n typeof options === \"object\" &&\n options != null &&\n !(\"spec\" in options) &&\n !isInteropZodObject(options)\n );\n }\n\n // Handle runtime config options\n if (isOptions(contextSchema)) {\n if (isInteropZodObject(contextSchema.context)) {\n this._configRuntimeSchema = contextSchema.context;\n }\n this._interrupt = contextSchema.interrupt as InterruptType;\n this._writer = contextSchema.writer as WriterType;\n } else if (isInteropZodObject(contextSchema)) {\n this._configRuntimeSchema = contextSchema;\n }\n }\n\n get allEdges(): Set<[string, string]> {\n return new Set([\n ...this.edges,\n ...Array.from(this.waitingEdges).flatMap(([starts, end]) =>\n starts.map((start) => [start, end] as [string, string])\n ),\n ]);\n }\n\n _addSchema(stateDefinition: StateDefinitionInit) {\n if (this._schemaDefinitions.has(stateDefinition)) {\n return;\n }\n // TODO: Support managed values\n this._schemaDefinitions.set(stateDefinition, stateDefinition);\n for (const [key, val] of Object.entries(stateDefinition)) {\n let channel;\n if (typeof val === \"function\") {\n channel = val();\n } else {\n channel = val;\n }\n if (this.channels[key] !== undefined) {\n if (!this.channels[key].equals(channel)) {\n if (channel.lc_graph_name !== \"LastValue\") {\n throw new Error(\n `Channel \"${key}\" already exists with a different type.`\n );\n }\n }\n } else {\n this.channels[key] = channel;\n }\n }\n }\n\n override addNode<\n K extends string,\n NodeMap extends Record<K, NodeAction<S, U, C, InterruptType, WriterType>>\n >(\n nodes: NodeMap\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<\n NodeReturnType,\n {\n [key in keyof NodeMap]: NodeMap[key] extends NodeAction<\n S,\n infer U,\n C,\n InterruptType,\n WriterType\n >\n ? U\n : never;\n }\n >\n >;\n\n override addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(\n nodes:\n | [\n key: K,\n action: NodeAction<\n NodeInput,\n NodeOutput,\n C,\n InterruptType,\n WriterType\n >,\n options?: StateGraphAddNodeOptions\n ][]\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n\n override addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n\n override addNode<K extends string, NodeInput = S>(\n key: K,\n action: NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ): StateGraph<SD, S, U, N | K, I, O, C, NodeReturnType>;\n\n override addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(\n ...args:\n | [\n key: K,\n action: NodeAction<\n NodeInput,\n NodeOutput,\n C,\n InterruptType,\n WriterType\n >,\n options?: StateGraphAddNodeOptions\n ]\n | [\n nodes:\n | Record<K, NodeAction<NodeInput, U, C, InterruptType, WriterType>>\n | [\n key: K,\n action: NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ][]\n ]\n ): StateGraph<SD, S, U, N | K, I, O, C> {\n function isMultipleNodes(\n args: unknown[]\n ): args is [\n nodes:\n | Record<K, NodeAction<NodeInput, U, C, InterruptType, WriterType>>\n | [\n key: K,\n action: NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n options?: AddNodeOptions\n ][]\n ] {\n return args.length >= 1 && typeof args[0] !== \"string\";\n }\n\n const nodes = (\n isMultipleNodes(args) // eslint-disable-line no-nested-ternary\n ? Array.isArray(args[0])\n ? args[0]\n : Object.entries(args[0]).map(([key, action]) => [key, action])\n : [[args[0], args[1], args[2]]]\n ) as [\n K,\n NodeAction<NodeInput, U, C, InterruptType, WriterType>,\n StateGraphAddNodeOptions | undefined\n ][];\n\n if (nodes.length === 0) {\n throw new Error(\"No nodes provided in `addNode`\");\n }\n\n for (const [key, action, options] of nodes) {\n if (key in this.channels) {\n throw new Error(\n `${key} is already being used as a state attribute (a.k.a. a channel), cannot also be used as a node name.`\n );\n }\n\n for (const reservedChar of [\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CHECKPOINT_NAMESPACE_END,\n ]) {\n if (key.includes(reservedChar)) {\n throw new Error(\n `\"${reservedChar}\" is a reserved character and is not allowed in node names.`\n );\n }\n }\n this.warnIfCompiled(\n `Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`\n );\n\n if (key in this.nodes) {\n throw new Error(`Node \\`${key}\\` already present.`);\n }\n if (key === END || key === START) {\n throw new Error(`Node \\`${key}\\` is reserved.`);\n }\n\n let inputSpec = this._schemaDefinition;\n if (options?.input !== undefined) {\n if (isInteropZodObject(options.input)) {\n inputSpec = this._metaRegistry.getChannelsForSchema(options.input);\n } else if (options.input.spec !== undefined) {\n inputSpec = options.input.spec;\n }\n }\n if (inputSpec !== undefined) {\n this._addSchema(inputSpec);\n }\n\n let runnable;\n if (Runnable.isRunnable(action)) {\n runnable = action;\n } else if (typeof action === \"function\") {\n runnable = new RunnableCallable({\n func: action,\n name: key,\n trace: false,\n });\n } else {\n runnable = _coerceToRunnable(action);\n }\n\n let cachePolicy = options?.cachePolicy;\n if (typeof cachePolicy === \"boolean\") {\n cachePolicy = cachePolicy ? {} : undefined;\n }\n\n const nodeSpec: StateGraphNodeSpec<S, U> = {\n runnable: runnable as unknown as Runnable<S, U>,\n retryPolicy: options?.retryPolicy,\n cachePolicy,\n metadata: options?.metadata,\n input: inputSpec ?? this._schemaDefinition,\n subgraphs: isPregelLike(runnable)\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [runnable as any]\n : options?.subgraphs,\n ends: options?.ends,\n defer: options?.defer,\n };\n\n this.nodes[key as unknown as N] = nodeSpec;\n }\n\n return this as StateGraph<SD, S, U, N | K, I, O, C>;\n }\n\n override addEdge(\n startKey: typeof START | N | N[],\n endKey: N | typeof END\n ): this {\n if (typeof startKey === \"string\") {\n return super.addEdge(startKey, endKey);\n }\n\n if (this.compiled) {\n console.warn(\n \"Adding an edge to a graph that has already been compiled. This will \" +\n \"not be reflected in the compiled graph.\"\n );\n }\n\n for (const start of startKey) {\n if (start === END) {\n throw new Error(\"END cannot be a start node\");\n }\n if (!Object.keys(this.nodes).some((node) => node === start)) {\n throw new Error(`Need to add a node named \"${start}\" first`);\n }\n }\n if (endKey === END) {\n throw new Error(\"END cannot be an end node\");\n }\n if (!Object.keys(this.nodes).some((node) => node === endKey)) {\n throw new Error(`Need to add a node named \"${endKey}\" first`);\n }\n\n this.waitingEdges.add([startKey, endKey]);\n\n return this;\n }\n\n addSequence<K extends string, NodeInput = S, NodeOutput extends U = U>(\n nodes: [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>,\n options?: StateGraphAddNodeOptions\n ][]\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n\n addSequence<\n K extends string,\n NodeMap extends Record<K, NodeAction<S, U, C, InterruptType, WriterType>>\n >(\n nodes: NodeMap\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<\n NodeReturnType,\n {\n [key in keyof NodeMap]: NodeMap[key] extends NodeAction<\n S,\n infer U,\n C,\n InterruptType,\n WriterType\n >\n ? U\n : never;\n }\n >\n >;\n\n addSequence<K extends string, NodeInput = S, NodeOutput extends U = U>(\n nodes:\n | [\n key: K,\n action: NodeAction<\n NodeInput,\n NodeOutput,\n C,\n InterruptType,\n WriterType\n >,\n options?: StateGraphAddNodeOptions\n ][]\n | Record<\n K,\n NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>\n >\n ): StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n > {\n const parsedNodes = Array.isArray(nodes) ? nodes : Object.entries(nodes);\n\n if (parsedNodes.length === 0) {\n throw new Error(\"Sequence requires at least one node.\");\n }\n\n let previousNode: N | undefined;\n for (const [key, action, options] of parsedNodes) {\n if (key in this.nodes) {\n throw new Error(\n `Node names must be unique: node with the name \"${key}\" already exists.`\n );\n }\n\n const validKey = key as unknown as N;\n this.addNode(\n validKey,\n action as NodeAction<S, U, C, InterruptType, WriterType>,\n options\n );\n if (previousNode != null) {\n this.addEdge(previousNode, validKey);\n }\n\n previousNode = validKey;\n }\n\n return this as StateGraph<\n SD,\n S,\n U,\n N | K,\n I,\n O,\n C,\n MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>\n >;\n }\n\n override compile({\n checkpointer,\n store,\n cache,\n interruptBefore,\n interruptAfter,\n name,\n description,\n }: {\n checkpointer?: BaseCheckpointSaver | boolean;\n store?: BaseStore;\n cache?: BaseCache;\n interruptBefore?: N[] | All;\n interruptAfter?: N[] | All;\n name?: string;\n description?: string;\n } = {}): CompiledStateGraph<\n Prettify<S>,\n Prettify<U>,\n N,\n I,\n O,\n C,\n NodeReturnType,\n InterruptType,\n WriterType\n > {\n // validate the graph\n this.validate([\n ...(Array.isArray(interruptBefore) ? interruptBefore : []),\n ...(Array.isArray(interruptAfter) ? interruptAfter : []),\n ]);\n\n // prepare output channels\n const outputKeys = Object.keys(\n this._schemaDefinitions.get(this._outputDefinition)\n );\n const outputChannels =\n outputKeys.length === 1 && outputKeys[0] === ROOT ? ROOT : outputKeys;\n\n const streamKeys = Object.keys(this.channels);\n const streamChannels =\n streamKeys.length === 1 && streamKeys[0] === ROOT ? ROOT : streamKeys;\n\n const userInterrupt = this._interrupt;\n // create empty compiled graph\n const compiled = new CompiledStateGraph<\n S,\n U,\n N,\n I,\n O,\n C,\n NodeReturnType,\n InterruptType,\n WriterType\n >({\n builder: this,\n checkpointer,\n interruptAfter,\n interruptBefore,\n autoValidate: false,\n nodes: {} as Record<N | typeof START, PregelNode<S, U>>,\n channels: {\n ...this.channels,\n [START]: new EphemeralValue(),\n } as Record<N | typeof START | typeof END | string, BaseChannel>,\n inputChannels: START,\n outputChannels,\n streamChannels,\n streamMode: \"updates\",\n store,\n cache,\n name,\n description,\n userInterrupt,\n });\n\n // attach nodes, edges and branches\n compiled.attachNode(START);\n for (const [key, node] of Object.entries<StateGraphNodeSpec<S, U>>(\n this.nodes\n )) {\n compiled.attachNode(key as N, node);\n }\n compiled.attachBranch(START, SELF, _getControlBranch() as Branch<S, N>, {\n withReader: false,\n });\n for (const [key] of Object.entries<StateGraphNodeSpec<S, U>>(this.nodes)) {\n compiled.attachBranch(\n key as N,\n SELF,\n _getControlBranch() as Branch<S, N>,\n {\n withReader: false,\n }\n );\n }\n for (const [start, end] of this.edges) {\n compiled.attachEdge(start, end);\n }\n for (const [starts, end] of this.waitingEdges) {\n compiled.attachEdge(starts, end);\n }\n for (const [start, branches] of Object.entries(this.branches)) {\n for (const [name, branch] of Object.entries(branches)) {\n compiled.attachBranch(start as N, name, branch);\n }\n }\n\n return compiled.validate();\n }\n}\n\nfunction _getChannels<Channels extends Record<string, unknown> | unknown>(\n schema: StateGraphArgs<Channels>[\"channels\"]\n): Record<string, BaseChannel> {\n const channels: Record<string, BaseChannel> = {};\n for (const [name, val] of Object.entries(schema)) {\n if (name === ROOT) {\n channels[name] = getChannel<Channels>(val as SingleReducer<Channels>);\n } else {\n const key = name as keyof Channels;\n channels[name] = getChannel<Channels[typeof key]>(\n val as SingleReducer<Channels[typeof key]>\n );\n }\n }\n return channels;\n}\n\n/**\n * Final result from building and compiling a {@link StateGraph}.\n * Should not be instantiated directly, only using the StateGraph `.compile()`\n * instance method.\n */\nexport class CompiledStateGraph<\n S,\n U,\n N extends string = typeof START,\n I extends StateDefinitionInit = StateDefinition,\n O extends StateDefinitionInit = StateDefinition,\n C extends StateDefinitionInit = StateDefinition,\n NodeReturnType = unknown,\n InterruptType = unknown,\n WriterType = unknown\n> extends CompiledGraph<\n N,\n S,\n U,\n ExtractStateType<C>,\n ExtractUpdateType<I, ExtractStateType<I>>,\n ExtractStateType<O>,\n NodeReturnType,\n CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>,\n InferWriterType<WriterType>\n> {\n declare builder: StateGraph<unknown, S, U, N, I, O, C, NodeReturnType>;\n\n /**\n * The description of the compiled graph.\n * This is used by the supervisor agent to describe the handoff to the agent.\n */\n description?: string;\n\n /** @internal */\n _metaRegistry: SchemaMetaRegistry = schemaMetaRegistry;\n\n constructor({\n description,\n ...rest\n }: { description?: string } & ConstructorParameters<\n typeof CompiledGraph<\n N,\n S,\n U,\n ExtractStateType<C>,\n ExtractUpdateType<I, ExtractStateType<I>>,\n ExtractStateType<O>,\n NodeReturnType,\n CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>,\n InferWriterType<WriterType>\n >\n >[0]) {\n super(rest);\n this.description = description;\n }\n\n attachNode(key: typeof START, node?: never): void;\n\n attachNode(key: N, node: StateGraphNodeSpec<S, U>): void;\n\n attachNode(key: N | typeof START, node?: StateGraphNodeSpec<S, U>): void {\n let outputKeys: string[];\n if (key === START) {\n // Get input schema keys excluding managed values\n outputKeys = Object.entries(\n this.builder._schemaDefinitions.get(this.builder._inputDefinition)\n ).map(([k]) => k);\n } else {\n outputKeys = Object.keys(this.builder.channels);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _getRoot(input: unknown): [string, any][] | null {\n if (isCommand(input)) {\n if (input.graph === Command.PARENT) {\n return null;\n }\n return input._updateAsTuples();\n } else if (\n Array.isArray(input) &&\n input.length > 0 &&\n input.some((i) => isCommand(i))\n ) {\n const updates: [string, unknown][] = [];\n for (const i of input) {\n if (isCommand(i)) {\n if (i.graph === Command.PARENT) {\n continue;\n }\n updates.push(...i._updateAsTuples());\n } else {\n updates.push([ROOT, i]);\n }\n }\n return updates;\n } else if (input != null) {\n return [[ROOT, input]];\n }\n return null;\n }\n\n // to avoid name collision below\n const nodeKey = key;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _getUpdates(input: U): [string, any][] | null {\n if (!input) {\n return null;\n } else if (isCommand(input)) {\n if (input.graph === Command.PARENT) {\n return null;\n }\n return input._updateAsTuples().filter(([k]) => outputKeys.includes(k));\n } else if (\n Array.isArray(input) &&\n input.length > 0 &&\n input.some(isCommand)\n ) {\n const updates: [string, unknown][] = [];\n for (const item of input) {\n if (isCommand(item)) {\n if (item.graph === Command.PARENT) {\n continue;\n }\n updates.push(\n ...item._updateAsTuples().filter(([k]) => outputKeys.includes(k))\n );\n } else {\n const itemUpdates = _getUpdates(item);\n if (itemUpdates) {\n updates.push(...(itemUpdates ?? []));\n }\n }\n }\n return updates;\n } else if (typeof input === \"object\" && !Array.isArray(input)) {\n return Object.entries(input).filter(([k]) => outputKeys.includes(k));\n } else {\n const typeofInput = Array.isArray(input) ? \"array\" : typeof input;\n throw new InvalidUpdateError(\n `Expected node \"${nodeKey.toString()}\" to return an object or an array containing at least one Command object, received ${typeofInput}`,\n {\n lc_error_code: \"INVALID_GRAPH_NODE_RETURN_VALUE\",\n }\n );\n }\n }\n\n const stateWriteEntries: (ChannelWriteTupleEntry | ChannelWriteEntry)[] = [\n {\n value: PASSTHROUGH,\n mapper: new RunnableCallable({\n func:\n outputKeys.length && outputKeys[0] === ROOT\n ? _getRoot\n : _getUpdates,\n trace: false,\n recurse: false,\n }),\n },\n ];\n\n // add node and output channel\n if (key === START) {\n this.nodes[key] = new PregelNode<S, U>({\n tags: [TAG_HIDDEN],\n triggers: [START],\n channels: [START],\n writers: [new ChannelWrite(stateWriteEntries, [TAG_HIDDEN])],\n });\n } else {\n const inputDefinition = node?.input ?? this.builder._schemaDefinition;\n const inputValues = Object.fromEntries(\n Object.keys(this.builder._schemaDefinitions.get(inputDefinition)).map(\n (k) => [k, k]\n )\n );\n const isSingleInput =\n Object.keys(inputValues).length === 1 && ROOT in inputValues;\n const branchChannel = `branch:to:${key}` as string | N;\n this.channels[branchChannel] = node?.defer\n ? new LastValueAfterFinish()\n : new EphemeralValue(false);\n this.nodes[key] = new PregelNode<S, U>({\n triggers: [branchChannel],\n // read state keys\n channels: isSingleInput ? Object.keys(inputValues) : inputValues,\n // publish to state keys\n writers: [new ChannelWrite(stateWriteEntries, [TAG_HIDDEN])],\n mapper: isSingleInput\n ? undefined\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (input: Record<string, any>) => {\n return Object.fromEntries(\n Object.entries(input).filter(([k]) => k in inputValues)\n );\n },\n bound: node?.runnable,\n metadata: node?.metadata,\n retryPolicy: node?.retryPolicy,\n cachePolicy: node?.cachePolicy,\n subgraphs: node?.subgraphs,\n ends: node?.ends,\n });\n }\n }\n\n attachEdge(starts: N | N[] | \"__start__\", end: N | \"__end__\"): void {\n if (end === END) return;\n if (typeof starts === \"string\") {\n this.nodes[starts].writers.push(\n new ChannelWrite(\n [{ channel: `branch:to:${end}`, value: null }],\n [TAG_HIDDEN]\n )\n );\n } else if (Array.isArray(starts)) {\n const channelName = `join:${starts.join(\"+\")}:${end}`;\n // register channel\n this.channels[channelName as string | N] = this.builder.nodes[end].defer\n ? new NamedBarrierValueAfterFinish(new Set(starts))\n : new NamedBarrierValue(new Set(starts));\n // subscribe to channel\n this.nodes[end].triggers.push(channelName);\n // publish to channel\n for (const start of starts) {\n this.nodes[start].writers.push(\n new ChannelWrite(\n [{ channel: channelName, value: start }],\n [TAG_HIDDEN]\n )\n );\n }\n }\n }\n\n attachBranch(\n start: N | typeof START,\n _: string,\n branch: Branch<S, N>,\n options: { withReader?: boolean } = { withReader: true }\n ): void {\n const branchWriter = async (\n packets: (string | Send)[],\n config: LangGraphRunnableConfig\n ) => {\n const filteredPackets = packets.filter((p) => p !== END);\n if (!filteredPackets.length) return;\n\n const writes: (ChannelWriteEntry | Send)[] = filteredPackets.map((p) => {\n if (_isSend(p)) return p;\n return { channel: p === END ? p : `branch:to:${p}`, value: start };\n });\n await ChannelWrite.doWrite(\n { ...config, tags: (config.tags ?? []).concat([TAG_HIDDEN]) },\n writes\n );\n };\n // attach branch publisher\n this.nodes[start].writers.push(\n branch.run(\n branchWriter,\n // reader\n options.withReader\n ? (config) =>\n ChannelRead.doRead<S>(\n config,\n this.streamChannels ?? this.outputChannels,\n true\n )\n : undefined\n )\n );\n }\n\n protected async _validateInput(\n input: ExtractUpdateType<I, ExtractStateType<I>>\n ): Promise<ExtractUpdateType<I, ExtractStateType<I>>> {\n if (input == null) return input;\n\n const inputDef = this.builder._inputRuntimeDefinition;\n const schemaDef = this.builder._schemaRuntimeDefinition;\n\n // Handle StateSchema validation\n if (StateSchema.isInstance(schemaDef)) {\n if (isCommand(input)) {\n const parsedInput = input;\n if (input.update) {\n parsedInput.update = await schemaDef.validateInput(\n Array.isArray(input.update)\n ? Object.fromEntries(input.update)\n : input.update\n );\n }\n return parsedInput;\n }\n return await schemaDef.validateInput(input);\n }\n\n // Handle InteropZodObject validation\n const schema = (() => {\n const apply = (schema: InteropZodObject | undefined) => {\n if (schema == null) return undefined;\n return this._metaRegistry.getExtendedChannelSchemas(schema, {\n withReducerSchema: true,\n });\n };\n\n if (isInteropZodObject(inputDef)) return apply(inputDef);\n if (inputDef === PartialStateSchema) {\n if (isInteropZodObject(schemaDef)) {\n return interopZodObjectPartial(apply(schemaDef)!);\n }\n return undefined;\n }\n return undefined;\n })();\n\n if (isCommand(input)) {\n const parsedInput = input;\n if (input.update && schema != null)\n parsedInput.update = interopParse(schema, input.update);\n return parsedInput;\n }\n if (schema != null) return interopParse(schema, input);\n return input;\n }\n\n public isInterrupted(input: unknown): input is {\n [INTERRUPT]: Interrupt<InferInterruptInputType<InterruptType>>[];\n } {\n return isInterrupted(input);\n }\n\n protected async _validateContext(\n config: Partial<Record<string, unknown>>\n ): Promise<Partial<Record<string, unknown>>> {\n const configSchema = this.builder._configRuntimeSchema;\n if (isInteropZodObject(configSchema)) interopParse(configSchema, config);\n return config;\n }\n}\n\nfunction isStateDefinition(obj: unknown): obj is StateDefinition {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n !Array.isArray(obj) &&\n Object.keys(obj).length > 0 &&\n Object.values(obj).every((v) => typeof v === \"function\" || isBaseChannel(v))\n );\n}\n\nfunction isAnnotationRoot<SD extends StateDefinition>(\n obj: unknown | AnnotationRoot<SD>\n): obj is AnnotationRoot<SD> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"lc_graph_name\" in obj &&\n obj.lc_graph_name === \"AnnotationRoot\"\n );\n}\n\nfunction isStateGraphArgs<Channels extends object | unknown>(\n obj: unknown | StateGraphArgs<Channels>\n): obj is StateGraphArgs<Channels> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n (obj as StateGraphArgs<Channels>).channels !== undefined\n );\n}\n\nfunction isStateGraphArgsWithStateSchema<\n SD extends StateDefinition,\n I extends StateDefinition,\n O extends StateDefinition\n>(\n obj: unknown | StateGraphArgsWithStateSchema<SD, I, O>\n): obj is StateGraphArgsWithStateSchema<SD, I, O> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n (obj as StateGraphArgsWithStateSchema<SD, I, O>).stateSchema !== undefined\n );\n}\n\nfunction isStateGraphArgsWithInputOutputSchemas<\n SD extends StateDefinition,\n O extends StateDefinition\n>(\n obj: unknown | StateGraphArgsWithInputOutputSchemas<SD, O>\n): obj is StateGraphArgsWithInputOutputSchemas<SD, O> {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (obj as any).stateSchema === undefined &&\n (obj as StateGraphArgsWithInputOutputSchemas<SD, O>).input !== undefined &&\n (obj as StateGraphArgsWithInputOutputSchemas<SD, O>).output !== undefined\n );\n}\n\nfunction isZodStateGraphArgsWithStateSchema<\n SD extends InteropZodObject,\n I extends InteropZodObject,\n O extends InteropZodObject\n>(value: unknown): value is ZodStateGraphArgsWithStateSchema<SD, I, O> {\n if (typeof value !== \"object\" || value == null) {\n return false;\n }\n\n if (!(\"state\" in value) || !isInteropZodObject(value.state)) {\n return false;\n }\n\n if (\"input\" in value && !isInteropZodObject(value.input)) {\n return false;\n }\n\n if (\"output\" in value && !isInteropZodObject(value.output)) {\n return false;\n }\n\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _controlBranch(value: any): (string | Send)[] {\n if (_isSend(value)) {\n return [value];\n }\n const commands = [];\n if (isCommand(value)) {\n commands.push(value);\n } else if (Array.isArray(value)) {\n commands.push(...value.filter(isCommand));\n }\n const destinations: (string | Send)[] = [];\n\n for (const command of commands) {\n if (command.graph === Command.PARENT) {\n throw new ParentCommand(command);\n }\n\n if (_isSend(command.goto)) {\n destinations.push(command.goto);\n } else if (typeof command.goto === \"string\") {\n destinations.push(command.goto);\n } else {\n if (Array.isArray(command.goto)) {\n destinations.push(...command.goto);\n }\n }\n }\n return destinations;\n}\n\nfunction _getControlBranch() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const CONTROL_BRANCH_PATH = new RunnableCallable<any, (string | Send)[]>({\n func: _controlBranch,\n tags: [TAG_HIDDEN],\n trace: false,\n recurse: false,\n name: \"<control_branch>\",\n });\n return new Branch({\n path: CONTROL_BRANCH_PATH,\n });\n}\n"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { BaseChannel } from "../channels/base.cjs";
2
- import { InteropZodToStateDefinition, SchemaMetaRegistry } from "./zod/meta.cjs";
2
+ import { SchemaMetaRegistry } from "./zod/meta.cjs";
3
3
  import { RunnableLike, Runtime } from "../pregel/runnable_types.cjs";
4
- import { AnnotationRoot, SingleReducer, StateDefinition, StateType, UpdateType } from "./annotation.cjs";
4
+ import { AnnotationRoot, SingleReducer, StateDefinition, StateType } from "./annotation.cjs";
5
5
  import { CachePolicy, RetryPolicy } from "../pregel/utils/index.cjs";
6
6
  import { Command, CommandInstance, END, INTERRUPT, Interrupt, START } from "../constants.cjs";
7
7
  import { AddNodeOptions, Branch, CompiledGraph, Graph, NodeSpec } from "./graph.cjs";
8
8
  import { InferInterruptInputType, InferInterruptResumeType } from "../interrupt.cjs";
9
9
  import { InferWriterType } from "../writer.cjs";
10
+ import { AnyStateSchema } from "../state/schema.cjs";
11
+ import { ExtractStateType, ExtractUpdateType, StateDefinitionInit, ToStateDefinition } from "./types.cjs";
10
12
  import { All, BaseCache, BaseCheckpointSaver, BaseStore } from "@langchain/langgraph-checkpoint";
11
13
  import { InteropZodObject } from "@langchain/core/utils/types";
12
14
 
@@ -38,15 +40,14 @@ type StateGraphArgsWithInputOutputSchemas<SD extends StateDefinition, O extends
38
40
  input: AnnotationRoot<SD>;
39
41
  output: AnnotationRoot<O>;
40
42
  };
41
- type ZodStateGraphArgsWithStateSchema<SD extends InteropZodObject, I extends SDZod, O extends SDZod> = {
43
+ type ZodStateGraphArgsWithStateSchema<SD extends InteropZodObject, I extends StateDefinitionInit, O extends StateDefinitionInit> = {
42
44
  state: SD;
43
45
  input?: I;
44
46
  output?: O;
45
47
  };
46
- type SDZod = StateDefinition | InteropZodObject;
47
- type ToStateDefinition<T> = T extends InteropZodObject ? InteropZodToStateDefinition<T> : T extends StateDefinition ? T : never;
48
- type NodeAction<S, U, C extends SDZod, InterruptType, WriterType> = RunnableLike<S, U extends object ? U & Record<string, any> : U, Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>>;
49
- type StrictNodeAction<S, U, C extends SDZod, Nodes extends string, InterruptType, WriterType> = RunnableLike<Prettify<S>, U | Command<InferInterruptResumeType<InterruptType>, U & Record<string, any>, Nodes>, Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>>;
48
+ type ExtractStateDefinition<T> = T extends AnyStateSchema ? T : T extends StateDefinitionInit ? ToStateDefinition<T> : StateDefinition;
49
+ type NodeAction<S, U, C extends StateDefinitionInit, InterruptType, WriterType> = RunnableLike<S, U extends object ? U & Record<string, any> : U, Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>>;
50
+ type StrictNodeAction<S, U, C extends StateDefinitionInit, Nodes extends string, InterruptType, WriterType> = RunnableLike<Prettify<S>, U | Command<InferInterruptResumeType<InterruptType>, U & Record<string, any>, Nodes>, Runtime<StateType<ToStateDefinition<C>>, InterruptType, WriterType>>;
50
51
  declare const PartialStateSchema: unique symbol;
51
52
  type PartialStateSchema = typeof PartialStateSchema;
52
53
  type MergeReturnType<Prev, Curr> = Prev & Curr extends infer T ? { [K in keyof T]: T[K] } & unknown : never;
@@ -113,21 +114,21 @@ type Prettify<T> = { [K in keyof T]: T[K] } & {};
113
114
  * // }
114
115
  * ```
115
116
  */
116
- declare class StateGraph<SD extends SDZod | unknown, S = (SD extends SDZod ? StateType<ToStateDefinition<SD>> : SD), U = (SD extends SDZod ? UpdateType<ToStateDefinition<SD>> : Partial<S>), N extends string = typeof START, I extends SDZod = (SD extends SDZod ? ToStateDefinition<SD> : StateDefinition), O extends SDZod = (SD extends SDZod ? ToStateDefinition<SD> : StateDefinition), C extends SDZod = StateDefinition, NodeReturnType = unknown, InterruptType = unknown, WriterType = unknown> extends Graph<N, S, U, StateGraphNodeSpec<S, U>, ToStateDefinition<C>> {
117
+ declare class StateGraph<SD extends StateDefinitionInit | unknown, S = ExtractStateType<SD>, U = ExtractUpdateType<SD, S>, N extends string = typeof START, I extends StateDefinitionInit = ExtractStateDefinition<SD>, O extends StateDefinitionInit = ExtractStateDefinition<SD>, C extends StateDefinitionInit = StateDefinition, NodeReturnType = unknown, InterruptType = unknown, WriterType = unknown> extends Graph<N, S, U, StateGraphNodeSpec<S, U>, ToStateDefinition<C>> {
117
118
  channels: Record<string, BaseChannel>;
118
119
  waitingEdges: Set<[N[], N]>;
119
120
  /** @internal */
120
121
  _schemaDefinition: StateDefinition;
121
122
  /** @internal */
122
- _schemaRuntimeDefinition: InteropZodObject | undefined;
123
+ _schemaRuntimeDefinition: InteropZodObject | AnyStateSchema | undefined;
123
124
  /** @internal */
124
125
  _inputDefinition: I;
125
126
  /** @internal */
126
- _inputRuntimeDefinition: InteropZodObject | PartialStateSchema | undefined;
127
+ _inputRuntimeDefinition: InteropZodObject | AnyStateSchema | PartialStateSchema | undefined;
127
128
  /** @internal */
128
129
  _outputDefinition: O;
129
130
  /** @internal */
130
- _outputRuntimeDefinition: InteropZodObject | undefined;
131
+ _outputRuntimeDefinition: InteropZodObject | AnyStateSchema | undefined;
131
132
  /**
132
133
  * Map schemas to managed values
133
134
  * @internal
@@ -152,6 +153,14 @@ declare class StateGraph<SD extends SDZod | unknown, S = (SD extends SDZod ? Sta
152
153
  writer?: WriterType;
153
154
  nodes?: N[];
154
155
  });
156
+ constructor(state: SD extends AnyStateSchema ? SD : never, options?: {
157
+ context?: C | AnnotationRoot<ToStateDefinition<C>>;
158
+ input?: I | AnnotationRoot<ToStateDefinition<I>>;
159
+ output?: O | AnnotationRoot<ToStateDefinition<O>>;
160
+ interrupt?: InterruptType;
161
+ writer?: WriterType;
162
+ nodes?: N[];
163
+ });
155
164
  constructor(state: SD extends InteropZodObject ? SD : never, options?: {
156
165
  context?: C | AnnotationRoot<ToStateDefinition<C>>;
157
166
  input?: I | AnnotationRoot<ToStateDefinition<I>>;
@@ -166,7 +175,7 @@ declare class StateGraph<SD extends SDZod | unknown, S = (SD extends SDZod ? Sta
166
175
  constructor(fields: SD extends StateDefinition ? SD | StateGraphArgs<S> : StateGraphArgs<S>, contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>);
167
176
  constructor(fields: SD extends InteropZodObject ? SD | ZodStateGraphArgsWithStateSchema<SD, I, O> : never, contextSchema?: C | AnnotationRoot<ToStateDefinition<C>>);
168
177
  get allEdges(): Set<[string, string]>;
169
- _addSchema(stateDefinition: SDZod): void;
178
+ _addSchema(stateDefinition: StateDefinitionInit): void;
170
179
  addNode<K extends string, NodeMap extends Record<K, NodeAction<S, U, C, InterruptType, WriterType>>>(nodes: NodeMap): StateGraph<SD, S, U, N | K, I, O, C, MergeReturnType<NodeReturnType, { [key in keyof NodeMap]: NodeMap[key] extends NodeAction<S, infer U, C, InterruptType, WriterType> ? U : never }>>;
171
180
  addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(nodes: [key: K, action: NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>, options?: StateGraphAddNodeOptions][]): StateGraph<SD, S, U, N | K, I, O, C, MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>>;
172
181
  addNode<K extends string, NodeInput = S, NodeOutput extends U = U>(key: K, action: NodeAction<NodeInput, NodeOutput, C, InterruptType, WriterType>, options?: StateGraphAddNodeOptions): StateGraph<SD, S, U, N | K, I, O, C, MergeReturnType<NodeReturnType, { [key in K]: NodeOutput }>>;
@@ -197,7 +206,7 @@ declare class StateGraph<SD extends SDZod | unknown, S = (SD extends SDZod ? Sta
197
206
  * Should not be instantiated directly, only using the StateGraph `.compile()`
198
207
  * instance method.
199
208
  */
200
- declare class CompiledStateGraph<S, U, N extends string = typeof START, I extends SDZod = StateDefinition, O extends SDZod = StateDefinition, C extends SDZod = StateDefinition, NodeReturnType = unknown, InterruptType = unknown, WriterType = unknown> extends CompiledGraph<N, S, U, StateType<ToStateDefinition<C>>, UpdateType<ToStateDefinition<I>>, StateType<ToStateDefinition<O>>, NodeReturnType, CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>, InferWriterType<WriterType>> {
209
+ declare class CompiledStateGraph<S, U, N extends string = typeof START, I extends StateDefinitionInit = StateDefinition, O extends StateDefinitionInit = StateDefinition, C extends StateDefinitionInit = StateDefinition, NodeReturnType = unknown, InterruptType = unknown, WriterType = unknown> extends CompiledGraph<N, S, U, ExtractStateType<C>, ExtractUpdateType<I, ExtractStateType<I>>, ExtractStateType<O>, NodeReturnType, CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>, InferWriterType<WriterType>> {
201
210
  builder: StateGraph<unknown, S, U, N, I, O, C, NodeReturnType>;
202
211
  /**
203
212
  * The description of the compiled graph.
@@ -211,14 +220,14 @@ declare class CompiledStateGraph<S, U, N extends string = typeof START, I extend
211
220
  ...rest
212
221
  }: {
213
222
  description?: string;
214
- } & ConstructorParameters<typeof CompiledGraph<N, S, U, StateType<ToStateDefinition<C>>, UpdateType<ToStateDefinition<I>>, StateType<ToStateDefinition<O>>, NodeReturnType, CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>, InferWriterType<WriterType>>>[0]);
223
+ } & ConstructorParameters<typeof CompiledGraph<N, S, U, ExtractStateType<C>, ExtractUpdateType<I, ExtractStateType<I>>, ExtractStateType<O>, NodeReturnType, CommandInstance<InferInterruptResumeType<InterruptType>, Prettify<U>, N>, InferWriterType<WriterType>>>[0]);
215
224
  attachNode(key: typeof START, node?: never): void;
216
225
  attachNode(key: N, node: StateGraphNodeSpec<S, U>): void;
217
226
  attachEdge(starts: N | N[] | "__start__", end: N | "__end__"): void;
218
227
  attachBranch(start: N | typeof START, _: string, branch: Branch<S, N>, options?: {
219
228
  withReader?: boolean;
220
229
  }): void;
221
- protected _validateInput(input: UpdateType<ToStateDefinition<I>>): Promise<UpdateType<ToStateDefinition<I>>>;
230
+ protected _validateInput(input: ExtractUpdateType<I, ExtractStateType<I>>): Promise<ExtractUpdateType<I, ExtractStateType<I>>>;
222
231
  isInterrupted(input: unknown): input is {
223
232
  [INTERRUPT]: Interrupt<InferInterruptInputType<InterruptType>>[];
224
233
  };