@langchain/svelte 0.4.2 → 0.4.3

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.cjs CHANGED
@@ -1,4 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_subagents = require("./subagents.cjs");
2
3
  const require_stream_custom = require("./stream.custom.cjs");
3
4
  let svelte_store = require("svelte/store");
4
5
  let svelte = require("svelte");
@@ -120,6 +121,11 @@ function useStreamLGP(options) {
120
121
  });
121
122
  orchestrator.initThreadId(options.threadId ?? void 0);
122
123
  const version = (0, svelte_store.writable)(0);
124
+ const reactiveSubagents = require_subagents.createReactiveSubagentAccessors({
125
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
126
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
127
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
128
+ }, version);
123
129
  const unsubscribe = orchestrator.subscribe(() => {
124
130
  version.update((v) => v + 1);
125
131
  });
@@ -173,11 +179,11 @@ function useStreamLGP(options) {
173
179
  const experimentalBranchTreeStore = (0, svelte_store.derived)(version, () => orchestrator.experimental_branchTree);
174
180
  const subagentsStore = (0, svelte_store.derived)(version, () => {
175
181
  orchestrator.trackStreamMode("updates", "messages-tuple");
176
- return orchestrator.subagents;
182
+ return reactiveSubagents.mapSubagents(orchestrator.subagents);
177
183
  });
178
184
  const activeSubagentsStore = (0, svelte_store.derived)(version, () => {
179
185
  orchestrator.trackStreamMode("updates", "messages-tuple");
180
- return orchestrator.activeSubagents;
186
+ return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
181
187
  });
182
188
  const queueEntriesStore = (0, svelte_store.derived)(version, () => orchestrator.queueEntries);
183
189
  const queueSizeStore = (0, svelte_store.derived)(version, () => orchestrator.queueSize);
@@ -264,13 +270,13 @@ function useStreamLGP(options) {
264
270
  return activeSubagentsRef.current;
265
271
  },
266
272
  getSubagent(toolCallId) {
267
- return orchestrator.getSubagent(toolCallId);
273
+ return reactiveSubagents.getSubagent(toolCallId);
268
274
  },
269
275
  getSubagentsByType(type) {
270
- return orchestrator.getSubagentsByType(type);
276
+ return reactiveSubagents.getSubagentsByType(type);
271
277
  },
272
278
  getSubagentsByMessage(messageId) {
273
- return orchestrator.getSubagentsByMessage(messageId);
279
+ return reactiveSubagents.getSubagentsByMessage(messageId);
274
280
  }
275
281
  };
276
282
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["useStreamCustom","Client","StreamOrchestrator"],"sources":["../src/index.ts"],"sourcesContent":["import { writable, derived, fromStore } from \"svelte/store\";\nimport { onDestroy, onMount, setContext, getContext } from \"svelte\";\n\nimport type {\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type UseStreamCustomOptions,\n type WithClassMessages,\n} from \"@langchain/langgraph-sdk/ui\";\nimport {\n Client,\n type BagTemplate,\n type Message,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport };\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} or {@link provideStream}.\n * Must be called during component 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\n/**\n * Creates a shared `useStream` instance and makes it available to all\n * descendant components via Svelte's `setContext`/`getContext`.\n *\n * Call this in a parent component's `<script>` block. Children access\n * the shared stream via {@link getStream}.\n *\n * Uses the same context key as {@link setStreamContext}/{@link getStreamContext},\n * so both retrieval functions work interchangeably.\n *\n * @example\n * ```svelte\n * <!-- ChatContainer.svelte -->\n * <script lang=\"ts\">\n * import { provideStream } from \"@langchain/svelte\";\n *\n * provideStream({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n * </script>\n *\n * <ChatHeader />\n * <MessageList />\n * <MessageInput />\n * ```\n *\n * @returns The stream instance (same as calling `useStream` directly).\n */\nexport function provideStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | ResolveStreamOptions<T, InferBag<T, Bag>>\n | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n): ReturnType<typeof useStream<T, Bag>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stream = useStream<T, Bag>(options as any);\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the shared stream instance from the nearest ancestor that\n * called {@link provideStream} or {@link setStreamContext}.\n *\n * Throws if no ancestor has provided a stream.\n *\n * @example\n * ```svelte\n * <!-- MessageList.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * </script>\n *\n * {#each stream.messages as msg (msg.id)}\n * <div>{msg.content}</div>\n * {/each}\n * ```\n */\nexport function getStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): ReturnType<typeof useStream<T, Bag>> {\n const context = getContext(STREAM_CONTEXT_KEY);\n if (context == null) {\n throw new Error(\n \"getStream() requires a parent component to call provideStream(). \" +\n \"Add provideStream({ assistantId: '...' }) in an ancestor component.\"\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return context as any;\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(options, {\n getClient: () => client,\n getAssistantId: () => options.assistantId,\n getMessagesKey: () => options.messagesKey ?? \"messages\",\n });\n\n orchestrator.initThreadId(options.threadId ?? undefined);\n\n const version = writable(0);\n const unsubscribe = orchestrator.subscribe(() => {\n version.update((v) => v + 1);\n });\n\n let fetchController: AbortController | null = null;\n\n // Subagent reconstruction\n const shouldReconstructSubagents = derived(version, () => {\n const hvMessages = orchestrator.messages;\n if (!options.filterSubagentMessages) return false;\n if (orchestrator.isLoading || orchestrator.historyData.isLoading)\n return false;\n return hvMessages.length > 0;\n });\n\n const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {\n if ($should) {\n fetchController?.abort();\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n fetchController = controller;\n }\n });\n\n // Queue draining - must track isLoading specifically (not just version)\n // so the drain fires exactly when stream transitions from loading → idle\n const isLoadingForDrain = derived(version, () => orchestrator.isLoading);\n const unsubDrain = isLoadingForDrain.subscribe(() => {\n orchestrator.drainQueue();\n });\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n\n onMount(() => {\n if (shouldReconnect) {\n const reconnected = orchestrator.tryReconnect();\n if (reconnected) shouldReconnect = false;\n }\n });\n\n onDestroy(() => {\n fetchController?.abort();\n unsubscribe();\n unsubReconstruct();\n unsubDrain();\n orchestrator.dispose();\n });\n\n // Derived stores\n const valuesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"values\");\n return orchestrator.values;\n });\n const errorStore = derived(version, () => orchestrator.error);\n const isLoadingStore = derived(version, () => orchestrator.isLoading);\n const branchStore = derived(version, () => orchestrator.branch);\n const messagesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return ensureMessageInstances(orchestrator.messages);\n });\n const toolCallsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return orchestrator.toolCalls;\n });\n const interruptStore = derived(version, () => orchestrator.interrupt);\n const interruptsStore = derived(version, () => orchestrator.interrupts);\n const historyListStore = derived(version, () => orchestrator.flatHistory);\n const isThreadLoadingStore = derived(\n version,\n () => orchestrator.isThreadLoading\n );\n const experimentalBranchTreeStore = derived(\n version,\n () => orchestrator.experimental_branchTree\n );\n const subagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return orchestrator.subagents;\n });\n const activeSubagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return orchestrator.activeSubagents;\n });\n const queueEntriesStore = derived(version, () => orchestrator.queueEntries);\n const queueSizeStore = derived(version, () => orchestrator.queueSize);\n\n // fromStore adapters for Svelte 5\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(errorStore);\n const isLoadingRef = fromStore(isLoadingStore);\n const branchRef = fromStore(branchStore);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const historyListRef = fromStore(historyListStore);\n const isThreadLoadingRef = fromStore(isThreadLoadingStore);\n const experimentalBranchTreeRef = fromStore(experimentalBranchTreeStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const queueEntriesRef = fromStore(queueEntriesStore);\n const queueSizeRef = fromStore(queueSizeStore);\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(value: string) {\n orchestrator.setBranch(value);\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 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 message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: {\n get entries() {\n return queueEntriesRef.current;\n },\n get size() {\n return queueSizeRef.current;\n },\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\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\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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["useStreamCustom","Client","StreamOrchestrator","createReactiveSubagentAccessors"],"sources":["../src/index.ts"],"sourcesContent":["import { writable, derived, fromStore } from \"svelte/store\";\nimport { onDestroy, onMount, setContext, getContext } from \"svelte\";\n\nimport type {\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type UseStreamCustomOptions,\n type WithClassMessages,\n} from \"@langchain/langgraph-sdk/ui\";\nimport {\n Client,\n type BagTemplate,\n type Message,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\n\nexport { FetchStreamTransport };\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} or {@link provideStream}.\n * Must be called during component 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\n/**\n * Creates a shared `useStream` instance and makes it available to all\n * descendant components via Svelte's `setContext`/`getContext`.\n *\n * Call this in a parent component's `<script>` block. Children access\n * the shared stream via {@link getStream}.\n *\n * Uses the same context key as {@link setStreamContext}/{@link getStreamContext},\n * so both retrieval functions work interchangeably.\n *\n * @example\n * ```svelte\n * <!-- ChatContainer.svelte -->\n * <script lang=\"ts\">\n * import { provideStream } from \"@langchain/svelte\";\n *\n * provideStream({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n * </script>\n *\n * <ChatHeader />\n * <MessageList />\n * <MessageInput />\n * ```\n *\n * @returns The stream instance (same as calling `useStream` directly).\n */\nexport function provideStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | ResolveStreamOptions<T, InferBag<T, Bag>>\n | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n): ReturnType<typeof useStream<T, Bag>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stream = useStream<T, Bag>(options as any);\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the shared stream instance from the nearest ancestor that\n * called {@link provideStream} or {@link setStreamContext}.\n *\n * Throws if no ancestor has provided a stream.\n *\n * @example\n * ```svelte\n * <!-- MessageList.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * </script>\n *\n * {#each stream.messages as msg (msg.id)}\n * <div>{msg.content}</div>\n * {/each}\n * ```\n */\nexport function getStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): ReturnType<typeof useStream<T, Bag>> {\n const context = getContext(STREAM_CONTEXT_KEY);\n if (context == null) {\n throw new Error(\n \"getStream() requires a parent component to call provideStream(). \" +\n \"Add provideStream({ assistantId: '...' }) in an ancestor component.\"\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return context as any;\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(options, {\n getClient: () => client,\n getAssistantId: () => options.assistantId,\n getMessagesKey: () => options.messagesKey ?? \"messages\",\n });\n\n orchestrator.initThreadId(options.threadId ?? undefined);\n\n const version = writable(0);\n const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\n const unsubscribe = orchestrator.subscribe(() => {\n version.update((v) => v + 1);\n });\n\n let fetchController: AbortController | null = null;\n\n // Subagent reconstruction\n const shouldReconstructSubagents = derived(version, () => {\n const hvMessages = orchestrator.messages;\n if (!options.filterSubagentMessages) return false;\n if (orchestrator.isLoading || orchestrator.historyData.isLoading)\n return false;\n return hvMessages.length > 0;\n });\n\n const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {\n if ($should) {\n fetchController?.abort();\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n fetchController = controller;\n }\n });\n\n // Queue draining - must track isLoading specifically (not just version)\n // so the drain fires exactly when stream transitions from loading → idle\n const isLoadingForDrain = derived(version, () => orchestrator.isLoading);\n const unsubDrain = isLoadingForDrain.subscribe(() => {\n orchestrator.drainQueue();\n });\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n\n onMount(() => {\n if (shouldReconnect) {\n const reconnected = orchestrator.tryReconnect();\n if (reconnected) shouldReconnect = false;\n }\n });\n\n onDestroy(() => {\n fetchController?.abort();\n unsubscribe();\n unsubReconstruct();\n unsubDrain();\n orchestrator.dispose();\n });\n\n // Derived stores\n const valuesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"values\");\n return orchestrator.values;\n });\n const errorStore = derived(version, () => orchestrator.error);\n const isLoadingStore = derived(version, () => orchestrator.isLoading);\n const branchStore = derived(version, () => orchestrator.branch);\n const messagesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return ensureMessageInstances(orchestrator.messages);\n });\n const toolCallsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return orchestrator.toolCalls;\n });\n const interruptStore = derived(version, () => orchestrator.interrupt);\n const interruptsStore = derived(version, () => orchestrator.interrupts);\n const historyListStore = derived(version, () => orchestrator.flatHistory);\n const isThreadLoadingStore = derived(\n version,\n () => orchestrator.isThreadLoading\n );\n const experimentalBranchTreeStore = derived(\n version,\n () => orchestrator.experimental_branchTree\n );\n const subagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return reactiveSubagents.mapSubagents(orchestrator.subagents);\n });\n const activeSubagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);\n });\n const queueEntriesStore = derived(version, () => orchestrator.queueEntries);\n const queueSizeStore = derived(version, () => orchestrator.queueSize);\n\n // fromStore adapters for Svelte 5\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(errorStore);\n const isLoadingRef = fromStore(isLoadingStore);\n const branchRef = fromStore(branchStore);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const historyListRef = fromStore(historyListStore);\n const isThreadLoadingRef = fromStore(isThreadLoadingStore);\n const experimentalBranchTreeRef = fromStore(experimentalBranchTreeStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const queueEntriesRef = fromStore(queueEntriesStore);\n const queueSizeRef = fromStore(queueSizeStore);\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(value: string) {\n orchestrator.setBranch(value);\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 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 message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: {\n get entries() {\n return queueEntriesRef.current;\n },\n get size() {\n return queueSizeRef.current;\n },\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get subagents() {\n return subagentsRef.current;\n },\n get activeSubagents() {\n return activeSubagentsRef.current;\n },\n getSubagent(toolCallId: string) {\n return reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return reactiveSubagents.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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AAkDA;;;;;;;;;;;;;;;;iBAAgB,gBAAA,WAA2B,UAAA,QAAkB,SAAA,EAAA,CAC3D,MAAA,EAAQ,CAAA,GACP,CAAA;AAqBH;;;;;;;;;;;;;;;;AAAA,iBAAgB,gBAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;AAuC7D;;;;;;;;;;;;;;;;;;;iBAAgB,aAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EACI,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KACpC,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KACzD,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;;;;;iBA2BlB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;AAAA,iBAcpB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAgR/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AAmDA;;;;;;;;;;;;;;;;iBAAgB,gBAAA,WAA2B,UAAA,QAAkB,SAAA,EAAA,CAC3D,MAAA,EAAQ,CAAA,GACP,CAAA;AAqBH;;;;;;;;;;;;;;;;AAAA,iBAAgB,gBAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;AAuC7D;;;;;;;;;;;;;;;;;;;iBAAgB,aAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EACI,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KACpC,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KACzD,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;;;;;iBA2BlB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;AAAA,iBAcpB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAyR/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AAkDA;;;;;;;;;;;;;;;;iBAAgB,gBAAA,WAA2B,UAAA,QAAkB,SAAA,EAAA,CAC3D,MAAA,EAAQ,CAAA,GACP,CAAA;AAqBH;;;;;;;;;;;;;;;;AAAA,iBAAgB,gBAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;AAuC7D;;;;;;;;;;;;;;;;;;;iBAAgB,aAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EACI,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KACpC,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KACzD,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;;;;;iBA2BlB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;AAAA,iBAcpB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAgR/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AAmDA;;;;;;;;;;;;;;;;iBAAgB,gBAAA,WAA2B,UAAA,QAAkB,SAAA,EAAA,CAC3D,MAAA,EAAQ,CAAA,GACP,CAAA;AAqBH;;;;;;;;;;;;;;;;AAAA,iBAAgB,gBAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;AAuC7D;;;;;;;;;;;;;;;;;;;iBAAgB,aAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EACI,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KACpC,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KACzD,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;;;;;iBA2BlB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;AAAA,iBAcpB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAyR/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createReactiveSubagentAccessors } from "./subagents.js";
1
2
  import { useStreamCustom } from "./stream.custom.js";
2
3
  import { derived, fromStore, writable } from "svelte/store";
3
4
  import { getContext, onDestroy, onMount, setContext } from "svelte";
@@ -119,6 +120,11 @@ function useStreamLGP(options) {
119
120
  });
120
121
  orchestrator.initThreadId(options.threadId ?? void 0);
121
122
  const version = writable(0);
123
+ const reactiveSubagents = createReactiveSubagentAccessors({
124
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
125
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
126
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
127
+ }, version);
122
128
  const unsubscribe = orchestrator.subscribe(() => {
123
129
  version.update((v) => v + 1);
124
130
  });
@@ -172,11 +178,11 @@ function useStreamLGP(options) {
172
178
  const experimentalBranchTreeStore = derived(version, () => orchestrator.experimental_branchTree);
173
179
  const subagentsStore = derived(version, () => {
174
180
  orchestrator.trackStreamMode("updates", "messages-tuple");
175
- return orchestrator.subagents;
181
+ return reactiveSubagents.mapSubagents(orchestrator.subagents);
176
182
  });
177
183
  const activeSubagentsStore = derived(version, () => {
178
184
  orchestrator.trackStreamMode("updates", "messages-tuple");
179
- return orchestrator.activeSubagents;
185
+ return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
180
186
  });
181
187
  const queueEntriesStore = derived(version, () => orchestrator.queueEntries);
182
188
  const queueSizeStore = derived(version, () => orchestrator.queueSize);
@@ -263,13 +269,13 @@ function useStreamLGP(options) {
263
269
  return activeSubagentsRef.current;
264
270
  },
265
271
  getSubagent(toolCallId) {
266
- return orchestrator.getSubagent(toolCallId);
272
+ return reactiveSubagents.getSubagent(toolCallId);
267
273
  },
268
274
  getSubagentsByType(type) {
269
- return orchestrator.getSubagentsByType(type);
275
+ return reactiveSubagents.getSubagentsByType(type);
270
276
  },
271
277
  getSubagentsByMessage(messageId) {
272
- return orchestrator.getSubagentsByMessage(messageId);
278
+ return reactiveSubagents.getSubagentsByMessage(messageId);
273
279
  }
274
280
  };
275
281
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { writable, derived, fromStore } from \"svelte/store\";\nimport { onDestroy, onMount, setContext, getContext } from \"svelte\";\n\nimport type {\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type UseStreamCustomOptions,\n type WithClassMessages,\n} from \"@langchain/langgraph-sdk/ui\";\nimport {\n Client,\n type BagTemplate,\n type Message,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport };\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} or {@link provideStream}.\n * Must be called during component 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\n/**\n * Creates a shared `useStream` instance and makes it available to all\n * descendant components via Svelte's `setContext`/`getContext`.\n *\n * Call this in a parent component's `<script>` block. Children access\n * the shared stream via {@link getStream}.\n *\n * Uses the same context key as {@link setStreamContext}/{@link getStreamContext},\n * so both retrieval functions work interchangeably.\n *\n * @example\n * ```svelte\n * <!-- ChatContainer.svelte -->\n * <script lang=\"ts\">\n * import { provideStream } from \"@langchain/svelte\";\n *\n * provideStream({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n * </script>\n *\n * <ChatHeader />\n * <MessageList />\n * <MessageInput />\n * ```\n *\n * @returns The stream instance (same as calling `useStream` directly).\n */\nexport function provideStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | ResolveStreamOptions<T, InferBag<T, Bag>>\n | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n): ReturnType<typeof useStream<T, Bag>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stream = useStream<T, Bag>(options as any);\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the shared stream instance from the nearest ancestor that\n * called {@link provideStream} or {@link setStreamContext}.\n *\n * Throws if no ancestor has provided a stream.\n *\n * @example\n * ```svelte\n * <!-- MessageList.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * </script>\n *\n * {#each stream.messages as msg (msg.id)}\n * <div>{msg.content}</div>\n * {/each}\n * ```\n */\nexport function getStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): ReturnType<typeof useStream<T, Bag>> {\n const context = getContext(STREAM_CONTEXT_KEY);\n if (context == null) {\n throw new Error(\n \"getStream() requires a parent component to call provideStream(). \" +\n \"Add provideStream({ assistantId: '...' }) in an ancestor component.\"\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return context as any;\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(options, {\n getClient: () => client,\n getAssistantId: () => options.assistantId,\n getMessagesKey: () => options.messagesKey ?? \"messages\",\n });\n\n orchestrator.initThreadId(options.threadId ?? undefined);\n\n const version = writable(0);\n const unsubscribe = orchestrator.subscribe(() => {\n version.update((v) => v + 1);\n });\n\n let fetchController: AbortController | null = null;\n\n // Subagent reconstruction\n const shouldReconstructSubagents = derived(version, () => {\n const hvMessages = orchestrator.messages;\n if (!options.filterSubagentMessages) return false;\n if (orchestrator.isLoading || orchestrator.historyData.isLoading)\n return false;\n return hvMessages.length > 0;\n });\n\n const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {\n if ($should) {\n fetchController?.abort();\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n fetchController = controller;\n }\n });\n\n // Queue draining - must track isLoading specifically (not just version)\n // so the drain fires exactly when stream transitions from loading → idle\n const isLoadingForDrain = derived(version, () => orchestrator.isLoading);\n const unsubDrain = isLoadingForDrain.subscribe(() => {\n orchestrator.drainQueue();\n });\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n\n onMount(() => {\n if (shouldReconnect) {\n const reconnected = orchestrator.tryReconnect();\n if (reconnected) shouldReconnect = false;\n }\n });\n\n onDestroy(() => {\n fetchController?.abort();\n unsubscribe();\n unsubReconstruct();\n unsubDrain();\n orchestrator.dispose();\n });\n\n // Derived stores\n const valuesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"values\");\n return orchestrator.values;\n });\n const errorStore = derived(version, () => orchestrator.error);\n const isLoadingStore = derived(version, () => orchestrator.isLoading);\n const branchStore = derived(version, () => orchestrator.branch);\n const messagesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return ensureMessageInstances(orchestrator.messages);\n });\n const toolCallsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return orchestrator.toolCalls;\n });\n const interruptStore = derived(version, () => orchestrator.interrupt);\n const interruptsStore = derived(version, () => orchestrator.interrupts);\n const historyListStore = derived(version, () => orchestrator.flatHistory);\n const isThreadLoadingStore = derived(\n version,\n () => orchestrator.isThreadLoading\n );\n const experimentalBranchTreeStore = derived(\n version,\n () => orchestrator.experimental_branchTree\n );\n const subagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return orchestrator.subagents;\n });\n const activeSubagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return orchestrator.activeSubagents;\n });\n const queueEntriesStore = derived(version, () => orchestrator.queueEntries);\n const queueSizeStore = derived(version, () => orchestrator.queueSize);\n\n // fromStore adapters for Svelte 5\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(errorStore);\n const isLoadingRef = fromStore(isLoadingStore);\n const branchRef = fromStore(branchStore);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const historyListRef = fromStore(historyListStore);\n const isThreadLoadingRef = fromStore(isThreadLoadingStore);\n const experimentalBranchTreeRef = fromStore(experimentalBranchTreeStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const queueEntriesRef = fromStore(queueEntriesStore);\n const queueSizeRef = fromStore(queueSizeStore);\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(value: string) {\n orchestrator.setBranch(value);\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 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 message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: {\n get entries() {\n return queueEntriesRef.current;\n },\n get size() {\n return queueSizeRef.current;\n },\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\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\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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { writable, derived, fromStore } from \"svelte/store\";\nimport { onDestroy, onMount, setContext, getContext } from \"svelte\";\n\nimport type {\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type UseStreamCustomOptions,\n type WithClassMessages,\n} from \"@langchain/langgraph-sdk/ui\";\nimport {\n Client,\n type BagTemplate,\n type Message,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\n\nexport { FetchStreamTransport };\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} or {@link provideStream}.\n * Must be called during component 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\n/**\n * Creates a shared `useStream` instance and makes it available to all\n * descendant components via Svelte's `setContext`/`getContext`.\n *\n * Call this in a parent component's `<script>` block. Children access\n * the shared stream via {@link getStream}.\n *\n * Uses the same context key as {@link setStreamContext}/{@link getStreamContext},\n * so both retrieval functions work interchangeably.\n *\n * @example\n * ```svelte\n * <!-- ChatContainer.svelte -->\n * <script lang=\"ts\">\n * import { provideStream } from \"@langchain/svelte\";\n *\n * provideStream({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n * </script>\n *\n * <ChatHeader />\n * <MessageList />\n * <MessageInput />\n * ```\n *\n * @returns The stream instance (same as calling `useStream` directly).\n */\nexport function provideStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | ResolveStreamOptions<T, InferBag<T, Bag>>\n | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n): ReturnType<typeof useStream<T, Bag>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stream = useStream<T, Bag>(options as any);\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the shared stream instance from the nearest ancestor that\n * called {@link provideStream} or {@link setStreamContext}.\n *\n * Throws if no ancestor has provided a stream.\n *\n * @example\n * ```svelte\n * <!-- MessageList.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * </script>\n *\n * {#each stream.messages as msg (msg.id)}\n * <div>{msg.content}</div>\n * {/each}\n * ```\n */\nexport function getStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): ReturnType<typeof useStream<T, Bag>> {\n const context = getContext(STREAM_CONTEXT_KEY);\n if (context == null) {\n throw new Error(\n \"getStream() requires a parent component to call provideStream(). \" +\n \"Add provideStream({ assistantId: '...' }) in an ancestor component.\"\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return context as any;\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(options, {\n getClient: () => client,\n getAssistantId: () => options.assistantId,\n getMessagesKey: () => options.messagesKey ?? \"messages\",\n });\n\n orchestrator.initThreadId(options.threadId ?? undefined);\n\n const version = writable(0);\n const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\n const unsubscribe = orchestrator.subscribe(() => {\n version.update((v) => v + 1);\n });\n\n let fetchController: AbortController | null = null;\n\n // Subagent reconstruction\n const shouldReconstructSubagents = derived(version, () => {\n const hvMessages = orchestrator.messages;\n if (!options.filterSubagentMessages) return false;\n if (orchestrator.isLoading || orchestrator.historyData.isLoading)\n return false;\n return hvMessages.length > 0;\n });\n\n const unsubReconstruct = shouldReconstructSubagents.subscribe(($should) => {\n if ($should) {\n fetchController?.abort();\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n fetchController = controller;\n }\n });\n\n // Queue draining - must track isLoading specifically (not just version)\n // so the drain fires exactly when stream transitions from loading → idle\n const isLoadingForDrain = derived(version, () => orchestrator.isLoading);\n const unsubDrain = isLoadingForDrain.subscribe(() => {\n orchestrator.drainQueue();\n });\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n\n onMount(() => {\n if (shouldReconnect) {\n const reconnected = orchestrator.tryReconnect();\n if (reconnected) shouldReconnect = false;\n }\n });\n\n onDestroy(() => {\n fetchController?.abort();\n unsubscribe();\n unsubReconstruct();\n unsubDrain();\n orchestrator.dispose();\n });\n\n // Derived stores\n const valuesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"values\");\n return orchestrator.values;\n });\n const errorStore = derived(version, () => orchestrator.error);\n const isLoadingStore = derived(version, () => orchestrator.isLoading);\n const branchStore = derived(version, () => orchestrator.branch);\n const messagesStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return ensureMessageInstances(orchestrator.messages);\n });\n const toolCallsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"messages-tuple\", \"values\");\n return orchestrator.toolCalls;\n });\n const interruptStore = derived(version, () => orchestrator.interrupt);\n const interruptsStore = derived(version, () => orchestrator.interrupts);\n const historyListStore = derived(version, () => orchestrator.flatHistory);\n const isThreadLoadingStore = derived(\n version,\n () => orchestrator.isThreadLoading\n );\n const experimentalBranchTreeStore = derived(\n version,\n () => orchestrator.experimental_branchTree\n );\n const subagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return reactiveSubagents.mapSubagents(orchestrator.subagents);\n });\n const activeSubagentsStore = derived(version, () => {\n orchestrator.trackStreamMode(\"updates\", \"messages-tuple\");\n return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);\n });\n const queueEntriesStore = derived(version, () => orchestrator.queueEntries);\n const queueSizeStore = derived(version, () => orchestrator.queueSize);\n\n // fromStore adapters for Svelte 5\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(errorStore);\n const isLoadingRef = fromStore(isLoadingStore);\n const branchRef = fromStore(branchStore);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const historyListRef = fromStore(historyListStore);\n const isThreadLoadingRef = fromStore(isThreadLoadingStore);\n const experimentalBranchTreeRef = fromStore(experimentalBranchTreeStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const queueEntriesRef = fromStore(queueEntriesStore);\n const queueSizeRef = fromStore(queueSizeStore);\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(value: string) {\n orchestrator.setBranch(value);\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 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 message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: {\n get entries() {\n return queueEntriesRef.current;\n },\n get size() {\n return queueSizeRef.current;\n },\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get subagents() {\n return subagentsRef.current;\n },\n get activeSubagents() {\n return activeSubagentsRef.current;\n },\n getSubagent(toolCallId: string) {\n return reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return reactiveSubagents.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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ const require_subagents = require("./subagents.cjs");
1
2
  let svelte_store = require("svelte/store");
2
3
  let svelte = require("svelte");
3
4
  let _langchain_langgraph_sdk_ui = require("@langchain/langgraph-sdk/ui");
@@ -6,6 +7,11 @@ function useStreamCustom(options) {
6
7
  const orchestrator = new _langchain_langgraph_sdk_ui.CustomStreamOrchestrator(options);
7
8
  const version = (0, svelte_store.writable)(0);
8
9
  const branch = (0, svelte_store.writable)("");
10
+ const reactiveSubagents = require_subagents.createReactiveSubagentAccessors({
11
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
12
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
13
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
14
+ }, version);
9
15
  const unsubscribe = orchestrator.subscribe(() => {
10
16
  version.update((v) => v + 1);
11
17
  });
@@ -18,8 +24,8 @@ function useStreamCustom(options) {
18
24
  const toolCallsStore = (0, svelte_store.derived)(version, () => orchestrator.toolCalls);
19
25
  const interruptStore = (0, svelte_store.derived)(version, () => orchestrator.interrupt);
20
26
  const interruptsStore = (0, svelte_store.derived)(version, () => orchestrator.interrupts);
21
- const subagentsStore = (0, svelte_store.derived)(version, () => orchestrator.subagents);
22
- const activeSubagentsStore = (0, svelte_store.derived)(version, () => orchestrator.activeSubagents);
27
+ const subagentsStore = (0, svelte_store.derived)(version, () => reactiveSubagents.mapSubagents(orchestrator.subagents));
28
+ const activeSubagentsStore = (0, svelte_store.derived)(version, () => reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents));
23
29
  const emptyEntries = (0, svelte_store.writable)([]);
24
30
  const emptySize = (0, svelte_store.writable)(0);
25
31
  const valuesRef = (0, svelte_store.fromStore)(valuesStore);
@@ -95,13 +101,13 @@ function useStreamCustom(options) {
95
101
  return activeSubagentsRef.current;
96
102
  },
97
103
  getSubagent(toolCallId) {
98
- return orchestrator.getSubagent(toolCallId);
104
+ return reactiveSubagents.getSubagent(toolCallId);
99
105
  },
100
106
  getSubagentsByType(type) {
101
- return orchestrator.getSubagentsByType(type);
107
+ return reactiveSubagents.getSubagentsByType(type);
102
108
  },
103
109
  getSubagentsByMessage(messageId) {
104
- return orchestrator.getSubagentsByMessage(messageId);
110
+ return reactiveSubagents.getSubagentsByMessage(messageId);
105
111
  }
106
112
  };
107
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.cjs","names":["CustomStreamOrchestrator"],"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":"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"}
1
+ {"version":3,"file":"stream.custom.cjs","names":["CustomStreamOrchestrator","createReactiveSubagentAccessors"],"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\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\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 const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\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, () =>\n reactiveSubagents.mapSubagents(orchestrator.subagents)\n );\n const activeSubagentsStore = derived(version, () =>\n reactiveSubagents.mapActiveSubagents(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 reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return reactiveSubagents.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { createReactiveSubagentAccessors } from "./subagents.js";
1
2
  import { derived, fromStore, writable } from "svelte/store";
2
3
  import { onDestroy } from "svelte";
3
4
  import { CustomStreamOrchestrator } from "@langchain/langgraph-sdk/ui";
@@ -6,6 +7,11 @@ function useStreamCustom(options) {
6
7
  const orchestrator = new CustomStreamOrchestrator(options);
7
8
  const version = writable(0);
8
9
  const branch = writable("");
10
+ const reactiveSubagents = createReactiveSubagentAccessors({
11
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
12
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
13
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
14
+ }, version);
9
15
  const unsubscribe = orchestrator.subscribe(() => {
10
16
  version.update((v) => v + 1);
11
17
  });
@@ -18,8 +24,8 @@ function useStreamCustom(options) {
18
24
  const toolCallsStore = derived(version, () => orchestrator.toolCalls);
19
25
  const interruptStore = derived(version, () => orchestrator.interrupt);
20
26
  const interruptsStore = derived(version, () => orchestrator.interrupts);
21
- const subagentsStore = derived(version, () => orchestrator.subagents);
22
- const activeSubagentsStore = derived(version, () => orchestrator.activeSubagents);
27
+ const subagentsStore = derived(version, () => reactiveSubagents.mapSubagents(orchestrator.subagents));
28
+ const activeSubagentsStore = derived(version, () => reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents));
23
29
  const emptyEntries = writable([]);
24
30
  const emptySize = writable(0);
25
31
  const valuesRef = fromStore(valuesStore);
@@ -95,13 +101,13 @@ function useStreamCustom(options) {
95
101
  return activeSubagentsRef.current;
96
102
  },
97
103
  getSubagent(toolCallId) {
98
- return orchestrator.getSubagent(toolCallId);
104
+ return reactiveSubagents.getSubagent(toolCallId);
99
105
  },
100
106
  getSubagentsByType(type) {
101
- return orchestrator.getSubagentsByType(type);
107
+ return reactiveSubagents.getSubagentsByType(type);
102
108
  },
103
109
  getSubagentsByMessage(messageId) {
104
- return orchestrator.getSubagentsByMessage(messageId);
110
+ return reactiveSubagents.getSubagentsByMessage(messageId);
105
111
  }
106
112
  };
107
113
  }
@@ -1 +1 @@
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"}
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\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\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 const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\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, () =>\n reactiveSubagents.mapSubagents(orchestrator.subagents)\n );\n const activeSubagentsStore = derived(version, () =>\n reactiveSubagents.mapActiveSubagents(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 reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return reactiveSubagents.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":";;;;;AAcA,SAAgB,gBAGd,SAAiD;CAIjD,MAAM,eAAe,IAAI,yBAAyC,QAAQ;CAE1E,MAAM,UAAU,SAAS,EAAE;CAC3B,MAAM,SAAS,SAAiB,GAAG;CACnC,MAAM,oBAAoB,gCACxB;EACE,cAAc,eAAe,aAAa,YAAY,WAAW;EACjE,qBAAqB,SAAS,aAAa,mBAAmB,KAAK;EACnE,wBAAwB,cACtB,aAAa,sBAAsB,UAAU;EAChD,EACD,QACD;CAED,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,eAC7B,kBAAkB,aAAa,aAAa,UAAU,CACvD;CACD,MAAM,uBAAuB,QAAQ,eACnC,kBAAkB,mBAAmB,aAAa,gBAAgB,CACnE;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,kBAAkB,YAAY,WAAW;;EAElD,mBAAmB,MAAc;AAC/B,UAAO,kBAAkB,mBAAmB,KAAK;;EAEnD,sBAAsB,WAAmB;AACvC,UAAO,kBAAkB,sBAAsB,UAAU;;EAE5D"}
@@ -0,0 +1,81 @@
1
+ let svelte_store = require("svelte/store");
2
+ //#region src/subagents.ts
3
+ /**
4
+ * Create stable proxy objects for subagents so retained references stay in sync
5
+ * with the latest orchestrator snapshot while still participating in Svelte
6
+ * reactivity via the provided version store.
7
+ */
8
+ function createReactiveSubagentAccessors(accessors, version) {
9
+ const subagentCache = /* @__PURE__ */ new Map();
10
+ const versionRef = (0, svelte_store.fromStore)(version);
11
+ const readVersion = () => {
12
+ versionRef.current;
13
+ };
14
+ const getCachedSubagent = (toolCallId) => {
15
+ if (!accessors.getSubagent(toolCallId)) {
16
+ subagentCache.delete(toolCallId);
17
+ return;
18
+ }
19
+ let cached = subagentCache.get(toolCallId);
20
+ if (!cached) {
21
+ cached = new Proxy({ id: toolCallId }, {
22
+ get(_target, prop, receiver) {
23
+ readVersion();
24
+ const latest = accessors.getSubagent(toolCallId);
25
+ if (!latest) return void 0;
26
+ const value = Reflect.get(latest, prop, receiver);
27
+ return typeof value === "function" ? value.bind(latest) : value;
28
+ },
29
+ has(_target, prop) {
30
+ const latest = accessors.getSubagent(toolCallId);
31
+ return latest ? prop in latest : false;
32
+ },
33
+ ownKeys() {
34
+ readVersion();
35
+ const latest = accessors.getSubagent(toolCallId);
36
+ return latest ? Reflect.ownKeys(latest) : [];
37
+ },
38
+ getOwnPropertyDescriptor(_target, prop) {
39
+ return {
40
+ configurable: true,
41
+ enumerable: true,
42
+ get() {
43
+ readVersion();
44
+ const latest = accessors.getSubagent(toolCallId);
45
+ if (!latest) return void 0;
46
+ return Reflect.get(latest, prop);
47
+ }
48
+ };
49
+ }
50
+ });
51
+ subagentCache.set(toolCallId, cached);
52
+ }
53
+ return cached;
54
+ };
55
+ const mapSubagents = (subagents) => {
56
+ const nextIds = new Set(subagents.keys());
57
+ for (const toolCallId of subagentCache.keys()) if (!nextIds.has(toolCallId)) subagentCache.delete(toolCallId);
58
+ return new Map([...subagents.keys()].map((toolCallId) => {
59
+ const cached = getCachedSubagent(toolCallId);
60
+ return cached ? [toolCallId, cached] : void 0;
61
+ }).filter((entry) => entry != null));
62
+ };
63
+ const mapActiveSubagents = (subagents) => subagents.map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
64
+ return {
65
+ mapSubagents,
66
+ mapActiveSubagents,
67
+ getSubagent: getCachedSubagent,
68
+ getSubagentsByType(type) {
69
+ readVersion();
70
+ return accessors.getSubagentsByType(type).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
71
+ },
72
+ getSubagentsByMessage(messageId) {
73
+ readVersion();
74
+ return accessors.getSubagentsByMessage(messageId).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
75
+ }
76
+ };
77
+ }
78
+ //#endregion
79
+ exports.createReactiveSubagentAccessors = createReactiveSubagentAccessors;
80
+
81
+ //# sourceMappingURL=subagents.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents.cjs","names":[],"sources":["../src/subagents.ts"],"sourcesContent":["import type { Readable } from \"svelte/store\";\nimport { fromStore } from \"svelte/store\";\n\ntype SubagentLike = {\n id: string;\n};\n\ntype SubagentAccessors<TSubagent extends SubagentLike> = {\n getSubagent: (toolCallId: string) => TSubagent | undefined;\n getSubagentsByType: (type: string) => TSubagent[];\n getSubagentsByMessage: (messageId: string) => TSubagent[];\n};\n\n/**\n * Create stable proxy objects for subagents so retained references stay in sync\n * with the latest orchestrator snapshot while still participating in Svelte\n * reactivity via the provided version store.\n */\nexport function createReactiveSubagentAccessors<TSubagent extends SubagentLike>(\n accessors: SubagentAccessors<TSubagent>,\n version: Readable<number>\n) {\n const subagentCache = new Map<string, TSubagent>();\n const versionRef = fromStore(version);\n\n const readVersion = () => {\n void versionRef.current;\n };\n\n const getCachedSubagent = (toolCallId: string): TSubagent | undefined => {\n const current = accessors.getSubagent(toolCallId);\n if (!current) {\n subagentCache.delete(toolCallId);\n return undefined;\n }\n\n let cached = subagentCache.get(toolCallId);\n if (!cached) {\n cached = new Proxy({ id: toolCallId } as TSubagent, {\n get(_target, prop, receiver) {\n readVersion();\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n\n const value = Reflect.get(latest as object, prop, receiver);\n return typeof value === \"function\" ? value.bind(latest) : value;\n },\n has(_target, prop) {\n const latest = accessors.getSubagent(toolCallId);\n return latest ? prop in (latest as object) : false;\n },\n ownKeys() {\n readVersion();\n const latest = accessors.getSubagent(toolCallId);\n return latest ? Reflect.ownKeys(latest as object) : [];\n },\n getOwnPropertyDescriptor(_target, prop) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n readVersion();\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n return Reflect.get(latest as object, prop);\n },\n };\n },\n });\n subagentCache.set(toolCallId, cached);\n }\n\n return cached;\n };\n\n const mapSubagents = (subagents: Map<string, TSubagent>) => {\n const nextIds = new Set(subagents.keys());\n for (const toolCallId of subagentCache.keys()) {\n if (!nextIds.has(toolCallId)) {\n subagentCache.delete(toolCallId);\n }\n }\n\n return new Map(\n [...subagents.keys()]\n .map((toolCallId) => {\n const cached = getCachedSubagent(toolCallId);\n return cached ? ([toolCallId, cached] as const) : undefined;\n })\n .filter((entry): entry is readonly [string, TSubagent] => entry != null)\n );\n };\n\n const mapActiveSubagents = (subagents: readonly TSubagent[]) =>\n subagents\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n\n return {\n mapSubagents,\n mapActiveSubagents,\n getSubagent: getCachedSubagent,\n getSubagentsByType(type: string): TSubagent[] {\n readVersion();\n return accessors\n .getSubagentsByType(type)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n getSubagentsByMessage(messageId: string): TSubagent[] {\n readVersion();\n return accessors\n .getSubagentsByMessage(messageId)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n };\n}\n"],"mappings":";;;;;;;AAkBA,SAAgB,gCACd,WACA,SACA;CACA,MAAM,gCAAgB,IAAI,KAAwB;CAClD,MAAM,cAAA,GAAA,aAAA,WAAuB,QAAQ;CAErC,MAAM,oBAAoB;AACnB,aAAW;;CAGlB,MAAM,qBAAqB,eAA8C;AAEvE,MAAI,CADY,UAAU,YAAY,WAAW,EACnC;AACZ,iBAAc,OAAO,WAAW;AAChC;;EAGF,IAAI,SAAS,cAAc,IAAI,WAAW;AAC1C,MAAI,CAAC,QAAQ;AACX,YAAS,IAAI,MAAM,EAAE,IAAI,YAAY,EAAe;IAClD,IAAI,SAAS,MAAM,UAAU;AAC3B,kBAAa;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,SAAI,CAAC,OAAQ,QAAO,KAAA;KAEpB,MAAM,QAAQ,QAAQ,IAAI,QAAkB,MAAM,SAAS;AAC3D,YAAO,OAAO,UAAU,aAAa,MAAM,KAAK,OAAO,GAAG;;IAE5D,IAAI,SAAS,MAAM;KACjB,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAS,SAAoB;;IAE/C,UAAU;AACR,kBAAa;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAQ,QAAQ,OAAiB,GAAG,EAAE;;IAExD,yBAAyB,SAAS,MAAM;AACtC,YAAO;MACL,cAAc;MACd,YAAY;MACZ,MAAM;AACJ,oBAAa;OACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,WAAI,CAAC,OAAQ,QAAO,KAAA;AACpB,cAAO,QAAQ,IAAI,QAAkB,KAAK;;MAE7C;;IAEJ,CAAC;AACF,iBAAc,IAAI,YAAY,OAAO;;AAGvC,SAAO;;CAGT,MAAM,gBAAgB,cAAsC;EAC1D,MAAM,UAAU,IAAI,IAAI,UAAU,MAAM,CAAC;AACzC,OAAK,MAAM,cAAc,cAAc,MAAM,CAC3C,KAAI,CAAC,QAAQ,IAAI,WAAW,CAC1B,eAAc,OAAO,WAAW;AAIpC,SAAO,IAAI,IACT,CAAC,GAAG,UAAU,MAAM,CAAC,CAClB,KAAK,eAAe;GACnB,MAAM,SAAS,kBAAkB,WAAW;AAC5C,UAAO,SAAU,CAAC,YAAY,OAAO,GAAa,KAAA;IAClD,CACD,QAAQ,UAAiD,SAAS,KAAK,CAC3E;;CAGH,MAAM,sBAAsB,cAC1B,UACG,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;AAElE,QAAO;EACL;EACA;EACA,aAAa;EACb,mBAAmB,MAA2B;AAC5C,gBAAa;AACb,UAAO,UACJ,mBAAmB,KAAK,CACxB,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAElE,sBAAsB,WAAgC;AACpD,gBAAa;AACb,UAAO,UACJ,sBAAsB,UAAU,CAChC,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAEnE"}
@@ -0,0 +1,81 @@
1
+ import { fromStore } from "svelte/store";
2
+ //#region src/subagents.ts
3
+ /**
4
+ * Create stable proxy objects for subagents so retained references stay in sync
5
+ * with the latest orchestrator snapshot while still participating in Svelte
6
+ * reactivity via the provided version store.
7
+ */
8
+ function createReactiveSubagentAccessors(accessors, version) {
9
+ const subagentCache = /* @__PURE__ */ new Map();
10
+ const versionRef = fromStore(version);
11
+ const readVersion = () => {
12
+ versionRef.current;
13
+ };
14
+ const getCachedSubagent = (toolCallId) => {
15
+ if (!accessors.getSubagent(toolCallId)) {
16
+ subagentCache.delete(toolCallId);
17
+ return;
18
+ }
19
+ let cached = subagentCache.get(toolCallId);
20
+ if (!cached) {
21
+ cached = new Proxy({ id: toolCallId }, {
22
+ get(_target, prop, receiver) {
23
+ readVersion();
24
+ const latest = accessors.getSubagent(toolCallId);
25
+ if (!latest) return void 0;
26
+ const value = Reflect.get(latest, prop, receiver);
27
+ return typeof value === "function" ? value.bind(latest) : value;
28
+ },
29
+ has(_target, prop) {
30
+ const latest = accessors.getSubagent(toolCallId);
31
+ return latest ? prop in latest : false;
32
+ },
33
+ ownKeys() {
34
+ readVersion();
35
+ const latest = accessors.getSubagent(toolCallId);
36
+ return latest ? Reflect.ownKeys(latest) : [];
37
+ },
38
+ getOwnPropertyDescriptor(_target, prop) {
39
+ return {
40
+ configurable: true,
41
+ enumerable: true,
42
+ get() {
43
+ readVersion();
44
+ const latest = accessors.getSubagent(toolCallId);
45
+ if (!latest) return void 0;
46
+ return Reflect.get(latest, prop);
47
+ }
48
+ };
49
+ }
50
+ });
51
+ subagentCache.set(toolCallId, cached);
52
+ }
53
+ return cached;
54
+ };
55
+ const mapSubagents = (subagents) => {
56
+ const nextIds = new Set(subagents.keys());
57
+ for (const toolCallId of subagentCache.keys()) if (!nextIds.has(toolCallId)) subagentCache.delete(toolCallId);
58
+ return new Map([...subagents.keys()].map((toolCallId) => {
59
+ const cached = getCachedSubagent(toolCallId);
60
+ return cached ? [toolCallId, cached] : void 0;
61
+ }).filter((entry) => entry != null));
62
+ };
63
+ const mapActiveSubagents = (subagents) => subagents.map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
64
+ return {
65
+ mapSubagents,
66
+ mapActiveSubagents,
67
+ getSubagent: getCachedSubagent,
68
+ getSubagentsByType(type) {
69
+ readVersion();
70
+ return accessors.getSubagentsByType(type).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
71
+ },
72
+ getSubagentsByMessage(messageId) {
73
+ readVersion();
74
+ return accessors.getSubagentsByMessage(messageId).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
75
+ }
76
+ };
77
+ }
78
+ //#endregion
79
+ export { createReactiveSubagentAccessors };
80
+
81
+ //# sourceMappingURL=subagents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents.js","names":[],"sources":["../src/subagents.ts"],"sourcesContent":["import type { Readable } from \"svelte/store\";\nimport { fromStore } from \"svelte/store\";\n\ntype SubagentLike = {\n id: string;\n};\n\ntype SubagentAccessors<TSubagent extends SubagentLike> = {\n getSubagent: (toolCallId: string) => TSubagent | undefined;\n getSubagentsByType: (type: string) => TSubagent[];\n getSubagentsByMessage: (messageId: string) => TSubagent[];\n};\n\n/**\n * Create stable proxy objects for subagents so retained references stay in sync\n * with the latest orchestrator snapshot while still participating in Svelte\n * reactivity via the provided version store.\n */\nexport function createReactiveSubagentAccessors<TSubagent extends SubagentLike>(\n accessors: SubagentAccessors<TSubagent>,\n version: Readable<number>\n) {\n const subagentCache = new Map<string, TSubagent>();\n const versionRef = fromStore(version);\n\n const readVersion = () => {\n void versionRef.current;\n };\n\n const getCachedSubagent = (toolCallId: string): TSubagent | undefined => {\n const current = accessors.getSubagent(toolCallId);\n if (!current) {\n subagentCache.delete(toolCallId);\n return undefined;\n }\n\n let cached = subagentCache.get(toolCallId);\n if (!cached) {\n cached = new Proxy({ id: toolCallId } as TSubagent, {\n get(_target, prop, receiver) {\n readVersion();\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n\n const value = Reflect.get(latest as object, prop, receiver);\n return typeof value === \"function\" ? value.bind(latest) : value;\n },\n has(_target, prop) {\n const latest = accessors.getSubagent(toolCallId);\n return latest ? prop in (latest as object) : false;\n },\n ownKeys() {\n readVersion();\n const latest = accessors.getSubagent(toolCallId);\n return latest ? Reflect.ownKeys(latest as object) : [];\n },\n getOwnPropertyDescriptor(_target, prop) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n readVersion();\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n return Reflect.get(latest as object, prop);\n },\n };\n },\n });\n subagentCache.set(toolCallId, cached);\n }\n\n return cached;\n };\n\n const mapSubagents = (subagents: Map<string, TSubagent>) => {\n const nextIds = new Set(subagents.keys());\n for (const toolCallId of subagentCache.keys()) {\n if (!nextIds.has(toolCallId)) {\n subagentCache.delete(toolCallId);\n }\n }\n\n return new Map(\n [...subagents.keys()]\n .map((toolCallId) => {\n const cached = getCachedSubagent(toolCallId);\n return cached ? ([toolCallId, cached] as const) : undefined;\n })\n .filter((entry): entry is readonly [string, TSubagent] => entry != null)\n );\n };\n\n const mapActiveSubagents = (subagents: readonly TSubagent[]) =>\n subagents\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n\n return {\n mapSubagents,\n mapActiveSubagents,\n getSubagent: getCachedSubagent,\n getSubagentsByType(type: string): TSubagent[] {\n readVersion();\n return accessors\n .getSubagentsByType(type)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n getSubagentsByMessage(messageId: string): TSubagent[] {\n readVersion();\n return accessors\n .getSubagentsByMessage(messageId)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n };\n}\n"],"mappings":";;;;;;;AAkBA,SAAgB,gCACd,WACA,SACA;CACA,MAAM,gCAAgB,IAAI,KAAwB;CAClD,MAAM,aAAa,UAAU,QAAQ;CAErC,MAAM,oBAAoB;AACnB,aAAW;;CAGlB,MAAM,qBAAqB,eAA8C;AAEvE,MAAI,CADY,UAAU,YAAY,WAAW,EACnC;AACZ,iBAAc,OAAO,WAAW;AAChC;;EAGF,IAAI,SAAS,cAAc,IAAI,WAAW;AAC1C,MAAI,CAAC,QAAQ;AACX,YAAS,IAAI,MAAM,EAAE,IAAI,YAAY,EAAe;IAClD,IAAI,SAAS,MAAM,UAAU;AAC3B,kBAAa;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,SAAI,CAAC,OAAQ,QAAO,KAAA;KAEpB,MAAM,QAAQ,QAAQ,IAAI,QAAkB,MAAM,SAAS;AAC3D,YAAO,OAAO,UAAU,aAAa,MAAM,KAAK,OAAO,GAAG;;IAE5D,IAAI,SAAS,MAAM;KACjB,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAS,SAAoB;;IAE/C,UAAU;AACR,kBAAa;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAQ,QAAQ,OAAiB,GAAG,EAAE;;IAExD,yBAAyB,SAAS,MAAM;AACtC,YAAO;MACL,cAAc;MACd,YAAY;MACZ,MAAM;AACJ,oBAAa;OACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,WAAI,CAAC,OAAQ,QAAO,KAAA;AACpB,cAAO,QAAQ,IAAI,QAAkB,KAAK;;MAE7C;;IAEJ,CAAC;AACF,iBAAc,IAAI,YAAY,OAAO;;AAGvC,SAAO;;CAGT,MAAM,gBAAgB,cAAsC;EAC1D,MAAM,UAAU,IAAI,IAAI,UAAU,MAAM,CAAC;AACzC,OAAK,MAAM,cAAc,cAAc,MAAM,CAC3C,KAAI,CAAC,QAAQ,IAAI,WAAW,CAC1B,eAAc,OAAO,WAAW;AAIpC,SAAO,IAAI,IACT,CAAC,GAAG,UAAU,MAAM,CAAC,CAClB,KAAK,eAAe;GACnB,MAAM,SAAS,kBAAkB,WAAW;AAC5C,UAAO,SAAU,CAAC,YAAY,OAAO,GAAa,KAAA;IAClD,CACD,QAAQ,UAAiD,SAAS,KAAK,CAC3E;;CAGH,MAAM,sBAAsB,cAC1B,UACG,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;AAElE,QAAO;EACL;EACA;EACA,aAAa;EACb,mBAAmB,MAA2B;AAC5C,gBAAa;AACb,UAAO,UACJ,mBAAmB,KAAK,CACxB,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAElE,sBAAsB,WAAgC;AACpD,gBAAa;AACb,UAAO,UACJ,sBAAsB,UAAU,CAChC,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAEnE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/svelte",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Svelte integration for LangGraph & LangChain",
5
5
  "type": "module",
6
6
  "license": "MIT",