@langchain/langgraph 1.0.0-alpha.2 → 1.0.0-alpha.4

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 (95) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/graph/message.cjs +3 -4
  3. package/dist/graph/message.cjs.map +1 -1
  4. package/dist/graph/message.d.cts +2 -1
  5. package/dist/graph/message.d.cts.map +1 -1
  6. package/dist/graph/message.d.ts +2 -1
  7. package/dist/graph/message.d.ts.map +1 -1
  8. package/dist/graph/message.js +3 -4
  9. package/dist/graph/message.js.map +1 -1
  10. package/dist/graph/messages_annotation.d.cts +5 -4
  11. package/dist/graph/messages_annotation.d.cts.map +1 -1
  12. package/dist/graph/messages_annotation.d.ts +5 -4
  13. package/dist/graph/messages_annotation.d.ts.map +1 -1
  14. package/dist/graph/state.cjs +5 -1
  15. package/dist/graph/state.cjs.map +1 -1
  16. package/dist/graph/state.d.cts +6 -9
  17. package/dist/graph/state.d.cts.map +1 -1
  18. package/dist/graph/state.d.ts +6 -9
  19. package/dist/graph/state.d.ts.map +1 -1
  20. package/dist/graph/state.js +5 -1
  21. package/dist/graph/state.js.map +1 -1
  22. package/dist/graph/zod/zod-registry.cjs.map +1 -1
  23. package/dist/graph/zod/zod-registry.d.cts.map +1 -1
  24. package/dist/graph/zod/zod-registry.js.map +1 -1
  25. package/dist/interrupt.cjs.map +1 -1
  26. package/dist/interrupt.d.cts +10 -1
  27. package/dist/interrupt.d.cts.map +1 -1
  28. package/dist/interrupt.d.ts +10 -1
  29. package/dist/interrupt.d.ts.map +1 -1
  30. package/dist/interrupt.js.map +1 -1
  31. package/dist/prebuilt/agentName.cjs +8 -5
  32. package/dist/prebuilt/agentName.cjs.map +1 -1
  33. package/dist/prebuilt/agentName.js +8 -5
  34. package/dist/prebuilt/agentName.js.map +1 -1
  35. package/dist/prebuilt/agent_executor.d.cts +5 -4
  36. package/dist/prebuilt/agent_executor.d.cts.map +1 -1
  37. package/dist/prebuilt/agent_executor.d.ts +5 -4
  38. package/dist/prebuilt/agent_executor.d.ts.map +1 -1
  39. package/dist/prebuilt/react_agent_executor.d.cts +3 -2
  40. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -1
  41. package/dist/prebuilt/react_agent_executor.d.ts +3 -2
  42. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -1
  43. package/dist/prebuilt/tool_node.cjs +2 -2
  44. package/dist/prebuilt/tool_node.cjs.map +1 -1
  45. package/dist/prebuilt/tool_node.js +3 -3
  46. package/dist/prebuilt/tool_node.js.map +1 -1
  47. package/dist/pregel/index.cjs +40 -12
  48. package/dist/pregel/index.cjs.map +1 -1
  49. package/dist/pregel/index.d.cts +13 -4
  50. package/dist/pregel/index.d.cts.map +1 -1
  51. package/dist/pregel/index.d.ts +13 -4
  52. package/dist/pregel/index.d.ts.map +1 -1
  53. package/dist/pregel/index.js +41 -13
  54. package/dist/pregel/index.js.map +1 -1
  55. package/dist/pregel/stream.cjs +107 -0
  56. package/dist/pregel/stream.cjs.map +1 -1
  57. package/dist/pregel/stream.js +107 -1
  58. package/dist/pregel/stream.js.map +1 -1
  59. package/dist/pregel/types.cjs.map +1 -1
  60. package/dist/pregel/types.d.cts +15 -2
  61. package/dist/pregel/types.d.cts.map +1 -1
  62. package/dist/pregel/types.d.ts +15 -2
  63. package/dist/pregel/types.d.ts.map +1 -1
  64. package/dist/pregel/types.js.map +1 -1
  65. package/dist/writer.cjs.map +1 -1
  66. package/dist/writer.d.cts +3 -1
  67. package/dist/writer.d.cts.map +1 -1
  68. package/dist/writer.d.ts +3 -1
  69. package/dist/writer.d.ts.map +1 -1
  70. package/dist/writer.js.map +1 -1
  71. package/package.json +29 -32
  72. package/dist/ui/index.cjs +0 -4
  73. package/dist/ui/index.d.cts +0 -5
  74. package/dist/ui/index.d.ts +0 -5
  75. package/dist/ui/index.js +0 -3
  76. package/dist/ui/stream.cjs +0 -145
  77. package/dist/ui/stream.cjs.map +0 -1
  78. package/dist/ui/stream.d.cts +0 -25
  79. package/dist/ui/stream.d.cts.map +0 -1
  80. package/dist/ui/stream.d.ts +0 -25
  81. package/dist/ui/stream.d.ts.map +0 -1
  82. package/dist/ui/stream.js +0 -143
  83. package/dist/ui/stream.js.map +0 -1
  84. package/dist/ui/types.infer.d.cts +0 -53
  85. package/dist/ui/types.infer.d.cts.map +0 -1
  86. package/dist/ui/types.infer.d.ts +0 -53
  87. package/dist/ui/types.infer.d.ts.map +0 -1
  88. package/dist/ui/types.message.d.cts +0 -95
  89. package/dist/ui/types.message.d.cts.map +0 -1
  90. package/dist/ui/types.message.d.ts +0 -95
  91. package/dist/ui/types.message.d.ts.map +0 -1
  92. package/dist/ui/types.schema.d.cts +0 -228
  93. package/dist/ui/types.schema.d.cts.map +0 -1
  94. package/dist/ui/types.schema.d.ts +0 -228
  95. package/dist/ui/types.schema.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @langchain/langgraph
2
2
 
3
+ ## 1.0.0-alpha.4
4
+
5
+ ### Patch Changes
6
+
7
+ - c3f326d: Add support for defining multiple interrupts in StateGraph constructor. Interrupts from the map can be picked from the `Runtime` object, ensuring type-safety across multiple interrupts.
8
+
9
+ ## 1.0.0-alpha.3
10
+
11
+ ### Patch Changes
12
+
13
+ - 05619e2: Add `stream.encoding` option to emit LangGraph API events as Server-Sent Events. This allows for sending events through the wire by piping the stream to a `Response` object.
14
+ - 14cb042: Fix `stateKey` property in `pushMessage` being ignored when RunnableConfig is automatically inherited
15
+
3
16
  ## 1.0.0-alpha.2
4
17
 
5
18
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_config = require('../pregel/utils/config.cjs');
2
3
  const require_state = require('./state.cjs');
3
- const __langchain_core_singletons = require_rolldown_runtime.__toESM(require("@langchain/core/singletons"));
4
4
  const uuid = require_rolldown_runtime.__toESM(require("uuid"));
5
5
  const __langchain_core_messages = require_rolldown_runtime.__toESM(require("@langchain/core/messages"));
6
6
 
@@ -70,9 +70,8 @@ var MessageGraph = class extends require_state.StateGraph {
70
70
  * @param options RunnableConfig / Runtime coming from node context.
71
71
  */
72
72
  function pushMessage(message, options) {
73
- const rawOptions = options ?? __langchain_core_singletons.AsyncLocalStorageProviderSingleton.getRunnableConfig();
74
- if (rawOptions == null) throw new Error("Calling pushMessage outside the context of a graph.");
75
- const { stateKey: userStateKey,...config } = rawOptions;
73
+ const { stateKey: userStateKey,...userConfig } = options ?? {};
74
+ const config = require_config.ensureLangGraphConfig(userConfig);
76
75
  let stateKey = userStateKey ?? "messages";
77
76
  if (userStateKey === null) stateKey = void 0;
78
77
  const validMessage = (0, __langchain_core_messages.coerceMessageLikeToMessage)(message);
@@ -1 +1 @@
1
- {"version":3,"file":"message.cjs","names":["coerceMessageLikeToMessage","removeAllIdx: number | undefined","StateGraph","rawOptions:\n | (RunnableConfig & { stateKey?: string | null })\n | undefined","AsyncLocalStorageProviderSingleton","stateKey: string | undefined"],"sources":["../../src/graph/message.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { v4 } from \"uuid\";\nimport { StateGraph } from \"./state.js\";\nimport type { StreamMessagesHandler } from \"../pregel/messages.js\";\n\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\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 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 (m.getType() === \"remove\" && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === \"remove\") {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === \"remove\") {\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 return merged.filter((m) => !idsToRemove.has(m.id));\n}\n\n/** @ignore */\nexport class MessageGraph extends StateGraph<\n BaseMessage[],\n BaseMessage[],\n Messages\n> {\n constructor() {\n super({\n channels: {\n __root__: {\n reducer: messagesStateReducer,\n default: () => [],\n },\n },\n });\n }\n}\n\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport function pushMessage(\n message: BaseMessage | BaseMessageLike,\n options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n }\n) {\n const rawOptions:\n | (RunnableConfig & { stateKey?: string | null })\n | undefined =\n options ?? AsyncLocalStorageProviderSingleton.getRunnableConfig();\n\n if (rawOptions == null) {\n throw new Error(\"Calling pushMessage outside the context of a graph.\");\n }\n\n const { stateKey: userStateKey, ...config } = rawOptions;\n let stateKey: string | undefined = userStateKey ?? \"messages\";\n if (userStateKey === null) stateKey = undefined;\n\n // coerce to message\n const validMessage = coerceMessageLikeToMessage(message);\n if (!validMessage.id) throw new Error(\"Message ID is required.\");\n\n const callbacks = (() => {\n if (Array.isArray(config.callbacks)) {\n return config.callbacks;\n }\n\n if (typeof config.callbacks !== \"undefined\") {\n return config.callbacks.handlers;\n }\n\n return [];\n })();\n\n const messagesHandler = callbacks.find(\n (cb): cb is StreamMessagesHandler =>\n \"name\" in cb && cb.name === \"StreamMessagesHandler\"\n );\n\n if (messagesHandler) {\n const metadata = config.metadata ?? {};\n const namespace = (\n (metadata.langgraph_checkpoint_ns ?? \"\") as string\n ).split(\"|\");\n\n messagesHandler._emit(\n [namespace, metadata],\n validMessage,\n undefined,\n false\n );\n }\n\n if (stateKey) {\n config.configurable?.__pregel_send?.([[stateKey, validMessage]]);\n }\n\n return validMessage;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,sBAAsB;;;;;;AAYnC,SAAgB,qBACd,MACA,OACe;CACf,MAAM,YAAY,MAAM,QAAQ,QAAQ,OAAO,CAAC;CAChD,MAAM,aAAa,MAAM,QAAQ,SAAS,QAAQ,CAAC;CAEnD,MAAM,eAAgB,UAAgC,IACpDA;CAEF,MAAM,gBAAiB,WAAiC,IACtDA;AAGF,MAAK,MAAM,KAAK,aACd,KAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,IAAE;AACF,IAAE,UAAU,KAAK,EAAE;;CAIvB,IAAIC;AACJ,MAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAAG;EAChD,MAAM,IAAI,cAAc;AACxB,MAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,KAAE;AACF,KAAE,UAAU,KAAK,EAAE;;AAGrB,MAAI,EAAE,cAAc,YAAY,EAAE,OAAO,oBACvC,gBAAe;;AAInB,KAAI,gBAAgB,KAAM,QAAO,cAAc,MAAM,eAAe;CAGpE,MAAM,SAAS,CAAC,GAAG;CACnB,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI;CACvD,MAAM,8BAAc,IAAI;AACxB,MAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE;AACrC,MAAI,gBAAgB,OAClB,KAAI,EAAE,cAAc,SAClB,aAAY,IAAI,EAAE;OACb;AACL,eAAY,OAAO,EAAE;AACrB,UAAO,eAAe;;OAEnB;AACL,OAAI,EAAE,cAAc,SAClB,OAAM,IAAI,MACR,kEAAkE,EAAE,GAAG;AAG3E,cAAW,IAAI,EAAE,IAAI,OAAO;AAC5B,UAAO,KAAK;;;AAGhB,QAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE;;;AAIjD,IAAa,eAAb,cAAkCC,yBAIhC;CACA,cAAc;AACZ,QAAM,EACJ,UAAU,EACR,UAAU;GACR,SAAS;GACT,eAAe;;;;;;;;;;;;;;;;AAmBzB,SAAgB,YACd,SACA,SAOA;CACA,MAAMC,aAGJ,WAAWC,+DAAmC;AAEhD,KAAI,cAAc,KAChB,OAAM,IAAI,MAAM;CAGlB,MAAM,EAAE,UAAU,aAAc,GAAG,WAAW;CAC9C,IAAIC,WAA+B,gBAAgB;AACnD,KAAI,iBAAiB,KAAM,YAAW;CAGtC,MAAM,yEAA0C;AAChD,KAAI,CAAC,aAAa,GAAI,OAAM,IAAI,MAAM;CAEtC,MAAM,mBAAmB;AACvB,MAAI,MAAM,QAAQ,OAAO,WACvB,QAAO,OAAO;AAGhB,MAAI,OAAO,OAAO,cAAc,YAC9B,QAAO,OAAO,UAAU;AAG1B,SAAO;;CAGT,MAAM,kBAAkB,UAAU,MAC/B,OACC,UAAU,MAAM,GAAG,SAAS;AAGhC,KAAI,iBAAiB;EACnB,MAAM,WAAW,OAAO,YAAY;EACpC,MAAM,aACH,SAAS,2BAA2B,IACrC,MAAM;AAER,kBAAgB,MACd,CAAC,WAAW,WACZ,cACA,QACA;;AAIJ,KAAI,SACF,QAAO,cAAc,gBAAgB,CAAC,CAAC,UAAU;AAGnD,QAAO"}
1
+ {"version":3,"file":"message.cjs","names":["coerceMessageLikeToMessage","removeAllIdx: number | undefined","StateGraph","ensureLangGraphConfig","stateKey: string | undefined"],"sources":["../../src/graph/message.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { v4 } from \"uuid\";\nimport { StateGraph } from \"./state.js\";\nimport { ensureLangGraphConfig } from \"../pregel/utils/config.js\";\nimport type { StreamMessagesHandler } from \"../pregel/messages.js\";\n\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\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 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 (m.getType() === \"remove\" && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === \"remove\") {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === \"remove\") {\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 return merged.filter((m) => !idsToRemove.has(m.id));\n}\n\n/** @ignore */\nexport class MessageGraph extends StateGraph<\n BaseMessage[],\n BaseMessage[],\n Messages\n> {\n constructor() {\n super({\n channels: {\n __root__: {\n reducer: messagesStateReducer,\n default: () => [],\n },\n },\n });\n }\n}\n\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport function pushMessage(\n message: BaseMessage | BaseMessageLike,\n options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n }\n) {\n const { stateKey: userStateKey, ...userConfig } = options ?? {};\n const config = ensureLangGraphConfig(userConfig);\n\n let stateKey: string | undefined = userStateKey ?? \"messages\";\n if (userStateKey === null) stateKey = undefined;\n\n // coerce to message\n const validMessage = coerceMessageLikeToMessage(message);\n if (!validMessage.id) throw new Error(\"Message ID is required.\");\n\n const callbacks = (() => {\n if (Array.isArray(config.callbacks)) {\n return config.callbacks;\n }\n\n if (typeof config.callbacks !== \"undefined\") {\n return config.callbacks.handlers;\n }\n\n return [];\n })();\n\n const messagesHandler = callbacks.find(\n (cb): cb is StreamMessagesHandler =>\n \"name\" in cb && cb.name === \"StreamMessagesHandler\"\n );\n\n if (messagesHandler) {\n const metadata = config.metadata ?? {};\n const namespace = (\n (metadata.langgraph_checkpoint_ns ?? \"\") as string\n ).split(\"|\");\n\n messagesHandler._emit(\n [namespace, metadata],\n validMessage,\n undefined,\n false\n );\n }\n\n if (stateKey) {\n config.configurable?.__pregel_send?.([[stateKey, validMessage]]);\n }\n\n return validMessage;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,sBAAsB;;;;;;AAYnC,SAAgB,qBACd,MACA,OACe;CACf,MAAM,YAAY,MAAM,QAAQ,QAAQ,OAAO,CAAC;CAChD,MAAM,aAAa,MAAM,QAAQ,SAAS,QAAQ,CAAC;CAEnD,MAAM,eAAgB,UAAgC,IACpDA;CAEF,MAAM,gBAAiB,WAAiC,IACtDA;AAGF,MAAK,MAAM,KAAK,aACd,KAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,IAAE;AACF,IAAE,UAAU,KAAK,EAAE;;CAIvB,IAAIC;AACJ,MAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAAG;EAChD,MAAM,IAAI,cAAc;AACxB,MAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,KAAE;AACF,KAAE,UAAU,KAAK,EAAE;;AAGrB,MAAI,EAAE,cAAc,YAAY,EAAE,OAAO,oBACvC,gBAAe;;AAInB,KAAI,gBAAgB,KAAM,QAAO,cAAc,MAAM,eAAe;CAGpE,MAAM,SAAS,CAAC,GAAG;CACnB,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI;CACvD,MAAM,8BAAc,IAAI;AACxB,MAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE;AACrC,MAAI,gBAAgB,OAClB,KAAI,EAAE,cAAc,SAClB,aAAY,IAAI,EAAE;OACb;AACL,eAAY,OAAO,EAAE;AACrB,UAAO,eAAe;;OAEnB;AACL,OAAI,EAAE,cAAc,SAClB,OAAM,IAAI,MACR,kEAAkE,EAAE,GAAG;AAG3E,cAAW,IAAI,EAAE,IAAI,OAAO;AAC5B,UAAO,KAAK;;;AAGhB,QAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE;;;AAIjD,IAAa,eAAb,cAAkCC,yBAIhC;CACA,cAAc;AACZ,QAAM,EACJ,UAAU,EACR,UAAU;GACR,SAAS;GACT,eAAe;;;;;;;;;;;;;;;;AAmBzB,SAAgB,YACd,SACA,SAOA;CACA,MAAM,EAAE,UAAU,aAAc,GAAG,eAAe,WAAW;CAC7D,MAAM,SAASC,qCAAsB;CAErC,IAAIC,WAA+B,gBAAgB;AACnD,KAAI,iBAAiB,KAAM,YAAW;CAGtC,MAAM,yEAA0C;AAChD,KAAI,CAAC,aAAa,GAAI,OAAM,IAAI,MAAM;CAEtC,MAAM,mBAAmB;AACvB,MAAI,MAAM,QAAQ,OAAO,WACvB,QAAO,OAAO;AAGhB,MAAI,OAAO,OAAO,cAAc,YAC9B,QAAO,OAAO,UAAU;AAG1B,SAAO;;CAGT,MAAM,kBAAkB,UAAU,MAC/B,OACC,UAAU,MAAM,GAAG,SAAS;AAGhC,KAAI,iBAAiB;EACnB,MAAM,WAAW,OAAO,YAAY;EACpC,MAAM,aACH,SAAS,2BAA2B,IACrC,MAAM;AAER,kBAAgB,MACd,CAAC,WAAW,WACZ,cACA,QACA;;AAIJ,KAAI,SACF,QAAO,cAAc,gBAAgB,CAAC,CAAC,UAAU;AAGnD,QAAO"}
@@ -1,5 +1,6 @@
1
1
  import { StateGraph } from "./state.cjs";
2
2
  import { RunnableConfig } from "@langchain/core/runnables";
3
+ import * as _langchain_core_messages27 from "@langchain/core/messages";
3
4
  import { BaseMessage, BaseMessageLike } from "@langchain/core/messages";
4
5
 
5
6
  //#region src/graph/message.d.ts
@@ -33,7 +34,7 @@ declare function pushMessage(message: BaseMessage | BaseMessageLike, options?: R
33
34
  * @default "messages"
34
35
  */
35
36
  stateKey?: string | null;
36
- }): BaseMessage;
37
+ }): BaseMessage<_langchain_core_messages27.MessageStructure, _langchain_core_messages27.MessageType>;
37
38
  //#endregion
38
39
  export { MessageGraph, Messages, REMOVE_ALL_MESSAGES, messagesStateReducer, pushMessage };
39
40
  //# sourceMappingURL=message.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.cts","names":["BaseMessage","BaseMessageLike","RunnableConfig","StateGraph","REMOVE_ALL_MESSAGES","Messages","Array","messagesStateReducer","MessageGraph","pushMessage"],"sources":["../../src/graph/message.d.ts"],"sourcesContent":["import { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { StateGraph } from \"./state.js\";\nexport declare const REMOVE_ALL_MESSAGES = \"__remove_all__\";\nexport type Messages = Array<BaseMessage | BaseMessageLike> | BaseMessage | BaseMessageLike;\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport declare function messagesStateReducer(left: Messages, right: Messages): BaseMessage[];\n/** @ignore */\nexport declare class MessageGraph extends StateGraph<BaseMessage[], BaseMessage[], Messages> {\n constructor();\n}\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport declare function pushMessage(message: BaseMessage | BaseMessageLike, options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n}): BaseMessage;\n"],"mappings":";;;;;cAGqBI,mBAAAA;KACTC,QAAAA,GAAWC,MAAMN,cAAcC,mBAAmBD,cAAcC;AAD5E;AACA;;;;AAAuBK,iBAMCC,oBAAAA,CANDD,IAAAA,EAM4BD,QAN5BC,EAAAA,KAAAA,EAM6CD,QAN7CC,CAAAA,EAMwDN,WANxDM,EAAAA;;AAAqDL,cAQvDO,YAAAA,SAAqBL,UARkCF,CAQvBD,WARuBC,EAAAA,EAQRD,WARQC,EAAAA,EAQOI,QARPJ,CAAAA,CAAAA;;AAM5E;;;;;;AAEA;;;;;;;AAewBQ,iBAAAA,WAAAA,CAAW,OAAA,EAAUT,WAAV,GAAwBC,eAAxB,EAAA,QAAA,EAAmDC,cAAnD,GAAA;EAAA;;;;UAM/BF,CAAAA,EAAAA,MAAAA,GAAAA,IAAAA;IAAAA"}
1
+ {"version":3,"file":"message.d.cts","names":["BaseMessage","BaseMessageLike","RunnableConfig","StateGraph","REMOVE_ALL_MESSAGES","Messages","Array","messagesStateReducer","MessageGraph","pushMessage","_langchain_core_messages27","MessageStructure","MessageType"],"sources":["../../src/graph/message.d.ts"],"sourcesContent":["import { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { StateGraph } from \"./state.js\";\nexport declare const REMOVE_ALL_MESSAGES = \"__remove_all__\";\nexport type Messages = Array<BaseMessage | BaseMessageLike> | BaseMessage | BaseMessageLike;\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport declare function messagesStateReducer(left: Messages, right: Messages): BaseMessage[];\n/** @ignore */\nexport declare class MessageGraph extends StateGraph<BaseMessage[], BaseMessage[], Messages> {\n constructor();\n}\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport declare function pushMessage(message: BaseMessage | BaseMessageLike, options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n}): BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>;\n"],"mappings":";;;;;;cAGqBI,mBAAAA;KACTC,QAAAA,GAAWC,MAAMN,cAAcC,mBAAmBD,cAAcC;;AAD5E;AACA;;;AAA2CA,iBAMnBM,oBAAAA,CANmBN,IAAAA,EAMQI,QANRJ,EAAAA,KAAAA,EAMyBI,QANzBJ,CAAAA,EAMoCD,WANpCC,EAAAA;;AAAmBD,cAQzCQ,YAAAA,SAAqBL,UARoBH,CAQTA,WARSA,EAAAA,EAQMA,WARNA,EAAAA,EAQqBK,QARrBL,CAAAA,CAAAA;aAAcC,CAAAA;;AAM5E;;;;;;AAEA;;;;;;iBAewBQ,WAAAA,UAAqBT,cAAcC,2BAA2BC;EAA9DO;;;;UAA8DP,CAAAA,EAAAA,MAAAA,GAAAA,IAAAA;IAMlFF,WANgGU,CAAAA,0BAAAA,CAMjDC,gBAAAA,EAAgBD,0BAAAA,CAAqCE,WAAAA,CAArDD"}
@@ -1,5 +1,6 @@
1
1
  import { StateGraph } from "./state.js";
2
2
  import { RunnableConfig } from "@langchain/core/runnables";
3
+ import * as _langchain_core_messages0 from "@langchain/core/messages";
3
4
  import { BaseMessage, BaseMessageLike } from "@langchain/core/messages";
4
5
 
5
6
  //#region src/graph/message.d.ts
@@ -33,7 +34,7 @@ declare function pushMessage(message: BaseMessage | BaseMessageLike, options?: R
33
34
  * @default "messages"
34
35
  */
35
36
  stateKey?: string | null;
36
- }): BaseMessage;
37
+ }): BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>;
37
38
  //#endregion
38
39
  export { MessageGraph, Messages, REMOVE_ALL_MESSAGES, messagesStateReducer, pushMessage };
39
40
  //# sourceMappingURL=message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","names":["BaseMessage","BaseMessageLike","RunnableConfig","StateGraph","REMOVE_ALL_MESSAGES","Messages","Array","messagesStateReducer","MessageGraph","pushMessage"],"sources":["../../src/graph/message.d.ts"],"sourcesContent":["import { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { StateGraph } from \"./state.js\";\nexport declare const REMOVE_ALL_MESSAGES = \"__remove_all__\";\nexport type Messages = Array<BaseMessage | BaseMessageLike> | BaseMessage | BaseMessageLike;\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport declare function messagesStateReducer(left: Messages, right: Messages): BaseMessage[];\n/** @ignore */\nexport declare class MessageGraph extends StateGraph<BaseMessage[], BaseMessage[], Messages> {\n constructor();\n}\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport declare function pushMessage(message: BaseMessage | BaseMessageLike, options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n}): BaseMessage;\n"],"mappings":";;;;;cAGqBI,mBAAAA;KACTC,QAAAA,GAAWC,MAAMN,cAAcC,mBAAmBD,cAAcC;AAD5E;AACA;;;;AAAuBK,iBAMCC,oBAAAA,CANDD,IAAAA,EAM4BD,QAN5BC,EAAAA,KAAAA,EAM6CD,QAN7CC,CAAAA,EAMwDN,WANxDM,EAAAA;;AAAqDL,cAQvDO,YAAAA,SAAqBL,UARkCF,CAQvBD,WARuBC,EAAAA,EAQRD,WARQC,EAAAA,EAQOI,QARPJ,CAAAA,CAAAA;;AAM5E;;;;;;AAEA;;;;;;;AAewBQ,iBAAAA,WAAAA,CAAW,OAAA,EAAUT,WAAV,GAAwBC,eAAxB,EAAA,QAAA,EAAmDC,cAAnD,GAAA;EAAA;;;;UAM/BF,CAAAA,EAAAA,MAAAA,GAAAA,IAAAA;IAAAA"}
1
+ {"version":3,"file":"message.d.ts","names":["BaseMessage","BaseMessageLike","RunnableConfig","StateGraph","REMOVE_ALL_MESSAGES","Messages","Array","messagesStateReducer","MessageGraph","pushMessage","_langchain_core_messages0","MessageStructure","MessageType"],"sources":["../../src/graph/message.d.ts"],"sourcesContent":["import { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { StateGraph } from \"./state.js\";\nexport declare const REMOVE_ALL_MESSAGES = \"__remove_all__\";\nexport type Messages = Array<BaseMessage | BaseMessageLike> | BaseMessage | BaseMessageLike;\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport declare function messagesStateReducer(left: Messages, right: Messages): BaseMessage[];\n/** @ignore */\nexport declare class MessageGraph extends StateGraph<BaseMessage[], BaseMessage[], Messages> {\n constructor();\n}\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport declare function pushMessage(message: BaseMessage | BaseMessageLike, options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n}): BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>;\n"],"mappings":";;;;;;cAGqBI,mBAAAA;KACTC,QAAAA,GAAWC,MAAMN,cAAcC,mBAAmBD,cAAcC;;AAD5E;AACA;;;AAA2CA,iBAMnBM,oBAAAA,CANmBN,IAAAA,EAMQI,QANRJ,EAAAA,KAAAA,EAMyBI,QANzBJ,CAAAA,EAMoCD,WANpCC,EAAAA;;AAAmBD,cAQzCQ,YAAAA,SAAqBL,UARoBH,CAQTA,WARSA,EAAAA,EAQMA,WARNA,EAAAA,EAQqBK,QARrBL,CAAAA,CAAAA;aAAcC,CAAAA;;AAM5E;;;;;;AAEA;;;;;;iBAewBQ,WAAAA,UAAqBT,cAAcC,2BAA2BC;EAA9DO;;;;UAA8DP,CAAAA,EAAAA,MAAAA,GAAAA,IAAAA;IAMlFF,WANgGU,CAAAA,yBAAAA,CAMjDC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,CAArDD"}
@@ -1,5 +1,5 @@
1
+ import { ensureLangGraphConfig } from "../pregel/utils/config.js";
1
2
  import { StateGraph } from "./state.js";
2
- import { AsyncLocalStorageProviderSingleton } from "@langchain/core/singletons";
3
3
  import { v4 } from "uuid";
4
4
  import { coerceMessageLikeToMessage } from "@langchain/core/messages";
5
5
 
@@ -69,9 +69,8 @@ var MessageGraph = class extends StateGraph {
69
69
  * @param options RunnableConfig / Runtime coming from node context.
70
70
  */
71
71
  function pushMessage(message, options) {
72
- const rawOptions = options ?? AsyncLocalStorageProviderSingleton.getRunnableConfig();
73
- if (rawOptions == null) throw new Error("Calling pushMessage outside the context of a graph.");
74
- const { stateKey: userStateKey,...config } = rawOptions;
72
+ const { stateKey: userStateKey,...userConfig } = options ?? {};
73
+ const config = ensureLangGraphConfig(userConfig);
75
74
  let stateKey = userStateKey ?? "messages";
76
75
  if (userStateKey === null) stateKey = void 0;
77
76
  const validMessage = coerceMessageLikeToMessage(message);
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","names":["removeAllIdx: number | undefined","rawOptions:\n | (RunnableConfig & { stateKey?: string | null })\n | undefined","stateKey: string | undefined"],"sources":["../../src/graph/message.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { v4 } from \"uuid\";\nimport { StateGraph } from \"./state.js\";\nimport type { StreamMessagesHandler } from \"../pregel/messages.js\";\n\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\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 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 (m.getType() === \"remove\" && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === \"remove\") {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === \"remove\") {\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 return merged.filter((m) => !idsToRemove.has(m.id));\n}\n\n/** @ignore */\nexport class MessageGraph extends StateGraph<\n BaseMessage[],\n BaseMessage[],\n Messages\n> {\n constructor() {\n super({\n channels: {\n __root__: {\n reducer: messagesStateReducer,\n default: () => [],\n },\n },\n });\n }\n}\n\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport function pushMessage(\n message: BaseMessage | BaseMessageLike,\n options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n }\n) {\n const rawOptions:\n | (RunnableConfig & { stateKey?: string | null })\n | undefined =\n options ?? AsyncLocalStorageProviderSingleton.getRunnableConfig();\n\n if (rawOptions == null) {\n throw new Error(\"Calling pushMessage outside the context of a graph.\");\n }\n\n const { stateKey: userStateKey, ...config } = rawOptions;\n let stateKey: string | undefined = userStateKey ?? \"messages\";\n if (userStateKey === null) stateKey = undefined;\n\n // coerce to message\n const validMessage = coerceMessageLikeToMessage(message);\n if (!validMessage.id) throw new Error(\"Message ID is required.\");\n\n const callbacks = (() => {\n if (Array.isArray(config.callbacks)) {\n return config.callbacks;\n }\n\n if (typeof config.callbacks !== \"undefined\") {\n return config.callbacks.handlers;\n }\n\n return [];\n })();\n\n const messagesHandler = callbacks.find(\n (cb): cb is StreamMessagesHandler =>\n \"name\" in cb && cb.name === \"StreamMessagesHandler\"\n );\n\n if (messagesHandler) {\n const metadata = config.metadata ?? {};\n const namespace = (\n (metadata.langgraph_checkpoint_ns ?? \"\") as string\n ).split(\"|\");\n\n messagesHandler._emit(\n [namespace, metadata],\n validMessage,\n undefined,\n false\n );\n }\n\n if (stateKey) {\n config.configurable?.__pregel_send?.([[stateKey, validMessage]]);\n }\n\n return validMessage;\n}\n"],"mappings":";;;;;;AAWA,MAAa,sBAAsB;;;;;;AAYnC,SAAgB,qBACd,MACA,OACe;CACf,MAAM,YAAY,MAAM,QAAQ,QAAQ,OAAO,CAAC;CAChD,MAAM,aAAa,MAAM,QAAQ,SAAS,QAAQ,CAAC;CAEnD,MAAM,eAAgB,UAAgC,IACpD;CAEF,MAAM,gBAAiB,WAAiC,IACtD;AAGF,MAAK,MAAM,KAAK,aACd,KAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,IAAE,KAAK;AACP,IAAE,UAAU,KAAK,EAAE;;CAIvB,IAAIA;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;AACP,KAAE,UAAU,KAAK,EAAE;;AAGrB,MAAI,EAAE,cAAc,YAAY,EAAE,OAAO,oBACvC,gBAAe;;AAInB,KAAI,gBAAgB,KAAM,QAAO,cAAc,MAAM,eAAe;CAGpE,MAAM,SAAS,CAAC,GAAG;CACnB,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI;CACvD,MAAM,8BAAc,IAAI;AACxB,MAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE;AACrC,MAAI,gBAAgB,OAClB,KAAI,EAAE,cAAc,SAClB,aAAY,IAAI,EAAE;OACb;AACL,eAAY,OAAO,EAAE;AACrB,UAAO,eAAe;;OAEnB;AACL,OAAI,EAAE,cAAc,SAClB,OAAM,IAAI,MACR,kEAAkE,EAAE,GAAG;AAG3E,cAAW,IAAI,EAAE,IAAI,OAAO;AAC5B,UAAO,KAAK;;;AAGhB,QAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE;;;AAIjD,IAAa,eAAb,cAAkC,WAIhC;CACA,cAAc;AACZ,QAAM,EACJ,UAAU,EACR,UAAU;GACR,SAAS;GACT,eAAe;;;;;;;;;;;;;;;;AAmBzB,SAAgB,YACd,SACA,SAOA;CACA,MAAMC,aAGJ,WAAW,mCAAmC;AAEhD,KAAI,cAAc,KAChB,OAAM,IAAI,MAAM;CAGlB,MAAM,EAAE,UAAU,aAAc,GAAG,WAAW;CAC9C,IAAIC,WAA+B,gBAAgB;AACnD,KAAI,iBAAiB,KAAM,YAAW;CAGtC,MAAM,eAAe,2BAA2B;AAChD,KAAI,CAAC,aAAa,GAAI,OAAM,IAAI,MAAM;CAEtC,MAAM,mBAAmB;AACvB,MAAI,MAAM,QAAQ,OAAO,WACvB,QAAO,OAAO;AAGhB,MAAI,OAAO,OAAO,cAAc,YAC9B,QAAO,OAAO,UAAU;AAG1B,SAAO;;CAGT,MAAM,kBAAkB,UAAU,MAC/B,OACC,UAAU,MAAM,GAAG,SAAS;AAGhC,KAAI,iBAAiB;EACnB,MAAM,WAAW,OAAO,YAAY;EACpC,MAAM,aACH,SAAS,2BAA2B,IACrC,MAAM;AAER,kBAAgB,MACd,CAAC,WAAW,WACZ,cACA,QACA;;AAIJ,KAAI,SACF,QAAO,cAAc,gBAAgB,CAAC,CAAC,UAAU;AAGnD,QAAO"}
1
+ {"version":3,"file":"message.js","names":["removeAllIdx: number | undefined","stateKey: string | undefined"],"sources":["../../src/graph/message.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from \"@langchain/core/messages\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { v4 } from \"uuid\";\nimport { StateGraph } from \"./state.js\";\nimport { ensureLangGraphConfig } from \"../pregel/utils/config.js\";\nimport type { StreamMessagesHandler } from \"../pregel/messages.js\";\n\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\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 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 (m.getType() === \"remove\" && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === \"remove\") {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === \"remove\") {\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 return merged.filter((m) => !idsToRemove.has(m.id));\n}\n\n/** @ignore */\nexport class MessageGraph extends StateGraph<\n BaseMessage[],\n BaseMessage[],\n Messages\n> {\n constructor() {\n super({\n channels: {\n __root__: {\n reducer: messagesStateReducer,\n default: () => [],\n },\n },\n });\n }\n}\n\n/**\n * Manually push a message to a message stream.\n *\n * This is useful when you need to push a manually created message before the node\n * has finished executing.\n *\n * When a message is pushed, it will be automatically persisted to the state after the node has finished executing.\n * To disable persisting, set `options.stateKey` to `null`.\n *\n * @param message The message to push. The message must have an ID set, otherwise an error will be thrown.\n * @param options RunnableConfig / Runtime coming from node context.\n */\nexport function pushMessage(\n message: BaseMessage | BaseMessageLike,\n options?: RunnableConfig & {\n /**\n * The key of the state to push the message to. Set to `null` to avoid persisting.\n * @default \"messages\"\n */\n stateKey?: string | null;\n }\n) {\n const { stateKey: userStateKey, ...userConfig } = options ?? {};\n const config = ensureLangGraphConfig(userConfig);\n\n let stateKey: string | undefined = userStateKey ?? \"messages\";\n if (userStateKey === null) stateKey = undefined;\n\n // coerce to message\n const validMessage = coerceMessageLikeToMessage(message);\n if (!validMessage.id) throw new Error(\"Message ID is required.\");\n\n const callbacks = (() => {\n if (Array.isArray(config.callbacks)) {\n return config.callbacks;\n }\n\n if (typeof config.callbacks !== \"undefined\") {\n return config.callbacks.handlers;\n }\n\n return [];\n })();\n\n const messagesHandler = callbacks.find(\n (cb): cb is StreamMessagesHandler =>\n \"name\" in cb && cb.name === \"StreamMessagesHandler\"\n );\n\n if (messagesHandler) {\n const metadata = config.metadata ?? {};\n const namespace = (\n (metadata.langgraph_checkpoint_ns ?? \"\") as string\n ).split(\"|\");\n\n messagesHandler._emit(\n [namespace, metadata],\n validMessage,\n undefined,\n false\n );\n }\n\n if (stateKey) {\n config.configurable?.__pregel_send?.([[stateKey, validMessage]]);\n }\n\n return validMessage;\n}\n"],"mappings":";;;;;;AAWA,MAAa,sBAAsB;;;;;;AAYnC,SAAgB,qBACd,MACA,OACe;CACf,MAAM,YAAY,MAAM,QAAQ,QAAQ,OAAO,CAAC;CAChD,MAAM,aAAa,MAAM,QAAQ,SAAS,QAAQ,CAAC;CAEnD,MAAM,eAAgB,UAAgC,IACpD;CAEF,MAAM,gBAAiB,WAAiC,IACtD;AAGF,MAAK,MAAM,KAAK,aACd,KAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAW;AACvC,IAAE,KAAK;AACP,IAAE,UAAU,KAAK,EAAE;;CAIvB,IAAIA;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;AACP,KAAE,UAAU,KAAK,EAAE;;AAGrB,MAAI,EAAE,cAAc,YAAY,EAAE,OAAO,oBACvC,gBAAe;;AAInB,KAAI,gBAAgB,KAAM,QAAO,cAAc,MAAM,eAAe;CAGpE,MAAM,SAAS,CAAC,GAAG;CACnB,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI;CACvD,MAAM,8BAAc,IAAI;AACxB,MAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE;AACrC,MAAI,gBAAgB,OAClB,KAAI,EAAE,cAAc,SAClB,aAAY,IAAI,EAAE;OACb;AACL,eAAY,OAAO,EAAE;AACrB,UAAO,eAAe;;OAEnB;AACL,OAAI,EAAE,cAAc,SAClB,OAAM,IAAI,MACR,kEAAkE,EAAE,GAAG;AAG3E,cAAW,IAAI,EAAE,IAAI,OAAO;AAC5B,UAAO,KAAK;;;AAGhB,QAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE;;;AAIjD,IAAa,eAAb,cAAkC,WAIhC;CACA,cAAc;AACZ,QAAM,EACJ,UAAU,EACR,UAAU;GACR,SAAS;GACT,eAAe;;;;;;;;;;;;;;;;AAmBzB,SAAgB,YACd,SACA,SAOA;CACA,MAAM,EAAE,UAAU,aAAc,GAAG,eAAe,WAAW;CAC7D,MAAM,SAAS,sBAAsB;CAErC,IAAIC,WAA+B,gBAAgB;AACnD,KAAI,iBAAiB,KAAM,YAAW;CAGtC,MAAM,eAAe,2BAA2B;AAChD,KAAI,CAAC,aAAa,GAAI,OAAM,IAAI,MAAM;CAEtC,MAAM,mBAAmB;AACvB,MAAI,MAAM,QAAQ,OAAO,WACvB,QAAO,OAAO;AAGhB,MAAI,OAAO,OAAO,cAAc,YAC9B,QAAO,OAAO,UAAU;AAG1B,SAAO;;CAGT,MAAM,kBAAkB,UAAU,MAC/B,OACC,UAAU,MAAM,GAAG,SAAS;AAGhC,KAAI,iBAAiB;EACnB,MAAM,WAAW,OAAO,YAAY;EACpC,MAAM,aACH,SAAS,2BAA2B,IACrC,MAAM;AAER,kBAAgB,MACd,CAAC,WAAW,WACZ,cACA,QACA;;AAIJ,KAAI,SACF,QAAO,cAAc,gBAAgB,CAAC,CAAC,UAAU;AAGnD,QAAO"}
@@ -3,6 +3,7 @@ import { ReducedZodChannel, SchemaMeta } from "./zod/meta.cjs";
3
3
  import { AnnotationRoot } from "./annotation.cjs";
4
4
  import { Messages } from "./message.cjs";
5
5
  import * as _langchain_core_utils_types0 from "@langchain/core/utils/types";
6
+ import * as _langchain_core_messages0 from "@langchain/core/messages";
6
7
  import { BaseMessage } from "@langchain/core/messages";
7
8
  import { z } from "zod/v3";
8
9
 
@@ -44,7 +45,7 @@ import { z } from "zod/v3";
44
45
  * ```
45
46
  */
46
47
  declare const MessagesAnnotation: AnnotationRoot<{
47
- messages: BinaryOperatorAggregate<BaseMessage[], Messages>;
48
+ messages: BinaryOperatorAggregate<BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[], Messages>;
48
49
  }>;
49
50
  /**
50
51
  * Prebuilt schema meta for Zod state definition.
@@ -100,11 +101,11 @@ declare const MessagesZodMeta: SchemaMeta<BaseMessage[], Messages>;
100
101
  * ```
101
102
  */
102
103
  declare const MessagesZodState: z.ZodObject<{
103
- messages: ReducedZodChannel<z.ZodType<BaseMessage[], z.ZodTypeDef, BaseMessage[]>, _langchain_core_utils_types0.InteropZodType<Messages>>;
104
+ messages: ReducedZodChannel<z.ZodType<BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[], z.ZodTypeDef, BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[]>, _langchain_core_utils_types0.InteropZodType<Messages>>;
104
105
  }, "strip", z.ZodTypeAny, {
105
- messages: BaseMessage[];
106
+ messages: BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[];
106
107
  }, {
107
- messages: BaseMessage[];
108
+ messages: BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[];
108
109
  }>;
109
110
  //#endregion
110
111
  export { MessagesAnnotation, MessagesZodMeta, MessagesZodState };
@@ -1 +1 @@
1
- {"version":3,"file":"messages_annotation.d.cts","names":["__annotation_js0","_langchain_core_utils_types0","__zod_meta_js0","BaseMessage","z","Messages","SchemaMeta","MessagesAnnotation","___web_js0","BinaryOperatorAggregate","AnnotationRoot","MessagesZodMeta","MessagesZodState","ZodTypeDef","ZodType","InteropZodType","ReducedZodChannel","ZodTypeAny","ZodObject"],"sources":["../../src/graph/messages_annotation.d.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { z } from \"zod/v3\";\nimport { Messages } from \"./message.js\";\nimport { SchemaMeta } from \"./zod/meta.js\";\n/**\n * Prebuilt state annotation that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n *\n * Specifically, importing and using the prebuilt MessagesAnnotation like this:\n *\n * @example\n * ```ts\n * import { MessagesAnnotation, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesAnnotation)\n * .addNode(...)\n * ...\n * ```\n *\n * Is equivalent to initializing your state manually like this:\n *\n * @example\n * ```ts\n * import { BaseMessage } from \"@langchain/core/messages\";\n * import { Annotation, StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n *\n * export const StateAnnotation = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * reducer: messagesStateReducer,\n * default: () => [],\n * }),\n * });\n *\n * const graph = new StateGraph(StateAnnotation)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesAnnotation: import(\"./annotation.js\").AnnotationRoot<{\n messages: import(\"../web.js\").BinaryOperatorAggregate<BaseMessage[], Messages>;\n}>;\n/**\n * Prebuilt schema meta for Zod state definition.\n *\n * @example\n * ```ts\n * import { z } from \"zod/v4-mini\";\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const AgentState = z.object({\n * messages: z.custom<BaseMessage[]>().register(registry, MessagesZodMeta),\n * });\n * ```\n */\nexport declare const MessagesZodMeta: SchemaMeta<BaseMessage[], Messages>;\n/**\n * Prebuilt state object that uses Zod to combine returned messages.\n * This utility is synonymous with the `MessagesAnnotation` annotation,\n * but uses Zod as the way to express messages state.\n *\n * You can use import and use this prebuilt schema like this:\n *\n * @example\n * ```ts\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesZodState)\n * .addNode(...)\n * ...\n * ```\n *\n * Which is equivalent to initializing the schema object manually like this:\n *\n * @example\n * ```ts\n * import { z } from \"zod\";\n * import type { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\n * import { StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n * import \"@langchain/langgraph/zod\";\n *\n * const AgentState = z.object({\n * messages: z\n * .custom<BaseMessage[]>()\n * .default(() => [])\n * .langgraph.reducer(\n * messagesStateReducer,\n * z.custom<BaseMessageLike | BaseMessageLike[]>()\n * ),\n * });\n * const graph = new StateGraph(AgentState)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesZodState: z.ZodObject<{\n messages: import(\"./zod/meta.js\").ReducedZodChannel<z.ZodType<BaseMessage[], z.ZodTypeDef, BaseMessage[]>, import(\"@langchain/core/utils/types\").InteropZodType<Messages>>;\n}, \"strip\", z.ZodTypeAny, {\n messages: BaseMessage[];\n}, {\n messages: BaseMessage[];\n}>;\n"],"mappings":";;;;;;;;;;;;;;AAwCA;;;;;;;AAgBA;;;;;;AAwCA;;;;;;;;;;;;;;;;;;cAxDqBO;oCACqCJ,eAAeE;;;;;;;;;;;;;;;cAepDM,iBAAiBL,WAAWH,eAAeE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwC3CO,kBAAkBR,CAAAA,CAAEc;8BACed,CAAAA,CAAEU,QAAQX,eAAeC,CAAAA,CAAES,YAAYV,gBAA6EF,4BAAAA,CAAvBc,eAAeV;YACxJD,CAAAA,CAAEa;YACAd;;YAEAA"}
1
+ {"version":3,"file":"messages_annotation.d.cts","names":["___web_js0","__annotation_js0","_langchain_core_utils_types0","__zod_meta_js0","BaseMessage","z","Messages","SchemaMeta","MessagesAnnotation","_langchain_core_messages0","MessageStructure","MessageType","BinaryOperatorAggregate","AnnotationRoot","MessagesZodMeta","MessagesZodState","ZodTypeDef","ZodType","InteropZodType","ReducedZodChannel","ZodTypeAny","ZodObject"],"sources":["../../src/graph/messages_annotation.d.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { z } from \"zod/v3\";\nimport { Messages } from \"./message.js\";\nimport { SchemaMeta } from \"./zod/meta.js\";\n/**\n * Prebuilt state annotation that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n *\n * Specifically, importing and using the prebuilt MessagesAnnotation like this:\n *\n * @example\n * ```ts\n * import { MessagesAnnotation, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesAnnotation)\n * .addNode(...)\n * ...\n * ```\n *\n * Is equivalent to initializing your state manually like this:\n *\n * @example\n * ```ts\n * import { BaseMessage } from \"@langchain/core/messages\";\n * import { Annotation, StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n *\n * export const StateAnnotation = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * reducer: messagesStateReducer,\n * default: () => [],\n * }),\n * });\n *\n * const graph = new StateGraph(StateAnnotation)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesAnnotation: import(\"./annotation.js\").AnnotationRoot<{\n messages: import(\"../web.js\").BinaryOperatorAggregate<BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[], Messages>;\n}>;\n/**\n * Prebuilt schema meta for Zod state definition.\n *\n * @example\n * ```ts\n * import { z } from \"zod/v4-mini\";\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const AgentState = z.object({\n * messages: z.custom<BaseMessage[]>().register(registry, MessagesZodMeta),\n * });\n * ```\n */\nexport declare const MessagesZodMeta: SchemaMeta<BaseMessage[], Messages>;\n/**\n * Prebuilt state object that uses Zod to combine returned messages.\n * This utility is synonymous with the `MessagesAnnotation` annotation,\n * but uses Zod as the way to express messages state.\n *\n * You can use import and use this prebuilt schema like this:\n *\n * @example\n * ```ts\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesZodState)\n * .addNode(...)\n * ...\n * ```\n *\n * Which is equivalent to initializing the schema object manually like this:\n *\n * @example\n * ```ts\n * import { z } from \"zod\";\n * import type { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\n * import { StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n * import \"@langchain/langgraph/zod\";\n *\n * const AgentState = z.object({\n * messages: z\n * .custom<BaseMessage[]>()\n * .default(() => [])\n * .langgraph.reducer(\n * messagesStateReducer,\n * z.custom<BaseMessageLike | BaseMessageLike[]>()\n * ),\n * });\n * const graph = new StateGraph(AgentState)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesZodState: z.ZodObject<{\n messages: import(\"./zod/meta.js\").ReducedZodChannel<z.ZodType<BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[], z.ZodTypeDef, BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[]>, import(\"@langchain/core/utils/types\").InteropZodType<Messages>>;\n}, \"strip\", z.ZodTypeAny, {\n messages: BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[];\n}, {\n messages: BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[];\n}>;\n"],"mappings":";;;;;;;;;;;;;;;;AAwCA;;;;;;;;;AAgBA;;;;;;AAwCA;;;;;;;;;;;;;;;AAG6ES,cA3DxDD,kBA2D6FG,gBAAAA,CAAAA;UAApGP,yBAAAA,CA1D4CA,WA0D5CA,CAzDZK,yBAAAA,CADuGC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,CA0DhJP,EAAAA,EA1DgKE,QA0DhKF,CAAAA;;;;;;;;;;;;;;;cA3COU,iBAAiBP,WAAWH,eAAeE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwC3CS,kBAAkBV,CAAAA,CAAEgB;8BACehB,CAAAA,CAAEY,QAAQb,YAKhEK,yBAAAA,CAL+GC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,KAAgBN,CAAAA,CAAEW,YAAYZ,YAAFK,yBAAAA,CAAiDC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,MAA8ET,4BAAAA,CAAvBgB,eAAeZ;YAClWD,CAAAA,CAAEe;YACAhB,YADUK,yBAAAA,CACqCC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA;;YAEpGP,YAFWK,yBAAAA,CAEoCC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA"}
@@ -2,6 +2,7 @@ import { BinaryOperatorAggregate } from "../channels/binop.js";
2
2
  import { ReducedZodChannel, SchemaMeta } from "./zod/meta.js";
3
3
  import { AnnotationRoot } from "./annotation.js";
4
4
  import { Messages } from "./message.js";
5
+ import * as _langchain_core_messages1 from "@langchain/core/messages";
5
6
  import { BaseMessage } from "@langchain/core/messages";
6
7
  import * as _langchain_core_utils_types0 from "@langchain/core/utils/types";
7
8
  import { z } from "zod/v3";
@@ -44,7 +45,7 @@ import { z } from "zod/v3";
44
45
  * ```
45
46
  */
46
47
  declare const MessagesAnnotation: AnnotationRoot<{
47
- messages: BinaryOperatorAggregate<BaseMessage[], Messages>;
48
+ messages: BinaryOperatorAggregate<BaseMessage<_langchain_core_messages1.MessageStructure, _langchain_core_messages1.MessageType>[], Messages>;
48
49
  }>;
49
50
  /**
50
51
  * Prebuilt schema meta for Zod state definition.
@@ -100,11 +101,11 @@ declare const MessagesZodMeta: SchemaMeta<BaseMessage[], Messages>;
100
101
  * ```
101
102
  */
102
103
  declare const MessagesZodState: z.ZodObject<{
103
- messages: ReducedZodChannel<z.ZodType<BaseMessage[], z.ZodTypeDef, BaseMessage[]>, _langchain_core_utils_types0.InteropZodType<Messages>>;
104
+ messages: ReducedZodChannel<z.ZodType<BaseMessage<_langchain_core_messages1.MessageStructure, _langchain_core_messages1.MessageType>[], z.ZodTypeDef, BaseMessage<_langchain_core_messages1.MessageStructure, _langchain_core_messages1.MessageType>[]>, _langchain_core_utils_types0.InteropZodType<Messages>>;
104
105
  }, "strip", z.ZodTypeAny, {
105
- messages: BaseMessage[];
106
+ messages: BaseMessage<_langchain_core_messages1.MessageStructure, _langchain_core_messages1.MessageType>[];
106
107
  }, {
107
- messages: BaseMessage[];
108
+ messages: BaseMessage<_langchain_core_messages1.MessageStructure, _langchain_core_messages1.MessageType>[];
108
109
  }>;
109
110
  //#endregion
110
111
  export { MessagesAnnotation, MessagesZodMeta, MessagesZodState };
@@ -1 +1 @@
1
- {"version":3,"file":"messages_annotation.d.ts","names":["__annotation_js0","_langchain_core_utils_types0","__zod_meta_js0","BaseMessage","z","Messages","SchemaMeta","MessagesAnnotation","___web_js0","BinaryOperatorAggregate","AnnotationRoot","MessagesZodMeta","MessagesZodState","ZodTypeDef","ZodType","InteropZodType","ReducedZodChannel","ZodTypeAny","ZodObject"],"sources":["../../src/graph/messages_annotation.d.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { z } from \"zod/v3\";\nimport { Messages } from \"./message.js\";\nimport { SchemaMeta } from \"./zod/meta.js\";\n/**\n * Prebuilt state annotation that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n *\n * Specifically, importing and using the prebuilt MessagesAnnotation like this:\n *\n * @example\n * ```ts\n * import { MessagesAnnotation, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesAnnotation)\n * .addNode(...)\n * ...\n * ```\n *\n * Is equivalent to initializing your state manually like this:\n *\n * @example\n * ```ts\n * import { BaseMessage } from \"@langchain/core/messages\";\n * import { Annotation, StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n *\n * export const StateAnnotation = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * reducer: messagesStateReducer,\n * default: () => [],\n * }),\n * });\n *\n * const graph = new StateGraph(StateAnnotation)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesAnnotation: import(\"./annotation.js\").AnnotationRoot<{\n messages: import(\"../web.js\").BinaryOperatorAggregate<BaseMessage[], Messages>;\n}>;\n/**\n * Prebuilt schema meta for Zod state definition.\n *\n * @example\n * ```ts\n * import { z } from \"zod/v4-mini\";\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const AgentState = z.object({\n * messages: z.custom<BaseMessage[]>().register(registry, MessagesZodMeta),\n * });\n * ```\n */\nexport declare const MessagesZodMeta: SchemaMeta<BaseMessage[], Messages>;\n/**\n * Prebuilt state object that uses Zod to combine returned messages.\n * This utility is synonymous with the `MessagesAnnotation` annotation,\n * but uses Zod as the way to express messages state.\n *\n * You can use import and use this prebuilt schema like this:\n *\n * @example\n * ```ts\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesZodState)\n * .addNode(...)\n * ...\n * ```\n *\n * Which is equivalent to initializing the schema object manually like this:\n *\n * @example\n * ```ts\n * import { z } from \"zod\";\n * import type { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\n * import { StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n * import \"@langchain/langgraph/zod\";\n *\n * const AgentState = z.object({\n * messages: z\n * .custom<BaseMessage[]>()\n * .default(() => [])\n * .langgraph.reducer(\n * messagesStateReducer,\n * z.custom<BaseMessageLike | BaseMessageLike[]>()\n * ),\n * });\n * const graph = new StateGraph(AgentState)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesZodState: z.ZodObject<{\n messages: import(\"./zod/meta.js\").ReducedZodChannel<z.ZodType<BaseMessage[], z.ZodTypeDef, BaseMessage[]>, import(\"@langchain/core/utils/types\").InteropZodType<Messages>>;\n}, \"strip\", z.ZodTypeAny, {\n messages: BaseMessage[];\n}, {\n messages: BaseMessage[];\n}>;\n"],"mappings":";;;;;;;;;;;;;;AAwCA;;;;;;;AAgBA;;;;;;AAwCA;;;;;;;;;;;;;;;;;;cAxDqBO;oCACqCJ,eAAeE;;;;;;;;;;;;;;;cAepDM,iBAAiBL,WAAWH,eAAeE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwC3CO,kBAAkBR,CAAAA,CAAEc;8BACed,CAAAA,CAAEU,QAAQX,eAAeC,CAAAA,CAAES,YAAYV,gBAA6EF,4BAAAA,CAAvBc,eAAeV;YACxJD,CAAAA,CAAEa;YACAd;;YAEAA"}
1
+ {"version":3,"file":"messages_annotation.d.ts","names":["___web_js0","__annotation_js0","_langchain_core_utils_types0","__zod_meta_js0","BaseMessage","z","Messages","SchemaMeta","MessagesAnnotation","_langchain_core_messages1","MessageStructure","MessageType","BinaryOperatorAggregate","AnnotationRoot","MessagesZodMeta","MessagesZodState","ZodTypeDef","ZodType","InteropZodType","ReducedZodChannel","ZodTypeAny","ZodObject"],"sources":["../../src/graph/messages_annotation.d.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { z } from \"zod/v3\";\nimport { Messages } from \"./message.js\";\nimport { SchemaMeta } from \"./zod/meta.js\";\n/**\n * Prebuilt state annotation that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n *\n * Specifically, importing and using the prebuilt MessagesAnnotation like this:\n *\n * @example\n * ```ts\n * import { MessagesAnnotation, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesAnnotation)\n * .addNode(...)\n * ...\n * ```\n *\n * Is equivalent to initializing your state manually like this:\n *\n * @example\n * ```ts\n * import { BaseMessage } from \"@langchain/core/messages\";\n * import { Annotation, StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n *\n * export const StateAnnotation = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * reducer: messagesStateReducer,\n * default: () => [],\n * }),\n * });\n *\n * const graph = new StateGraph(StateAnnotation)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesAnnotation: import(\"./annotation.js\").AnnotationRoot<{\n messages: import(\"../web.js\").BinaryOperatorAggregate<BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[], Messages>;\n}>;\n/**\n * Prebuilt schema meta for Zod state definition.\n *\n * @example\n * ```ts\n * import { z } from \"zod/v4-mini\";\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const AgentState = z.object({\n * messages: z.custom<BaseMessage[]>().register(registry, MessagesZodMeta),\n * });\n * ```\n */\nexport declare const MessagesZodMeta: SchemaMeta<BaseMessage[], Messages>;\n/**\n * Prebuilt state object that uses Zod to combine returned messages.\n * This utility is synonymous with the `MessagesAnnotation` annotation,\n * but uses Zod as the way to express messages state.\n *\n * You can use import and use this prebuilt schema like this:\n *\n * @example\n * ```ts\n * import { MessagesZodState, StateGraph } from \"@langchain/langgraph\";\n *\n * const graph = new StateGraph(MessagesZodState)\n * .addNode(...)\n * ...\n * ```\n *\n * Which is equivalent to initializing the schema object manually like this:\n *\n * @example\n * ```ts\n * import { z } from \"zod\";\n * import type { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\n * import { StateGraph, messagesStateReducer } from \"@langchain/langgraph\";\n * import \"@langchain/langgraph/zod\";\n *\n * const AgentState = z.object({\n * messages: z\n * .custom<BaseMessage[]>()\n * .default(() => [])\n * .langgraph.reducer(\n * messagesStateReducer,\n * z.custom<BaseMessageLike | BaseMessageLike[]>()\n * ),\n * });\n * const graph = new StateGraph(AgentState)\n * .addNode(...)\n * ...\n * ```\n */\nexport declare const MessagesZodState: z.ZodObject<{\n messages: import(\"./zod/meta.js\").ReducedZodChannel<z.ZodType<BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[], z.ZodTypeDef, BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[]>, import(\"@langchain/core/utils/types\").InteropZodType<Messages>>;\n}, \"strip\", z.ZodTypeAny, {\n messages: BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[];\n}, {\n messages: BaseMessage<import(\"@langchain/core/messages\").MessageStructure, import(\"@langchain/core/messages\").MessageType>[];\n}>;\n"],"mappings":";;;;;;;;;;;;;;;;AAwCA;;;;;;;;;AAgBA;;;;;;AAwCA;;;;;;;;;;;;;;;AAG6ES,cA3DxDD,kBA2D6FG,gBAAAA,CAAAA;UAApGP,yBAAAA,CA1D4CA,WA0D5CA,CAzDZK,yBAAAA,CADuGC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,CA0DhJP,EAAAA,EA1DgKE,QA0DhKF,CAAAA;;;;;;;;;;;;;;;cA3COU,iBAAiBP,WAAWH,eAAeE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwC3CS,kBAAkBV,CAAAA,CAAEgB;8BACehB,CAAAA,CAAEY,QAAQb,YAKhEK,yBAAAA,CAL+GC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,KAAgBN,CAAAA,CAAEW,YAAYZ,YAAFK,yBAAAA,CAAiDC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA,MAA8ET,4BAAAA,CAAvBgB,eAAeZ;YAClWD,CAAAA,CAAEe;YACAhB,YADUK,yBAAAA,CACqCC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA;;YAEpGP,YAFWK,yBAAAA,CAEoCC,gBAAAA,EAAgBD,yBAAAA,CAAqCE,WAAAA"}
@@ -155,6 +155,8 @@ var StateGraph = class extends require_graph.Graph {
155
155
  }
156
156
  if (isOptions(contextSchema)) {
157
157
  if ((0, __langchain_core_utils_types.isInteropZodObject)(contextSchema.context)) this._configRuntimeSchema = contextSchema.context;
158
+ this._interrupt = contextSchema.interrupt;
159
+ this._writer = contextSchema.writer;
158
160
  } else if ((0, __langchain_core_utils_types.isInteropZodObject)(contextSchema)) this._configRuntimeSchema = contextSchema;
159
161
  }
160
162
  get allEdges() {
@@ -251,6 +253,7 @@ var StateGraph = class extends require_graph.Graph {
251
253
  const outputChannels = outputKeys.length === 1 && outputKeys[0] === ROOT ? ROOT : outputKeys;
252
254
  const streamKeys = Object.keys(this.channels);
253
255
  const streamChannels = streamKeys.length === 1 && streamKeys[0] === ROOT ? ROOT : streamKeys;
256
+ const userInterrupt = this._interrupt;
254
257
  const compiled = new CompiledStateGraph({
255
258
  builder: this,
256
259
  checkpointer,
@@ -269,7 +272,8 @@ var StateGraph = class extends require_graph.Graph {
269
272
  store,
270
273
  cache,
271
274
  name,
272
- description
275
+ description,
276
+ userInterrupt
273
277
  });
274
278
  compiled.attachNode(require_constants.START);
275
279
  for (const [key, node] of Object.entries(this.nodes)) compiled.attachNode(key, node);