@langchain/svelte 0.1.3 → 0.2.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/index.d.cts CHANGED
@@ -1,25 +1,60 @@
1
- import { Readable } from "svelte/store";
1
+ import { getStream, provideStream } from "./context.cjs";
2
2
  import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
3
3
  import { AcceptBaseMessages, AgentTypeConfigLike, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetToolCallsType, HistoryWithBaseMessages, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
4
4
  import { BagTemplate, DefaultToolCall, DefaultToolCall as DefaultToolCall$1, ToolCallFromTool, ToolCallState, ToolCallWithResult as ToolCallWithResult$1, ToolCallsFromTools } from "@langchain/langgraph-sdk";
5
5
 
6
6
  //#region src/index.d.ts
7
+ /**
8
+ * Provides a `useStream` return value to all descendant components via
9
+ * Svelte's context API. Must be called during component initialisation
10
+ * (i.e. at the top level of a `<script>` block).
11
+ *
12
+ * @example
13
+ * ```svelte
14
+ * <script lang="ts">
15
+ * import { useStream, setStreamContext } from "@langchain/svelte";
16
+ *
17
+ * const stream = useStream({ assistantId: "agent", apiUrl: "..." });
18
+ * setStreamContext(stream);
19
+ * </script>
20
+ *
21
+ * <ChildComponent />
22
+ * ```
23
+ */
24
+ declare function setStreamContext<T extends ReturnType<typeof useStream>>(stream: T): T;
25
+ /**
26
+ * Retrieves the `useStream` instance previously provided by a parent
27
+ * component via {@link setStreamContext}. Must be called during component
28
+ * initialisation.
29
+ *
30
+ * @throws If no stream context has been set by an ancestor component.
31
+ *
32
+ * @example
33
+ * ```svelte
34
+ * <script lang="ts">
35
+ * import { getStreamContext } from "@langchain/svelte";
36
+ *
37
+ * const stream = getStreamContext();
38
+ * </script>
39
+ * ```
40
+ */
41
+ declare function getStreamContext<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(): WithClassMessages<ResolveStreamInterface$1<T, InferBag$1<T, Bag>>>;
7
42
  type ClassToolCallWithResult<T> = T extends ToolCallWithResult$1<infer TC, unknown, unknown> ? ToolCallWithResult$1<TC, ToolMessage, AIMessage> : T;
8
43
  type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall$1, SubagentName extends string = string> = Omit<SubagentStreamInterface$1<StateType, ToolCall, SubagentName>, "messages"> & {
9
44
  messages: BaseMessage[];
10
45
  };
11
46
  /**
12
- * Maps a stream interface to Svelte-reactive types:
13
- * - `messages` becomes `Readable<BaseMessage[]>`
47
+ * Maps a stream interface to Svelte 5-reactive types:
48
+ * - `messages` becomes `BaseMessage[]`
14
49
  * - `getMessagesMetadata` accepts `BaseMessage`
15
- * - `toolCalls` uses `@langchain/core` message classes, wrapped in `Readable`
50
+ * - `toolCalls` uses `@langchain/core` message classes
16
51
  * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results
17
- * - `queue` properties are individually mapped (stores → `Readable`, functions unchanged)
52
+ * - `queue` properties are plain values and functions
18
53
  * - `client`, `assistantId`, `subagents`, `activeSubagents` remain unwrapped
19
54
  * - Functions remain unchanged
20
- * - All other properties are wrapped in `Readable<T>` to match Svelte's store system
55
+ * - All other reactive properties are exposed as plain values via getters
21
56
  */
22
- type WithClassMessages<T> = { [K in keyof T as K extends "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage" ? never : K]: K extends "messages" ? Readable<BaseMessage[]> : K extends "getMessagesMetadata" ? (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined : K extends "toolCalls" ? T[K] extends (infer TC)[] ? Readable<ClassToolCallWithResult<TC>[]> : Readable<T[K]> : K extends "getToolCalls" ? T[K] extends ((message: infer _M) => (infer TC)[]) ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : T[K] : K extends "queue" ? { [QK in keyof T[K]]: T[K][QK] extends ((...args: infer A) => infer R) ? (...args: A) => R : Readable<T[K][QK]> } : K extends "client" | "assistantId" ? T[K] : K extends "subagents" ? T[K] extends Map<string, SubagentStreamInterface$1<infer S, infer TC, infer N>> ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : T[K] : K extends "activeSubagents" ? T[K] extends SubagentStreamInterface$1<infer S, infer TC, infer N>[] ? ClassSubagentStreamInterface<S, TC, N>[] : T[K] : K extends "submit" ? T[K] extends ((values: infer V, options?: infer O) => infer Ret) ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : T[K] : K extends "history" ? Readable<HistoryWithBaseMessages<T[K]>> : T[K] extends ((...args: infer A) => infer R) ? (...args: A) => R : Readable<T[K]> } & ("subagents" extends keyof T ? {
57
+ type WithClassMessages<T> = { [K in keyof T as K extends "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage" ? never : K]: K extends "messages" ? BaseMessage[] : K extends "getMessagesMetadata" ? (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined : K extends "toolCalls" ? T[K] extends (infer TC)[] ? ClassToolCallWithResult<TC>[] : T[K] : K extends "getToolCalls" ? T[K] extends ((message: infer _M) => (infer TC)[]) ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : T[K] : K extends "queue" ? { [QK in keyof T[K]]: T[K][QK] extends ((...args: infer A) => infer R) ? (...args: A) => R : T[K][QK] } : K extends "client" | "assistantId" ? T[K] : K extends "subagents" ? T[K] extends Map<string, SubagentStreamInterface$1<infer S, infer TC, infer N>> ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : T[K] : K extends "activeSubagents" ? T[K] extends SubagentStreamInterface$1<infer S, infer TC, infer N>[] ? ClassSubagentStreamInterface<S, TC, N>[] : T[K] : K extends "submit" ? T[K] extends ((values: infer V, options?: infer O) => infer Ret) ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : T[K] : K extends "history" ? HistoryWithBaseMessages<T[K]> : T[K] extends ((...args: infer A) => infer R) ? (...args: A) => R : T[K] } & ("subagents" extends keyof T ? {
23
58
  getSubagent: T extends {
24
59
  getSubagent: (id: string) => SubagentStreamInterface$1<infer S, infer TC, infer N> | undefined;
25
60
  } ? (toolCallId: string) => ClassSubagentStreamInterface<S, TC, N> | undefined : never;
@@ -34,5 +69,5 @@ declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate
34
69
  declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: UseStreamCustomOptions$1<InferStateType$1<T>, InferBag$1<T, Bag>>): WithClassMessages<ResolveStreamInterface$1<T, InferBag$1<T, Bag>>>;
35
70
  type ToolCallWithResult<ToolCall = DefaultToolCall$1> = ToolCallWithResult$1<ToolCall, ToolMessage, AIMessage>;
36
71
  //#endregion
37
- export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, ClassSubagentStreamInterface, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type QueueEntry, type QueueInterface, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, type SubagentApi, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
72
+ export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, ClassSubagentStreamInterface, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type QueueEntry, type QueueInterface, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, type SubagentApi, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, getStream, getStreamContext, isSubagentNamespace, provideStream, setStreamContext, useStream };
38
73
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,25 +1,60 @@
1
- import { Readable } from "svelte/store";
1
+ import { getStream, provideStream } from "./context.js";
2
2
  import { AcceptBaseMessages, AgentTypeConfigLike, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetToolCallsType, HistoryWithBaseMessages, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
3
3
  import { BagTemplate, DefaultToolCall, DefaultToolCall as DefaultToolCall$1, ToolCallFromTool, ToolCallState, ToolCallWithResult as ToolCallWithResult$1, ToolCallsFromTools } from "@langchain/langgraph-sdk";
4
4
  import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
5
5
 
6
6
  //#region src/index.d.ts
7
+ /**
8
+ * Provides a `useStream` return value to all descendant components via
9
+ * Svelte's context API. Must be called during component initialisation
10
+ * (i.e. at the top level of a `<script>` block).
11
+ *
12
+ * @example
13
+ * ```svelte
14
+ * <script lang="ts">
15
+ * import { useStream, setStreamContext } from "@langchain/svelte";
16
+ *
17
+ * const stream = useStream({ assistantId: "agent", apiUrl: "..." });
18
+ * setStreamContext(stream);
19
+ * </script>
20
+ *
21
+ * <ChildComponent />
22
+ * ```
23
+ */
24
+ declare function setStreamContext<T extends ReturnType<typeof useStream>>(stream: T): T;
25
+ /**
26
+ * Retrieves the `useStream` instance previously provided by a parent
27
+ * component via {@link setStreamContext}. Must be called during component
28
+ * initialisation.
29
+ *
30
+ * @throws If no stream context has been set by an ancestor component.
31
+ *
32
+ * @example
33
+ * ```svelte
34
+ * <script lang="ts">
35
+ * import { getStreamContext } from "@langchain/svelte";
36
+ *
37
+ * const stream = getStreamContext();
38
+ * </script>
39
+ * ```
40
+ */
41
+ declare function getStreamContext<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(): WithClassMessages<ResolveStreamInterface$1<T, InferBag$1<T, Bag>>>;
7
42
  type ClassToolCallWithResult<T> = T extends ToolCallWithResult$1<infer TC, unknown, unknown> ? ToolCallWithResult$1<TC, ToolMessage, AIMessage> : T;
8
43
  type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall$1, SubagentName extends string = string> = Omit<SubagentStreamInterface$1<StateType, ToolCall, SubagentName>, "messages"> & {
9
44
  messages: BaseMessage[];
10
45
  };
11
46
  /**
12
- * Maps a stream interface to Svelte-reactive types:
13
- * - `messages` becomes `Readable<BaseMessage[]>`
47
+ * Maps a stream interface to Svelte 5-reactive types:
48
+ * - `messages` becomes `BaseMessage[]`
14
49
  * - `getMessagesMetadata` accepts `BaseMessage`
15
- * - `toolCalls` uses `@langchain/core` message classes, wrapped in `Readable`
50
+ * - `toolCalls` uses `@langchain/core` message classes
16
51
  * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results
17
- * - `queue` properties are individually mapped (stores → `Readable`, functions unchanged)
52
+ * - `queue` properties are plain values and functions
18
53
  * - `client`, `assistantId`, `subagents`, `activeSubagents` remain unwrapped
19
54
  * - Functions remain unchanged
20
- * - All other properties are wrapped in `Readable<T>` to match Svelte's store system
55
+ * - All other reactive properties are exposed as plain values via getters
21
56
  */
22
- type WithClassMessages<T> = { [K in keyof T as K extends "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage" ? never : K]: K extends "messages" ? Readable<BaseMessage[]> : K extends "getMessagesMetadata" ? (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined : K extends "toolCalls" ? T[K] extends (infer TC)[] ? Readable<ClassToolCallWithResult<TC>[]> : Readable<T[K]> : K extends "getToolCalls" ? T[K] extends ((message: infer _M) => (infer TC)[]) ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : T[K] : K extends "queue" ? { [QK in keyof T[K]]: T[K][QK] extends ((...args: infer A) => infer R) ? (...args: A) => R : Readable<T[K][QK]> } : K extends "client" | "assistantId" ? T[K] : K extends "subagents" ? T[K] extends Map<string, SubagentStreamInterface$1<infer S, infer TC, infer N>> ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : T[K] : K extends "activeSubagents" ? T[K] extends SubagentStreamInterface$1<infer S, infer TC, infer N>[] ? ClassSubagentStreamInterface<S, TC, N>[] : T[K] : K extends "submit" ? T[K] extends ((values: infer V, options?: infer O) => infer Ret) ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : T[K] : K extends "history" ? Readable<HistoryWithBaseMessages<T[K]>> : T[K] extends ((...args: infer A) => infer R) ? (...args: A) => R : Readable<T[K]> } & ("subagents" extends keyof T ? {
57
+ type WithClassMessages<T> = { [K in keyof T as K extends "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage" ? never : K]: K extends "messages" ? BaseMessage[] : K extends "getMessagesMetadata" ? (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined : K extends "toolCalls" ? T[K] extends (infer TC)[] ? ClassToolCallWithResult<TC>[] : T[K] : K extends "getToolCalls" ? T[K] extends ((message: infer _M) => (infer TC)[]) ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : T[K] : K extends "queue" ? { [QK in keyof T[K]]: T[K][QK] extends ((...args: infer A) => infer R) ? (...args: A) => R : T[K][QK] } : K extends "client" | "assistantId" ? T[K] : K extends "subagents" ? T[K] extends Map<string, SubagentStreamInterface$1<infer S, infer TC, infer N>> ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : T[K] : K extends "activeSubagents" ? T[K] extends SubagentStreamInterface$1<infer S, infer TC, infer N>[] ? ClassSubagentStreamInterface<S, TC, N>[] : T[K] : K extends "submit" ? T[K] extends ((values: infer V, options?: infer O) => infer Ret) ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : T[K] : K extends "history" ? HistoryWithBaseMessages<T[K]> : T[K] extends ((...args: infer A) => infer R) ? (...args: A) => R : T[K] } & ("subagents" extends keyof T ? {
23
58
  getSubagent: T extends {
24
59
  getSubagent: (id: string) => SubagentStreamInterface$1<infer S, infer TC, infer N> | undefined;
25
60
  } ? (toolCallId: string) => ClassSubagentStreamInterface<S, TC, N> | undefined : never;
@@ -34,5 +69,5 @@ declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate
34
69
  declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: UseStreamCustomOptions$1<InferStateType$1<T>, InferBag$1<T, Bag>>): WithClassMessages<ResolveStreamInterface$1<T, InferBag$1<T, Bag>>>;
35
70
  type ToolCallWithResult<ToolCall = DefaultToolCall$1> = ToolCallWithResult$1<ToolCall, ToolMessage, AIMessage>;
36
71
  //#endregion
37
- export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, ClassSubagentStreamInterface, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type QueueEntry, type QueueInterface, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, type SubagentApi, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
72
+ export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, ClassSubagentStreamInterface, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type QueueEntry, type QueueInterface, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, type SubagentApi, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, getStream, getStreamContext, isSubagentNamespace, provideStream, setStreamContext, useStream };
38
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,10 +1,54 @@
1
1
  import { useStreamCustom } from "./stream.custom.js";
2
- import { derived, get, writable } from "svelte/store";
3
- import { onDestroy, onMount } from "svelte";
2
+ import { getStream, provideStream } from "./context.js";
3
+ import { derived, fromStore, get, writable } from "svelte/store";
4
+ import { getContext, onDestroy, onMount, setContext } from "svelte";
4
5
  import { FetchStreamTransport, MessageTupleManager, PendingRunsTracker, StreamError, StreamManager, SubagentManager, calculateDepthFromNamespace, ensureHistoryMessageInstances, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass } from "@langchain/langgraph-sdk/ui";
5
6
  import { Client } from "@langchain/langgraph-sdk";
6
7
  import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
7
8
  //#region src/index.ts
9
+ const STREAM_CONTEXT_KEY = Symbol.for("langchain:stream-context");
10
+ /**
11
+ * Provides a `useStream` return value to all descendant components via
12
+ * Svelte's context API. Must be called during component initialisation
13
+ * (i.e. at the top level of a `<script>` block).
14
+ *
15
+ * @example
16
+ * ```svelte
17
+ * <script lang="ts">
18
+ * import { useStream, setStreamContext } from "@langchain/svelte";
19
+ *
20
+ * const stream = useStream({ assistantId: "agent", apiUrl: "..." });
21
+ * setStreamContext(stream);
22
+ * <\/script>
23
+ *
24
+ * <ChildComponent />
25
+ * ```
26
+ */
27
+ function setStreamContext(stream) {
28
+ setContext(STREAM_CONTEXT_KEY, stream);
29
+ return stream;
30
+ }
31
+ /**
32
+ * Retrieves the `useStream` instance previously provided by a parent
33
+ * component via {@link setStreamContext}. Must be called during component
34
+ * initialisation.
35
+ *
36
+ * @throws If no stream context has been set by an ancestor component.
37
+ *
38
+ * @example
39
+ * ```svelte
40
+ * <script lang="ts">
41
+ * import { getStreamContext } from "@langchain/svelte";
42
+ *
43
+ * const stream = getStreamContext();
44
+ * <\/script>
45
+ * ```
46
+ */
47
+ function getStreamContext() {
48
+ const ctx = getContext(STREAM_CONTEXT_KEY);
49
+ if (!ctx) throw new Error("getStreamContext must be used within a component that has called setStreamContext");
50
+ return ctx;
51
+ }
8
52
  function fetchHistory(client, threadId, options) {
9
53
  if (options?.limit === false) return client.threads.getState(threadId).then((state) => {
10
54
  if (state.checkpoint == null) return [];
@@ -121,17 +165,27 @@ function useStreamLGP(options) {
121
165
  queueEntries.set(pendingRuns.entries);
122
166
  queueSize.set(pendingRuns.size);
123
167
  });
124
- const unsubReconstruct = derived([isLoading, history], ([$isLoading, $history]) => {
168
+ const shouldReconstructSubagents = derived([isLoading, history], ([$isLoading, $history]) => {
125
169
  if (!options.filterSubagentMessages) return false;
126
170
  if ($isLoading || $history.isLoading) return false;
127
171
  return getMessages(get(historyValues)).length > 0;
128
- }).subscribe(($should) => {
172
+ });
173
+ let fetchController = null;
174
+ const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {
129
175
  if ($should) {
130
176
  const hvMessages = getMessages(get(historyValues));
131
177
  stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });
178
+ fetchController?.abort();
179
+ fetchController = new AbortController();
180
+ const tid = get(threadId);
181
+ if (tid) stream.fetchSubagentHistory(client.threads, tid, {
182
+ messagesKey: options.messagesKey ?? "messages",
183
+ signal: fetchController.signal
184
+ });
132
185
  }
133
186
  });
134
187
  onDestroy(() => {
188
+ fetchController?.abort();
135
189
  unsubscribe();
136
190
  unsubReconstruct();
137
191
  unsubQueue();
@@ -408,29 +462,72 @@ function useStreamLGP(options) {
408
462
  streamMetadata
409
463
  };
410
464
  }
465
+ const subagentsStore = derived(subagentVersion, () => stream.getSubagents());
466
+ const activeSubagentsStore = derived(subagentVersion, () => stream.getActiveSubagents());
467
+ const valuesRef = fromStore(values);
468
+ const errorRef = fromStore(error);
469
+ const isLoadingRef = fromStore(isLoading);
470
+ const isThreadLoadingRef = fromStore(isThreadLoading);
471
+ const branchRef = fromStore(branch);
472
+ const messagesRef = fromStore(messages);
473
+ const toolCallsRef = fromStore(toolCalls);
474
+ const interruptRef = fromStore(interrupt);
475
+ const interruptsRef = fromStore(interrupts);
476
+ const historyListRef = fromStore(historyList);
477
+ const experimentalBranchTreeRef = fromStore(experimentalBranchTree);
478
+ const subagentsRef = fromStore(subagentsStore);
479
+ const activeSubagentsRef = fromStore(activeSubagentsStore);
480
+ const queueEntriesRef = fromStore(queueEntries);
481
+ const queueSizeRef = fromStore(queueSize);
411
482
  return {
412
483
  assistantId: options.assistantId,
413
484
  client,
414
- values,
415
- error,
416
- isLoading,
417
- isThreadLoading,
418
- branch,
485
+ get values() {
486
+ return valuesRef.current;
487
+ },
488
+ get error() {
489
+ return errorRef.current;
490
+ },
491
+ get isLoading() {
492
+ return isLoadingRef.current;
493
+ },
494
+ get isThreadLoading() {
495
+ return isThreadLoadingRef.current;
496
+ },
497
+ get branch() {
498
+ return branchRef.current;
499
+ },
419
500
  setBranch,
420
- messages,
421
- toolCalls,
501
+ get messages() {
502
+ return messagesRef.current;
503
+ },
504
+ get toolCalls() {
505
+ return toolCallsRef.current;
506
+ },
422
507
  getToolCalls,
423
- interrupt,
424
- interrupts,
425
- history: historyList,
426
- experimental_branchTree: experimentalBranchTree,
508
+ get interrupt() {
509
+ return interruptRef.current;
510
+ },
511
+ get interrupts() {
512
+ return interruptsRef.current;
513
+ },
514
+ get history() {
515
+ return historyListRef.current;
516
+ },
517
+ get experimental_branchTree() {
518
+ return experimentalBranchTreeRef.current;
519
+ },
427
520
  getMessagesMetadata,
428
521
  submit,
429
522
  stop,
430
523
  joinStream,
431
524
  queue: {
432
- entries: queueEntries,
433
- size: queueSize,
525
+ get entries() {
526
+ return queueEntriesRef.current;
527
+ },
528
+ get size() {
529
+ return queueSizeRef.current;
530
+ },
434
531
  async cancel(id) {
435
532
  const tid = get(threadId);
436
533
  const removed = pendingRuns.remove(id);
@@ -453,8 +550,12 @@ function useStreamLGP(options) {
453
550
  if (newThreadId != null) options.onThreadId?.(newThreadId);
454
551
  }
455
552
  },
456
- subagents: derived(subagentVersion, () => stream.getSubagents()),
457
- activeSubagents: derived(subagentVersion, () => stream.getActiveSubagents()),
553
+ get subagents() {
554
+ return subagentsRef.current;
555
+ },
556
+ get activeSubagents() {
557
+ return activeSubagentsRef.current;
558
+ },
458
559
  getSubagent(toolCallId) {
459
560
  return stream.getSubagent(toolCallId);
460
561
  },
@@ -467,6 +568,6 @@ function useStreamLGP(options) {
467
568
  };
468
569
  }
469
570
  //#endregion
470
- export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
571
+ export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, getStream, getStreamContext, isSubagentNamespace, provideStream, setStreamContext, useStream };
471
572
 
472
573
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { writable, derived, get } from \"svelte/store\";\nimport type { Readable } from \"svelte/store\";\nimport { onDestroy, onMount } from \"svelte\";\n\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n filterStream,\n FetchStreamTransport,\n toMessageClass,\n ensureMessageInstances,\n ensureHistoryMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n} from \"@langchain/langgraph-sdk/ui\";\nimport {\n Client,\n type BagTemplate,\n type StreamMode,\n type StreamEvent,\n type Message,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport };\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\n/**\n * Maps a stream interface to Svelte-reactive types:\n * - `messages` becomes `Readable<BaseMessage[]>`\n * - `getMessagesMetadata` accepts `BaseMessage`\n * - `toolCalls` uses `@langchain/core` message classes, wrapped in `Readable`\n * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results\n * - `queue` properties are individually mapped (stores → `Readable`, functions unchanged)\n * - `client`, `assistantId`, `subagents`, `activeSubagents` remain unwrapped\n * - Functions remain unchanged\n * - All other properties are wrapped in `Readable<T>` to match Svelte's store system\n */\ntype WithClassMessages<T> = {\n [K in keyof T as K extends\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n ? never\n : K]: K extends \"messages\"\n ? Readable<BaseMessage[]>\n : K extends \"getMessagesMetadata\"\n ? (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined\n : K extends \"toolCalls\"\n ? T[K] extends (infer TC)[]\n ? Readable<ClassToolCallWithResult<TC>[]>\n : Readable<T[K]>\n : K extends \"getToolCalls\"\n ? T[K] extends (message: infer _M) => (infer TC)[]\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : T[K]\n : K extends \"queue\"\n ? {\n [QK in keyof T[K]]: T[K][QK] extends (\n ...args: infer A\n ) => infer R\n ? (...args: A) => R\n : Readable<T[K][QK]>;\n }\n : K extends \"client\" | \"assistantId\"\n ? T[K]\n : K extends \"subagents\"\n ? T[K] extends Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : T[K]\n : K extends \"activeSubagents\"\n ? T[K] extends SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[]\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : T[K]\n : K extends \"submit\"\n ? T[K] extends (\n values: infer V,\n options?: infer O,\n ) => infer Ret\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : T[K]\n : K extends \"history\"\n ? Readable<HistoryWithBaseMessages<T[K]>>\n : T[K] extends (...args: infer A) => infer R\n ? (...args: A) => R\n : Readable<T[K]>;\n} & (\"subagents\" extends keyof T\n ? {\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n if (\"transport\" in options) {\n return useStreamCustom(options);\n }\n return useStreamLGP(options);\n}\n\nfunction useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<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 runMetadataStorage = (() => {\n if (typeof window === \"undefined\") return null;\n const storage = options.reconnectOnMount;\n if (storage === true) return window.sessionStorage;\n if (typeof storage === \"function\") return storage();\n return null;\n })();\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\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 historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = writable<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = writable<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? get(threadId);\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.set({\n data,\n error: undefined,\n isLoading: false,\n mutate,\n });\n return data;\n } catch (err) {\n history.update((prev) => ({\n ...prev,\n error: err,\n isLoading: false,\n }));\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.update((prev) => ({ ...prev, mutate }));\n\n const branch = writable<string>(\"\");\n const branchContext = derived([branch, history], ([$branch, $history]) =>\n getBranchContext($branch, $history.data ?? undefined),\n );\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 pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n\n const historyValues = derived(\n [branchContext],\n ([$branchContext]) =>\n $branchContext.threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = derived([branchContext], ([$branchContext]) => {\n const error = $branchContext.threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\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 queueEntries = writable(pendingRuns.entries);\n const queueSize = writable(pendingRuns.size);\n\n const values = derived(\n [streamValues, historyValues],\n ([$streamValues, $historyValues]) => $streamValues ?? $historyValues,\n );\n\n const error = derived(\n [streamError, historyError, history],\n ([$streamError, $historyError, $history]) =>\n $streamError ?? $historyError ?? $history.error,\n );\n\n const messageMetadata = derived(\n [history, branchContext],\n ([$history, $branchContext]) =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: $history.data,\n getMessages,\n branchContext: $branchContext,\n }),\n );\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 const unsubQueue = pendingRuns.subscribe(() => {\n queueEntries.set(pendingRuns.entries);\n queueSize.set(pendingRuns.size);\n });\n\n const shouldReconstructSubagents = derived(\n [isLoading, history],\n ([$isLoading, $history]) => {\n if (!options.filterSubagentMessages) return false;\n if ($isLoading || $history.isLoading) return false;\n const hvMessages = getMessages(get(historyValues));\n return hvMessages.length > 0;\n },\n );\n\n const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {\n if ($should) {\n const hvMessages = getMessages(get(historyValues));\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n onDestroy(() => {\n unsubscribe();\n unsubReconstruct();\n unsubQueue();\n });\n\n function stop() {\n return stream.stop(get(historyValues), {\n onStop: (args) => {\n const tid = get(threadId);\n if (runMetadataStorage && tid) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) void client.runs.cancel(tid, runId);\n runMetadataStorage.removeItem(`lg:stream:${tid}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = get(branchContext);\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.set(\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\",\n );\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = get(threadId);\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.set(usableThreadId);\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode: StreamMode[] = [\n \"values\",\n \"messages-tuple\",\n \"updates\",\n ...(submitOptions?.streamMode ?? []),\n ];\n if (options.onUpdateEvent && !streamMode.includes(\"updates\"))\n streamMode.push(\"updates\");\n if (options.onCustomEvent && !streamMode.includes(\"custom\"))\n streamMode.push(\"custom\");\n if (options.onCheckpointEvent && !streamMode.includes(\"checkpoints\"))\n streamMode.push(\"checkpoints\");\n if (options.onTaskEvent && !streamMode.includes(\"tasks\"))\n streamMode.push(\"tasks\");\n if (\n \"onDebugEvent\" in options &&\n options.onDebugEvent &&\n !streamMode.includes(\"debug\")\n )\n streamMode.push(\"debug\");\n if (\n \"onLangChainEvent\" in options &&\n options.onLangChainEvent &&\n !streamMode.includes(\"events\")\n )\n streamMode.push(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...get(historyValues), ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: get(historyValues),\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let submitting = false;\n\n function drainQueue() {\n if (!get(isLoading) && !submitting && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting = true;\n void joinStream(next.id).finally(() => {\n submitting = false;\n drainQueue();\n });\n }\n }\n }\n\n isLoading.subscribe(() => {\n drainQueue();\n });\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = get(threadId);\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting = false;\n drainQueue();\n });\n return result;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n const tid = get(threadId);\n if (!tid) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: tid,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(tid, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: get(historyValues),\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${tid}`);\n const newHistory = await mutate(tid);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let shouldReconnect = !!runMetadataStorage;\n\n onMount(() => {\n const tid = get(threadId);\n if (shouldReconnect && runMetadataStorage && tid) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) {\n shouldReconnect = false;\n void joinStream(runId);\n }\n }\n });\n\n const messages = derived(\n [streamValues, historyValues],\n ([$streamValues, $historyValues]) =>\n ensureMessageInstances(getMessages($streamValues ?? $historyValues)),\n );\n\n const interrupt = derived(\n [streamValues, streamError, branchContext, isLoading],\n ([$streamValues, $streamError, $branchContext, $isLoading]) => {\n return extractInterrupts<InterruptType>($streamValues, {\n isLoading: $isLoading,\n threadState: $branchContext.threadHead,\n error: $streamError,\n });\n },\n );\n\n const interrupts = derived(\n [streamValues, streamError, branchContext, isLoading],\n ([$streamValues, $streamError, $branchContext, $isLoading]) => {\n const vals = $streamValues ?? get(historyValues);\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if ($isLoading) return [];\n\n const allTasks = $branchContext.threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n if (allInterrupts.length > 0) return allInterrupts;\n\n const next = $branchContext.threadHead?.next ?? [];\n if (!next.length || $streamError != null) return [];\n return [{ when: \"breakpoint\" }];\n },\n );\n\n const toolCalls = derived(\n [streamValues, historyValues],\n ([$streamValues, $historyValues]) =>\n getToolCallsWithResults(getMessages($streamValues ?? $historyValues)),\n );\n\n function getToolCalls(message: Message) {\n const currentValues = get(streamValues) ?? get(historyValues);\n const allToolCalls = getToolCallsWithResults(getMessages(currentValues));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const historyList = derived([branchContext], ([$branchContext]) => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return ensureHistoryMessageInstances(\n $branchContext.flatHistory,\n options.messagesKey ?? \"messages\",\n );\n });\n\n const isThreadLoading = derived(\n [history],\n ([$history]) => $history.isLoading && $history.data == null,\n );\n\n const experimentalBranchTree = derived(\n [branchContext],\n ([$branchContext]) => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return $branchContext.branchTree;\n },\n );\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = get(messageMetadata)?.find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n }\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n isThreadLoading,\n\n branch,\n setBranch,\n\n messages,\n toolCalls,\n getToolCalls,\n\n interrupt,\n interrupts,\n\n history: historyList,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata,\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = get(threadId);\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = get(threadId);\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid!, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = get(threadId) ?? null;\n if (newThreadId !== current) {\n const prevThreadId = get(threadId);\n threadId.set(newThreadId ?? undefined);\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n subagents: derived(subagentVersion, () => stream.getSubagents()),\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\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentApi,\n SubagentStream,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { writable, derived, get, fromStore } from \"svelte/store\";\nimport { onDestroy, onMount, setContext, getContext } from \"svelte\";\n\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n filterStream,\n FetchStreamTransport,\n toMessageClass,\n ensureMessageInstances,\n ensureHistoryMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n} from \"@langchain/langgraph-sdk/ui\";\nimport {\n Client,\n type BagTemplate,\n type StreamMode,\n type StreamEvent,\n type Message,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport };\nexport { provideStream, getStream } from \"./context.js\";\n\nconst STREAM_CONTEXT_KEY = Symbol.for(\"langchain:stream-context\");\n\n/**\n * Provides a `useStream` return value to all descendant components via\n * Svelte's context API. Must be called during component initialisation\n * (i.e. at the top level of a `<script>` block).\n *\n * @example\n * ```svelte\n * <script lang=\"ts\">\n * import { useStream, setStreamContext } from \"@langchain/svelte\";\n *\n * const stream = useStream({ assistantId: \"agent\", apiUrl: \"...\" });\n * setStreamContext(stream);\n * </script>\n *\n * <ChildComponent />\n * ```\n */\nexport function setStreamContext<T extends ReturnType<typeof useStream>>(\n stream: T,\n): T {\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the `useStream` instance previously provided by a parent\n * component via {@link setStreamContext}. Must be called during component\n * initialisation.\n *\n * @throws If no stream context has been set by an ancestor component.\n *\n * @example\n * ```svelte\n * <script lang=\"ts\">\n * import { getStreamContext } from \"@langchain/svelte\";\n *\n * const stream = getStreamContext();\n * </script>\n * ```\n */\nexport function getStreamContext<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>> {\n const ctx = getContext(STREAM_CONTEXT_KEY);\n if (!ctx) {\n throw new Error(\n \"getStreamContext must be used within a component that has called setStreamContext\",\n );\n }\n return ctx as WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n}\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\n/**\n * Maps a stream interface to Svelte 5-reactive types:\n * - `messages` becomes `BaseMessage[]`\n * - `getMessagesMetadata` accepts `BaseMessage`\n * - `toolCalls` uses `@langchain/core` message classes\n * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results\n * - `queue` properties are plain values and functions\n * - `client`, `assistantId`, `subagents`, `activeSubagents` remain unwrapped\n * - Functions remain unchanged\n * - All other reactive properties are exposed as plain values via getters\n */\ntype WithClassMessages<T> = {\n [K in keyof T as K extends\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n ? never\n : K]: K extends \"messages\"\n ? BaseMessage[]\n : K extends \"getMessagesMetadata\"\n ? (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined\n : K extends \"toolCalls\"\n ? T[K] extends (infer TC)[]\n ? ClassToolCallWithResult<TC>[]\n : T[K]\n : K extends \"getToolCalls\"\n ? T[K] extends (message: infer _M) => (infer TC)[]\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : T[K]\n : K extends \"queue\"\n ? {\n [QK in keyof T[K]]: T[K][QK] extends (\n ...args: infer A\n ) => infer R\n ? (...args: A) => R\n : T[K][QK];\n }\n : K extends \"client\" | \"assistantId\"\n ? T[K]\n : K extends \"subagents\"\n ? T[K] extends Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : T[K]\n : K extends \"activeSubagents\"\n ? T[K] extends SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[]\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : T[K]\n : K extends \"submit\"\n ? T[K] extends (\n values: infer V,\n options?: infer O,\n ) => infer Ret\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : T[K]\n : K extends \"history\"\n ? HistoryWithBaseMessages<T[K]>\n : T[K] extends (...args: infer A) => infer R\n ? (...args: A) => R\n : T[K];\n} & (\"subagents\" extends keyof T\n ? {\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n if (\"transport\" in options) {\n return useStreamCustom(options);\n }\n return useStreamLGP(options);\n}\n\nfunction useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<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 runMetadataStorage = (() => {\n if (typeof window === \"undefined\") return null;\n const storage = options.reconnectOnMount;\n if (storage === true) return window.sessionStorage;\n if (typeof storage === \"function\") return storage();\n return null;\n })();\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\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 historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = writable<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = writable<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? get(threadId);\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.set({\n data,\n error: undefined,\n isLoading: false,\n mutate,\n });\n return data;\n } catch (err) {\n history.update((prev) => ({\n ...prev,\n error: err,\n isLoading: false,\n }));\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.update((prev) => ({ ...prev, mutate }));\n\n const branch = writable<string>(\"\");\n const branchContext = derived([branch, history], ([$branch, $history]) =>\n getBranchContext($branch, $history.data ?? undefined),\n );\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 pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n\n const historyValues = derived(\n [branchContext],\n ([$branchContext]) =>\n $branchContext.threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = derived([branchContext], ([$branchContext]) => {\n const error = $branchContext.threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\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 queueEntries = writable(pendingRuns.entries);\n const queueSize = writable(pendingRuns.size);\n\n const values = derived(\n [streamValues, historyValues],\n ([$streamValues, $historyValues]) => $streamValues ?? $historyValues,\n );\n\n const error = derived(\n [streamError, historyError, history],\n ([$streamError, $historyError, $history]) =>\n $streamError ?? $historyError ?? $history.error,\n );\n\n const messageMetadata = derived(\n [history, branchContext],\n ([$history, $branchContext]) =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: $history.data,\n getMessages,\n branchContext: $branchContext,\n }),\n );\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 const unsubQueue = pendingRuns.subscribe(() => {\n queueEntries.set(pendingRuns.entries);\n queueSize.set(pendingRuns.size);\n });\n\n const shouldReconstructSubagents = derived(\n [isLoading, history],\n ([$isLoading, $history]) => {\n if (!options.filterSubagentMessages) return false;\n if ($isLoading || $history.isLoading) return false;\n const hvMessages = getMessages(get(historyValues));\n return hvMessages.length > 0;\n },\n );\n\n let fetchController: AbortController | null = null;\n\n const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {\n if ($should) {\n const hvMessages = getMessages(get(historyValues));\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n fetchController?.abort();\n fetchController = new AbortController();\n const tid = get(threadId);\n if (tid) {\n void stream.fetchSubagentHistory(client.threads, tid, {\n messagesKey: options.messagesKey ?? \"messages\",\n signal: fetchController.signal,\n });\n }\n }\n });\n\n onDestroy(() => {\n fetchController?.abort();\n unsubscribe();\n unsubReconstruct();\n unsubQueue();\n });\n\n function stop() {\n return stream.stop(get(historyValues), {\n onStop: (args) => {\n const tid = get(threadId);\n if (runMetadataStorage && tid) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) void client.runs.cancel(tid, runId);\n runMetadataStorage.removeItem(`lg:stream:${tid}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = get(branchContext);\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.set(\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\",\n );\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = get(threadId);\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.set(usableThreadId);\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode: StreamMode[] = [\n \"values\",\n \"messages-tuple\",\n \"updates\",\n ...(submitOptions?.streamMode ?? []),\n ];\n if (options.onUpdateEvent && !streamMode.includes(\"updates\"))\n streamMode.push(\"updates\");\n if (options.onCustomEvent && !streamMode.includes(\"custom\"))\n streamMode.push(\"custom\");\n if (options.onCheckpointEvent && !streamMode.includes(\"checkpoints\"))\n streamMode.push(\"checkpoints\");\n if (options.onTaskEvent && !streamMode.includes(\"tasks\"))\n streamMode.push(\"tasks\");\n if (\n \"onDebugEvent\" in options &&\n options.onDebugEvent &&\n !streamMode.includes(\"debug\")\n )\n streamMode.push(\"debug\");\n if (\n \"onLangChainEvent\" in options &&\n options.onLangChainEvent &&\n !streamMode.includes(\"events\")\n )\n streamMode.push(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...get(historyValues), ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: get(historyValues),\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let submitting = false;\n\n function drainQueue() {\n if (!get(isLoading) && !submitting && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting = true;\n void joinStream(next.id).finally(() => {\n submitting = false;\n drainQueue();\n });\n }\n }\n }\n\n isLoading.subscribe(() => {\n drainQueue();\n });\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = get(threadId);\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting = false;\n drainQueue();\n });\n return result;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n const tid = get(threadId);\n if (!tid) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: tid,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(tid, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: get(historyValues),\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${tid}`);\n const newHistory = await mutate(tid);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let shouldReconnect = !!runMetadataStorage;\n\n onMount(() => {\n const tid = get(threadId);\n if (shouldReconnect && runMetadataStorage && tid) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) {\n shouldReconnect = false;\n void joinStream(runId);\n }\n }\n });\n\n const messages = derived(\n [streamValues, historyValues],\n ([$streamValues, $historyValues]) =>\n ensureMessageInstances(getMessages($streamValues ?? $historyValues)),\n );\n\n const interrupt = derived(\n [streamValues, streamError, branchContext, isLoading],\n ([$streamValues, $streamError, $branchContext, $isLoading]) => {\n return extractInterrupts<InterruptType>($streamValues, {\n isLoading: $isLoading,\n threadState: $branchContext.threadHead,\n error: $streamError,\n });\n },\n );\n\n const interrupts = derived(\n [streamValues, streamError, branchContext, isLoading],\n ([$streamValues, $streamError, $branchContext, $isLoading]) => {\n const vals = $streamValues ?? get(historyValues);\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if ($isLoading) return [];\n\n const allTasks = $branchContext.threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n if (allInterrupts.length > 0) return allInterrupts;\n\n const next = $branchContext.threadHead?.next ?? [];\n if (!next.length || $streamError != null) return [];\n return [{ when: \"breakpoint\" }];\n },\n );\n\n const toolCalls = derived(\n [streamValues, historyValues],\n ([$streamValues, $historyValues]) =>\n getToolCallsWithResults(getMessages($streamValues ?? $historyValues)),\n );\n\n function getToolCalls(message: Message) {\n const currentValues = get(streamValues) ?? get(historyValues);\n const allToolCalls = getToolCallsWithResults(getMessages(currentValues));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const historyList = derived([branchContext], ([$branchContext]) => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return ensureHistoryMessageInstances(\n $branchContext.flatHistory,\n options.messagesKey ?? \"messages\",\n );\n });\n\n const isThreadLoading = derived(\n [history],\n ([$history]) => $history.isLoading && $history.data == null,\n );\n\n const experimentalBranchTree = derived(\n [branchContext],\n ([$branchContext]) => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return $branchContext.branchTree;\n },\n );\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = get(messageMetadata)?.find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n }\n\n const subagentsStore = derived(subagentVersion, () => stream.getSubagents());\n const activeSubagentsStore = derived(subagentVersion, () =>\n stream.getActiveSubagents(),\n );\n\n const valuesRef = fromStore(values);\n const errorRef = fromStore(error);\n const isLoadingRef = fromStore(isLoading);\n const isThreadLoadingRef = fromStore(isThreadLoading);\n const branchRef = fromStore(branch);\n const messagesRef = fromStore(messages);\n const toolCallsRef = fromStore(toolCalls);\n const interruptRef = fromStore(interrupt);\n const interruptsRef = fromStore(interrupts);\n const historyListRef = fromStore(historyList);\n const experimentalBranchTreeRef = fromStore(experimentalBranchTree);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const queueEntriesRef = fromStore(queueEntries);\n const queueSizeRef = fromStore(queueSize);\n\n return {\n assistantId: options.assistantId,\n client,\n\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 get isThreadLoading() {\n return isThreadLoadingRef.current;\n },\n\n get branch() {\n return branchRef.current;\n },\n setBranch,\n\n get messages() {\n return messagesRef.current;\n },\n get toolCalls() {\n return toolCallsRef.current;\n },\n getToolCalls,\n\n get interrupt() {\n return interruptRef.current;\n },\n get interrupts() {\n return interruptsRef.current;\n },\n\n get history() {\n return historyListRef.current;\n },\n get experimental_branchTree() {\n return experimentalBranchTreeRef.current;\n },\n\n getMessagesMetadata,\n\n submit,\n stop,\n joinStream,\n\n queue: {\n get entries() {\n return queueEntriesRef.current;\n },\n get size() {\n return queueSizeRef.current;\n },\n async cancel(id: string) {\n const tid = get(threadId);\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = get(threadId);\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid!, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = get(threadId) ?? null;\n if (newThreadId !== current) {\n const prevThreadId = get(threadId);\n threadId.set(newThreadId ?? undefined);\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n return subagentsRef.current;\n },\n get activeSubagents() {\n return activeSubagentsRef.current;\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\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentApi,\n SubagentStream,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}