@langchain/svelte 0.1.3 → 0.3.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/README.md +235 -60
- package/dist/index.cjs +234 -423
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +93 -8
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +93 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +234 -427
- package/dist/index.js.map +1 -1
- package/dist/stream.custom.cjs +82 -147
- package/dist/stream.custom.cjs.map +1 -1
- package/dist/stream.custom.js +84 -149
- package/dist/stream.custom.js.map +1 -1
- package/package.json +7 -9
package/dist/stream.custom.js
CHANGED
|
@@ -1,172 +1,107 @@
|
|
|
1
|
-
import { derived,
|
|
1
|
+
import { derived, fromStore, writable } from "svelte/store";
|
|
2
2
|
import { onDestroy } from "svelte";
|
|
3
|
-
import {
|
|
4
|
-
import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
|
|
3
|
+
import { CustomStreamOrchestrator } from "@langchain/langgraph-sdk/ui";
|
|
5
4
|
//#region src/stream.custom.ts
|
|
6
5
|
function useStreamCustom(options) {
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
throttle: options.throttle ?? false,
|
|
10
|
-
subagentToolNames: options.subagentToolNames,
|
|
11
|
-
filterSubagentMessages: options.filterSubagentMessages,
|
|
12
|
-
toMessage: toMessageClass
|
|
13
|
-
});
|
|
14
|
-
let threadId = options.threadId ?? null;
|
|
6
|
+
const orchestrator = new CustomStreamOrchestrator(options);
|
|
7
|
+
const version = writable(0);
|
|
15
8
|
const branch = writable("");
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const isLoading = writable(stream.isLoading);
|
|
19
|
-
const subagentVersion = writable(0);
|
|
20
|
-
const unsubscribe = stream.subscribe(() => {
|
|
21
|
-
streamValues.set(stream.values);
|
|
22
|
-
streamError.set(stream.error);
|
|
23
|
-
isLoading.set(stream.isLoading);
|
|
24
|
-
subagentVersion.update((v) => v + 1);
|
|
9
|
+
const unsubscribe = orchestrator.subscribe(() => {
|
|
10
|
+
version.update((v) => v + 1);
|
|
25
11
|
});
|
|
26
12
|
onDestroy(() => {
|
|
27
13
|
unsubscribe();
|
|
14
|
+
orchestrator.dispose();
|
|
28
15
|
});
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return stream.stop(historyValues, { onStop: options.onStop });
|
|
51
|
-
}
|
|
52
|
-
async function submitDirect(values, submitOptions) {
|
|
53
|
-
const currentThreadId = options.threadId ?? null;
|
|
54
|
-
if (currentThreadId !== threadId) {
|
|
55
|
-
threadId = currentThreadId;
|
|
56
|
-
stream.clear();
|
|
57
|
-
}
|
|
58
|
-
let usableThreadId = threadId ?? submitOptions?.threadId;
|
|
59
|
-
stream.setStreamValues(() => {
|
|
60
|
-
if (submitOptions?.optimisticValues != null) return {
|
|
61
|
-
...historyValues,
|
|
62
|
-
...typeof submitOptions.optimisticValues === "function" ? submitOptions.optimisticValues(historyValues) : submitOptions.optimisticValues
|
|
63
|
-
};
|
|
64
|
-
return { ...historyValues };
|
|
65
|
-
});
|
|
66
|
-
await stream.start(async (signal) => {
|
|
67
|
-
if (!usableThreadId) {
|
|
68
|
-
usableThreadId = crypto.randomUUID();
|
|
69
|
-
threadId = usableThreadId;
|
|
70
|
-
options.onThreadId?.(usableThreadId);
|
|
71
|
-
}
|
|
72
|
-
if (!usableThreadId) throw new Error("Failed to obtain valid thread ID.");
|
|
73
|
-
return options.transport.stream({
|
|
74
|
-
input: values,
|
|
75
|
-
context: submitOptions?.context,
|
|
76
|
-
command: submitOptions?.command,
|
|
77
|
-
signal,
|
|
78
|
-
config: {
|
|
79
|
-
...submitOptions?.config,
|
|
80
|
-
configurable: {
|
|
81
|
-
thread_id: usableThreadId,
|
|
82
|
-
...submitOptions?.config?.configurable
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}, {
|
|
87
|
-
getMessages,
|
|
88
|
-
setMessages,
|
|
89
|
-
initialValues: {},
|
|
90
|
-
callbacks: options,
|
|
91
|
-
onSuccess: () => void 0,
|
|
92
|
-
onError(error) {
|
|
93
|
-
options.onError?.(error, void 0);
|
|
94
|
-
submitOptions?.onError?.(error, void 0);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
async function submit(values, submitOptions) {
|
|
99
|
-
await submitDirect(values, submitOptions);
|
|
100
|
-
}
|
|
101
|
-
const values = derived([streamValues], ([$streamValues]) => $streamValues ?? {});
|
|
102
|
-
const messages = derived([streamValues], ([$streamValues]) => {
|
|
103
|
-
if (!$streamValues) return [];
|
|
104
|
-
return ensureMessageInstances(getMessages($streamValues));
|
|
105
|
-
});
|
|
106
|
-
const toolCalls = derived([streamValues], ([$streamValues]) => {
|
|
107
|
-
if (!$streamValues) return [];
|
|
108
|
-
return getToolCallsWithResults(getMessages($streamValues));
|
|
109
|
-
});
|
|
110
|
-
const interrupt = derived([streamValues], ([$streamValues]) => extractInterrupts($streamValues));
|
|
111
|
-
const interrupts = derived([streamValues], ([$streamValues]) => {
|
|
112
|
-
if ($streamValues != null && "__interrupt__" in $streamValues && Array.isArray($streamValues.__interrupt__)) {
|
|
113
|
-
const valueInterrupts = $streamValues.__interrupt__;
|
|
114
|
-
if (valueInterrupts.length === 0) return [{ when: "breakpoint" }];
|
|
115
|
-
return valueInterrupts;
|
|
116
|
-
}
|
|
117
|
-
return [];
|
|
118
|
-
});
|
|
119
|
-
function getToolCalls(message) {
|
|
120
|
-
const $streamValues = get(streamValues);
|
|
121
|
-
if (!$streamValues) return [];
|
|
122
|
-
return getToolCallsWithResults(getMessages($streamValues)).filter((tc) => tc.aiMessage.id === message.id);
|
|
123
|
-
}
|
|
124
|
-
function setBranch(value) {
|
|
125
|
-
branch.set(value);
|
|
126
|
-
}
|
|
127
|
-
function getMessagesMetadata(message, index) {
|
|
128
|
-
const streamMetadata = messageManager.get(message.id)?.metadata;
|
|
129
|
-
if (streamMetadata != null) return {
|
|
130
|
-
messageId: message.id ?? String(index),
|
|
131
|
-
firstSeenState: void 0,
|
|
132
|
-
branch: void 0,
|
|
133
|
-
branchOptions: void 0,
|
|
134
|
-
streamMetadata
|
|
135
|
-
};
|
|
136
|
-
}
|
|
16
|
+
const valuesStore = derived(version, () => orchestrator.values);
|
|
17
|
+
const messagesStore = derived(version, () => orchestrator.messages);
|
|
18
|
+
const toolCallsStore = derived(version, () => orchestrator.toolCalls);
|
|
19
|
+
const interruptStore = derived(version, () => orchestrator.interrupt);
|
|
20
|
+
const interruptsStore = derived(version, () => orchestrator.interrupts);
|
|
21
|
+
const subagentsStore = derived(version, () => orchestrator.subagents);
|
|
22
|
+
const activeSubagentsStore = derived(version, () => orchestrator.activeSubagents);
|
|
23
|
+
const emptyEntries = writable([]);
|
|
24
|
+
const emptySize = writable(0);
|
|
25
|
+
const valuesRef = fromStore(valuesStore);
|
|
26
|
+
const errorRef = fromStore(derived(version, () => orchestrator.error));
|
|
27
|
+
const isLoadingRef = fromStore(derived(version, () => orchestrator.isLoading));
|
|
28
|
+
const branchRef = fromStore(branch);
|
|
29
|
+
const messagesRef = fromStore(messagesStore);
|
|
30
|
+
const toolCallsRef = fromStore(toolCallsStore);
|
|
31
|
+
const interruptRef = fromStore(interruptStore);
|
|
32
|
+
const interruptsRef = fromStore(interruptsStore);
|
|
33
|
+
const subagentsRef = fromStore(subagentsStore);
|
|
34
|
+
const activeSubagentsRef = fromStore(activeSubagentsStore);
|
|
35
|
+
const emptyEntriesRef = fromStore(emptyEntries);
|
|
36
|
+
const emptySizeRef = fromStore(emptySize);
|
|
137
37
|
return {
|
|
138
|
-
values
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
38
|
+
get values() {
|
|
39
|
+
return valuesRef.current;
|
|
40
|
+
},
|
|
41
|
+
get error() {
|
|
42
|
+
return errorRef.current;
|
|
43
|
+
},
|
|
44
|
+
get isLoading() {
|
|
45
|
+
return isLoadingRef.current;
|
|
46
|
+
},
|
|
47
|
+
stop: () => orchestrator.stop(),
|
|
48
|
+
async submit(values, submitOptions) {
|
|
49
|
+
await orchestrator.submit(values, submitOptions);
|
|
50
|
+
},
|
|
51
|
+
switchThread(newThreadId) {
|
|
52
|
+
orchestrator.switchThread(newThreadId);
|
|
53
|
+
},
|
|
54
|
+
get branch() {
|
|
55
|
+
return branchRef.current;
|
|
56
|
+
},
|
|
57
|
+
setBranch(value) {
|
|
58
|
+
branch.set(value);
|
|
59
|
+
orchestrator.setBranch(value);
|
|
60
|
+
},
|
|
61
|
+
getMessagesMetadata(message, index) {
|
|
62
|
+
return orchestrator.getMessagesMetadata(message, index);
|
|
63
|
+
},
|
|
147
64
|
queue: {
|
|
148
|
-
entries
|
|
149
|
-
|
|
65
|
+
get entries() {
|
|
66
|
+
return emptyEntriesRef.current;
|
|
67
|
+
},
|
|
68
|
+
get size() {
|
|
69
|
+
return emptySizeRef.current;
|
|
70
|
+
},
|
|
150
71
|
async cancel() {
|
|
151
72
|
return false;
|
|
152
73
|
},
|
|
153
74
|
async clear() {}
|
|
154
75
|
},
|
|
155
|
-
interrupt
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
76
|
+
get interrupt() {
|
|
77
|
+
return interruptRef.current;
|
|
78
|
+
},
|
|
79
|
+
get interrupts() {
|
|
80
|
+
return interruptsRef.current;
|
|
81
|
+
},
|
|
82
|
+
get messages() {
|
|
83
|
+
return messagesRef.current;
|
|
84
|
+
},
|
|
85
|
+
get toolCalls() {
|
|
86
|
+
return toolCallsRef.current;
|
|
87
|
+
},
|
|
88
|
+
getToolCalls(message) {
|
|
89
|
+
return orchestrator.getToolCalls(message);
|
|
90
|
+
},
|
|
91
|
+
get subagents() {
|
|
92
|
+
return subagentsRef.current;
|
|
93
|
+
},
|
|
94
|
+
get activeSubagents() {
|
|
95
|
+
return activeSubagentsRef.current;
|
|
96
|
+
},
|
|
162
97
|
getSubagent(toolCallId) {
|
|
163
|
-
return
|
|
98
|
+
return orchestrator.getSubagent(toolCallId);
|
|
164
99
|
},
|
|
165
100
|
getSubagentsByType(type) {
|
|
166
|
-
return
|
|
101
|
+
return orchestrator.getSubagentsByType(type);
|
|
167
102
|
},
|
|
168
103
|
getSubagentsByMessage(messageId) {
|
|
169
|
-
return
|
|
104
|
+
return orchestrator.getSubagentsByMessage(messageId);
|
|
170
105
|
}
|
|
171
106
|
};
|
|
172
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { writable, derived, get } from \"svelte/store\";\nimport { onDestroy } from \"svelte\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\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 type ToolCallType = GetToolCallsType<StateType>;\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 let threadId: string | null = options.threadId ?? null;\n\n const branch = writable<string>(\"\");\n\n const streamValues = writable<StateType | null>(stream.values);\n const streamError = writable<unknown>(stream.error);\n const isLoading = writable(stream.isLoading);\n\n const subagentVersion = writable(0);\n\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onDestroy(() => {\n unsubscribe();\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 const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n if (shouldReconstructSubagents) {\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: 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 let usableThreadId = threadId ?? submitOptions?.threadId;\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 (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadId = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n if (!usableThreadId) {\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: usableThreadId,\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 submitOptions?.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 const values = derived(\n [streamValues],\n ([$streamValues]) => $streamValues ?? ({} as StateType),\n );\n\n const messages = derived([streamValues], ([$streamValues]) => {\n if (!$streamValues) return [];\n return ensureMessageInstances(getMessages($streamValues));\n });\n\n const toolCalls = derived([streamValues], ([$streamValues]) => {\n if (!$streamValues) return [];\n const msgs = getMessages($streamValues);\n return getToolCallsWithResults<ToolCallType>(msgs);\n });\n\n const interrupt = derived([streamValues], ([$streamValues]) =>\n extractInterrupts<InterruptType>($streamValues),\n );\n\n const interrupts = derived(\n [streamValues],\n ([$streamValues]): Interrupt<InterruptType>[] => {\n if (\n $streamValues != null &&\n \"__interrupt__\" in $streamValues &&\n Array.isArray($streamValues.__interrupt__)\n ) {\n const valueInterrupts = $streamValues.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n );\n\n function getToolCalls(message: Message) {\n const $streamValues = get(streamValues);\n if (!$streamValues) return [];\n const msgs = getMessages($streamValues);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n }\n\n return {\n values,\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch,\n getMessagesMetadata,\n\n queue: {\n entries: writable([]),\n size: writable(0),\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n interrupt,\n interrupts,\n\n messages,\n toolCalls,\n getToolCalls,\n\n subagents: derived(subagentVersion, () => stream.getSubagents()),\n\n activeSubagents: derived(subagentVersion, () =>\n stream.getActiveSubagents(),\n ),\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { writable, derived, fromStore } from \"svelte/store\";\nimport { onDestroy } from \"svelte\";\nimport {\n CustomStreamOrchestrator,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type GetUpdateType,\n type GetInterruptType,\n type GetConfigurableType,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\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 InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n const orchestrator = new CustomStreamOrchestrator<StateType, Bag>(options);\n\n const version = writable(0);\n const branch = writable<string>(\"\");\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.update((v) => v + 1);\n });\n\n onDestroy(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n const valuesStore = derived(version, () => orchestrator.values);\n\n const messagesStore = derived(version, () => orchestrator.messages);\n\n const toolCallsStore = derived(version, () => orchestrator.toolCalls);\n\n const interruptStore = derived(\n version,\n () => orchestrator.interrupt as Interrupt<InterruptType> | undefined,\n );\n\n const interruptsStore = derived(\n version,\n () => orchestrator.interrupts as Interrupt<InterruptType>[],\n );\n\n const subagentsStore = derived(version, () => orchestrator.subagents);\n const activeSubagentsStore = derived(\n version,\n () => orchestrator.activeSubagents,\n );\n\n const emptyEntries = writable<never[]>([]);\n const emptySize = writable(0);\n\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(derived(version, () => orchestrator.error));\n const isLoadingRef = fromStore(\n derived(version, () => orchestrator.isLoading),\n );\n const branchRef = fromStore(branch);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const emptyEntriesRef = fromStore(emptyEntries);\n const emptySizeRef = fromStore(emptySize);\n\n return {\n get values() {\n return valuesRef.current;\n },\n get error() {\n return errorRef.current;\n },\n get isLoading() {\n return isLoadingRef.current;\n },\n\n stop: () => orchestrator.stop(),\n\n async submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await orchestrator.submit(values, submitOptions);\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get branch() {\n return branchRef.current;\n },\n setBranch(value: string) {\n branch.set(value);\n orchestrator.setBranch(value);\n },\n\n getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n queue: {\n get entries() {\n return emptyEntriesRef.current;\n },\n get size() {\n return emptySizeRef.current;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n get interrupt() {\n return interruptRef.current;\n },\n get interrupts() {\n return interruptsRef.current;\n },\n\n get messages() {\n return messagesRef.current;\n },\n get toolCalls() {\n return toolCallsRef.current;\n },\n getToolCalls(message: Message) {\n return orchestrator.getToolCalls(message);\n },\n\n get subagents() {\n return subagentsRef.current;\n },\n get activeSubagents() {\n return activeSubagentsRef.current;\n },\n getSubagent(toolCallId: string) {\n return orchestrator.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return orchestrator.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return orchestrator.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":";;;;AAaA,SAAgB,gBAGd,SAAiD;CAIjD,MAAM,eAAe,IAAI,yBAAyC,QAAQ;CAE1E,MAAM,UAAU,SAAS,EAAE;CAC3B,MAAM,SAAS,SAAiB,GAAG;CAEnC,MAAM,cAAc,aAAa,gBAAgB;AAC/C,UAAQ,QAAQ,MAAM,IAAI,EAAE;GAC5B;AAEF,iBAAgB;AACd,eAAa;AACb,eAAa,SAAS;GACtB;CAEF,MAAM,cAAc,QAAQ,eAAe,aAAa,OAAO;CAE/D,MAAM,gBAAgB,QAAQ,eAAe,aAAa,SAAS;CAEnE,MAAM,iBAAiB,QAAQ,eAAe,aAAa,UAAU;CAErE,MAAM,iBAAiB,QACrB,eACM,aAAa,UACpB;CAED,MAAM,kBAAkB,QACtB,eACM,aAAa,WACpB;CAED,MAAM,iBAAiB,QAAQ,eAAe,aAAa,UAAU;CACrE,MAAM,uBAAuB,QAC3B,eACM,aAAa,gBACpB;CAED,MAAM,eAAe,SAAkB,EAAE,CAAC;CAC1C,MAAM,YAAY,SAAS,EAAE;CAE7B,MAAM,YAAY,UAAU,YAAY;CACxC,MAAM,WAAW,UAAU,QAAQ,eAAe,aAAa,MAAM,CAAC;CACtE,MAAM,eAAe,UACnB,QAAQ,eAAe,aAAa,UAAU,CAC/C;CACD,MAAM,YAAY,UAAU,OAAO;CACnC,MAAM,cAAc,UAAU,cAAc;CAC5C,MAAM,eAAe,UAAU,eAAe;CAC9C,MAAM,eAAe,UAAU,eAAe;CAC9C,MAAM,gBAAgB,UAAU,gBAAgB;CAChD,MAAM,eAAe,UAAU,eAAe;CAC9C,MAAM,qBAAqB,UAAU,qBAAqB;CAC1D,MAAM,kBAAkB,UAAU,aAAa;CAC/C,MAAM,eAAe,UAAU,UAAU;AAEzC,QAAO;EACL,IAAI,SAAS;AACX,UAAO,UAAU;;EAEnB,IAAI,QAAQ;AACV,UAAO,SAAS;;EAElB,IAAI,YAAY;AACd,UAAO,aAAa;;EAGtB,YAAY,aAAa,MAAM;EAE/B,MAAM,OACJ,QACA,eACA;AACA,SAAM,aAAa,OAAO,QAAQ,cAAc;;EAGlD,aAAa,aAA4B;AACvC,gBAAa,aAAa,YAAY;;EAGxC,IAAI,SAAS;AACX,UAAO,UAAU;;EAEnB,UAAU,OAAe;AACvB,UAAO,IAAI,MAAM;AACjB,gBAAa,UAAU,MAAM;;EAG/B,oBACE,SACA,OACwC;AACxC,UAAO,aAAa,oBAAoB,SAAS,MAAM;;EAGzD,OAAO;GACL,IAAI,UAAU;AACZ,WAAO,gBAAgB;;GAEzB,IAAI,OAAO;AACT,WAAO,aAAa;;GAEtB,MAAM,SAAS;AACb,WAAO;;GAET,MAAM,QAAQ;GACf;EAED,IAAI,YAAY;AACd,UAAO,aAAa;;EAEtB,IAAI,aAAa;AACf,UAAO,cAAc;;EAGvB,IAAI,WAAW;AACb,UAAO,YAAY;;EAErB,IAAI,YAAY;AACd,UAAO,aAAa;;EAEtB,aAAa,SAAkB;AAC7B,UAAO,aAAa,aAAa,QAAQ;;EAG3C,IAAI,YAAY;AACd,UAAO,aAAa;;EAEtB,IAAI,kBAAkB;AACpB,UAAO,mBAAmB;;EAE5B,YAAY,YAAoB;AAC9B,UAAO,aAAa,YAAY,WAAW;;EAE7C,mBAAmB,MAAc;AAC/B,UAAO,aAAa,mBAAmB,KAAK;;EAE9C,sBAAsB,WAAmB;AACvC,UAAO,aAAa,sBAAsB,UAAU;;EAEvD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/svelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Svelte integration for LangGraph & LangChain",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,20 +10,18 @@
|
|
|
10
10
|
"directory": "libs/sdk-svelte"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@langchain/langgraph-sdk": "^1.
|
|
13
|
+
"@langchain/langgraph-sdk": "^1.8.0"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@hono/node-server": "^1.19.11",
|
|
17
17
|
"@langchain/core": "^1.1.31",
|
|
18
|
-
"@langchain/scripts": "^0.1.4",
|
|
19
18
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
20
|
-
"@tsconfig/recommended": "^1.0.13",
|
|
21
19
|
"@types/node": "^25.4.0",
|
|
22
20
|
"@typescript-eslint/eslint-plugin": "^6.12.0",
|
|
23
21
|
"@typescript-eslint/parser": "^6.12.0",
|
|
24
22
|
"@vitest/browser": "^4.0.18",
|
|
25
23
|
"@vitest/browser-webdriverio": "^4.0.18",
|
|
26
|
-
"deepagents": "^1.8.
|
|
24
|
+
"deepagents": "^1.8.3",
|
|
27
25
|
"eslint": "^8.33.0",
|
|
28
26
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
29
27
|
"eslint-config-prettier": "^8.6.0",
|
|
@@ -39,13 +37,13 @@
|
|
|
39
37
|
"vitest-browser-svelte": "^2.0.2",
|
|
40
38
|
"webdriverio": "^9.25.0",
|
|
41
39
|
"zod": "^4.3.6",
|
|
42
|
-
"@langchain/langgraph": "^1.2.
|
|
43
|
-
"@langchain/langgraph-api": "^1.1.
|
|
44
|
-
"@langchain/langgraph-checkpoint": "^1.0.
|
|
40
|
+
"@langchain/langgraph": "^1.2.5",
|
|
41
|
+
"@langchain/langgraph-api": "^1.1.16",
|
|
42
|
+
"@langchain/langgraph-checkpoint": "^1.0.1"
|
|
45
43
|
},
|
|
46
44
|
"peerDependencies": {
|
|
47
45
|
"@langchain/core": "^1.1.27",
|
|
48
|
-
"svelte": "^
|
|
46
|
+
"svelte": "^5.0.0"
|
|
49
47
|
},
|
|
50
48
|
"main": "./dist/index.js",
|
|
51
49
|
"types": "./dist/index.d.ts",
|