@langgraph-js/sdk 1.8.0 → 1.9.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.
@@ -384,7 +384,7 @@ export class LangGraphClient extends Client {
384
384
  ...this.extraParams,
385
385
  ...(extraParams || {}),
386
386
  messages: messagesToSend,
387
- fe_tools: this.tools.toJSON(this.currentAssistant.graph_id),
387
+ fe_tools: await this.tools.toJSON(this.currentAssistant.graph_id),
388
388
  },
389
389
  streamMode: ["messages", "values"],
390
390
  streamSubgraphs: true,
@@ -52,7 +52,7 @@ export declare class ToolManager {
52
52
  * @zh 将所有工具转换为 JSON 定义格式。
53
53
  * @en Converts all tools to JSON definition format.
54
54
  */
55
- toJSON(graphId: string, remote?: boolean): {
55
+ toJSON(graphId: string, remote?: boolean): Promise<{
56
56
  name: string;
57
57
  description: string;
58
58
  parameters: import("zod-to-json-schema").JsonSchema7Type & {
@@ -61,7 +61,7 @@ export declare class ToolManager {
61
61
  [key: string]: import("zod-to-json-schema").JsonSchema7Type;
62
62
  } | undefined;
63
63
  };
64
- }[];
64
+ }[]>;
65
65
  /**
66
66
  * @zh 标记指定 ID 的工具等待已完成,并传递结果。
67
67
  * @en Marks the tool waiting with the specified ID as completed and passes the result.
@@ -77,7 +77,7 @@ export class ToolManager {
77
77
  * @zh 将所有工具转换为 JSON 定义格式。
78
78
  * @en Converts all tools to JSON definition format.
79
79
  */
80
- toJSON(graphId, remote = true) {
80
+ async toJSON(graphId, remote = true) {
81
81
  return Array.from(this.tools.values())
82
82
  .filter((i) => (remote ? !i.onlyRender : true))
83
83
  .filter((i) => !i.allowGraph || i.allowGraph.includes(graphId))
@@ -2,7 +2,7 @@ import { z, ZodRawShape, ZodTypeAny } from "zod";
2
2
  import { Action, Parameter } from "./copilotkit-actions.js";
3
3
  import { Message } from "@langchain/langgraph-sdk";
4
4
  import { ToolRenderData } from "./ToolUI.js";
5
- export interface UnionTool<Args extends ZodRawShape, Child extends Object = Object, D = any> {
5
+ export interface UnionTool<Args extends ZodRawShape, Child extends Object = Object, ResponseType = any> {
6
6
  name: string;
7
7
  description: string;
8
8
  parameters: Args;
@@ -11,8 +11,8 @@ export interface UnionTool<Args extends ZodRawShape, Child extends Object = Obje
11
11
  execute?: ToolCallback<Args>;
12
12
  /** 工具执行成功后触发的附加消息 */
13
13
  callbackMessage?: (result: CallToolResult) => Message[];
14
- handler?: (args: z.objectOutputType<Args, ZodTypeAny>, context?: any) => D | Promise<D>;
15
- render?: (tool: ToolRenderData<z.objectOutputType<Args, ZodTypeAny>, D>) => Child;
14
+ handler?: (args: z.objectOutputType<Args, ZodTypeAny>, context?: any) => ResponseType | Promise<ResponseType>;
15
+ render?: (tool: ToolRenderData<z.objectOutputType<Args, ZodTypeAny>, ResponseType>) => Child;
16
16
  onlyRender?: boolean;
17
17
  /** 只允许指定的 agent 使用该工具,如果未指定,则所有 agent 都可以使用 */
18
18
  allowAgent?: string[];
@@ -9,9 +9,8 @@ export const createTool = (tool) => {
9
9
  * create Type Safe Tool with zod and UI Render Feature
10
10
  */
11
11
  export const createUITool = (tool) => {
12
- return {
13
- ...tool,
14
- async execute(args, context) {
12
+ const execute = tool.execute ||
13
+ (async (args, context) => {
15
14
  var _a;
16
15
  try {
17
16
  const result = await ((_a = tool.handler) === null || _a === void 0 ? void 0 : _a.call(tool, args, context));
@@ -23,7 +22,10 @@ export const createUITool = (tool) => {
23
22
  catch (error) {
24
23
  return [{ type: "text", text: `Error: ${error}` }];
25
24
  }
26
- },
25
+ });
26
+ return {
27
+ ...tool,
28
+ execute,
27
29
  };
28
30
  };
29
31
  /**
@@ -1,5 +1,6 @@
1
1
  import { LangGraphClient, LangGraphClientConfig, RenderMessage, SendMessageOptions } from "../LangGraphClient.js";
2
2
  import { AssistantGraph, Message, Thread } from "@langchain/langgraph-sdk";
3
+ import { UnionTool } from "../tool/createTool.js";
3
4
  /**
4
5
  * @zh 格式化日期对象为时间字符串。
5
6
  * @en Formats a Date object into a time string.
@@ -45,8 +46,10 @@ export declare const createChatStore: (initClientName: string, config: LangGraph
45
46
  showGraph: import("nanostores").PreinitializedWritableAtom<boolean> & object;
46
47
  graphVisualize: import("nanostores").PreinitializedWritableAtom<AssistantGraph | null> & object;
47
48
  currentNodeName: import("nanostores").PreinitializedWritableAtom<string> & object;
49
+ tools: import("nanostores").PreinitializedWritableAtom<UnionTool<any, Object, any>[]> & object;
48
50
  };
49
51
  mutations: {
52
+ setTools(new_tools: UnionTool<any>[]): void;
50
53
  isFELocking(): boolean | undefined;
51
54
  initClient: () => Promise<LangGraphClient>;
52
55
  sendMessage: (message?: Message[], extraData?: SendMessageOptions) => Promise<void>;
@@ -75,6 +75,14 @@ export const createChatStore = (initClientName, config, context = {}) => {
75
75
  const currentAgent = atom(initClientName);
76
76
  const currentChatId = atom(null);
77
77
  const currentNodeName = atom("__start__");
78
+ const tools = atom([]);
79
+ const refreshTools = async () => {
80
+ const c = client.get();
81
+ if (!c)
82
+ return;
83
+ c.tools.clearTools();
84
+ c.tools.bindTools(tools.get());
85
+ };
78
86
  // 显示 langgraph 可视化图
79
87
  const showGraph = atom((_b = context.showGraph) !== null && _b !== void 0 ? _b : false);
80
88
  const graphVisualize = atom(null);
@@ -213,8 +221,13 @@ export const createChatStore = (initClientName, config, context = {}) => {
213
221
  showGraph,
214
222
  graphVisualize,
215
223
  currentNodeName,
224
+ tools,
216
225
  },
217
226
  mutations: {
227
+ setTools(new_tools) {
228
+ tools.set(new_tools);
229
+ refreshTools();
230
+ },
218
231
  isFELocking() {
219
232
  var _a;
220
233
  return (_a = client.get()) === null || _a === void 0 ? void 0 : _a.isFELocking(renderMessages.get());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langgraph-js/sdk",
3
- "version": "1.8.0",
3
+ "version": "1.9.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",
@@ -465,7 +465,7 @@ export class LangGraphClient extends Client {
465
465
  ...this.extraParams,
466
466
  ...(extraParams || {}),
467
467
  messages: messagesToSend,
468
- fe_tools: this.tools.toJSON(this.currentAssistant.graph_id),
468
+ fe_tools: await this.tools.toJSON(this.currentAssistant.graph_id),
469
469
  },
470
470
  streamMode: ["messages", "values"],
471
471
  streamSubgraphs: true,
@@ -10,7 +10,6 @@ export class ToolManager {
10
10
  private tools: Map<string, UnionTool<any>> = new Map();
11
11
  // === 专门为前端设计的异步触发结构
12
12
  private waitingMap: Map<string, (value: CallToolResult) => void> = new Map();
13
-
14
13
  /**
15
14
  * @zh 注册一个工具。
16
15
  * @en Registers a tool.
@@ -85,7 +84,7 @@ export class ToolManager {
85
84
  * @zh 将所有工具转换为 JSON 定义格式。
86
85
  * @en Converts all tools to JSON definition format.
87
86
  */
88
- toJSON(graphId: string, remote = true) {
87
+ async toJSON(graphId: string, remote = true) {
89
88
  return Array.from(this.tools.values())
90
89
  .filter((i) => (remote ? !i.onlyRender : true))
91
90
  .filter((i) => !i.allowGraph || i.allowGraph.includes(graphId))
@@ -5,7 +5,7 @@ import { zodToJsonSchema } from "zod-to-json-schema";
5
5
  import { Message } from "@langchain/langgraph-sdk";
6
6
  import { ToolRenderData } from "./ToolUI.js";
7
7
 
8
- export interface UnionTool<Args extends ZodRawShape, Child extends Object = Object, D = any> {
8
+ export interface UnionTool<Args extends ZodRawShape, Child extends Object = Object, ResponseType = any> {
9
9
  name: string;
10
10
  description: string;
11
11
  parameters: Args;
@@ -14,8 +14,8 @@ export interface UnionTool<Args extends ZodRawShape, Child extends Object = Obje
14
14
  execute?: ToolCallback<Args>;
15
15
  /** 工具执行成功后触发的附加消息 */
16
16
  callbackMessage?: (result: CallToolResult) => Message[];
17
- handler?: (args: z.objectOutputType<Args, ZodTypeAny>, context?: any) => D | Promise<D>;
18
- render?: (tool: ToolRenderData<z.objectOutputType<Args, ZodTypeAny>, D>) => Child;
17
+ handler?: (args: z.objectOutputType<Args, ZodTypeAny>, context?: any) => ResponseType | Promise<ResponseType>;
18
+ render?: (tool: ToolRenderData<z.objectOutputType<Args, ZodTypeAny>, ResponseType>) => Child;
19
19
  onlyRender?: boolean;
20
20
  /** 只允许指定的 agent 使用该工具,如果未指定,则所有 agent 都可以使用 */
21
21
  allowAgent?: string[];
@@ -35,9 +35,9 @@ export const createTool = <Args extends ZodRawShape>(tool: UnionTool<Args>) => {
35
35
  * create Type Safe Tool with zod and UI Render Feature
36
36
  */
37
37
  export const createUITool = <Args extends ZodRawShape, Child extends Object = {}>(tool: UnionTool<Args, Child>): UnionTool<Args, Child> => {
38
- return {
39
- ...tool,
40
- async execute(args, context) {
38
+ const execute =
39
+ tool.execute ||
40
+ (async (args, context) => {
41
41
  try {
42
42
  const result = await tool.handler?.(args, context);
43
43
  if (typeof result === "string") {
@@ -47,7 +47,10 @@ export const createUITool = <Args extends ZodRawShape, Child extends Object = {}
47
47
  } catch (error) {
48
48
  return [{ type: "text", text: `Error: ${error}` }];
49
49
  }
50
- },
50
+ });
51
+ return {
52
+ ...tool,
53
+ execute,
51
54
  };
52
55
  };
53
56
 
@@ -3,6 +3,7 @@ import { LangGraphClient, LangGraphClientConfig, RenderMessage, SendMessageOptio
3
3
  import { AssistantGraph, Message, Thread } from "@langchain/langgraph-sdk";
4
4
  import { rafDebounce } from "./rafDebounce.js";
5
5
  import { ToolRenderData } from "../tool/ToolUI.js";
6
+ import { UnionTool } from "../tool/createTool.js";
6
7
 
7
8
  /**
8
9
  * @zh 格式化日期对象为时间字符串。
@@ -82,6 +83,14 @@ export const createChatStore = (
82
83
  const currentChatId = atom<string | null>(null);
83
84
  const currentNodeName = atom<string>("__start__");
84
85
 
86
+ const tools = atom<UnionTool<any>[]>([]);
87
+ const refreshTools = async () => {
88
+ const c = client.get();
89
+ if (!c) return;
90
+ c.tools.clearTools();
91
+ c.tools.bindTools(tools.get());
92
+ };
93
+
85
94
  // 显示 langgraph 可视化图
86
95
  const showGraph = atom<boolean>(context.showGraph ?? false);
87
96
  const graphVisualize = atom<AssistantGraph | null>(null);
@@ -221,8 +230,13 @@ export const createChatStore = (
221
230
  showGraph,
222
231
  graphVisualize,
223
232
  currentNodeName,
233
+ tools,
224
234
  },
225
235
  mutations: {
236
+ setTools(new_tools: UnionTool<any>[]) {
237
+ tools.set(new_tools);
238
+ refreshTools();
239
+ },
226
240
  isFELocking() {
227
241
  return client.get()?.isFELocking(renderMessages.get());
228
242
  },