@langchain/vue 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.custom.cjs","names":["StreamManager","MessageTupleManager","toMessageClass"],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { onUnmounted, shallowRef, watch } from \"vue\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const streamValues = shallowRef<StateType | null>(stream.values);\n const streamError = shallowRef<unknown>(stream.error);\n const isLoading = shallowRef(stream.isLoading);\n\n const unsubscribe = stream.subscribe(() => {\n streamValues.value = stream.values;\n streamError.value = stream.error;\n isLoading.value = stream.isLoading;\n });\n\n onUnmounted(() => {\n unsubscribe();\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n watch(\n () => options.threadId,\n (newId) => {\n const resolved = newId ?? null;\n if (resolved !== threadId) {\n threadId = resolved;\n stream.clear();\n }\n },\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n // @ts-expect-error used in watch callback below\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n watch(\n () => ({\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n getMessages(historyValues).length > 0,\n len: getMessages(historyValues).length,\n }),\n ({ should }) => {\n if (should) {\n stream.reconstructSubagents(getMessages(historyValues), {\n skipIfPopulated: true,\n });\n }\n },\n { immediate: true },\n );\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!threadId) {\n threadId = crypto.randomUUID();\n options.onThreadId?.(threadId);\n }\n\n if (!threadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: threadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n return {\n get values() {\n return streamValues.value ?? ({} as StateType);\n },\n\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n queue: {\n entries: [],\n size: 0,\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n streamValues.value != null &&\n \"__interrupt__\" in streamValues.value &&\n Array.isArray(streamValues.value.__interrupt__)\n ) {\n const valueInterrupts = streamValues.value.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n return extractInterrupts<InterruptType>(streamValues.value);\n },\n\n get messages(): Message[] {\n if (!streamValues.value) return [];\n return getMessages(streamValues.value);\n },\n\n get toolCalls() {\n if (!streamValues.value) return [];\n return getToolCallsWithResults(getMessages(streamValues.value));\n },\n\n getToolCalls(message: Message) {\n if (!streamValues.value) return [];\n const allToolCalls = getToolCallsWithResults(\n getMessages(streamValues.value),\n );\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ import { onUnmounted, shallowRef, watch } from "vue";
2
+ import { MessageTupleManager, StreamManager, extractInterrupts, toMessageClass } from "@langchain/langgraph-sdk/ui";
3
+ import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
4
+
5
+ //#region src/stream.custom.ts
6
+ function useStreamCustom(options) {
7
+ const stream = new StreamManager(new MessageTupleManager(), {
8
+ throttle: options.throttle ?? false,
9
+ subagentToolNames: options.subagentToolNames,
10
+ filterSubagentMessages: options.filterSubagentMessages,
11
+ toMessage: toMessageClass
12
+ });
13
+ const streamValues = shallowRef(stream.values);
14
+ const streamError = shallowRef(stream.error);
15
+ const isLoading = shallowRef(stream.isLoading);
16
+ const unsubscribe = stream.subscribe(() => {
17
+ streamValues.value = stream.values;
18
+ streamError.value = stream.error;
19
+ isLoading.value = stream.isLoading;
20
+ });
21
+ onUnmounted(() => {
22
+ unsubscribe();
23
+ });
24
+ let threadId = options.threadId ?? null;
25
+ watch(() => options.threadId, (newId) => {
26
+ const resolved = newId ?? null;
27
+ if (resolved !== threadId) {
28
+ threadId = resolved;
29
+ stream.clear();
30
+ }
31
+ });
32
+ const getMessages = (value) => {
33
+ const messagesKey = options.messagesKey ?? "messages";
34
+ return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];
35
+ };
36
+ const setMessages = (current, messages) => {
37
+ const messagesKey = options.messagesKey ?? "messages";
38
+ return {
39
+ ...current,
40
+ [messagesKey]: messages
41
+ };
42
+ };
43
+ const historyValues = options.initialValues ?? {};
44
+ const historyMessages = getMessages(historyValues);
45
+ options.filterSubagentMessages && !stream.isLoading && historyMessages.length;
46
+ watch(() => ({
47
+ should: options.filterSubagentMessages && !isLoading.value && getMessages(historyValues).length > 0,
48
+ len: getMessages(historyValues).length
49
+ }), ({ should }) => {
50
+ if (should) stream.reconstructSubagents(getMessages(historyValues), { skipIfPopulated: true });
51
+ }, { immediate: true });
52
+ function switchThread(newThreadId) {
53
+ if (newThreadId !== threadId) {
54
+ threadId = newThreadId;
55
+ stream.clear();
56
+ }
57
+ }
58
+ function stop() {
59
+ return stream.stop(historyValues, { onStop: options.onStop });
60
+ }
61
+ async function submitDirect(values, submitOptions) {
62
+ const currentThreadId = options.threadId ?? null;
63
+ if (currentThreadId !== threadId) {
64
+ threadId = currentThreadId;
65
+ stream.clear();
66
+ }
67
+ stream.setStreamValues(() => {
68
+ if (submitOptions?.optimisticValues != null) return {
69
+ ...historyValues,
70
+ ...typeof submitOptions.optimisticValues === "function" ? submitOptions.optimisticValues(historyValues) : submitOptions.optimisticValues
71
+ };
72
+ return { ...historyValues };
73
+ });
74
+ await stream.start(async (signal) => {
75
+ if (!threadId) {
76
+ threadId = crypto.randomUUID();
77
+ options.onThreadId?.(threadId);
78
+ }
79
+ if (!threadId) throw new Error("Failed to obtain valid thread ID.");
80
+ return options.transport.stream({
81
+ input: values,
82
+ context: submitOptions?.context,
83
+ command: submitOptions?.command,
84
+ signal,
85
+ config: {
86
+ ...submitOptions?.config,
87
+ configurable: {
88
+ thread_id: threadId,
89
+ ...submitOptions?.config?.configurable
90
+ }
91
+ }
92
+ });
93
+ }, {
94
+ getMessages,
95
+ setMessages,
96
+ initialValues: {},
97
+ callbacks: options,
98
+ onSuccess: () => void 0,
99
+ onError(error) {
100
+ options.onError?.(error, void 0);
101
+ }
102
+ });
103
+ }
104
+ async function submit(values, submitOptions) {
105
+ await submitDirect(values, submitOptions);
106
+ }
107
+ return {
108
+ get values() {
109
+ return streamValues.value ?? {};
110
+ },
111
+ error: streamError,
112
+ isLoading,
113
+ stop,
114
+ submit,
115
+ switchThread,
116
+ queue: {
117
+ entries: [],
118
+ size: 0,
119
+ async cancel() {
120
+ return false;
121
+ },
122
+ async clear() {}
123
+ },
124
+ get interrupts() {
125
+ if (streamValues.value != null && "__interrupt__" in streamValues.value && Array.isArray(streamValues.value.__interrupt__)) {
126
+ const valueInterrupts = streamValues.value.__interrupt__;
127
+ if (valueInterrupts.length === 0) return [{ when: "breakpoint" }];
128
+ return valueInterrupts;
129
+ }
130
+ return [];
131
+ },
132
+ get interrupt() {
133
+ return extractInterrupts(streamValues.value);
134
+ },
135
+ get messages() {
136
+ if (!streamValues.value) return [];
137
+ return getMessages(streamValues.value);
138
+ },
139
+ get toolCalls() {
140
+ if (!streamValues.value) return [];
141
+ return getToolCallsWithResults(getMessages(streamValues.value));
142
+ },
143
+ getToolCalls(message) {
144
+ if (!streamValues.value) return [];
145
+ return getToolCallsWithResults(getMessages(streamValues.value)).filter((tc) => tc.aiMessage.id === message.id);
146
+ },
147
+ get subagents() {
148
+ return stream.getSubagents();
149
+ },
150
+ get activeSubagents() {
151
+ return stream.getActiveSubagents();
152
+ },
153
+ getSubagent(toolCallId) {
154
+ return stream.getSubagent(toolCallId);
155
+ },
156
+ getSubagentsByType(type) {
157
+ return stream.getSubagentsByType(type);
158
+ },
159
+ getSubagentsByMessage(messageId) {
160
+ return stream.getSubagentsByMessage(messageId);
161
+ }
162
+ };
163
+ }
164
+
165
+ //#endregion
166
+ export { useStreamCustom };
167
+ //# sourceMappingURL=stream.custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { onUnmounted, shallowRef, watch } from \"vue\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const streamValues = shallowRef<StateType | null>(stream.values);\n const streamError = shallowRef<unknown>(stream.error);\n const isLoading = shallowRef(stream.isLoading);\n\n const unsubscribe = stream.subscribe(() => {\n streamValues.value = stream.values;\n streamError.value = stream.error;\n isLoading.value = stream.isLoading;\n });\n\n onUnmounted(() => {\n unsubscribe();\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n watch(\n () => options.threadId,\n (newId) => {\n const resolved = newId ?? null;\n if (resolved !== threadId) {\n threadId = resolved;\n stream.clear();\n }\n },\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n // @ts-expect-error used in watch callback below\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n watch(\n () => ({\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n getMessages(historyValues).length > 0,\n len: getMessages(historyValues).length,\n }),\n ({ should }) => {\n if (should) {\n stream.reconstructSubagents(getMessages(historyValues), {\n skipIfPopulated: true,\n });\n }\n },\n { immediate: true },\n );\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!threadId) {\n threadId = crypto.randomUUID();\n options.onThreadId?.(threadId);\n }\n\n if (!threadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: threadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n return {\n get values() {\n return streamValues.value ?? ({} as StateType);\n },\n\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n queue: {\n entries: [],\n size: 0,\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n streamValues.value != null &&\n \"__interrupt__\" in streamValues.value &&\n Array.isArray(streamValues.value.__interrupt__)\n ) {\n const valueInterrupts = streamValues.value.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n return extractInterrupts<InterruptType>(streamValues.value);\n },\n\n get messages(): Message[] {\n if (!streamValues.value) return [];\n return getMessages(streamValues.value);\n },\n\n get toolCalls() {\n if (!streamValues.value) return [];\n return getToolCallsWithResults(getMessages(streamValues.value));\n },\n\n getToolCalls(message: Message) {\n if (!streamValues.value) return [];\n const allToolCalls = getToolCallsWithResults(\n getMessages(streamValues.value),\n );\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@langchain/vue",
3
+ "version": "0.0.1",
4
+ "description": "Vue integration for LangGraph & LangChain",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "dependencies": {
8
+ "@langchain/langgraph-sdk": "^1.6.5"
9
+ },
10
+ "devDependencies": {
11
+ "@hono/node-server": "^1.14.1",
12
+ "@langchain/core": "^1.1.27",
13
+ "@langchain/scripts": "^0.1.4",
14
+ "@tsconfig/recommended": "^1.0.2",
15
+ "@types/node": "^18.15.11",
16
+ "@types/uuid": "^9.0.1",
17
+ "@typescript-eslint/eslint-plugin": "^6.12.0",
18
+ "@typescript-eslint/parser": "^6.12.0",
19
+ "@vitejs/plugin-vue": "^6.0.4",
20
+ "@vitejs/plugin-vue-jsx": "^5.1.4",
21
+ "@vitest/browser": "^3.2.4",
22
+ "deepagents": "^1.8.0",
23
+ "eslint": "^8.33.0",
24
+ "eslint-config-airbnb-base": "^15.0.0",
25
+ "eslint-config-prettier": "^8.6.0",
26
+ "eslint-plugin-import": "^2.29.1",
27
+ "eslint-plugin-no-instanceof": "^1.0.1",
28
+ "eslint-plugin-prettier": "^4.2.1",
29
+ "hono": "^4.8.2",
30
+ "langchain": "^1.2.25",
31
+ "prettier": "^3.8.1",
32
+ "typescript": "^4.9.5 || ^5.4.5",
33
+ "vitest": "^3.2.4",
34
+ "vitest-browser-vue": "^0.1.0",
35
+ "vue": "^3.5.24",
36
+ "webdriverio": "^9.14.2",
37
+ "zod": "^4.3.6",
38
+ "@langchain/langgraph": "1.2.0",
39
+ "@langchain/langgraph-checkpoint": "1.0.0",
40
+ "@langchain/langgraph-api": "1.1.14"
41
+ },
42
+ "peerDependencies": {
43
+ "@langchain/core": "^1.1.27",
44
+ "vue": "^3.0.0"
45
+ },
46
+ "main": "./dist/index.js",
47
+ "types": "./dist/index.d.ts",
48
+ "exports": {
49
+ ".": {
50
+ "input": "./src/index.ts",
51
+ "typedoc": "./src/index.ts",
52
+ "import": {
53
+ "types": "./dist/index.d.ts",
54
+ "default": "./dist/index.js"
55
+ },
56
+ "require": {
57
+ "types": "./dist/index.d.cts",
58
+ "default": "./dist/index.cjs"
59
+ }
60
+ },
61
+ "./package.json": "./package.json"
62
+ },
63
+ "files": [
64
+ "dist/"
65
+ ],
66
+ "scripts": {
67
+ "clean": "rm -rf dist/ dist-cjs/",
68
+ "build": "pnpm turbo build:internal --filter=@langchain/vue",
69
+ "build:internal": "pnpm --filter @langchain/build compile @langchain/vue",
70
+ "prepublish": "pnpm build",
71
+ "format:check": "prettier --check src",
72
+ "format": "prettier --write src",
73
+ "lint:eslint": "NODE_OPTIONS=--max-old-space-size=4096 eslint --cache --ext .ts,.js,.jsx,.tsx src/",
74
+ "lint": "pnpm lint:eslint",
75
+ "lint:fix": "pnpm lint:eslint --fix",
76
+ "test": "vitest run"
77
+ }
78
+ }