@langgraph-js/sdk 3.5.1 → 3.6.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.
@@ -3,6 +3,7 @@ import { EventEmitter } from "eventemitter3";
3
3
  import { ToolManager } from "./ToolManager.js";
4
4
  import { CallToolResult } from "./tool/createTool.js";
5
5
  import { type ILangGraphClient } from "@langgraph-js/pure-graph/dist/types.js";
6
+ import { RevertChatToOptions } from "./time-travel/index.js";
6
7
  export type RenderMessage = Message & {
7
8
  /** 对于 AIMessage 来说是节点名称,对于工具节点来说是工具名称 */
8
9
  name?: string;
@@ -143,10 +144,7 @@ export declare class LangGraphClient<TStateType = unknown> extends EventEmitter<
143
144
  metadata?: import("@langchain/langgraph-sdk").Metadata;
144
145
  limit?: number;
145
146
  offset?: number;
146
- sortBy? /**
147
- * The maximum number of retries that can be made for a single call,
148
- * with an exponential backoff between each attempt. Defaults to 6.
149
- */: import("@langgraph-js/pure-graph/dist/types.js").AssistantSortBy;
147
+ sortBy?: import("@langgraph-js/pure-graph/dist/types.js").AssistantSortBy;
150
148
  sortOrder?: import("@langgraph-js/pure-graph/dist/types.js").SortOrder;
151
149
  }): Promise<Assistant[]>;
152
150
  getGraph(assistantId: string, options?: {
@@ -230,7 +228,7 @@ export declare class LangGraphClient<TStateType = unknown> extends EventEmitter<
230
228
  * @zh 回滚到指定的消息。但是不会触发数据的重新更新
231
229
  * @en Reverts to the specified message.
232
230
  */
233
- revertChatTo(messageId: string): Promise<{
231
+ revertChatTo(messageId: string, options: RevertChatToOptions): Promise<{
234
232
  messages: Message[];
235
233
  }>;
236
234
  messagesMetadata: {};
@@ -197,8 +197,8 @@ export class LangGraphClient extends EventEmitter {
197
197
  * @zh 回滚到指定的消息。但是不会触发数据的重新更新
198
198
  * @en Reverts to the specified message.
199
199
  */
200
- async revertChatTo(messageId) {
201
- const { state, checkpoint } = await revertChatTo(this.client, this.currentThread.thread_id, messageId);
200
+ async revertChatTo(messageId, options) {
201
+ const { state, checkpoint } = await revertChatTo(this.client, this.currentThread.thread_id, messageId, options);
202
202
  this.graphState = state;
203
203
  this.messageProcessor.clearStreamingMessages();
204
204
  this.messageProcessor.setGraphMessages(state.messages);
@@ -266,7 +266,7 @@ export class LangGraphClient extends EventEmitter {
266
266
  Object.assign(this.messagesMetadata, chunk.data);
267
267
  continue;
268
268
  }
269
- else if (chunk.event === "messages/partial") {
269
+ else if (chunk.event === "messages/partial" || chunk.event === "messages/complete") {
270
270
  for (const message of chunk.data) {
271
271
  this.messageProcessor.updateStreamingMessage(message);
272
272
  }
@@ -38,7 +38,7 @@ export declare const useChat: () => UnionStore<{
38
38
  addToHistory: (thread: import("@langchain/langgraph-sdk").Thread<{
39
39
  messages: import("@langchain/langgraph-sdk").Message[];
40
40
  }>) => void;
41
- revertChatTo(messageId: string, resend?: boolean, sendOptions?: import("../LangGraphClient.js").SendMessageOptions): Promise<void>;
41
+ revertChatTo(messageId: string, resend?: boolean, sendOptions?: import("../LangGraphClient.js").SendMessageOptions & import("../time-travel/index.js").RevertChatToOptions): Promise<void>;
42
42
  setUserInput(input: string): void;
43
43
  setCurrentAgent(agent: string): Promise<void>;
44
44
  toggleGraphVisible(): void;
@@ -1,9 +1,12 @@
1
1
  import { Client, Message } from "@langchain/langgraph-sdk";
2
+ export interface RevertChatToOptions {
3
+ includeMessageId?: boolean;
4
+ }
2
5
  export declare function revertChatTo(client: Client<{
3
6
  messages: Message[];
4
7
  }, {
5
8
  messages: Message[];
6
- }, unknown>, threadId: string, messageId: string): Promise<{
9
+ }, unknown>, threadId: string, messageId: string, options: RevertChatToOptions): Promise<{
7
10
  state: {
8
11
  messages: Message[];
9
12
  };
@@ -1,11 +1,12 @@
1
- export async function revertChatTo(client, threadId, messageId) {
1
+ export async function revertChatTo(client, threadId, messageId, options) {
2
2
  const thread = await client.threads.get(threadId);
3
3
  const messages = thread.values.messages;
4
4
  const idx = messages.findIndex((message) => message.id === messageId);
5
5
  if (idx === -1) {
6
6
  throw new Error(`Message id ${messageId} not found`);
7
7
  }
8
- const removeMessages = messages.slice(idx + 1);
8
+ const removeStartIdx = options.includeMessageId ? idx : idx + 1;
9
+ const removeMessages = messages.slice(removeStartIdx);
9
10
  const state = {
10
11
  ...thread.values,
11
12
  messages: removeMessages.map((i) => {
@@ -23,7 +24,7 @@ export async function revertChatTo(client, threadId, messageId) {
23
24
  // client.runs.wait();
24
25
  return {
25
26
  state: {
26
- messages: messages.slice(0, idx + 1),
27
+ messages: messages.slice(0, removeStartIdx),
27
28
  },
28
29
  checkpoint: res,
29
30
  };
@@ -1,6 +1,7 @@
1
1
  import { LangGraphClient, LangGraphClientConfig, RenderMessage, SendMessageOptions } from "../LangGraphClient.js";
2
2
  import { AssistantGraph, Message, Thread } from "@langchain/langgraph-sdk";
3
3
  import { UnionTool } from "../tool/createTool.js";
4
+ import { RevertChatToOptions } from "../time-travel/index.js";
4
5
  /**
5
6
  * @zh 格式化日期对象为时间字符串。
6
7
  * @en Formats a Date object into a time string.
@@ -72,7 +73,7 @@ export declare const createChatStore: (initClientName: string, config: Partial<L
72
73
  * @zh 回滚到指定的消息。
73
74
  * @en Reverts to the specified message.
74
75
  */
75
- revertChatTo(messageId: string, resend?: boolean, sendOptions?: SendMessageOptions): Promise<void>;
76
+ revertChatTo(messageId: string, resend?: boolean, sendOptions?: SendMessageOptions & RevertChatToOptions): Promise<void>;
76
77
  /**
77
78
  * @zh 设置用户输入内容。
78
79
  * @en Sets the user input content.
@@ -285,7 +285,7 @@ export const createChatStore = (initClientName, config, context = {}) => {
285
285
  */
286
286
  async revertChatTo(messageId, resend = false, sendOptions) {
287
287
  var _a;
288
- await ((_a = client.get()) === null || _a === void 0 ? void 0 : _a.revertChatTo(messageId));
288
+ await ((_a = client.get()) === null || _a === void 0 ? void 0 : _a.revertChatTo(messageId, sendOptions || {}));
289
289
  if (resend) {
290
290
  return sendMessage([], sendOptions, true);
291
291
  }
@@ -77,7 +77,7 @@ export declare const useChatProvider: (props: ChatProviderProps) => {
77
77
  addToHistory: (thread: import("@langchain/langgraph-sdk").Thread<{
78
78
  messages: import("@langchain/langgraph-sdk").Message[];
79
79
  }>) => void;
80
- revertChatTo(messageId: string, resend?: boolean, sendOptions?: import("../LangGraphClient.js").SendMessageOptions): Promise<void>;
80
+ revertChatTo(messageId: string, resend?: boolean, sendOptions?: import("../LangGraphClient.js").SendMessageOptions & import("../time-travel/index.js").RevertChatToOptions): Promise<void>;
81
81
  setUserInput(input: string): void;
82
82
  setCurrentAgent(agent: string): Promise<void>;
83
83
  toggleGraphVisible(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langgraph-js/sdk",
3
- "version": "3.5.1",
3
+ "version": "3.6.0",
4
4
  "description": "The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -4,7 +4,7 @@ import { ToolManager } from "./ToolManager.js";
4
4
  import { CallToolResult } from "./tool/createTool.js";
5
5
  import { type ILangGraphClient } from "@langgraph-js/pure-graph/dist/types.js";
6
6
  import { MessageProcessor } from "./MessageProcessor.js";
7
- import { revertChatTo } from "./time-travel/index.js";
7
+ import { revertChatTo, RevertChatToOptions } from "./time-travel/index.js";
8
8
 
9
9
  export type RenderMessage = Message & {
10
10
  /** 对于 AIMessage 来说是节点名称,对于工具节点来说是工具名称 */
@@ -310,8 +310,8 @@ export class LangGraphClient<TStateType = unknown> extends EventEmitter<LangGrap
310
310
  * @zh 回滚到指定的消息。但是不会触发数据的重新更新
311
311
  * @en Reverts to the specified message.
312
312
  */
313
- async revertChatTo(messageId: string) {
314
- const { state, checkpoint } = await revertChatTo(this.client as any, this.currentThread!.thread_id, messageId);
313
+ async revertChatTo(messageId: string, options: RevertChatToOptions) {
314
+ const { state, checkpoint } = await revertChatTo(this.client as any, this.currentThread!.thread_id, messageId, options);
315
315
  this.graphState = state;
316
316
  this.messageProcessor.clearStreamingMessages();
317
317
  this.messageProcessor.setGraphMessages(state.messages! as RenderMessage[]);
@@ -382,7 +382,7 @@ export class LangGraphClient<TStateType = unknown> extends EventEmitter<LangGrap
382
382
  } else if (chunk.event === "messages/metadata") {
383
383
  Object.assign(this.messagesMetadata, chunk.data);
384
384
  continue;
385
- } else if (chunk.event === "messages/partial") {
385
+ } else if (chunk.event === "messages/partial" || chunk.event === "messages/complete") {
386
386
  for (const message of chunk.data) {
387
387
  this.messageProcessor.updateStreamingMessage(message);
388
388
  }
@@ -1,13 +1,18 @@
1
1
  import { Client, Message } from "@langchain/langgraph-sdk";
2
2
 
3
- export async function revertChatTo(client: Client<{ messages: Message[] }, { messages: Message[] }, unknown>, threadId: string, messageId: string) {
3
+ export interface RevertChatToOptions {
4
+ includeMessageId?: boolean;
5
+ }
6
+
7
+ export async function revertChatTo(client: Client<{ messages: Message[] }, { messages: Message[] }, unknown>, threadId: string, messageId: string, options: RevertChatToOptions) {
4
8
  const thread = await client.threads.get(threadId);
5
9
  const messages = thread.values.messages;
6
10
  const idx = messages.findIndex((message) => message.id === messageId);
7
11
  if (idx === -1) {
8
12
  throw new Error(`Message id ${messageId} not found`);
9
13
  }
10
- const removeMessages = messages.slice(idx + 1);
14
+ const removeStartIdx = options.includeMessageId ? idx : idx + 1;
15
+ const removeMessages = messages.slice(removeStartIdx);
11
16
  const state = {
12
17
  ...thread.values,
13
18
  messages: removeMessages.map((i) => {
@@ -25,7 +30,7 @@ export async function revertChatTo(client: Client<{ messages: Message[] }, { mes
25
30
  // client.runs.wait();
26
31
  return {
27
32
  state: {
28
- messages: messages.slice(0, idx + 1),
33
+ messages: messages.slice(0, removeStartIdx),
29
34
  },
30
35
  checkpoint: res,
31
36
  };
@@ -6,6 +6,7 @@ import { ToolRenderData } from "../tool/ToolUI.js";
6
6
  import { UnionTool } from "../tool/createTool.js";
7
7
  import { createLangGraphServerClient } from "../client/LanggraphServer.js";
8
8
  import { useArtifacts } from "../artifacts/index.js";
9
+ import { RevertChatToOptions } from "../time-travel/index.js";
9
10
 
10
11
  /**
11
12
  * @zh 格式化日期对象为时间字符串。
@@ -290,8 +291,8 @@ export const createChatStore = (
290
291
  * @zh 回滚到指定的消息。
291
292
  * @en Reverts to the specified message.
292
293
  */
293
- async revertChatTo(messageId: string, resend = false, sendOptions?: SendMessageOptions) {
294
- await client.get()?.revertChatTo(messageId);
294
+ async revertChatTo(messageId: string, resend = false, sendOptions?: SendMessageOptions & RevertChatToOptions) {
295
+ await client.get()?.revertChatTo(messageId, sendOptions || {});
295
296
  if (resend) {
296
297
  return sendMessage([], sendOptions, true);
297
298
  } else {