@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.
- package/dist/LangGraphClient.js +1 -1
- package/dist/ToolManager.d.ts +2 -2
- package/dist/ToolManager.js +1 -1
- package/dist/tool/createTool.d.ts +3 -3
- package/dist/tool/createTool.js +6 -4
- package/dist/ui-store/createChatStore.d.ts +3 -0
- package/dist/ui-store/createChatStore.js +13 -0
- package/package.json +1 -1
- package/src/LangGraphClient.ts +1 -1
- package/src/ToolManager.ts +1 -2
- package/src/tool/createTool.ts +10 -7
- package/src/ui-store/createChatStore.ts +14 -0
package/dist/LangGraphClient.js
CHANGED
|
@@ -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,
|
package/dist/ToolManager.d.ts
CHANGED
|
@@ -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.
|
package/dist/ToolManager.js
CHANGED
|
@@ -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,
|
|
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) =>
|
|
15
|
-
render?: (tool: ToolRenderData<z.objectOutputType<Args, ZodTypeAny>,
|
|
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[];
|
package/dist/tool/createTool.js
CHANGED
|
@@ -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
|
-
|
|
13
|
-
|
|
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
package/src/LangGraphClient.ts
CHANGED
|
@@ -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,
|
package/src/ToolManager.ts
CHANGED
|
@@ -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))
|
package/src/tool/createTool.ts
CHANGED
|
@@ -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,
|
|
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) =>
|
|
18
|
-
render?: (tool: ToolRenderData<z.objectOutputType<Args, ZodTypeAny>,
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
async
|
|
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
|
},
|