@langchain/angular 0.1.2 → 0.1.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
@@ -370,7 +370,7 @@ function useStreamLGP(options) {
370
370
  });
371
371
  const historyList = (0, _angular_core.computed)(() => {
372
372
  if (historyLimit === false) throw new Error("`fetchStateHistory` must be set to `true` to use `history`");
373
- return branchContext().flatHistory;
373
+ return (0, _langchain_langgraph_sdk_ui.ensureHistoryMessageInstances)(branchContext().flatHistory, options.messagesKey ?? "messages");
374
374
  });
375
375
  const isThreadLoading = (0, _angular_core.computed)(() => history().isLoading && history().data == null);
376
376
  const experimentalBranchTree = (0, _angular_core.computed)(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["useStreamCustom","Client","MessageTupleManager","StreamManager","toMessageClass","PendingRunsTracker","StreamError"],"sources":["../src/index.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport type { Signal, WritableSignal } from \"@angular/core\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n filterStream,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamOptions,\n type ResolveStreamInterface,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type StreamEvent,\n type StreamMode,\n type Message,\n type Interrupt,\n type BagTemplate,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport } from \"@langchain/langgraph-sdk/ui\";\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\ntype WithClassMessages<T> = Omit<\n T,\n | \"messages\"\n | \"getMessagesMetadata\"\n | \"toolCalls\"\n | \"getToolCalls\"\n | \"submit\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"submit\" extends keyof T\n ? {\n submit: T extends {\n submit: (values: infer V, options?: infer O) => infer Ret;\n }\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : never;\n }\n : unknown) &\n (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"subagents\" extends keyof T\n ? {\n subagents: T extends {\n subagents: Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >;\n }\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : never;\n activeSubagents: T extends {\n activeSubagents: SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[];\n }\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\ntype AngularWritableKeys = \"isLoading\" | \"branch\";\n\ntype AngularPlainKeys =\n | \"submit\"\n | \"stop\"\n | \"joinStream\"\n | \"switchThread\"\n | \"setBranch\"\n | \"getMessagesMetadata\"\n | \"getToolCalls\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"client\"\n | \"assistantId\";\n\ntype AngularQueueInterface<T> = T extends {\n entries: infer E;\n size: infer S;\n cancel: infer C;\n clear: infer Cl;\n}\n ? {\n entries: WritableSignal<E>;\n size: WritableSignal<S>;\n cancel: C;\n clear: Cl;\n }\n : T;\n\ntype AngularSignalWrap<T> = {\n [K in keyof T]: K extends AngularPlainKeys\n ? T[K]\n : K extends AngularWritableKeys\n ? WritableSignal<T[K]>\n : K extends \"queue\"\n ? AngularQueueInterface<T[K]>\n : Signal<T[K]>;\n};\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\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 resolveRunMetadataStorage(\n reconnectOnMount: AnyStreamOptions[\"reconnectOnMount\"],\n) {\n if (typeof globalThis.window === \"undefined\") return null;\n if (reconnectOnMount === true) return globalThis.window.sessionStorage;\n if (typeof reconnectOnMount === \"function\") return reconnectOnMount();\n return null;\n}\n\nexport function useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const runMetadataStorage = resolveRunMetadataStorage(\n options.reconnectOnMount,\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = signal<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = signal<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? threadId();\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.set({\n data,\n error: undefined,\n isLoading: false,\n mutate,\n });\n return data;\n } catch (err) {\n history.update((prev) => ({\n ...prev,\n error: err,\n isLoading: false,\n }));\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.update((prev) => ({ ...prev, mutate }));\n\n const branch = signal<string>(\"\");\n const branchContext = computed(() =>\n getBranchContext(branch(), history().data ?? undefined),\n );\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n const queueEntries = signal(pendingRuns.entries);\n const queueSize = signal(pendingRuns.size);\n\n const historyValues = computed(\n () =>\n branchContext().threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = computed(() => {\n const error = branchContext().threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const values = computed(() => streamValues() ?? historyValues());\n const error = computed(\n () => streamError() ?? historyError() ?? history().error,\n );\n\n const messageMetadata = computed(() =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history().data,\n getMessages,\n branchContext: branchContext(),\n }),\n );\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n pendingRuns.subscribe(() => {\n queueEntries.set(pendingRuns.entries);\n queueSize.set(pendingRuns.size);\n });\n\n effect(() => {\n const hvMessages = getMessages(historyValues());\n const should =\n options.filterSubagentMessages &&\n !isLoading() &&\n !history().isLoading &&\n hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n function stop() {\n return stream.stop(historyValues(), {\n onStop: (args) => {\n if (runMetadataStorage && threadId()) {\n const tid = threadId()!;\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) void client.runs.cancel(tid, runId);\n runMetadataStorage.removeItem(`lg:stream:${tid}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = branchContext();\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.set(\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\",\n );\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = threadId();\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.set(usableThreadId);\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode = new Set<StreamMode>([\n ...(submitOptions?.streamMode ?? []),\n \"values\",\n \"messages-tuple\",\n \"updates\",\n ]);\n if (options.onUpdateEvent) streamMode.add(\"updates\");\n if (options.onCustomEvent) streamMode.add(\"custom\");\n if (options.onCheckpointEvent) streamMode.add(\"checkpoints\");\n if (options.onTaskEvent) streamMode.add(\"tasks\");\n if (\"onDebugEvent\" in options && options.onDebugEvent)\n streamMode.add(\"debug\");\n if (\"onLangChainEvent\" in options && options.onLangChainEvent)\n streamMode.add(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...historyValues(), ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode: [...streamMode],\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError: (error) => {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let submitting = false;\n\n function drainQueue() {\n if (!isLoading() && !submitting && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting = true;\n void joinStream(next.id).finally(() => {\n submitting = false;\n drainQueue();\n });\n }\n }\n }\n\n effect(() => {\n drainQueue();\n });\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = threadId();\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting = false;\n drainQueue();\n });\n return result;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n const tid = threadId();\n if (!tid) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: tid,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(tid, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${tid}`);\n const newHistory = await mutate(tid);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish() {},\n },\n );\n }\n\n const shouldReconnect = !!runMetadataStorage;\n let hasReconnected = false;\n\n effect(() => {\n const tid = threadId();\n if (\n !hasReconnected &&\n shouldReconnect &&\n runMetadataStorage &&\n tid &&\n !isLoading()\n ) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) {\n hasReconnected = true;\n void joinStream(runId);\n }\n }\n });\n\n const messages = computed(() =>\n ensureMessageInstances(getMessages(values())),\n );\n\n const toolCalls = computed(() =>\n getToolCallsWithResults(getMessages(values())),\n );\n\n function getToolCalls(message: Message) {\n const allToolCalls = getToolCallsWithResults(getMessages(values()));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const interrupt = computed(() =>\n extractInterrupts<InterruptType>(values(), {\n isLoading: isLoading(),\n threadState: branchContext().threadHead,\n error: error(),\n }),\n );\n\n const interrupts = computed((): Interrupt<InterruptType>[] => {\n const vals = values();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if (isLoading()) return [];\n\n const allTasks = branchContext().threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n if (allInterrupts.length > 0) {\n return allInterrupts as Interrupt<InterruptType>[];\n }\n\n const next = branchContext().threadHead?.next ?? [];\n if (!next.length || error() != null) return [];\n return [{ when: \"breakpoint\" }];\n });\n\n const historyList = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return branchContext().flatHistory;\n });\n\n const isThreadLoading = computed(\n () => history().isLoading && history().data == null,\n );\n\n const experimentalBranchTree = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return branchContext().branchTree;\n });\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata().find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n }\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch,\n\n messages,\n toolCalls,\n getToolCalls,\n\n interrupt,\n interrupts,\n\n history: historyList,\n isThreadLoading,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata,\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = threadId();\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = threadId();\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid!, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = threadId() ?? null;\n if (newThreadId !== current) {\n const prevThreadId = threadId();\n threadId.set(newThreadId ?? undefined);\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentApi,\n SubagentStream,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["useStreamCustom","Client","MessageTupleManager","StreamManager","toMessageClass","PendingRunsTracker","StreamError"],"sources":["../src/index.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport type { Signal, WritableSignal } from \"@angular/core\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n filterStream,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n ensureHistoryMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamOptions,\n type ResolveStreamInterface,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type StreamEvent,\n type StreamMode,\n type Message,\n type Interrupt,\n type BagTemplate,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport } from \"@langchain/langgraph-sdk/ui\";\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\ntype WithClassMessages<T> = Omit<\n T,\n | \"messages\"\n | \"history\"\n | \"getMessagesMetadata\"\n | \"toolCalls\"\n | \"getToolCalls\"\n | \"submit\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"history\" extends keyof T\n ? { history: HistoryWithBaseMessages<T[\"history\"]> }\n : unknown) &\n (\"submit\" extends keyof T\n ? {\n submit: T extends {\n submit: (values: infer V, options?: infer O) => infer Ret;\n }\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : never;\n }\n : unknown) &\n (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"subagents\" extends keyof T\n ? {\n subagents: T extends {\n subagents: Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >;\n }\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : never;\n activeSubagents: T extends {\n activeSubagents: SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[];\n }\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\ntype AngularWritableKeys = \"isLoading\" | \"branch\";\n\ntype AngularPlainKeys =\n | \"submit\"\n | \"stop\"\n | \"joinStream\"\n | \"switchThread\"\n | \"setBranch\"\n | \"getMessagesMetadata\"\n | \"getToolCalls\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"client\"\n | \"assistantId\";\n\ntype AngularQueueInterface<T> = T extends {\n entries: infer E;\n size: infer S;\n cancel: infer C;\n clear: infer Cl;\n}\n ? {\n entries: WritableSignal<E>;\n size: WritableSignal<S>;\n cancel: C;\n clear: Cl;\n }\n : T;\n\ntype AngularSignalWrap<T> = {\n [K in keyof T]: K extends AngularPlainKeys\n ? T[K]\n : K extends AngularWritableKeys\n ? WritableSignal<T[K]>\n : K extends \"queue\"\n ? AngularQueueInterface<T[K]>\n : Signal<T[K]>;\n};\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\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 resolveRunMetadataStorage(\n reconnectOnMount: AnyStreamOptions[\"reconnectOnMount\"],\n) {\n if (typeof globalThis.window === \"undefined\") return null;\n if (reconnectOnMount === true) return globalThis.window.sessionStorage;\n if (typeof reconnectOnMount === \"function\") return reconnectOnMount();\n return null;\n}\n\nexport function useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const runMetadataStorage = resolveRunMetadataStorage(\n options.reconnectOnMount,\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = signal<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = signal<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? threadId();\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.set({\n data,\n error: undefined,\n isLoading: false,\n mutate,\n });\n return data;\n } catch (err) {\n history.update((prev) => ({\n ...prev,\n error: err,\n isLoading: false,\n }));\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.update((prev) => ({ ...prev, mutate }));\n\n const branch = signal<string>(\"\");\n const branchContext = computed(() =>\n getBranchContext(branch(), history().data ?? undefined),\n );\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n const queueEntries = signal(pendingRuns.entries);\n const queueSize = signal(pendingRuns.size);\n\n const historyValues = computed(\n () =>\n branchContext().threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = computed(() => {\n const error = branchContext().threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const values = computed(() => streamValues() ?? historyValues());\n const error = computed(\n () => streamError() ?? historyError() ?? history().error,\n );\n\n const messageMetadata = computed(() =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history().data,\n getMessages,\n branchContext: branchContext(),\n }),\n );\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n pendingRuns.subscribe(() => {\n queueEntries.set(pendingRuns.entries);\n queueSize.set(pendingRuns.size);\n });\n\n effect(() => {\n const hvMessages = getMessages(historyValues());\n const should =\n options.filterSubagentMessages &&\n !isLoading() &&\n !history().isLoading &&\n hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n function stop() {\n return stream.stop(historyValues(), {\n onStop: (args) => {\n if (runMetadataStorage && threadId()) {\n const tid = threadId()!;\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) void client.runs.cancel(tid, runId);\n runMetadataStorage.removeItem(`lg:stream:${tid}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = branchContext();\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.set(\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\",\n );\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = threadId();\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.set(usableThreadId);\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode = new Set<StreamMode>([\n ...(submitOptions?.streamMode ?? []),\n \"values\",\n \"messages-tuple\",\n \"updates\",\n ]);\n if (options.onUpdateEvent) streamMode.add(\"updates\");\n if (options.onCustomEvent) streamMode.add(\"custom\");\n if (options.onCheckpointEvent) streamMode.add(\"checkpoints\");\n if (options.onTaskEvent) streamMode.add(\"tasks\");\n if (\"onDebugEvent\" in options && options.onDebugEvent)\n streamMode.add(\"debug\");\n if (\"onLangChainEvent\" in options && options.onLangChainEvent)\n streamMode.add(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...historyValues(), ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode: [...streamMode],\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError: (error) => {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let submitting = false;\n\n function drainQueue() {\n if (!isLoading() && !submitting && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting = true;\n void joinStream(next.id).finally(() => {\n submitting = false;\n drainQueue();\n });\n }\n }\n }\n\n effect(() => {\n drainQueue();\n });\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = threadId();\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting = false;\n drainQueue();\n });\n return result;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n const tid = threadId();\n if (!tid) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: tid,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(tid, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${tid}`);\n const newHistory = await mutate(tid);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish() {},\n },\n );\n }\n\n const shouldReconnect = !!runMetadataStorage;\n let hasReconnected = false;\n\n effect(() => {\n const tid = threadId();\n if (\n !hasReconnected &&\n shouldReconnect &&\n runMetadataStorage &&\n tid &&\n !isLoading()\n ) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) {\n hasReconnected = true;\n void joinStream(runId);\n }\n }\n });\n\n const messages = computed(() =>\n ensureMessageInstances(getMessages(values())),\n );\n\n const toolCalls = computed(() =>\n getToolCallsWithResults(getMessages(values())),\n );\n\n function getToolCalls(message: Message) {\n const allToolCalls = getToolCallsWithResults(getMessages(values()));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const interrupt = computed(() =>\n extractInterrupts<InterruptType>(values(), {\n isLoading: isLoading(),\n threadState: branchContext().threadHead,\n error: error(),\n }),\n );\n\n const interrupts = computed((): Interrupt<InterruptType>[] => {\n const vals = values();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if (isLoading()) return [];\n\n const allTasks = branchContext().threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n if (allInterrupts.length > 0) {\n return allInterrupts as Interrupt<InterruptType>[];\n }\n\n const next = branchContext().threadHead?.next ?? [];\n if (!next.length || error() != null) return [];\n return [{ when: \"breakpoint\" }];\n });\n\n const historyList = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return ensureHistoryMessageInstances(\n branchContext().flatHistory,\n options.messagesKey ?? \"messages\",\n );\n });\n\n const isThreadLoading = computed(\n () => history().isLoading && history().data == null,\n );\n\n const experimentalBranchTree = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return branchContext().branchTree;\n });\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata().find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n }\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch,\n\n messages,\n toolCalls,\n getToolCalls,\n\n interrupt,\n interrupts,\n\n history: historyList,\n isThreadLoading,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata,\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = threadId();\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = threadId();\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid!, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = threadId() ?? null;\n if (newThreadId !== current) {\n const prevThreadId = threadId();\n threadId.set(newThreadId ?? undefined);\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentApi,\n SubagentStream,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -3,7 +3,7 @@ import { BagTemplate, Client, DefaultToolCall, DefaultToolCall as DefaultToolCal
3
3
  import * as _langchain_core_messages0 from "@langchain/core/messages";
4
4
  import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
5
5
  import * as _langchain_langgraph_sdk_ui0 from "@langchain/langgraph-sdk/ui";
6
- import { AcceptBaseMessages, AgentTypeConfigLike, AnyStreamOptions, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetConfigurableType, GetInterruptType, GetToolCallsType, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, SubmitOptions, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
6
+ import { AcceptBaseMessages, AgentTypeConfigLike, AnyStreamOptions, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetConfigurableType, GetInterruptType, GetToolCallsType, HistoryWithBaseMessages, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, SubmitOptions, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
7
7
  import { Signal, WritableSignal } from "@angular/core";
8
8
 
9
9
  //#region src/index.d.ts
@@ -11,10 +11,12 @@ type ClassToolCallWithResult<T> = T extends ToolCallWithResult$1<infer TC, unkno
11
11
  type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall$1, SubagentName extends string = string> = Omit<SubagentStreamInterface$1<StateType, ToolCall, SubagentName>, "messages"> & {
12
12
  messages: BaseMessage[];
13
13
  };
14
- type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
14
+ type WithClassMessages<T> = Omit<T, "messages" | "history" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
15
15
  messages: BaseMessage[];
16
16
  getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined;
17
- } & ("submit" extends keyof T ? {
17
+ } & ("history" extends keyof T ? {
18
+ history: HistoryWithBaseMessages<T["history"]>;
19
+ } : unknown) & ("submit" extends keyof T ? {
18
20
  submit: T extends {
19
21
  submit: (values: infer V, options?: infer O) => infer Ret;
20
22
  } ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : never;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Signal, WritableSignal } from "@angular/core";
2
2
  import * as _langchain_langgraph_sdk_ui0 from "@langchain/langgraph-sdk/ui";
3
- import { AcceptBaseMessages, AgentTypeConfigLike, AnyStreamOptions, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetConfigurableType, GetInterruptType, GetToolCallsType, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, SubmitOptions, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
3
+ import { AcceptBaseMessages, AgentTypeConfigLike, AnyStreamOptions, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetConfigurableType, GetInterruptType, GetToolCallsType, HistoryWithBaseMessages, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, SubmitOptions, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
4
4
  import * as _langchain_langgraph_sdk0 from "@langchain/langgraph-sdk";
5
5
  import { BagTemplate, Client, DefaultToolCall, DefaultToolCall as DefaultToolCall$1, Interrupt, Message, StreamEvent, StreamMode, ThreadState, ToolCallFromTool, ToolCallState, ToolCallWithResult as ToolCallWithResult$1, ToolCallsFromTools } from "@langchain/langgraph-sdk";
6
6
  import * as _langchain_core_messages0 from "@langchain/core/messages";
@@ -11,10 +11,12 @@ type ClassToolCallWithResult<T> = T extends ToolCallWithResult$1<infer TC, unkno
11
11
  type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall$1, SubagentName extends string = string> = Omit<SubagentStreamInterface$1<StateType, ToolCall, SubagentName>, "messages"> & {
12
12
  messages: BaseMessage[];
13
13
  };
14
- type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
14
+ type WithClassMessages<T> = Omit<T, "messages" | "history" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
15
15
  messages: BaseMessage[];
16
16
  getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined;
17
- } & ("submit" extends keyof T ? {
17
+ } & ("history" extends keyof T ? {
18
+ history: HistoryWithBaseMessages<T["history"]>;
19
+ } : unknown) & ("submit" extends keyof T ? {
18
20
  submit: T extends {
19
21
  submit: (values: infer V, options?: infer O) => infer Ret;
20
22
  } ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : never;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { useStreamCustom } from "./stream.custom.js";
2
2
  import { computed, effect, signal } from "@angular/core";
3
- import { FetchStreamTransport, MessageTupleManager, PendingRunsTracker, StreamError, StreamManager, SubagentManager, calculateDepthFromNamespace, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass } from "@langchain/langgraph-sdk/ui";
3
+ import { FetchStreamTransport, MessageTupleManager, PendingRunsTracker, StreamError, StreamManager, SubagentManager, calculateDepthFromNamespace, ensureHistoryMessageInstances, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass } from "@langchain/langgraph-sdk/ui";
4
4
  import { Client } from "@langchain/langgraph-sdk";
5
5
  import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
6
6
  //#region src/index.ts
@@ -369,7 +369,7 @@ function useStreamLGP(options) {
369
369
  });
370
370
  const historyList = computed(() => {
371
371
  if (historyLimit === false) throw new Error("`fetchStateHistory` must be set to `true` to use `history`");
372
- return branchContext().flatHistory;
372
+ return ensureHistoryMessageInstances(branchContext().flatHistory, options.messagesKey ?? "messages");
373
373
  });
374
374
  const isThreadLoading = computed(() => history().isLoading && history().data == null);
375
375
  const experimentalBranchTree = computed(() => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport type { Signal, WritableSignal } from \"@angular/core\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n filterStream,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamOptions,\n type ResolveStreamInterface,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type StreamEvent,\n type StreamMode,\n type Message,\n type Interrupt,\n type BagTemplate,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport } from \"@langchain/langgraph-sdk/ui\";\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\ntype WithClassMessages<T> = Omit<\n T,\n | \"messages\"\n | \"getMessagesMetadata\"\n | \"toolCalls\"\n | \"getToolCalls\"\n | \"submit\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"submit\" extends keyof T\n ? {\n submit: T extends {\n submit: (values: infer V, options?: infer O) => infer Ret;\n }\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : never;\n }\n : unknown) &\n (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"subagents\" extends keyof T\n ? {\n subagents: T extends {\n subagents: Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >;\n }\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : never;\n activeSubagents: T extends {\n activeSubagents: SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[];\n }\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\ntype AngularWritableKeys = \"isLoading\" | \"branch\";\n\ntype AngularPlainKeys =\n | \"submit\"\n | \"stop\"\n | \"joinStream\"\n | \"switchThread\"\n | \"setBranch\"\n | \"getMessagesMetadata\"\n | \"getToolCalls\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"client\"\n | \"assistantId\";\n\ntype AngularQueueInterface<T> = T extends {\n entries: infer E;\n size: infer S;\n cancel: infer C;\n clear: infer Cl;\n}\n ? {\n entries: WritableSignal<E>;\n size: WritableSignal<S>;\n cancel: C;\n clear: Cl;\n }\n : T;\n\ntype AngularSignalWrap<T> = {\n [K in keyof T]: K extends AngularPlainKeys\n ? T[K]\n : K extends AngularWritableKeys\n ? WritableSignal<T[K]>\n : K extends \"queue\"\n ? AngularQueueInterface<T[K]>\n : Signal<T[K]>;\n};\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\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 resolveRunMetadataStorage(\n reconnectOnMount: AnyStreamOptions[\"reconnectOnMount\"],\n) {\n if (typeof globalThis.window === \"undefined\") return null;\n if (reconnectOnMount === true) return globalThis.window.sessionStorage;\n if (typeof reconnectOnMount === \"function\") return reconnectOnMount();\n return null;\n}\n\nexport function useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const runMetadataStorage = resolveRunMetadataStorage(\n options.reconnectOnMount,\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = signal<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = signal<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? threadId();\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.set({\n data,\n error: undefined,\n isLoading: false,\n mutate,\n });\n return data;\n } catch (err) {\n history.update((prev) => ({\n ...prev,\n error: err,\n isLoading: false,\n }));\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.update((prev) => ({ ...prev, mutate }));\n\n const branch = signal<string>(\"\");\n const branchContext = computed(() =>\n getBranchContext(branch(), history().data ?? undefined),\n );\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n const queueEntries = signal(pendingRuns.entries);\n const queueSize = signal(pendingRuns.size);\n\n const historyValues = computed(\n () =>\n branchContext().threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = computed(() => {\n const error = branchContext().threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const values = computed(() => streamValues() ?? historyValues());\n const error = computed(\n () => streamError() ?? historyError() ?? history().error,\n );\n\n const messageMetadata = computed(() =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history().data,\n getMessages,\n branchContext: branchContext(),\n }),\n );\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n pendingRuns.subscribe(() => {\n queueEntries.set(pendingRuns.entries);\n queueSize.set(pendingRuns.size);\n });\n\n effect(() => {\n const hvMessages = getMessages(historyValues());\n const should =\n options.filterSubagentMessages &&\n !isLoading() &&\n !history().isLoading &&\n hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n function stop() {\n return stream.stop(historyValues(), {\n onStop: (args) => {\n if (runMetadataStorage && threadId()) {\n const tid = threadId()!;\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) void client.runs.cancel(tid, runId);\n runMetadataStorage.removeItem(`lg:stream:${tid}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = branchContext();\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.set(\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\",\n );\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = threadId();\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.set(usableThreadId);\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode = new Set<StreamMode>([\n ...(submitOptions?.streamMode ?? []),\n \"values\",\n \"messages-tuple\",\n \"updates\",\n ]);\n if (options.onUpdateEvent) streamMode.add(\"updates\");\n if (options.onCustomEvent) streamMode.add(\"custom\");\n if (options.onCheckpointEvent) streamMode.add(\"checkpoints\");\n if (options.onTaskEvent) streamMode.add(\"tasks\");\n if (\"onDebugEvent\" in options && options.onDebugEvent)\n streamMode.add(\"debug\");\n if (\"onLangChainEvent\" in options && options.onLangChainEvent)\n streamMode.add(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...historyValues(), ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode: [...streamMode],\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError: (error) => {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let submitting = false;\n\n function drainQueue() {\n if (!isLoading() && !submitting && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting = true;\n void joinStream(next.id).finally(() => {\n submitting = false;\n drainQueue();\n });\n }\n }\n }\n\n effect(() => {\n drainQueue();\n });\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = threadId();\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting = false;\n drainQueue();\n });\n return result;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n const tid = threadId();\n if (!tid) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: tid,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(tid, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${tid}`);\n const newHistory = await mutate(tid);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish() {},\n },\n );\n }\n\n const shouldReconnect = !!runMetadataStorage;\n let hasReconnected = false;\n\n effect(() => {\n const tid = threadId();\n if (\n !hasReconnected &&\n shouldReconnect &&\n runMetadataStorage &&\n tid &&\n !isLoading()\n ) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) {\n hasReconnected = true;\n void joinStream(runId);\n }\n }\n });\n\n const messages = computed(() =>\n ensureMessageInstances(getMessages(values())),\n );\n\n const toolCalls = computed(() =>\n getToolCallsWithResults(getMessages(values())),\n );\n\n function getToolCalls(message: Message) {\n const allToolCalls = getToolCallsWithResults(getMessages(values()));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const interrupt = computed(() =>\n extractInterrupts<InterruptType>(values(), {\n isLoading: isLoading(),\n threadState: branchContext().threadHead,\n error: error(),\n }),\n );\n\n const interrupts = computed((): Interrupt<InterruptType>[] => {\n const vals = values();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if (isLoading()) return [];\n\n const allTasks = branchContext().threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n if (allInterrupts.length > 0) {\n return allInterrupts as Interrupt<InterruptType>[];\n }\n\n const next = branchContext().threadHead?.next ?? [];\n if (!next.length || error() != null) return [];\n return [{ when: \"breakpoint\" }];\n });\n\n const historyList = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return branchContext().flatHistory;\n });\n\n const isThreadLoading = computed(\n () => history().isLoading && history().data == null,\n );\n\n const experimentalBranchTree = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return branchContext().branchTree;\n });\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata().find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n }\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch,\n\n messages,\n toolCalls,\n getToolCalls,\n\n interrupt,\n interrupts,\n\n history: historyList,\n isThreadLoading,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata,\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = threadId();\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = threadId();\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid!, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = threadId() ?? null;\n if (newThreadId !== current) {\n const prevThreadId = threadId();\n threadId.set(newThreadId ?? undefined);\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentApi,\n SubagentStream,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport type { Signal, WritableSignal } from \"@angular/core\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n filterStream,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n ensureHistoryMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamOptions,\n type ResolveStreamInterface,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type StreamEvent,\n type StreamMode,\n type Message,\n type Interrupt,\n type BagTemplate,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport } from \"@langchain/langgraph-sdk/ui\";\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\ntype WithClassMessages<T> = Omit<\n T,\n | \"messages\"\n | \"history\"\n | \"getMessagesMetadata\"\n | \"toolCalls\"\n | \"getToolCalls\"\n | \"submit\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"history\" extends keyof T\n ? { history: HistoryWithBaseMessages<T[\"history\"]> }\n : unknown) &\n (\"submit\" extends keyof T\n ? {\n submit: T extends {\n submit: (values: infer V, options?: infer O) => infer Ret;\n }\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : never;\n }\n : unknown) &\n (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"subagents\" extends keyof T\n ? {\n subagents: T extends {\n subagents: Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >;\n }\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : never;\n activeSubagents: T extends {\n activeSubagents: SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[];\n }\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\ntype AngularWritableKeys = \"isLoading\" | \"branch\";\n\ntype AngularPlainKeys =\n | \"submit\"\n | \"stop\"\n | \"joinStream\"\n | \"switchThread\"\n | \"setBranch\"\n | \"getMessagesMetadata\"\n | \"getToolCalls\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"client\"\n | \"assistantId\";\n\ntype AngularQueueInterface<T> = T extends {\n entries: infer E;\n size: infer S;\n cancel: infer C;\n clear: infer Cl;\n}\n ? {\n entries: WritableSignal<E>;\n size: WritableSignal<S>;\n cancel: C;\n clear: Cl;\n }\n : T;\n\ntype AngularSignalWrap<T> = {\n [K in keyof T]: K extends AngularPlainKeys\n ? T[K]\n : K extends AngularWritableKeys\n ? WritableSignal<T[K]>\n : K extends \"queue\"\n ? AngularQueueInterface<T[K]>\n : Signal<T[K]>;\n};\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): AngularSignalWrap<\n WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>\n>;\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 resolveRunMetadataStorage(\n reconnectOnMount: AnyStreamOptions[\"reconnectOnMount\"],\n) {\n if (typeof globalThis.window === \"undefined\") return null;\n if (reconnectOnMount === true) return globalThis.window.sessionStorage;\n if (typeof reconnectOnMount === \"function\") return reconnectOnMount();\n return null;\n}\n\nexport function useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const runMetadataStorage = resolveRunMetadataStorage(\n options.reconnectOnMount,\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = signal<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = signal<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? threadId();\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.set({\n data,\n error: undefined,\n isLoading: false,\n mutate,\n });\n return data;\n } catch (err) {\n history.update((prev) => ({\n ...prev,\n error: err,\n isLoading: false,\n }));\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.update((prev) => ({ ...prev, mutate }));\n\n const branch = signal<string>(\"\");\n const branchContext = computed(() =>\n getBranchContext(branch(), history().data ?? undefined),\n );\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n const queueEntries = signal(pendingRuns.entries);\n const queueSize = signal(pendingRuns.size);\n\n const historyValues = computed(\n () =>\n branchContext().threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = computed(() => {\n const error = branchContext().threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const values = computed(() => streamValues() ?? historyValues());\n const error = computed(\n () => streamError() ?? historyError() ?? history().error,\n );\n\n const messageMetadata = computed(() =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history().data,\n getMessages,\n branchContext: branchContext(),\n }),\n );\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n pendingRuns.subscribe(() => {\n queueEntries.set(pendingRuns.entries);\n queueSize.set(pendingRuns.size);\n });\n\n effect(() => {\n const hvMessages = getMessages(historyValues());\n const should =\n options.filterSubagentMessages &&\n !isLoading() &&\n !history().isLoading &&\n hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n function stop() {\n return stream.stop(historyValues(), {\n onStop: (args) => {\n if (runMetadataStorage && threadId()) {\n const tid = threadId()!;\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) void client.runs.cancel(tid, runId);\n runMetadataStorage.removeItem(`lg:stream:${tid}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = branchContext();\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.set(\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\",\n );\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = threadId();\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.set(usableThreadId);\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode = new Set<StreamMode>([\n ...(submitOptions?.streamMode ?? []),\n \"values\",\n \"messages-tuple\",\n \"updates\",\n ]);\n if (options.onUpdateEvent) streamMode.add(\"updates\");\n if (options.onCustomEvent) streamMode.add(\"custom\");\n if (options.onCheckpointEvent) streamMode.add(\"checkpoints\");\n if (options.onTaskEvent) streamMode.add(\"tasks\");\n if (\"onDebugEvent\" in options && options.onDebugEvent)\n streamMode.add(\"debug\");\n if (\"onLangChainEvent\" in options && options.onLangChainEvent)\n streamMode.add(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...historyValues(), ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode: [...streamMode],\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError: (error) => {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n let submitting = false;\n\n function drainQueue() {\n if (!isLoading() && !submitting && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting = true;\n void joinStream(next.id).finally(() => {\n submitting = false;\n drainQueue();\n });\n }\n }\n }\n\n effect(() => {\n drainQueue();\n });\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = threadId();\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting = false;\n drainQueue();\n });\n return result;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n const tid = threadId();\n if (!tid) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: tid,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(tid, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues(),\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${tid}`);\n const newHistory = await mutate(tid);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish() {},\n },\n );\n }\n\n const shouldReconnect = !!runMetadataStorage;\n let hasReconnected = false;\n\n effect(() => {\n const tid = threadId();\n if (\n !hasReconnected &&\n shouldReconnect &&\n runMetadataStorage &&\n tid &&\n !isLoading()\n ) {\n const runId = runMetadataStorage.getItem(`lg:stream:${tid}`);\n if (runId) {\n hasReconnected = true;\n void joinStream(runId);\n }\n }\n });\n\n const messages = computed(() =>\n ensureMessageInstances(getMessages(values())),\n );\n\n const toolCalls = computed(() =>\n getToolCallsWithResults(getMessages(values())),\n );\n\n function getToolCalls(message: Message) {\n const allToolCalls = getToolCallsWithResults(getMessages(values()));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const interrupt = computed(() =>\n extractInterrupts<InterruptType>(values(), {\n isLoading: isLoading(),\n threadState: branchContext().threadHead,\n error: error(),\n }),\n );\n\n const interrupts = computed((): Interrupt<InterruptType>[] => {\n const vals = values();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if (isLoading()) return [];\n\n const allTasks = branchContext().threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n if (allInterrupts.length > 0) {\n return allInterrupts as Interrupt<InterruptType>[];\n }\n\n const next = branchContext().threadHead?.next ?? [];\n if (!next.length || error() != null) return [];\n return [{ when: \"breakpoint\" }];\n });\n\n const historyList = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return ensureHistoryMessageInstances(\n branchContext().flatHistory,\n options.messagesKey ?? \"messages\",\n );\n });\n\n const isThreadLoading = computed(\n () => history().isLoading && history().data == null,\n );\n\n const experimentalBranchTree = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return branchContext().branchTree;\n });\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata().find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n }\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch,\n\n messages,\n toolCalls,\n getToolCalls,\n\n interrupt,\n interrupts,\n\n history: historyList,\n isThreadLoading,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata,\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = threadId();\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = threadId();\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid!, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = threadId() ?? null;\n if (newThreadId !== current) {\n const prevThreadId = threadId();\n threadId.set(newThreadId ?? undefined);\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentApi,\n SubagentStream,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
@@ -60,7 +60,7 @@ function useStreamCustom(options) {
60
60
  threadId = currentThreadId;
61
61
  stream.clear();
62
62
  }
63
- let usableThreadId = threadId;
63
+ let usableThreadId = threadId ?? submitOptions?.threadId;
64
64
  stream.setStreamValues(() => {
65
65
  if (submitOptions?.optimisticValues != null) return {
66
66
  ...historyValues,
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.cjs","names":["MessageTupleManager","StreamManager","toMessageClass"],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n const branch = signal<string>(\"\");\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n effect(() => {\n const loading = isLoading();\n const hvMessages = getMessages(historyValues);\n const should =\n options.filterSubagentMessages && !loading && hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n if (shouldReconstructSubagents) {\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n let usableThreadId = threadId;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadId = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n const values = computed(() => streamValues() ?? ({} as StateType));\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function getMessagesMetadata(\n message: Message<ToolCallType>,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n }\n\n return {\n values,\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch,\n getMessagesMetadata,\n\n queue: {\n entries: signal([]),\n size: signal(0),\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n interrupts: computed((): Interrupt<InterruptType>[] => {\n const vals = streamValues();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n }),\n\n interrupt: computed((): Interrupt<InterruptType> | undefined => {\n return extractInterrupts<InterruptType>(streamValues());\n }),\n\n messages: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n return ensureMessageInstances(getMessages(vals));\n }),\n\n toolCalls: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n return getToolCallsWithResults<ToolCallType>(msgs);\n }),\n\n getToolCalls(message: Message<ToolCallType>) {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream.custom.cjs","names":["MessageTupleManager","StreamManager","toMessageClass"],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n const branch = signal<string>(\"\");\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n effect(() => {\n const loading = isLoading();\n const hvMessages = getMessages(historyValues);\n const should =\n options.filterSubagentMessages && !loading && hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n if (shouldReconstructSubagents) {\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n let usableThreadId = threadId ?? submitOptions?.threadId;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadId = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n const values = computed(() => streamValues() ?? ({} as StateType));\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function getMessagesMetadata(\n message: Message<ToolCallType>,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n }\n\n return {\n values,\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch,\n getMessagesMetadata,\n\n queue: {\n entries: signal([]),\n size: signal(0),\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n interrupts: computed((): Interrupt<InterruptType>[] => {\n const vals = streamValues();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n }),\n\n interrupt: computed((): Interrupt<InterruptType> | undefined => {\n return extractInterrupts<InterruptType>(streamValues());\n }),\n\n messages: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n return ensureMessageInstances(getMessages(vals));\n }),\n\n toolCalls: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n return getToolCallsWithResults<ToolCallType>(msgs);\n }),\n\n getToolCalls(message: Message<ToolCallType>) {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
@@ -60,7 +60,7 @@ function useStreamCustom(options) {
60
60
  threadId = currentThreadId;
61
61
  stream.clear();
62
62
  }
63
- let usableThreadId = threadId;
63
+ let usableThreadId = threadId ?? submitOptions?.threadId;
64
64
  stream.setStreamValues(() => {
65
65
  if (submitOptions?.optimisticValues != null) return {
66
66
  ...historyValues,
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n const branch = signal<string>(\"\");\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n effect(() => {\n const loading = isLoading();\n const hvMessages = getMessages(historyValues);\n const should =\n options.filterSubagentMessages && !loading && hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n if (shouldReconstructSubagents) {\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n let usableThreadId = threadId;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadId = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n const values = computed(() => streamValues() ?? ({} as StateType));\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function getMessagesMetadata(\n message: Message<ToolCallType>,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n }\n\n return {\n values,\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch,\n getMessagesMetadata,\n\n queue: {\n entries: signal([]),\n size: signal(0),\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n interrupts: computed((): Interrupt<InterruptType>[] => {\n const vals = streamValues();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n }),\n\n interrupt: computed((): Interrupt<InterruptType> | undefined => {\n return extractInterrupts<InterruptType>(streamValues());\n }),\n\n messages: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n return ensureMessageInstances(getMessages(vals));\n }),\n\n toolCalls: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n return getToolCallsWithResults<ToolCallType>(msgs);\n }),\n\n getToolCalls(message: Message<ToolCallType>) {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { signal, computed, effect } from \"@angular/core\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const streamValues = signal<StateType | null>(stream.values);\n const streamError = signal<unknown>(stream.error);\n const isLoading = signal(stream.isLoading);\n\n const subagentVersion = signal(0);\n\n effect((onCleanup) => {\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onCleanup(() => unsubscribe());\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n const branch = signal<string>(\"\");\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n effect(() => {\n const loading = isLoading();\n const hvMessages = getMessages(historyValues);\n const should =\n options.filterSubagentMessages && !loading && hvMessages.length > 0;\n if (should) {\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n });\n\n if (shouldReconstructSubagents) {\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n let usableThreadId = threadId ?? submitOptions?.threadId;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadId = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n const values = computed(() => streamValues() ?? ({} as StateType));\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function getMessagesMetadata(\n message: Message<ToolCallType>,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n }\n\n return {\n values,\n error: streamError,\n isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch,\n getMessagesMetadata,\n\n queue: {\n entries: signal([]),\n size: signal(0),\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n interrupts: computed((): Interrupt<InterruptType>[] => {\n const vals = streamValues();\n if (\n vals != null &&\n \"__interrupt__\" in vals &&\n Array.isArray(vals.__interrupt__)\n ) {\n const valueInterrupts = vals.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n }),\n\n interrupt: computed((): Interrupt<InterruptType> | undefined => {\n return extractInterrupts<InterruptType>(streamValues());\n }),\n\n messages: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n return ensureMessageInstances(getMessages(vals));\n }),\n\n toolCalls: computed(() => {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n return getToolCallsWithResults<ToolCallType>(msgs);\n }),\n\n getToolCalls(message: Message<ToolCallType>) {\n const vals = streamValues();\n if (!vals) return [];\n const msgs = getMessages(vals);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n void subagentVersion();\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n void subagentVersion();\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/angular",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Angular integration for LangGraph & LangChain",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -10,7 +10,7 @@
10
10
  "directory": "libs/sdk-angular"
11
11
  },
12
12
  "dependencies": {
13
- "@langchain/langgraph-sdk": "^1.7.0"
13
+ "@langchain/langgraph-sdk": "^1.7.1"
14
14
  },
15
15
  "devDependencies": {
16
16
  "@analogjs/vite-plugin-angular": "^2.3.1",