@langchain/langgraph-sdk 0.1.3 → 0.1.5

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @langchain/langgraph-sdk
2
2
 
3
+ ## 0.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - f21fd04: Fix mutate function in `onCustomEvent` and in `onUpdateEvent` receiving incorrect previous value
8
+
9
+ ## 0.1.4
10
+
11
+ ### Patch Changes
12
+
13
+ - 599a8c5: Add support for streaming of RemoveMessage in useStream
14
+ - 15afabe: Allow `@langchain/core@1.0.0-alpha` installed alongside SDK
15
+
3
16
  ## 0.1.3
4
17
 
5
18
  ### Patch Changes
@@ -83,7 +83,10 @@ class StreamManager {
83
83
  writable: true,
84
84
  value: (kind, historyValues) => {
85
85
  return (update) => {
86
- const prev = { ...historyValues, ...this.state.values };
86
+ const prev = {
87
+ ...historyValues,
88
+ ...(this.state.values ?? [null, "stream"])[0],
89
+ };
87
90
  const next = typeof update === "function" ? update(prev) : update;
88
91
  this.setStreamValues({ ...prev, ...next }, kind);
89
92
  };
@@ -159,7 +162,12 @@ class StreamManager {
159
162
  const { chunk, index } = this.messages.get(messageId, messages.length) ?? {};
160
163
  if (!chunk || index == null)
161
164
  return values;
162
- messages[index] = (0, messages_js_1.toMessageDict)(chunk);
165
+ if (chunk.getType() === "remove") {
166
+ messages.splice(index, 1);
167
+ }
168
+ else {
169
+ messages[index] = (0, messages_js_1.toMessageDict)(chunk);
170
+ }
163
171
  return options.setMessages(values, messages);
164
172
  });
165
173
  }
@@ -80,7 +80,10 @@ export class StreamManager {
80
80
  writable: true,
81
81
  value: (kind, historyValues) => {
82
82
  return (update) => {
83
- const prev = { ...historyValues, ...this.state.values };
83
+ const prev = {
84
+ ...historyValues,
85
+ ...(this.state.values ?? [null, "stream"])[0],
86
+ };
84
87
  const next = typeof update === "function" ? update(prev) : update;
85
88
  this.setStreamValues({ ...prev, ...next }, kind);
86
89
  };
@@ -156,7 +159,12 @@ export class StreamManager {
156
159
  const { chunk, index } = this.messages.get(messageId, messages.length) ?? {};
157
160
  if (!chunk || index == null)
158
161
  return values;
159
- messages[index] = toMessageDict(chunk);
162
+ if (chunk.getType() === "remove") {
163
+ messages.splice(index, 1);
164
+ }
165
+ else {
166
+ messages[index] = toMessageDict(chunk);
167
+ }
160
168
  return options.setMessages(values, messages);
161
169
  });
162
170
  }
@@ -10,6 +10,13 @@ function tryConvertToChunk(message) {
10
10
  return null;
11
11
  }
12
12
  }
13
+ function tryCoerceMessageLikeToMessage(message) {
14
+ // TODO: this is unnecessary with https://github.com/langchain-ai/langchainjs/pull/8941
15
+ if (message.type === "remove" && message.id != null) {
16
+ return new messages_1.RemoveMessage({ ...message, id: message.id });
17
+ }
18
+ return (0, messages_1.coerceMessageLikeToMessage)(message);
19
+ }
13
20
  class MessageTupleManager {
14
21
  constructor() {
15
22
  Object.defineProperty(this, "chunks", {
@@ -29,7 +36,7 @@ class MessageTupleManager {
29
36
  .slice(0, -"MessageChunk".length)
30
37
  .toLowerCase();
31
38
  }
32
- const message = (0, messages_1.coerceMessageLikeToMessage)(serialized);
39
+ const message = tryCoerceMessageLikeToMessage(serialized);
33
40
  const chunk = tryConvertToChunk(message);
34
41
  const { id } = chunk ?? message;
35
42
  if (!id) {
@@ -1,4 +1,4 @@
1
- import { convertToChunk, coerceMessageLikeToMessage, isBaseMessageChunk, } from "@langchain/core/messages";
1
+ import { RemoveMessage, convertToChunk, coerceMessageLikeToMessage, isBaseMessageChunk, } from "@langchain/core/messages";
2
2
  function tryConvertToChunk(message) {
3
3
  try {
4
4
  return convertToChunk(message);
@@ -7,6 +7,13 @@ function tryConvertToChunk(message) {
7
7
  return null;
8
8
  }
9
9
  }
10
+ function tryCoerceMessageLikeToMessage(message) {
11
+ // TODO: this is unnecessary with https://github.com/langchain-ai/langchainjs/pull/8941
12
+ if (message.type === "remove" && message.id != null) {
13
+ return new RemoveMessage({ ...message, id: message.id });
14
+ }
15
+ return coerceMessageLikeToMessage(message);
16
+ }
10
17
  export class MessageTupleManager {
11
18
  constructor() {
12
19
  Object.defineProperty(this, "chunks", {
@@ -26,7 +33,7 @@ export class MessageTupleManager {
26
33
  .slice(0, -"MessageChunk".length)
27
34
  .toLowerCase();
28
35
  }
29
- const message = coerceMessageLikeToMessage(serialized);
36
+ const message = tryCoerceMessageLikeToMessage(serialized);
30
37
  const chunk = tryConvertToChunk(message);
31
38
  const { id } = chunk ?? message;
32
39
  if (!id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/langgraph-sdk",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Client library for interacting with the LangGraph API",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -48,7 +48,7 @@
48
48
  "vitest": "^3.1.2"
49
49
  },
50
50
  "peerDependencies": {
51
- "@langchain/core": ">=0.2.31 <0.4.0",
51
+ "@langchain/core": ">=0.2.31 <0.4.0 || ^1.0.0-alpha",
52
52
  "react": "^18 || ^19",
53
53
  "react-dom": "^18 || ^19"
54
54
  },