@langchain/langgraph-sdk 1.3.1 → 1.4.5

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.
Files changed (152) hide show
  1. package/dist/_virtual/rolldown_runtime.cjs +10 -6
  2. package/dist/auth/error.cjs.map +1 -1
  3. package/dist/auth/error.d.cts.map +1 -1
  4. package/dist/auth/error.d.ts.map +1 -1
  5. package/dist/auth/error.js.map +1 -1
  6. package/dist/auth/index.cjs.map +1 -1
  7. package/dist/auth/index.d.cts +1 -3
  8. package/dist/auth/index.d.cts.map +1 -1
  9. package/dist/auth/index.d.ts +1 -3
  10. package/dist/auth/index.d.ts.map +1 -1
  11. package/dist/auth/index.js.map +1 -1
  12. package/dist/auth/types.d.cts +1 -1
  13. package/dist/auth/types.d.cts.map +1 -1
  14. package/dist/auth/types.d.ts +1 -1
  15. package/dist/auth/types.d.ts.map +1 -1
  16. package/dist/client.cjs +15 -24
  17. package/dist/client.cjs.map +1 -1
  18. package/dist/client.d.cts +2 -6
  19. package/dist/client.d.cts.map +1 -1
  20. package/dist/client.d.ts +2 -6
  21. package/dist/client.d.ts.map +1 -1
  22. package/dist/client.js +15 -24
  23. package/dist/client.js.map +1 -1
  24. package/dist/index.d.cts +2 -1
  25. package/dist/index.d.ts +2 -1
  26. package/dist/logging/index.cjs.map +1 -1
  27. package/dist/logging/index.d.cts +0 -1
  28. package/dist/logging/index.d.cts.map +1 -1
  29. package/dist/logging/index.d.ts +0 -1
  30. package/dist/logging/index.d.ts.map +1 -1
  31. package/dist/logging/index.js.map +1 -1
  32. package/dist/react/index.d.cts +3 -2
  33. package/dist/react/index.d.ts +3 -2
  34. package/dist/react/stream.cjs +1 -1
  35. package/dist/react/stream.cjs.map +1 -1
  36. package/dist/react/stream.custom.cjs +12 -6
  37. package/dist/react/stream.custom.cjs.map +1 -1
  38. package/dist/react/stream.custom.d.cts +3 -2
  39. package/dist/react/stream.custom.d.cts.map +1 -1
  40. package/dist/react/stream.custom.d.ts +3 -2
  41. package/dist/react/stream.custom.d.ts.map +1 -1
  42. package/dist/react/stream.custom.js +11 -5
  43. package/dist/react/stream.custom.js.map +1 -1
  44. package/dist/react/stream.d.cts +116 -34
  45. package/dist/react/stream.d.cts.map +1 -1
  46. package/dist/react/stream.d.ts +116 -34
  47. package/dist/react/stream.d.ts.map +1 -1
  48. package/dist/react/stream.js.map +1 -1
  49. package/dist/react/stream.lgp.cjs +15 -13
  50. package/dist/react/stream.lgp.cjs.map +1 -1
  51. package/dist/react/stream.lgp.js +14 -12
  52. package/dist/react/stream.lgp.js.map +1 -1
  53. package/dist/react/thread.cjs +1 -2
  54. package/dist/react/thread.cjs.map +1 -1
  55. package/dist/react/thread.js +0 -1
  56. package/dist/react/thread.js.map +1 -1
  57. package/dist/react/types.d.cts +73 -284
  58. package/dist/react/types.d.cts.map +1 -1
  59. package/dist/react/types.d.ts +73 -284
  60. package/dist/react/types.d.ts.map +1 -1
  61. package/dist/react-ui/client.cjs +8 -7
  62. package/dist/react-ui/client.cjs.map +1 -1
  63. package/dist/react-ui/client.d.cts +4 -21
  64. package/dist/react-ui/client.d.cts.map +1 -1
  65. package/dist/react-ui/client.d.ts +4 -21
  66. package/dist/react-ui/client.d.ts.map +1 -1
  67. package/dist/react-ui/client.js +2 -4
  68. package/dist/react-ui/client.js.map +1 -1
  69. package/dist/react-ui/index.cjs.map +1 -1
  70. package/dist/react-ui/index.js.map +1 -1
  71. package/dist/react-ui/server/server.cjs +1 -1
  72. package/dist/react-ui/server/server.cjs.map +1 -1
  73. package/dist/react-ui/server/server.d.cts.map +1 -1
  74. package/dist/react-ui/server/server.d.ts.map +1 -1
  75. package/dist/react-ui/server/server.js.map +1 -1
  76. package/dist/react-ui/types.cjs.map +1 -1
  77. package/dist/react-ui/types.d.cts.map +1 -1
  78. package/dist/react-ui/types.d.ts.map +1 -1
  79. package/dist/react-ui/types.js.map +1 -1
  80. package/dist/schema.d.cts +6 -6
  81. package/dist/schema.d.cts.map +1 -1
  82. package/dist/schema.d.ts +6 -6
  83. package/dist/schema.d.ts.map +1 -1
  84. package/dist/singletons/fetch.cjs.map +1 -1
  85. package/dist/singletons/fetch.js.map +1 -1
  86. package/dist/types.d.cts +1 -1
  87. package/dist/types.d.cts.map +1 -1
  88. package/dist/types.d.ts +1 -1
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/types.messages.d.cts +207 -34
  91. package/dist/types.messages.d.cts.map +1 -1
  92. package/dist/types.messages.d.ts +207 -34
  93. package/dist/types.messages.d.ts.map +1 -1
  94. package/dist/types.stream.d.cts +1 -3
  95. package/dist/types.stream.d.cts.map +1 -1
  96. package/dist/types.stream.d.ts +1 -3
  97. package/dist/types.stream.d.ts.map +1 -1
  98. package/dist/types.template.d.cts +19 -0
  99. package/dist/types.template.d.cts.map +1 -0
  100. package/dist/types.template.d.ts +19 -0
  101. package/dist/types.template.d.ts.map +1 -0
  102. package/dist/ui/branching.cjs.map +1 -1
  103. package/dist/ui/branching.d.cts +0 -3
  104. package/dist/ui/branching.d.cts.map +1 -1
  105. package/dist/ui/branching.d.ts +0 -3
  106. package/dist/ui/branching.d.ts.map +1 -1
  107. package/dist/ui/branching.js.map +1 -1
  108. package/dist/ui/errors.cjs.map +1 -1
  109. package/dist/ui/errors.js.map +1 -1
  110. package/dist/ui/manager.cjs +8 -2
  111. package/dist/ui/manager.cjs.map +1 -1
  112. package/dist/ui/manager.js +8 -2
  113. package/dist/ui/manager.js.map +1 -1
  114. package/dist/ui/messages.cjs +10 -10
  115. package/dist/ui/messages.cjs.map +1 -1
  116. package/dist/ui/messages.js.map +1 -1
  117. package/dist/ui/types.d.cts +420 -0
  118. package/dist/ui/types.d.cts.map +1 -0
  119. package/dist/ui/types.d.ts +420 -0
  120. package/dist/ui/types.d.ts.map +1 -0
  121. package/dist/ui/utils.cjs +0 -1
  122. package/dist/ui/utils.cjs.map +1 -1
  123. package/dist/ui/utils.js +0 -1
  124. package/dist/ui/utils.js.map +1 -1
  125. package/dist/utils/async_caller.cjs +12 -4
  126. package/dist/utils/async_caller.cjs.map +1 -1
  127. package/dist/utils/async_caller.d.cts +1 -3
  128. package/dist/utils/async_caller.d.cts.map +1 -1
  129. package/dist/utils/async_caller.d.ts +1 -3
  130. package/dist/utils/async_caller.d.ts.map +1 -1
  131. package/dist/utils/async_caller.js +8 -2
  132. package/dist/utils/async_caller.js.map +1 -1
  133. package/dist/utils/env.cjs +1 -1
  134. package/dist/utils/env.cjs.map +1 -1
  135. package/dist/utils/env.js +1 -1
  136. package/dist/utils/env.js.map +1 -1
  137. package/dist/utils/error.cjs.map +1 -1
  138. package/dist/utils/error.js.map +1 -1
  139. package/dist/utils/signals.cjs.map +1 -1
  140. package/dist/utils/signals.js.map +1 -1
  141. package/dist/utils/sse.cjs.map +1 -1
  142. package/dist/utils/sse.js.map +1 -1
  143. package/dist/utils/stream.cjs +1 -3
  144. package/dist/utils/stream.cjs.map +1 -1
  145. package/dist/utils/stream.js +1 -3
  146. package/dist/utils/stream.js.map +1 -1
  147. package/dist/utils/tools.cjs +52 -0
  148. package/dist/utils/tools.cjs.map +1 -0
  149. package/dist/utils/tools.js +51 -0
  150. package/dist/utils/tools.js.map +1 -0
  151. package/package.json +5 -5
  152. package/CHANGELOG.md +0 -281
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":["Client","ClientConfig","ThreadState","Interrupt","Config","Checkpoint","Metadata","Command","MultitaskStrategy","OnCompletionBehavior","DisconnectMode","Durability","Message","UpdatesStreamEvent","CustomStreamEvent","MetadataStreamEvent","EventsStreamEvent","DebugStreamEvent","CheckpointsStreamEvent","TasksStreamEvent","StreamMode","Sequence","MessageMetadata","Record","StateType","BagTemplate","GetUpdateType","Bag","Partial","GetConfigurableType","GetInterruptType","GetCustomEventType","RunCallbackMeta","UseStreamThread","Promise","UseStreamOptions","RunMetadataStorage","UseStream","SubmitOptions","ConfigWithConfigurable","ConfigurableType","ContextType","Omit","Array","UseStreamTransport","AbortSignal","AsyncGenerator","UseStreamCustomOptions","Pick","UseStreamCustom","CustomSubmitOptions"],"sources":["../../src/react/types.d.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\nimport type { Client, ClientConfig } from \"../client.js\";\nimport type { ThreadState, Interrupt, Config, Checkpoint, Metadata } from \"../schema.js\";\nimport type { Command, MultitaskStrategy, OnCompletionBehavior, DisconnectMode, Durability } from \"../types.js\";\nimport type { Message } from \"../types.messages.js\";\nimport type { UpdatesStreamEvent, CustomStreamEvent, MetadataStreamEvent, EventsStreamEvent, DebugStreamEvent, CheckpointsStreamEvent, TasksStreamEvent, StreamMode } from \"../types.stream.js\";\nimport type { Sequence } from \"../ui/branching.js\";\nexport type MessageMetadata<StateType extends Record<string, unknown>> = {\n /**\n * The ID of the message used.\n */\n messageId: string;\n /**\n * The first thread state the message was seen in.\n */\n firstSeenState: ThreadState<StateType> | undefined;\n /**\n * The branch of the message.\n */\n branch: string | undefined;\n /**\n * The list of branches this message is part of.\n * This is useful for displaying branching controls.\n */\n branchOptions: string[] | undefined;\n /**\n * Metadata sent alongside the message during run streaming.\n * @remarks This metadata only exists temporarily in browser memory during streaming and is not persisted after completion.\n */\n streamMetadata: Record<string, unknown> | undefined;\n};\nexport type BagTemplate = {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n};\nexport type GetUpdateType<Bag extends BagTemplate, StateType extends Record<string, unknown>> = Bag extends {\n UpdateType: unknown;\n} ? Bag[\"UpdateType\"] : Partial<StateType>;\nexport type GetConfigurableType<Bag extends BagTemplate> = Bag extends {\n ConfigurableType: Record<string, unknown>;\n} ? Bag[\"ConfigurableType\"] : Record<string, unknown>;\nexport type GetInterruptType<Bag extends BagTemplate> = Bag extends {\n InterruptType: unknown;\n} ? Bag[\"InterruptType\"] : unknown;\nexport type GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n} ? Bag[\"CustomEventType\"] : unknown;\nexport interface RunCallbackMeta {\n run_id: string;\n thread_id: string;\n}\nexport interface UseStreamThread<StateType extends Record<string, unknown>> {\n data: ThreadState<StateType>[] | null | undefined;\n error: unknown;\n isLoading: boolean;\n mutate: (mutateId?: string) => Promise<ThreadState<StateType>[] | null | undefined>;\n}\nexport interface UseStreamOptions<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n /**\n * Client used to send requests.\n */\n client?: Client;\n /**\n * The URL of the API to use.\n */\n apiUrl?: ClientConfig[\"apiUrl\"];\n /**\n * The API key to use.\n */\n apiKey?: ClientConfig[\"apiKey\"];\n /**\n * Custom call options, such as custom fetch implementation.\n */\n callerOptions?: ClientConfig[\"callerOptions\"];\n /**\n * Default headers to send with requests.\n */\n defaultHeaders?: ClientConfig[\"defaultHeaders\"];\n /**\n * Specify the key within the state that contains messages.\n * Defaults to \"messages\".\n *\n * @default \"messages\"\n */\n messagesKey?: string;\n /**\n * Callback that is called when an error occurs.\n */\n onError?: (error: unknown, run: RunCallbackMeta | undefined) => void;\n /**\n * Callback that is called when the stream is finished.\n */\n onFinish?: (state: ThreadState<StateType>, run: RunCallbackMeta | undefined) => void;\n /**\n * Callback that is called when a new stream is created.\n */\n onCreated?: (run: RunCallbackMeta) => void;\n /**\n * Callback that is called when an update event is received.\n */\n onUpdateEvent?: (data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"], options: {\n namespace: string[] | undefined;\n mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;\n }) => void;\n /**\n * Callback that is called when a custom event is received.\n */\n onCustomEvent?: (data: CustomStreamEvent<GetCustomEventType<Bag>>[\"data\"], options: {\n namespace: string[] | undefined;\n mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;\n }) => void;\n /**\n * Callback that is called when a metadata event is received.\n */\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n /**\n * Callback that is called when a LangChain event is received.\n * @see https://langchain-ai.github.io/langgraph/cloud/how-tos/stream_events/#stream-graph-in-events-mode for more details.\n */\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n /**\n * Callback that is called when a debug event is received.\n * @internal This API is experimental and subject to change.\n */\n onDebugEvent?: (data: DebugStreamEvent[\"data\"], options: {\n namespace: string[] | undefined;\n }) => void;\n /**\n * Callback that is called when a checkpoints event is received.\n */\n onCheckpointEvent?: (data: CheckpointsStreamEvent<StateType>[\"data\"], options: {\n namespace: string[] | undefined;\n }) => void;\n /**\n * Callback that is called when a tasks event is received.\n */\n onTaskEvent?: (data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"], options: {\n namespace: string[] | undefined;\n }) => void;\n /**\n * Callback that is called when the stream is stopped by the user.\n * Provides a mutate function to update the stream state immediately\n * without requiring a server roundtrip.\n *\n * @example\n * ```typescript\n * onStop: ({ mutate }) => {\n * mutate((prev) => ({\n * ...prev,\n * ui: prev.ui?.map(component =>\n * component.props.isLoading\n * ? { ...component, props: { ...component.props, stopped: true, isLoading: false }}\n * : component\n * )\n * }));\n * }\n * ```\n */\n onStop?: (options: {\n mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;\n }) => void;\n /**\n * The ID of the thread to fetch history and current values from.\n */\n threadId?: string | null;\n /**\n * Callback that is called when the thread ID is updated (ie when a new thread is created).\n */\n onThreadId?: (threadId: string) => void;\n /** Will reconnect the stream on mount */\n reconnectOnMount?: boolean | (() => RunMetadataStorage);\n /**\n * Initial values to display immediately when loading a thread.\n * Useful for displaying cached thread data while official history loads.\n * These values will be replaced when official thread data is fetched.\n *\n * Note: UI components from initialValues will render immediately if they're\n * predefined in LoadExternalComponent's components prop, providing instant\n * cached UI display without server fetches.\n */\n initialValues?: StateType | null;\n /**\n * Whether to fetch the history of the thread.\n * If true, the history will be fetched from the server. Defaults to 10 entries.\n * If false, only the last state will be fetched from the server.\n * @default true\n */\n fetchStateHistory?: boolean | {\n limit: number;\n };\n /**\n * Manage the thread state externally.\n */\n thread?: UseStreamThread<StateType>;\n /**\n * Throttle the stream.\n * If a number is provided, the stream will be throttled to the given number of milliseconds.\n * If `true`, updates are batched in a single macrotask.\n * If `false`, updates are not throttled or batched.\n * @default true\n */\n throttle?: number | boolean;\n}\ninterface RunMetadataStorage {\n getItem(key: `lg:stream:${string}`): string | null;\n setItem(key: `lg:stream:${string}`, value: string): void;\n removeItem(key: `lg:stream:${string}`): void;\n}\nexport interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n /**\n * The current values of the thread.\n */\n values: StateType;\n /**\n * Last seen error from the thread or during streaming.\n */\n error: unknown;\n /**\n * Whether the stream is currently running.\n */\n isLoading: boolean;\n /**\n * Whether the thread is currently being loaded.\n */\n isThreadLoading: boolean;\n /**\n * Stops the stream.\n */\n stop: () => Promise<void>;\n /**\n * Create and stream a run to the thread.\n */\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n /**\n * The current branch of the thread.\n */\n branch: string;\n /**\n * Set the branch of the thread.\n */\n setBranch: (branch: string) => void;\n /**\n * Flattened history of thread states of a thread.\n */\n history: ThreadState<StateType>[];\n /**\n * Tree of all branches for the thread.\n * @experimental\n */\n experimental_branchTree: Sequence<StateType>;\n /**\n * Get the interrupt value for the stream if interrupted.\n */\n interrupt: Interrupt<GetInterruptType<Bag>> | undefined;\n /**\n * Messages inferred from the thread.\n * Will automatically update with incoming message chunks.\n */\n messages: Message[];\n /**\n * Get the metadata for a message, such as first thread state the message\n * was seen in and branch information.\n \n * @param message - The message to get the metadata for.\n * @param index - The index of the message in the thread.\n * @returns The metadata for the message.\n */\n getMessagesMetadata: (message: Message, index?: number) => MessageMetadata<StateType> | undefined;\n /**\n * LangGraph SDK client used to send request and receive responses.\n */\n client: Client;\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n /**\n * Join an active stream.\n */\n joinStream: (runId: string, lastEventId?: string, options?: {\n streamMode?: StreamMode | StreamMode[];\n }) => Promise<void>;\n}\ntype ConfigWithConfigurable<ConfigurableType extends Record<string, unknown>> = Config & {\n configurable?: ConfigurableType;\n};\nexport interface SubmitOptions<StateType extends Record<string, unknown> = Record<string, unknown>, ContextType extends Record<string, unknown> = Record<string, unknown>> {\n config?: ConfigWithConfigurable<ContextType>;\n context?: ContextType;\n checkpoint?: Omit<Checkpoint, \"thread_id\"> | null;\n command?: Command;\n interruptBefore?: \"*\" | string[];\n interruptAfter?: \"*\" | string[];\n metadata?: Metadata;\n multitaskStrategy?: MultitaskStrategy;\n onCompletion?: OnCompletionBehavior;\n onDisconnect?: DisconnectMode;\n feedbackKeys?: string[];\n streamMode?: Array<StreamMode>;\n runId?: string;\n optimisticValues?: Partial<StateType> | ((prev: StateType) => Partial<StateType>);\n /**\n * Whether or not to stream the nodes of any subgraphs called\n * by the assistant.\n * @default false\n */\n streamSubgraphs?: boolean;\n /**\n * Mark the stream as resumable. All events emitted during the run will be temporarily persisted\n * in order to be re-emitted if the stream is re-joined.\n * @default false\n */\n streamResumable?: boolean;\n /**\n * Whether to checkpoint during the run (or only at the end/interruption).\n * - `\"async\"`: Save checkpoint asynchronously while the next step executes (default).\n * - `\"sync\"`: Save checkpoint synchronously before the next step starts.\n * - `\"exit\"`: Save checkpoint only when the graph exits.\n * @default \"async\"\n */\n durability?: Durability;\n /**\n * The ID to use when creating a new thread. When provided, this ID will be used\n * for thread creation when threadId is `null` or `undefined`.\n * This enables optimistic UI updates where you know the thread ID\n * before the thread is actually created.\n */\n threadId?: string;\n}\n/**\n * Transport used to stream the thread.\n * Only applicable for custom endpoints using `toLangGraphEventStream` or `toLangGraphEventStreamResponse`.\n */\nexport interface UseStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n stream: (payload: {\n input: GetUpdateType<Bag, StateType> | null | undefined;\n context: GetConfigurableType<Bag> | undefined;\n command: Command | undefined;\n config: ConfigWithConfigurable<GetConfigurableType<Bag>> | undefined;\n signal: AbortSignal;\n }) => Promise<AsyncGenerator<{\n id?: string;\n event: string;\n data: unknown;\n }>>;\n}\nexport type UseStreamCustomOptions<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStreamOptions<StateType, Bag>, \"messagesKey\" | \"threadId\" | \"onThreadId\" | \"onError\" | \"onCreated\" | \"onUpdateEvent\" | \"onCustomEvent\" | \"onMetadataEvent\" | \"onLangChainEvent\" | \"onDebugEvent\" | \"onCheckpointEvent\" | \"onTaskEvent\" | \"onStop\" | \"initialValues\" | \"throttle\"> & {\n transport: UseStreamTransport<StateType, Bag>;\n};\nexport type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStream<StateType, Bag>, \"values\" | \"error\" | \"isLoading\" | \"stop\" | \"interrupt\" | \"messages\"> & {\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n};\nexport type CustomSubmitOptions<StateType extends Record<string, unknown> = Record<string, unknown>, ConfigurableType extends Record<string, unknown> = Record<string, unknown>> = Pick<SubmitOptions<StateType, ConfigurableType>, \"optimisticValues\" | \"context\" | \"command\" | \"config\">;\nexport {};\n"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.cts","names":["Client","ThreadState","Interrupt","Message","AIMessage","ToolCallWithResult","StreamMode","Sequence","GetUpdateType","GetConfigurableType","GetInterruptType","GetToolCallsType","MessageMetadata","UseStreamThread","UseStreamOptions","UseStreamTransport","UseStreamCustomOptions","SubmitOptions","CustomSubmitOptions","RunCallbackMeta","BagTemplate","UseStream","Record","StateType","Promise","Bag","UseStreamCustom","Pick"],"sources":["../../src/react/types.d.ts"],"sourcesContent":["import type { Client } from \"../client.js\";\nimport type { ThreadState, Interrupt } from \"../schema.js\";\nimport type { Message, AIMessage, ToolCallWithResult } from \"../types.messages.js\";\nimport type { StreamMode } from \"../types.stream.js\";\nimport type { Sequence } from \"../ui/branching.js\";\nimport type { GetUpdateType, GetConfigurableType, GetInterruptType, GetToolCallsType, MessageMetadata, UseStreamThread, UseStreamOptions, UseStreamTransport, UseStreamCustomOptions, SubmitOptions, CustomSubmitOptions, RunCallbackMeta } from \"../ui/types.js\";\nimport type { BagTemplate } from \"../types.template.js\";\nexport type { GetUpdateType, GetConfigurableType, GetInterruptType, GetToolCallsType, MessageMetadata, UseStreamThread, UseStreamOptions, UseStreamTransport, UseStreamCustomOptions, SubmitOptions, CustomSubmitOptions, RunCallbackMeta, };\nexport interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n /**\n * The current values of the thread.\n */\n values: StateType;\n /**\n * Last seen error from the thread or during streaming.\n */\n error: unknown;\n /**\n * Whether the stream is currently running.\n */\n isLoading: boolean;\n /**\n * Whether the thread is currently being loaded.\n */\n isThreadLoading: boolean;\n /**\n * Stops the stream.\n */\n stop: () => Promise<void>;\n /**\n * Create and stream a run to the thread.\n */\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n /**\n * The current branch of the thread.\n */\n branch: string;\n /**\n * Set the branch of the thread.\n */\n setBranch: (branch: string) => void;\n /**\n * Flattened history of thread states of a thread.\n */\n history: ThreadState<StateType>[];\n /**\n * Tree of all branches for the thread.\n * @experimental\n */\n experimental_branchTree: Sequence<StateType>;\n /**\n * Get the interrupt value for the stream if interrupted.\n */\n interrupt: Interrupt<GetInterruptType<Bag>> | undefined;\n /**\n * Messages inferred from the thread.\n * Will automatically update with incoming message chunks.\n * Includes all message types including ToolMessage.\n */\n messages: Message<GetToolCallsType<StateType>>[];\n /**\n * Tool calls paired with their results.\n * Useful for rendering tool invocations and their outputs together.\n *\n * Each item contains the tool call from an AI message paired with its\n * corresponding ToolMessage result (if available), along with lifecycle state.\n *\n * @example\n * ```tsx\n * // With type-safe tool calls - embed the type in your messages\n * type MyToolCalls =\n * | { name: \"get_weather\"; args: { location: string }; id?: string }\n * | { name: \"search\"; args: { query: string }; id?: string };\n *\n * interface MyState {\n * messages: Message<MyToolCalls>[];\n * }\n *\n * const stream = useStream<MyState>({ ... });\n *\n * {stream.toolCalls.map(({ id, call, result, state }) => {\n * if (call.name === \"get_weather\") {\n * // call.args is { location: string }\n * return (\n * <WeatherCard\n * key={id}\n * location={call.args.location}\n * result={result?.content}\n * isLoading={state === \"pending\"}\n * />\n * );\n * }\n * })}\n * ```\n */\n toolCalls: ToolCallWithResult<GetToolCallsType<StateType>>[];\n /**\n * Get tool calls for a specific AI message.\n * Useful when rendering messages and their associated tool calls together.\n *\n * @param message - The AI message to get tool calls for.\n * @returns Array of tool calls initiated by the message.\n *\n * @example\n * ```tsx\n * {stream.uiMessages.map((message) => {\n * if (message.type === \"ai\") {\n * const toolCalls = stream.getToolCalls(message);\n * if (toolCalls.length > 0) {\n * return (\n * <div key={message.id}>\n * {toolCalls.map(tc => <ToolCard key={tc.id} toolCall={tc} />)}\n * </div>\n * );\n * }\n * }\n * return <MessageBubble key={message.id} message={message} />;\n * })}\n * ```\n */\n getToolCalls: (message: AIMessage<GetToolCallsType<StateType>>) => ToolCallWithResult<GetToolCallsType<StateType>>[];\n /**\n * Get the metadata for a message, such as first thread state the message\n * was seen in and branch information.\n *\n * @param message - The message to get the metadata for.\n * @param index - The index of the message in the thread.\n * @returns The metadata for the message.\n */\n getMessagesMetadata: (message: Message<GetToolCallsType<StateType>>, index?: number) => MessageMetadata<StateType> | undefined;\n /**\n * LangGraph SDK client used to send request and receive responses.\n */\n client: Client;\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n /**\n * Join an active stream.\n */\n joinStream: (runId: string, lastEventId?: string, options?: {\n streamMode?: StreamMode | StreamMode[];\n }) => Promise<void>;\n}\nexport type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStream<StateType, Bag>, \"values\" | \"error\" | \"isLoading\" | \"stop\" | \"interrupt\" | \"messages\" | \"toolCalls\" | \"getToolCalls\"> & {\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n};\n"],"mappings":";;;;;;;;;UAQiBqB,4BAA4BC,0BAA0BA,qCAAqCF,cAAcA;EAAzGC;;;QAAsDC,EAI3DC,SAJ2DD;;;;OAoBvDE,EAAAA,OAAAA;;;;WAI+ED,EAAAA,OAAAA;;;;iBAAyCC,EAAAA,OAAAA;;;;MAiB3GjB,EAAAA,GAAAA,GArBbiB,OAqBajB,CAAAA,IAAAA,CAAAA;;;;QAUUgB,EAAAA,CAAAA,MAAAA,EA3BlBf,aA2BkBe,CA3BJE,GA2BIF,EA3BCA,SA2BDA,CAAAA,GAAAA,IAAAA,GAAAA,SAAAA,EAAAA,OAAAA,CAAAA,EA3B0CN,aA2B1CM,CA3BwDA,SA2BxDA,EA3BmEd,mBA2BnEc,CA3BuFE,GA2BvFF,CAAAA,CAAAA,EAAAA,GA3BiGC,OA2BjGD,CAAAA,IAAAA,CAAAA;;;;QAoCLZ,EAAAA,MAAAA;;;;WAyBNP,EAAAA,CAAAA,MAAAA,EAAAA,MAAAA,EAAAA,GAAAA,IAAAA;;;;SASgCmB,EArF/CtB,WAqF+CsB,CArFnCA,SAqFmCA,CAAAA,EAAAA;;;;;yBAIhDvB,EApFiBO,QAoFjBP,CApF0BuB,SAoF1BvB,CAAAA;;;;EAUK,SAAA,EA1FFE,SA0FE,CA1FQQ,gBA0FR,CA1FyBe,GA0FzB,CAAA,CAAA,GAAA,SAAA;EAELC;;;;;UAA+GN,EAtF7GjB,OAsF6GiB,CAtFrGT,gBAsFqGS,CAtFpFG,SAsFoFH,CAAAA,CAAAA,EAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAlD5Gf,mBAAmBM,iBAAiBY;;;;;;;;;;;;;;;;;;;;;;;;;0BAyBvBnB,UAAUO,iBAAiBY,gBAAgBlB,mBAAmBM,iBAAiBY;;;;;;;;;iCASxEpB,QAAQQ,iBAAiBY,gCAAgCX,gBAAgBW;;;;UAIhGvB;;;;;;;;;iBASSM,aAAaA;QACxBkB;;KAEEE,kCAAkCJ,0BAA0BA,qCAAqCF,cAAcA,eAAeO,KAAKN,UAAUE,WAAWE;mBAC/IjB,cAAciB,KAAKF,yCAAyCL,oBAAoBK,WAAWd,oBAAoBgB,UAAUD"}
@@ -1,218 +1,12 @@
1
- import { Checkpoint, Config, Interrupt, Metadata, ThreadState } from "../schema.js";
2
- import { Message } from "../types.messages.js";
3
- import { CheckpointsStreamEvent, CustomStreamEvent, DebugStreamEvent, EventsStreamEvent, MetadataStreamEvent, StreamMode, TasksStreamEvent, UpdatesStreamEvent } from "../types.stream.js";
4
- import { Command, DisconnectMode, Durability, MultitaskStrategy, OnCompletionBehavior } from "../types.js";
5
- import { Client, ClientConfig } from "../client.js";
1
+ import { Interrupt, ThreadState } from "../schema.js";
2
+ import { AIMessage, Message, ToolCallWithResult } from "../types.messages.js";
3
+ import { StreamMode } from "../types.stream.js";
4
+ import { Client } from "../client.js";
5
+ import { BagTemplate } from "../types.template.js";
6
6
  import { Sequence } from "../ui/branching.js";
7
+ import { CustomSubmitOptions, GetConfigurableType, GetInterruptType, GetToolCallsType, GetUpdateType, MessageMetadata, RunCallbackMeta, SubmitOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport } from "../ui/types.js";
7
8
 
8
9
  //#region src/react/types.d.ts
9
- type MessageMetadata<StateType extends Record<string, unknown>> = {
10
- /**
11
- * The ID of the message used.
12
- */
13
- messageId: string;
14
- /**
15
- * The first thread state the message was seen in.
16
- */
17
- firstSeenState: ThreadState<StateType> | undefined;
18
- /**
19
- * The branch of the message.
20
- */
21
- branch: string | undefined;
22
- /**
23
- * The list of branches this message is part of.
24
- * This is useful for displaying branching controls.
25
- */
26
- branchOptions: string[] | undefined;
27
- /**
28
- * Metadata sent alongside the message during run streaming.
29
- * @remarks This metadata only exists temporarily in browser memory during streaming and is not persisted after completion.
30
- */
31
- streamMetadata: Record<string, unknown> | undefined;
32
- };
33
- type BagTemplate = {
34
- ConfigurableType?: Record<string, unknown>;
35
- InterruptType?: unknown;
36
- CustomEventType?: unknown;
37
- UpdateType?: unknown;
38
- };
39
- type GetUpdateType<Bag extends BagTemplate, StateType extends Record<string, unknown>> = Bag extends {
40
- UpdateType: unknown;
41
- } ? Bag["UpdateType"] : Partial<StateType>;
42
- type GetConfigurableType<Bag extends BagTemplate> = Bag extends {
43
- ConfigurableType: Record<string, unknown>;
44
- } ? Bag["ConfigurableType"] : Record<string, unknown>;
45
- type GetInterruptType<Bag extends BagTemplate> = Bag extends {
46
- InterruptType: unknown;
47
- } ? Bag["InterruptType"] : unknown;
48
- type GetCustomEventType<Bag extends BagTemplate> = Bag extends {
49
- CustomEventType: unknown;
50
- } ? Bag["CustomEventType"] : unknown;
51
- interface RunCallbackMeta {
52
- run_id: string;
53
- thread_id: string;
54
- }
55
- interface UseStreamThread<StateType extends Record<string, unknown>> {
56
- data: ThreadState<StateType>[] | null | undefined;
57
- error: unknown;
58
- isLoading: boolean;
59
- mutate: (mutateId?: string) => Promise<ThreadState<StateType>[] | null | undefined>;
60
- }
61
- interface UseStreamOptions<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
62
- /**
63
- * The ID of the assistant to use.
64
- */
65
- assistantId: string;
66
- /**
67
- * Client used to send requests.
68
- */
69
- client?: Client;
70
- /**
71
- * The URL of the API to use.
72
- */
73
- apiUrl?: ClientConfig["apiUrl"];
74
- /**
75
- * The API key to use.
76
- */
77
- apiKey?: ClientConfig["apiKey"];
78
- /**
79
- * Custom call options, such as custom fetch implementation.
80
- */
81
- callerOptions?: ClientConfig["callerOptions"];
82
- /**
83
- * Default headers to send with requests.
84
- */
85
- defaultHeaders?: ClientConfig["defaultHeaders"];
86
- /**
87
- * Specify the key within the state that contains messages.
88
- * Defaults to "messages".
89
- *
90
- * @default "messages"
91
- */
92
- messagesKey?: string;
93
- /**
94
- * Callback that is called when an error occurs.
95
- */
96
- onError?: (error: unknown, run: RunCallbackMeta | undefined) => void;
97
- /**
98
- * Callback that is called when the stream is finished.
99
- */
100
- onFinish?: (state: ThreadState<StateType>, run: RunCallbackMeta | undefined) => void;
101
- /**
102
- * Callback that is called when a new stream is created.
103
- */
104
- onCreated?: (run: RunCallbackMeta) => void;
105
- /**
106
- * Callback that is called when an update event is received.
107
- */
108
- onUpdateEvent?: (data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>["data"], options: {
109
- namespace: string[] | undefined;
110
- mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
111
- }) => void;
112
- /**
113
- * Callback that is called when a custom event is received.
114
- */
115
- onCustomEvent?: (data: CustomStreamEvent<GetCustomEventType<Bag>>["data"], options: {
116
- namespace: string[] | undefined;
117
- mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
118
- }) => void;
119
- /**
120
- * Callback that is called when a metadata event is received.
121
- */
122
- onMetadataEvent?: (data: MetadataStreamEvent["data"]) => void;
123
- /**
124
- * Callback that is called when a LangChain event is received.
125
- * @see https://langchain-ai.github.io/langgraph/cloud/how-tos/stream_events/#stream-graph-in-events-mode for more details.
126
- */
127
- onLangChainEvent?: (data: EventsStreamEvent["data"]) => void;
128
- /**
129
- * Callback that is called when a debug event is received.
130
- * @internal This API is experimental and subject to change.
131
- */
132
- onDebugEvent?: (data: DebugStreamEvent["data"], options: {
133
- namespace: string[] | undefined;
134
- }) => void;
135
- /**
136
- * Callback that is called when a checkpoints event is received.
137
- */
138
- onCheckpointEvent?: (data: CheckpointsStreamEvent<StateType>["data"], options: {
139
- namespace: string[] | undefined;
140
- }) => void;
141
- /**
142
- * Callback that is called when a tasks event is received.
143
- */
144
- onTaskEvent?: (data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>["data"], options: {
145
- namespace: string[] | undefined;
146
- }) => void;
147
- /**
148
- * Callback that is called when the stream is stopped by the user.
149
- * Provides a mutate function to update the stream state immediately
150
- * without requiring a server roundtrip.
151
- *
152
- * @example
153
- * ```typescript
154
- * onStop: ({ mutate }) => {
155
- * mutate((prev) => ({
156
- * ...prev,
157
- * ui: prev.ui?.map(component =>
158
- * component.props.isLoading
159
- * ? { ...component, props: { ...component.props, stopped: true, isLoading: false }}
160
- * : component
161
- * )
162
- * }));
163
- * }
164
- * ```
165
- */
166
- onStop?: (options: {
167
- mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
168
- }) => void;
169
- /**
170
- * The ID of the thread to fetch history and current values from.
171
- */
172
- threadId?: string | null;
173
- /**
174
- * Callback that is called when the thread ID is updated (ie when a new thread is created).
175
- */
176
- onThreadId?: (threadId: string) => void;
177
- /** Will reconnect the stream on mount */
178
- reconnectOnMount?: boolean | (() => RunMetadataStorage);
179
- /**
180
- * Initial values to display immediately when loading a thread.
181
- * Useful for displaying cached thread data while official history loads.
182
- * These values will be replaced when official thread data is fetched.
183
- *
184
- * Note: UI components from initialValues will render immediately if they're
185
- * predefined in LoadExternalComponent's components prop, providing instant
186
- * cached UI display without server fetches.
187
- */
188
- initialValues?: StateType | null;
189
- /**
190
- * Whether to fetch the history of the thread.
191
- * If true, the history will be fetched from the server. Defaults to 10 entries.
192
- * If false, only the last state will be fetched from the server.
193
- * @default true
194
- */
195
- fetchStateHistory?: boolean | {
196
- limit: number;
197
- };
198
- /**
199
- * Manage the thread state externally.
200
- */
201
- thread?: UseStreamThread<StateType>;
202
- /**
203
- * Throttle the stream.
204
- * If a number is provided, the stream will be throttled to the given number of milliseconds.
205
- * If `true`, updates are batched in a single macrotask.
206
- * If `false`, updates are not throttled or batched.
207
- * @default true
208
- */
209
- throttle?: number | boolean;
210
- }
211
- interface RunMetadataStorage {
212
- getItem(key: `lg:stream:${string}`): string | null;
213
- setItem(key: `lg:stream:${string}`, value: string): void;
214
- removeItem(key: `lg:stream:${string}`): void;
215
- }
216
10
  interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
217
11
  /**
218
12
  * The current values of the thread.
@@ -262,17 +56,79 @@ interface UseStream<StateType extends Record<string, unknown> = Record<string, u
262
56
  /**
263
57
  * Messages inferred from the thread.
264
58
  * Will automatically update with incoming message chunks.
59
+ * Includes all message types including ToolMessage.
265
60
  */
266
- messages: Message[];
61
+ messages: Message<GetToolCallsType<StateType>>[];
62
+ /**
63
+ * Tool calls paired with their results.
64
+ * Useful for rendering tool invocations and their outputs together.
65
+ *
66
+ * Each item contains the tool call from an AI message paired with its
67
+ * corresponding ToolMessage result (if available), along with lifecycle state.
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * // With type-safe tool calls - embed the type in your messages
72
+ * type MyToolCalls =
73
+ * | { name: "get_weather"; args: { location: string }; id?: string }
74
+ * | { name: "search"; args: { query: string }; id?: string };
75
+ *
76
+ * interface MyState {
77
+ * messages: Message<MyToolCalls>[];
78
+ * }
79
+ *
80
+ * const stream = useStream<MyState>({ ... });
81
+ *
82
+ * {stream.toolCalls.map(({ id, call, result, state }) => {
83
+ * if (call.name === "get_weather") {
84
+ * // call.args is { location: string }
85
+ * return (
86
+ * <WeatherCard
87
+ * key={id}
88
+ * location={call.args.location}
89
+ * result={result?.content}
90
+ * isLoading={state === "pending"}
91
+ * />
92
+ * );
93
+ * }
94
+ * })}
95
+ * ```
96
+ */
97
+ toolCalls: ToolCallWithResult<GetToolCallsType<StateType>>[];
98
+ /**
99
+ * Get tool calls for a specific AI message.
100
+ * Useful when rendering messages and their associated tool calls together.
101
+ *
102
+ * @param message - The AI message to get tool calls for.
103
+ * @returns Array of tool calls initiated by the message.
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * {stream.uiMessages.map((message) => {
108
+ * if (message.type === "ai") {
109
+ * const toolCalls = stream.getToolCalls(message);
110
+ * if (toolCalls.length > 0) {
111
+ * return (
112
+ * <div key={message.id}>
113
+ * {toolCalls.map(tc => <ToolCard key={tc.id} toolCall={tc} />)}
114
+ * </div>
115
+ * );
116
+ * }
117
+ * }
118
+ * return <MessageBubble key={message.id} message={message} />;
119
+ * })}
120
+ * ```
121
+ */
122
+ getToolCalls: (message: AIMessage<GetToolCallsType<StateType>>) => ToolCallWithResult<GetToolCallsType<StateType>>[];
267
123
  /**
268
124
  * Get the metadata for a message, such as first thread state the message
269
125
  * was seen in and branch information.
270
-
126
+ *
271
127
  * @param message - The message to get the metadata for.
272
128
  * @param index - The index of the message in the thread.
273
129
  * @returns The metadata for the message.
274
130
  */
275
- getMessagesMetadata: (message: Message, index?: number) => MessageMetadata<StateType> | undefined;
131
+ getMessagesMetadata: (message: Message<GetToolCallsType<StateType>>, index?: number) => MessageMetadata<StateType> | undefined;
276
132
  /**
277
133
  * LangGraph SDK client used to send request and receive responses.
278
134
  */
@@ -288,76 +144,9 @@ interface UseStream<StateType extends Record<string, unknown> = Record<string, u
288
144
  streamMode?: StreamMode | StreamMode[];
289
145
  }) => Promise<void>;
290
146
  }
291
- type ConfigWithConfigurable<ConfigurableType extends Record<string, unknown>> = Config & {
292
- configurable?: ConfigurableType;
293
- };
294
- interface SubmitOptions<StateType extends Record<string, unknown> = Record<string, unknown>, ContextType extends Record<string, unknown> = Record<string, unknown>> {
295
- config?: ConfigWithConfigurable<ContextType>;
296
- context?: ContextType;
297
- checkpoint?: Omit<Checkpoint, "thread_id"> | null;
298
- command?: Command;
299
- interruptBefore?: "*" | string[];
300
- interruptAfter?: "*" | string[];
301
- metadata?: Metadata;
302
- multitaskStrategy?: MultitaskStrategy;
303
- onCompletion?: OnCompletionBehavior;
304
- onDisconnect?: DisconnectMode;
305
- feedbackKeys?: string[];
306
- streamMode?: Array<StreamMode>;
307
- runId?: string;
308
- optimisticValues?: Partial<StateType> | ((prev: StateType) => Partial<StateType>);
309
- /**
310
- * Whether or not to stream the nodes of any subgraphs called
311
- * by the assistant.
312
- * @default false
313
- */
314
- streamSubgraphs?: boolean;
315
- /**
316
- * Mark the stream as resumable. All events emitted during the run will be temporarily persisted
317
- * in order to be re-emitted if the stream is re-joined.
318
- * @default false
319
- */
320
- streamResumable?: boolean;
321
- /**
322
- * Whether to checkpoint during the run (or only at the end/interruption).
323
- * - `"async"`: Save checkpoint asynchronously while the next step executes (default).
324
- * - `"sync"`: Save checkpoint synchronously before the next step starts.
325
- * - `"exit"`: Save checkpoint only when the graph exits.
326
- * @default "async"
327
- */
328
- durability?: Durability;
329
- /**
330
- * The ID to use when creating a new thread. When provided, this ID will be used
331
- * for thread creation when threadId is `null` or `undefined`.
332
- * This enables optimistic UI updates where you know the thread ID
333
- * before the thread is actually created.
334
- */
335
- threadId?: string;
336
- }
337
- /**
338
- * Transport used to stream the thread.
339
- * Only applicable for custom endpoints using `toLangGraphEventStream` or `toLangGraphEventStreamResponse`.
340
- */
341
- interface UseStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
342
- stream: (payload: {
343
- input: GetUpdateType<Bag, StateType> | null | undefined;
344
- context: GetConfigurableType<Bag> | undefined;
345
- command: Command | undefined;
346
- config: ConfigWithConfigurable<GetConfigurableType<Bag>> | undefined;
347
- signal: AbortSignal;
348
- }) => Promise<AsyncGenerator<{
349
- id?: string;
350
- event: string;
351
- data: unknown;
352
- }>>;
353
- }
354
- type UseStreamCustomOptions<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStreamOptions<StateType, Bag>, "messagesKey" | "threadId" | "onThreadId" | "onError" | "onCreated" | "onUpdateEvent" | "onCustomEvent" | "onMetadataEvent" | "onLangChainEvent" | "onDebugEvent" | "onCheckpointEvent" | "onTaskEvent" | "onStop" | "initialValues" | "throttle"> & {
355
- transport: UseStreamTransport<StateType, Bag>;
356
- };
357
- type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStream<StateType, Bag>, "values" | "error" | "isLoading" | "stop" | "interrupt" | "messages"> & {
147
+ type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStream<StateType, Bag>, "values" | "error" | "isLoading" | "stop" | "interrupt" | "messages" | "toolCalls" | "getToolCalls"> & {
358
148
  submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
359
149
  };
360
- type CustomSubmitOptions<StateType extends Record<string, unknown> = Record<string, unknown>, ConfigurableType extends Record<string, unknown> = Record<string, unknown>> = Pick<SubmitOptions<StateType, ConfigurableType>, "optimisticValues" | "context" | "command" | "config">;
361
150
  //#endregion
362
- export { BagTemplate, GetConfigurableType, GetUpdateType, MessageMetadata, UseStream, UseStreamCustom, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport };
151
+ export { UseStream, UseStreamCustom };
363
152
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":["Client","ClientConfig","ThreadState","Interrupt","Config","Checkpoint","Metadata","Command","MultitaskStrategy","OnCompletionBehavior","DisconnectMode","Durability","Message","UpdatesStreamEvent","CustomStreamEvent","MetadataStreamEvent","EventsStreamEvent","DebugStreamEvent","CheckpointsStreamEvent","TasksStreamEvent","StreamMode","Sequence","MessageMetadata","Record","StateType","BagTemplate","GetUpdateType","Bag","Partial","GetConfigurableType","GetInterruptType","GetCustomEventType","RunCallbackMeta","UseStreamThread","Promise","UseStreamOptions","RunMetadataStorage","UseStream","SubmitOptions","ConfigWithConfigurable","ConfigurableType","ContextType","Omit","Array","UseStreamTransport","AbortSignal","AsyncGenerator","UseStreamCustomOptions","Pick","UseStreamCustom","CustomSubmitOptions"],"sources":["../../src/react/types.d.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\nimport type { Client, ClientConfig } from \"../client.js\";\nimport type { ThreadState, Interrupt, Config, Checkpoint, Metadata } from \"../schema.js\";\nimport type { Command, MultitaskStrategy, OnCompletionBehavior, DisconnectMode, Durability } from \"../types.js\";\nimport type { Message } from \"../types.messages.js\";\nimport type { UpdatesStreamEvent, CustomStreamEvent, MetadataStreamEvent, EventsStreamEvent, DebugStreamEvent, CheckpointsStreamEvent, TasksStreamEvent, StreamMode } from \"../types.stream.js\";\nimport type { Sequence } from \"../ui/branching.js\";\nexport type MessageMetadata<StateType extends Record<string, unknown>> = {\n /**\n * The ID of the message used.\n */\n messageId: string;\n /**\n * The first thread state the message was seen in.\n */\n firstSeenState: ThreadState<StateType> | undefined;\n /**\n * The branch of the message.\n */\n branch: string | undefined;\n /**\n * The list of branches this message is part of.\n * This is useful for displaying branching controls.\n */\n branchOptions: string[] | undefined;\n /**\n * Metadata sent alongside the message during run streaming.\n * @remarks This metadata only exists temporarily in browser memory during streaming and is not persisted after completion.\n */\n streamMetadata: Record<string, unknown> | undefined;\n};\nexport type BagTemplate = {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n};\nexport type GetUpdateType<Bag extends BagTemplate, StateType extends Record<string, unknown>> = Bag extends {\n UpdateType: unknown;\n} ? Bag[\"UpdateType\"] : Partial<StateType>;\nexport type GetConfigurableType<Bag extends BagTemplate> = Bag extends {\n ConfigurableType: Record<string, unknown>;\n} ? Bag[\"ConfigurableType\"] : Record<string, unknown>;\nexport type GetInterruptType<Bag extends BagTemplate> = Bag extends {\n InterruptType: unknown;\n} ? Bag[\"InterruptType\"] : unknown;\nexport type GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n} ? Bag[\"CustomEventType\"] : unknown;\nexport interface RunCallbackMeta {\n run_id: string;\n thread_id: string;\n}\nexport interface UseStreamThread<StateType extends Record<string, unknown>> {\n data: ThreadState<StateType>[] | null | undefined;\n error: unknown;\n isLoading: boolean;\n mutate: (mutateId?: string) => Promise<ThreadState<StateType>[] | null | undefined>;\n}\nexport interface UseStreamOptions<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n /**\n * Client used to send requests.\n */\n client?: Client;\n /**\n * The URL of the API to use.\n */\n apiUrl?: ClientConfig[\"apiUrl\"];\n /**\n * The API key to use.\n */\n apiKey?: ClientConfig[\"apiKey\"];\n /**\n * Custom call options, such as custom fetch implementation.\n */\n callerOptions?: ClientConfig[\"callerOptions\"];\n /**\n * Default headers to send with requests.\n */\n defaultHeaders?: ClientConfig[\"defaultHeaders\"];\n /**\n * Specify the key within the state that contains messages.\n * Defaults to \"messages\".\n *\n * @default \"messages\"\n */\n messagesKey?: string;\n /**\n * Callback that is called when an error occurs.\n */\n onError?: (error: unknown, run: RunCallbackMeta | undefined) => void;\n /**\n * Callback that is called when the stream is finished.\n */\n onFinish?: (state: ThreadState<StateType>, run: RunCallbackMeta | undefined) => void;\n /**\n * Callback that is called when a new stream is created.\n */\n onCreated?: (run: RunCallbackMeta) => void;\n /**\n * Callback that is called when an update event is received.\n */\n onUpdateEvent?: (data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"], options: {\n namespace: string[] | undefined;\n mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;\n }) => void;\n /**\n * Callback that is called when a custom event is received.\n */\n onCustomEvent?: (data: CustomStreamEvent<GetCustomEventType<Bag>>[\"data\"], options: {\n namespace: string[] | undefined;\n mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;\n }) => void;\n /**\n * Callback that is called when a metadata event is received.\n */\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n /**\n * Callback that is called when a LangChain event is received.\n * @see https://langchain-ai.github.io/langgraph/cloud/how-tos/stream_events/#stream-graph-in-events-mode for more details.\n */\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n /**\n * Callback that is called when a debug event is received.\n * @internal This API is experimental and subject to change.\n */\n onDebugEvent?: (data: DebugStreamEvent[\"data\"], options: {\n namespace: string[] | undefined;\n }) => void;\n /**\n * Callback that is called when a checkpoints event is received.\n */\n onCheckpointEvent?: (data: CheckpointsStreamEvent<StateType>[\"data\"], options: {\n namespace: string[] | undefined;\n }) => void;\n /**\n * Callback that is called when a tasks event is received.\n */\n onTaskEvent?: (data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"], options: {\n namespace: string[] | undefined;\n }) => void;\n /**\n * Callback that is called when the stream is stopped by the user.\n * Provides a mutate function to update the stream state immediately\n * without requiring a server roundtrip.\n *\n * @example\n * ```typescript\n * onStop: ({ mutate }) => {\n * mutate((prev) => ({\n * ...prev,\n * ui: prev.ui?.map(component =>\n * component.props.isLoading\n * ? { ...component, props: { ...component.props, stopped: true, isLoading: false }}\n * : component\n * )\n * }));\n * }\n * ```\n */\n onStop?: (options: {\n mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;\n }) => void;\n /**\n * The ID of the thread to fetch history and current values from.\n */\n threadId?: string | null;\n /**\n * Callback that is called when the thread ID is updated (ie when a new thread is created).\n */\n onThreadId?: (threadId: string) => void;\n /** Will reconnect the stream on mount */\n reconnectOnMount?: boolean | (() => RunMetadataStorage);\n /**\n * Initial values to display immediately when loading a thread.\n * Useful for displaying cached thread data while official history loads.\n * These values will be replaced when official thread data is fetched.\n *\n * Note: UI components from initialValues will render immediately if they're\n * predefined in LoadExternalComponent's components prop, providing instant\n * cached UI display without server fetches.\n */\n initialValues?: StateType | null;\n /**\n * Whether to fetch the history of the thread.\n * If true, the history will be fetched from the server. Defaults to 10 entries.\n * If false, only the last state will be fetched from the server.\n * @default true\n */\n fetchStateHistory?: boolean | {\n limit: number;\n };\n /**\n * Manage the thread state externally.\n */\n thread?: UseStreamThread<StateType>;\n /**\n * Throttle the stream.\n * If a number is provided, the stream will be throttled to the given number of milliseconds.\n * If `true`, updates are batched in a single macrotask.\n * If `false`, updates are not throttled or batched.\n * @default true\n */\n throttle?: number | boolean;\n}\ninterface RunMetadataStorage {\n getItem(key: `lg:stream:${string}`): string | null;\n setItem(key: `lg:stream:${string}`, value: string): void;\n removeItem(key: `lg:stream:${string}`): void;\n}\nexport interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n /**\n * The current values of the thread.\n */\n values: StateType;\n /**\n * Last seen error from the thread or during streaming.\n */\n error: unknown;\n /**\n * Whether the stream is currently running.\n */\n isLoading: boolean;\n /**\n * Whether the thread is currently being loaded.\n */\n isThreadLoading: boolean;\n /**\n * Stops the stream.\n */\n stop: () => Promise<void>;\n /**\n * Create and stream a run to the thread.\n */\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n /**\n * The current branch of the thread.\n */\n branch: string;\n /**\n * Set the branch of the thread.\n */\n setBranch: (branch: string) => void;\n /**\n * Flattened history of thread states of a thread.\n */\n history: ThreadState<StateType>[];\n /**\n * Tree of all branches for the thread.\n * @experimental\n */\n experimental_branchTree: Sequence<StateType>;\n /**\n * Get the interrupt value for the stream if interrupted.\n */\n interrupt: Interrupt<GetInterruptType<Bag>> | undefined;\n /**\n * Messages inferred from the thread.\n * Will automatically update with incoming message chunks.\n */\n messages: Message[];\n /**\n * Get the metadata for a message, such as first thread state the message\n * was seen in and branch information.\n \n * @param message - The message to get the metadata for.\n * @param index - The index of the message in the thread.\n * @returns The metadata for the message.\n */\n getMessagesMetadata: (message: Message, index?: number) => MessageMetadata<StateType> | undefined;\n /**\n * LangGraph SDK client used to send request and receive responses.\n */\n client: Client;\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n /**\n * Join an active stream.\n */\n joinStream: (runId: string, lastEventId?: string, options?: {\n streamMode?: StreamMode | StreamMode[];\n }) => Promise<void>;\n}\ntype ConfigWithConfigurable<ConfigurableType extends Record<string, unknown>> = Config & {\n configurable?: ConfigurableType;\n};\nexport interface SubmitOptions<StateType extends Record<string, unknown> = Record<string, unknown>, ContextType extends Record<string, unknown> = Record<string, unknown>> {\n config?: ConfigWithConfigurable<ContextType>;\n context?: ContextType;\n checkpoint?: Omit<Checkpoint, \"thread_id\"> | null;\n command?: Command;\n interruptBefore?: \"*\" | string[];\n interruptAfter?: \"*\" | string[];\n metadata?: Metadata;\n multitaskStrategy?: MultitaskStrategy;\n onCompletion?: OnCompletionBehavior;\n onDisconnect?: DisconnectMode;\n feedbackKeys?: string[];\n streamMode?: Array<StreamMode>;\n runId?: string;\n optimisticValues?: Partial<StateType> | ((prev: StateType) => Partial<StateType>);\n /**\n * Whether or not to stream the nodes of any subgraphs called\n * by the assistant.\n * @default false\n */\n streamSubgraphs?: boolean;\n /**\n * Mark the stream as resumable. All events emitted during the run will be temporarily persisted\n * in order to be re-emitted if the stream is re-joined.\n * @default false\n */\n streamResumable?: boolean;\n /**\n * Whether to checkpoint during the run (or only at the end/interruption).\n * - `\"async\"`: Save checkpoint asynchronously while the next step executes (default).\n * - `\"sync\"`: Save checkpoint synchronously before the next step starts.\n * - `\"exit\"`: Save checkpoint only when the graph exits.\n * @default \"async\"\n */\n durability?: Durability;\n /**\n * The ID to use when creating a new thread. When provided, this ID will be used\n * for thread creation when threadId is `null` or `undefined`.\n * This enables optimistic UI updates where you know the thread ID\n * before the thread is actually created.\n */\n threadId?: string;\n}\n/**\n * Transport used to stream the thread.\n * Only applicable for custom endpoints using `toLangGraphEventStream` or `toLangGraphEventStreamResponse`.\n */\nexport interface UseStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n stream: (payload: {\n input: GetUpdateType<Bag, StateType> | null | undefined;\n context: GetConfigurableType<Bag> | undefined;\n command: Command | undefined;\n config: ConfigWithConfigurable<GetConfigurableType<Bag>> | undefined;\n signal: AbortSignal;\n }) => Promise<AsyncGenerator<{\n id?: string;\n event: string;\n data: unknown;\n }>>;\n}\nexport type UseStreamCustomOptions<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStreamOptions<StateType, Bag>, \"messagesKey\" | \"threadId\" | \"onThreadId\" | \"onError\" | \"onCreated\" | \"onUpdateEvent\" | \"onCustomEvent\" | \"onMetadataEvent\" | \"onLangChainEvent\" | \"onDebugEvent\" | \"onCheckpointEvent\" | \"onTaskEvent\" | \"onStop\" | \"initialValues\" | \"throttle\"> & {\n transport: UseStreamTransport<StateType, Bag>;\n};\nexport type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStream<StateType, Bag>, \"values\" | \"error\" | \"isLoading\" | \"stop\" | \"interrupt\" | \"messages\"> & {\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n};\nexport type CustomSubmitOptions<StateType extends Record<string, unknown> = Record<string, unknown>, ConfigurableType extends Record<string, unknown> = Record<string, unknown>> = Pick<SubmitOptions<StateType, ConfigurableType>, \"optimisticValues\" | \"context\" | \"command\" | \"config\">;\nexport {};\n"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","names":["Client","ThreadState","Interrupt","Message","AIMessage","ToolCallWithResult","StreamMode","Sequence","GetUpdateType","GetConfigurableType","GetInterruptType","GetToolCallsType","MessageMetadata","UseStreamThread","UseStreamOptions","UseStreamTransport","UseStreamCustomOptions","SubmitOptions","CustomSubmitOptions","RunCallbackMeta","BagTemplate","UseStream","Record","StateType","Promise","Bag","UseStreamCustom","Pick"],"sources":["../../src/react/types.d.ts"],"sourcesContent":["import type { Client } from \"../client.js\";\nimport type { ThreadState, Interrupt } from \"../schema.js\";\nimport type { Message, AIMessage, ToolCallWithResult } from \"../types.messages.js\";\nimport type { StreamMode } from \"../types.stream.js\";\nimport type { Sequence } from \"../ui/branching.js\";\nimport type { GetUpdateType, GetConfigurableType, GetInterruptType, GetToolCallsType, MessageMetadata, UseStreamThread, UseStreamOptions, UseStreamTransport, UseStreamCustomOptions, SubmitOptions, CustomSubmitOptions, RunCallbackMeta } from \"../ui/types.js\";\nimport type { BagTemplate } from \"../types.template.js\";\nexport type { GetUpdateType, GetConfigurableType, GetInterruptType, GetToolCallsType, MessageMetadata, UseStreamThread, UseStreamOptions, UseStreamTransport, UseStreamCustomOptions, SubmitOptions, CustomSubmitOptions, RunCallbackMeta, };\nexport interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {\n /**\n * The current values of the thread.\n */\n values: StateType;\n /**\n * Last seen error from the thread or during streaming.\n */\n error: unknown;\n /**\n * Whether the stream is currently running.\n */\n isLoading: boolean;\n /**\n * Whether the thread is currently being loaded.\n */\n isThreadLoading: boolean;\n /**\n * Stops the stream.\n */\n stop: () => Promise<void>;\n /**\n * Create and stream a run to the thread.\n */\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n /**\n * The current branch of the thread.\n */\n branch: string;\n /**\n * Set the branch of the thread.\n */\n setBranch: (branch: string) => void;\n /**\n * Flattened history of thread states of a thread.\n */\n history: ThreadState<StateType>[];\n /**\n * Tree of all branches for the thread.\n * @experimental\n */\n experimental_branchTree: Sequence<StateType>;\n /**\n * Get the interrupt value for the stream if interrupted.\n */\n interrupt: Interrupt<GetInterruptType<Bag>> | undefined;\n /**\n * Messages inferred from the thread.\n * Will automatically update with incoming message chunks.\n * Includes all message types including ToolMessage.\n */\n messages: Message<GetToolCallsType<StateType>>[];\n /**\n * Tool calls paired with their results.\n * Useful for rendering tool invocations and their outputs together.\n *\n * Each item contains the tool call from an AI message paired with its\n * corresponding ToolMessage result (if available), along with lifecycle state.\n *\n * @example\n * ```tsx\n * // With type-safe tool calls - embed the type in your messages\n * type MyToolCalls =\n * | { name: \"get_weather\"; args: { location: string }; id?: string }\n * | { name: \"search\"; args: { query: string }; id?: string };\n *\n * interface MyState {\n * messages: Message<MyToolCalls>[];\n * }\n *\n * const stream = useStream<MyState>({ ... });\n *\n * {stream.toolCalls.map(({ id, call, result, state }) => {\n * if (call.name === \"get_weather\") {\n * // call.args is { location: string }\n * return (\n * <WeatherCard\n * key={id}\n * location={call.args.location}\n * result={result?.content}\n * isLoading={state === \"pending\"}\n * />\n * );\n * }\n * })}\n * ```\n */\n toolCalls: ToolCallWithResult<GetToolCallsType<StateType>>[];\n /**\n * Get tool calls for a specific AI message.\n * Useful when rendering messages and their associated tool calls together.\n *\n * @param message - The AI message to get tool calls for.\n * @returns Array of tool calls initiated by the message.\n *\n * @example\n * ```tsx\n * {stream.uiMessages.map((message) => {\n * if (message.type === \"ai\") {\n * const toolCalls = stream.getToolCalls(message);\n * if (toolCalls.length > 0) {\n * return (\n * <div key={message.id}>\n * {toolCalls.map(tc => <ToolCard key={tc.id} toolCall={tc} />)}\n * </div>\n * );\n * }\n * }\n * return <MessageBubble key={message.id} message={message} />;\n * })}\n * ```\n */\n getToolCalls: (message: AIMessage<GetToolCallsType<StateType>>) => ToolCallWithResult<GetToolCallsType<StateType>>[];\n /**\n * Get the metadata for a message, such as first thread state the message\n * was seen in and branch information.\n *\n * @param message - The message to get the metadata for.\n * @param index - The index of the message in the thread.\n * @returns The metadata for the message.\n */\n getMessagesMetadata: (message: Message<GetToolCallsType<StateType>>, index?: number) => MessageMetadata<StateType> | undefined;\n /**\n * LangGraph SDK client used to send request and receive responses.\n */\n client: Client;\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n /**\n * Join an active stream.\n */\n joinStream: (runId: string, lastEventId?: string, options?: {\n streamMode?: StreamMode | StreamMode[];\n }) => Promise<void>;\n}\nexport type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> = Pick<UseStream<StateType, Bag>, \"values\" | \"error\" | \"isLoading\" | \"stop\" | \"interrupt\" | \"messages\" | \"toolCalls\" | \"getToolCalls\"> & {\n submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;\n};\n"],"mappings":";;;;;;;;;UAQiBqB,4BAA4BC,0BAA0BA,qCAAqCF,cAAcA;EAAzGC;;;QAAsDC,EAI3DC,SAJ2DD;;;;OAoBvDE,EAAAA,OAAAA;;;;WAI+ED,EAAAA,OAAAA;;;;iBAAyCC,EAAAA,OAAAA;;;;MAiB3GjB,EAAAA,GAAAA,GArBbiB,OAqBajB,CAAAA,IAAAA,CAAAA;;;;QAUUgB,EAAAA,CAAAA,MAAAA,EA3BlBf,aA2BkBe,CA3BJE,GA2BIF,EA3BCA,SA2BDA,CAAAA,GAAAA,IAAAA,GAAAA,SAAAA,EAAAA,OAAAA,CAAAA,EA3B0CN,aA2B1CM,CA3BwDA,SA2BxDA,EA3BmEd,mBA2BnEc,CA3BuFE,GA2BvFF,CAAAA,CAAAA,EAAAA,GA3BiGC,OA2BjGD,CAAAA,IAAAA,CAAAA;;;;QAoCLZ,EAAAA,MAAAA;;;;WAyBNP,EAAAA,CAAAA,MAAAA,EAAAA,MAAAA,EAAAA,GAAAA,IAAAA;;;;SASgCmB,EArF/CtB,WAqF+CsB,CArFnCA,SAqFmCA,CAAAA,EAAAA;;;;;yBAIhDvB,EApFiBO,QAoFjBP,CApF0BuB,SAoF1BvB,CAAAA;;;;EAUK,SAAA,EA1FFE,SA0FE,CA1FQQ,gBA0FR,CA1FyBe,GA0FzB,CAAA,CAAA,GAAA,SAAA;EAELC;;;;;UAA+GN,EAtF7GjB,OAsF6GiB,CAtFrGT,gBAsFqGS,CAtFpFG,SAsFoFH,CAAAA,CAAAA,EAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAlD5Gf,mBAAmBM,iBAAiBY;;;;;;;;;;;;;;;;;;;;;;;;;0BAyBvBnB,UAAUO,iBAAiBY,gBAAgBlB,mBAAmBM,iBAAiBY;;;;;;;;;iCASxEpB,QAAQQ,iBAAiBY,gCAAgCX,gBAAgBW;;;;UAIhGvB;;;;;;;;;iBASSM,aAAaA;QACxBkB;;KAEEE,kCAAkCJ,0BAA0BA,qCAAqCF,cAAcA,eAAeO,KAAKN,UAAUE,WAAWE;mBAC/IjB,cAAciB,KAAKF,yCAAyCL,oBAAoBK,WAAWd,oBAAoBgB,UAAUD"}
@@ -1,12 +1,14 @@
1
1
  "use client";
2
2
 
3
-
4
3
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
5
4
  const require_stream = require('../react/stream.cjs');
6
5
  require('../react/index.cjs');
7
- const react = require_rolldown_runtime.__toESM(require("react"));
8
- const react_dom = require_rolldown_runtime.__toESM(require("react-dom"));
9
- const react_jsx_runtime = require_rolldown_runtime.__toESM(require("react/jsx-runtime"));
6
+ let react = require("react");
7
+ react = require_rolldown_runtime.__toESM(react);
8
+ let react_dom = require("react-dom");
9
+ react_dom = require_rolldown_runtime.__toESM(react_dom);
10
+ let react_jsx_runtime = require("react/jsx-runtime");
11
+ react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
10
12
 
11
13
  //#region src/react-ui/client.tsx
12
14
  const UseStreamContext = react.createContext(null);
@@ -57,10 +59,9 @@ const isReactNode = (value) => {
57
59
  if (isPromise(value)) return true;
58
60
  return false;
59
61
  };
60
- function LoadExternalComponent({ stream, namespace, message, meta, fallback, components,...props }) {
62
+ function LoadExternalComponent({ stream, namespace, message, meta, fallback, components, ...props }) {
61
63
  const ref = react.useRef(null);
62
- const id = react.useId();
63
- const shadowRootId = `child-shadow-${id}`;
64
+ const shadowRootId = `child-shadow-${react.useId()}`;
64
65
  const store = react.useMemo(() => COMPONENT_STORE.getBoundStore(shadowRootId), [shadowRootId]);
65
66
  const state = react.useSyncExternalStore(store.subscribe, store.getSnapshot);
66
67
  const clientComponent = components?.[message.name];
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","names":["React","ReactDOM","module","JsxRuntime"],"sources":["../../src/react-ui/client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport type { UIMessage } from \"./types.js\";\nimport { useStream } from \"../react/index.js\";\nimport type { UseStream } from \"../react/types.js\";\n\nconst UseStreamContext = React.createContext<{\n stream: ReturnType<typeof useStream>;\n meta: unknown;\n}>(null!);\n\ntype BagTemplate = {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n MetaType?: unknown;\n};\n\ntype GetMetaType<Bag extends BagTemplate> = Bag extends { MetaType: unknown }\n ? Bag[\"MetaType\"]\n : unknown;\n\ninterface UseStreamContext<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> extends UseStream<StateType, Bag> {\n meta?: GetMetaType<Bag>;\n}\n\nexport function useStreamContext<\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 MetaType?: unknown;\n } = BagTemplate\n>(): UseStreamContext<StateType, Bag> {\n const ctx = React.useContext(UseStreamContext);\n if (!ctx) {\n throw new Error(\n \"useStreamContext must be used within a LoadExternalComponent\"\n );\n }\n\n return new Proxy(ctx, {\n get(target, prop: keyof UseStreamContext<StateType, Bag>) {\n if (prop === \"meta\") return target.meta;\n return target.stream[prop];\n },\n }) as unknown as UseStreamContext<StateType, Bag>;\n}\n\ninterface ComponentTarget {\n comp: React.FunctionComponent | React.ComponentClass;\n target: HTMLElement;\n}\n\nclass ComponentStore {\n private cache: Record<string, ComponentTarget> = {};\n\n private boundCache: Record<\n string,\n {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => ComponentTarget | undefined;\n }\n > = {};\n\n private callbacks: Record<\n string,\n ((\n comp: React.FunctionComponent | React.ComponentClass,\n el: HTMLElement\n ) => void)[]\n > = {};\n\n respond(\n shadowRootId: string,\n comp: React.FunctionComponent | React.ComponentClass,\n targetElement: HTMLElement\n ) {\n this.cache[shadowRootId] = { comp, target: targetElement };\n this.callbacks[shadowRootId]?.forEach((c) => c(comp, targetElement));\n }\n\n getBoundStore(shadowRootId: string) {\n this.boundCache[shadowRootId] ??= {\n subscribe: (onStoreChange: () => void) => {\n this.callbacks[shadowRootId] ??= [];\n this.callbacks[shadowRootId].push(onStoreChange);\n return () => {\n this.callbacks[shadowRootId] = this.callbacks[shadowRootId].filter(\n (c) => c !== onStoreChange\n );\n };\n },\n getSnapshot: () => this.cache[shadowRootId],\n };\n\n return this.boundCache[shadowRootId];\n }\n}\n\nconst COMPONENT_STORE = new ComponentStore();\nconst EXT_STORE_SYMBOL = Symbol.for(\"LGUI_EXT_STORE\");\nconst REQUIRE_SYMBOL = Symbol.for(\"LGUI_REQUIRE\");\nconst REQUIRE_EXTRA_SYMBOL = Symbol.for(\"LGUI_REQUIRE_EXTRA\");\n\ninterface LoadExternalComponentProps\n extends Pick<React.HTMLAttributes<HTMLDivElement>, \"style\" | \"className\"> {\n /** Stream of the assistant */\n stream: ReturnType<typeof useStream>;\n\n /** Namespace of UI components. Defaults to assistant ID. */\n namespace?: string;\n\n /** UI message to be rendered */\n message: UIMessage;\n\n /** Additional context to be passed to the child component */\n meta?: unknown;\n\n /** Fallback to be rendered when the component is loading */\n fallback?: React.ReactNode | Record<string, React.ReactNode>;\n\n /**\n * Map of components that can be rendered directly without fetching the UI code\n * from the server.\n */\n components?: Record<string, React.FunctionComponent | React.ComponentClass>;\n}\n\nconst isIterable = (value: unknown): value is Iterable<unknown> =>\n value != null && typeof value === \"object\" && Symbol.iterator in value;\n\nconst isPromise = (value: unknown): value is Promise<unknown> =>\n value != null &&\n typeof value === \"object\" &&\n \"then\" in value &&\n typeof value.then === \"function\";\n\nconst isReactNode = (value: unknown): value is React.ReactNode => {\n if (React.isValidElement(value)) return true;\n if (value == null) return true;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n if (isIterable(value)) return true;\n if (isPromise(value)) return true;\n\n return false;\n};\n\nexport function LoadExternalComponent({\n stream,\n namespace,\n message,\n meta,\n fallback,\n components,\n ...props\n}: LoadExternalComponentProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const id = React.useId();\n const shadowRootId = `child-shadow-${id}`;\n\n const store = React.useMemo(\n () => COMPONENT_STORE.getBoundStore(shadowRootId),\n [shadowRootId]\n );\n const state = React.useSyncExternalStore(store.subscribe, store.getSnapshot);\n\n const clientComponent = components?.[message.name];\n const hasClientComponent = clientComponent != null;\n\n let fallbackComponent = null;\n if (isReactNode(fallback)) {\n fallbackComponent = fallback;\n } else if (typeof fallback === \"object\" && fallback != null) {\n fallbackComponent = fallback?.[message.name];\n }\n\n const uiNamespace = namespace ?? stream.assistantId;\n const uiClient = stream.client[\"~ui\"];\n React.useEffect(() => {\n if (hasClientComponent) return;\n void uiClient.getComponent(uiNamespace, message.name).then((html) => {\n const dom = ref.current;\n if (!dom) return;\n const root = dom.shadowRoot ?? dom.attachShadow({ mode: \"open\" });\n const fragment = document\n .createRange()\n .createContextualFragment(\n html.replace(\"{{shadowRootId}}\", shadowRootId)\n );\n root.appendChild(fragment);\n });\n }, [uiClient, uiNamespace, message.name, shadowRootId, hasClientComponent]);\n\n if (hasClientComponent) {\n return (\n <UseStreamContext.Provider value={{ stream, meta }}>\n {React.createElement(clientComponent, message.props)}\n </UseStreamContext.Provider>\n );\n }\n\n return (\n <>\n <div id={shadowRootId} ref={ref} {...props} />\n\n <UseStreamContext.Provider value={{ stream, meta }}>\n {state?.target != null\n ? ReactDOM.createPortal(\n React.createElement(state.comp, message.props),\n state.target\n )\n : fallbackComponent}\n </UseStreamContext.Provider>\n </>\n );\n}\n\ndeclare global {\n interface Window {\n [EXT_STORE_SYMBOL]: ComponentStore;\n [REQUIRE_SYMBOL]: (name: string) => unknown;\n [REQUIRE_EXTRA_SYMBOL]: Record<string, unknown>;\n }\n}\n\nexport function experimental_loadShare(name: string, module: unknown) {\n if (typeof window === \"undefined\") return;\n\n window[REQUIRE_EXTRA_SYMBOL] ??= {};\n window[REQUIRE_EXTRA_SYMBOL][name] = module;\n}\n\nexport function bootstrapUiContext() {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window[EXT_STORE_SYMBOL] = COMPONENT_STORE;\n window[REQUIRE_SYMBOL] = (name: string) => {\n if (name === \"react\") return React;\n if (name === \"react-dom\") return ReactDOM;\n if (name === \"react/jsx-runtime\") return JsxRuntime;\n if (name === \"@langchain/langgraph-sdk/react\") return { useStream };\n if (name === \"@langchain/langgraph-sdk/react-ui\") {\n return {\n useStreamContext,\n LoadExternalComponent: () => {\n throw new Error(\"Nesting LoadExternalComponent is not supported\");\n },\n };\n }\n\n if (\n window[REQUIRE_EXTRA_SYMBOL] != null &&\n typeof window[REQUIRE_EXTRA_SYMBOL] === \"object\" &&\n name in window[REQUIRE_EXTRA_SYMBOL]\n ) {\n return window[REQUIRE_EXTRA_SYMBOL][name];\n }\n\n throw new Error(`Unknown module...: ${name}`);\n };\n}\n"],"mappings":";;;;;;;;;;;AASA,MAAM,mBAAmBA,MAAM,cAG5B;AAqBH,SAAgB,mBASsB;CACpC,MAAM,MAAMA,MAAM,WAAW;AAC7B,KAAI,CAAC,IACH,OAAM,IAAI,MACR;AAIJ,QAAO,IAAI,MAAM,KAAK,EACpB,IAAI,QAAQ,MAA8C;AACxD,MAAI,SAAS,OAAQ,QAAO,OAAO;AACnC,SAAO,OAAO,OAAO;;;AAU3B,IAAM,iBAAN,MAAqB;CACnB,AAAQ,QAAyC;CAEjD,AAAQ,aAMJ;CAEJ,AAAQ,YAMJ;CAEJ,QACE,cACA,MACA,eACA;AACA,OAAK,MAAM,gBAAgB;GAAE;GAAM,QAAQ;;AAC3C,OAAK,UAAU,eAAe,SAAS,MAAM,EAAE,MAAM;;CAGvD,cAAc,cAAsB;AAClC,OAAK,WAAW,kBAAkB;GAChC,YAAY,kBAA8B;AACxC,SAAK,UAAU,kBAAkB;AACjC,SAAK,UAAU,cAAc,KAAK;AAClC,iBAAa;AACX,UAAK,UAAU,gBAAgB,KAAK,UAAU,cAAc,QACzD,MAAM,MAAM;;;GAInB,mBAAmB,KAAK,MAAM;;AAGhC,SAAO,KAAK,WAAW;;;AAI3B,MAAM,kBAAkB,IAAI;AAC5B,MAAM,mBAAmB,OAAO,IAAI;AACpC,MAAM,iBAAiB,OAAO,IAAI;AAClC,MAAM,uBAAuB,OAAO,IAAI;AA0BxC,MAAM,cAAc,UAClB,SAAS,QAAQ,OAAO,UAAU,YAAY,OAAO,YAAY;AAEnE,MAAM,aAAa,UACjB,SAAS,QACT,OAAO,UAAU,YACjB,UAAU,SACV,OAAO,MAAM,SAAS;AAExB,MAAM,eAAe,UAA6C;AAChE,KAAIA,MAAM,eAAe,OAAQ,QAAO;AACxC,KAAI,SAAS,KAAM,QAAO;AAC1B,KACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,UAEjB,QAAO;AAGT,KAAI,WAAW,OAAQ,QAAO;AAC9B,KAAI,UAAU,OAAQ,QAAO;AAE7B,QAAO;;AAGT,SAAgB,sBAAsB,EACpC,QACA,WACA,SACA,MACA,UACA,WACA,GAAG,SAC0B;CAC7B,MAAM,MAAMA,MAAM,OAAuB;CACzC,MAAM,KAAKA,MAAM;CACjB,MAAM,eAAe,gBAAgB;CAErC,MAAM,QAAQA,MAAM,cACZ,gBAAgB,cAAc,eACpC,CAAC;CAEH,MAAM,QAAQA,MAAM,qBAAqB,MAAM,WAAW,MAAM;CAEhE,MAAM,kBAAkB,aAAa,QAAQ;CAC7C,MAAM,qBAAqB,mBAAmB;CAE9C,IAAI,oBAAoB;AACxB,KAAI,YAAY,UACd,qBAAoB;UACX,OAAO,aAAa,YAAY,YAAY,KACrD,qBAAoB,WAAW,QAAQ;CAGzC,MAAM,cAAc,aAAa,OAAO;CACxC,MAAM,WAAW,OAAO,OAAO;AAC/B,OAAM,gBAAgB;AACpB,MAAI,mBAAoB;AACxB,EAAK,SAAS,aAAa,aAAa,QAAQ,MAAM,MAAM,SAAS;GACnE,MAAM,MAAM,IAAI;AAChB,OAAI,CAAC,IAAK;GACV,MAAM,OAAO,IAAI,cAAc,IAAI,aAAa,EAAE,MAAM;GACxD,MAAM,WAAW,SACd,cACA,yBACC,KAAK,QAAQ,oBAAoB;AAErC,QAAK,YAAY;;IAElB;EAAC;EAAU;EAAa,QAAQ;EAAM;EAAc;;AAEvD,KAAI,mBACF,QACE,2CAAC,iBAAiB;EAAS,OAAO;GAAE;GAAQ;;YACzCA,MAAM,cAAc,iBAAiB,QAAQ;;AAKpD,QACE,qFACE,2CAAC;EAAI,IAAI;EAAmB;EAAK,GAAI;KAErC,2CAAC,iBAAiB;EAAS,OAAO;GAAE;GAAQ;;YACzC,OAAO,UAAU,OACdC,UAAS,aACPD,MAAM,cAAc,MAAM,MAAM,QAAQ,QACxC,MAAM,UAER;;;AAcZ,SAAgB,uBAAuB,MAAc,UAAiB;AACpE,KAAI,OAAO,WAAW,YAAa;AAEnC,QAAO,0BAA0B;AACjC,QAAO,sBAAsB,QAAQE;;AAGvC,SAAgB,qBAAqB;AACnC,KAAI,OAAO,WAAW,YACpB;AAGF,QAAO,oBAAoB;AAC3B,QAAO,mBAAmB,SAAiB;AACzC,MAAI,SAAS,QAAS,QAAOF;AAC7B,MAAI,SAAS,YAAa,QAAOC;AACjC,MAAI,SAAS,oBAAqB,QAAOE;AACzC,MAAI,SAAS,iCAAkC,QAAO,EAAE;AACxD,MAAI,SAAS,oCACX,QAAO;GACL;GACA,6BAA6B;AAC3B,UAAM,IAAI,MAAM;;;AAKtB,MACE,OAAO,yBAAyB,QAChC,OAAO,OAAO,0BAA0B,YACxC,QAAQ,OAAO,sBAEf,QAAO,OAAO,sBAAsB;AAGtC,QAAM,IAAI,MAAM,sBAAsB"}
1
+ {"version":3,"file":"client.cjs","names":["React","ReactDOM","module","JsxRuntime"],"sources":["../../src/react-ui/client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport type { UIMessage } from \"./types.js\";\nimport { useStream } from \"../react/index.js\";\nimport type { UseStream } from \"../react/types.js\";\nimport type { BagTemplate } from \"../types.template.js\";\n\nconst UseStreamContext = React.createContext<{\n stream: ReturnType<typeof useStream>;\n meta: unknown;\n}>(null!);\n\ntype GetMetaType<Bag extends BagTemplate> = Bag extends { MetaType: unknown }\n ? Bag[\"MetaType\"]\n : unknown;\n\ninterface UseStreamContext<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> extends UseStream<StateType, Bag> {\n meta?: GetMetaType<Bag>;\n}\n\nexport function useStreamContext<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n>(): UseStreamContext<StateType, Bag> {\n const ctx = React.useContext(UseStreamContext);\n if (!ctx) {\n throw new Error(\n \"useStreamContext must be used within a LoadExternalComponent\"\n );\n }\n\n return new Proxy(ctx, {\n get(target, prop: keyof UseStreamContext<StateType, Bag>) {\n if (prop === \"meta\") return target.meta;\n return target.stream[prop];\n },\n }) as unknown as UseStreamContext<StateType, Bag>;\n}\n\ninterface ComponentTarget {\n comp: React.FunctionComponent | React.ComponentClass;\n target: HTMLElement;\n}\n\nclass ComponentStore {\n private cache: Record<string, ComponentTarget> = {};\n\n private boundCache: Record<\n string,\n {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => ComponentTarget | undefined;\n }\n > = {};\n\n private callbacks: Record<\n string,\n ((\n comp: React.FunctionComponent | React.ComponentClass,\n el: HTMLElement\n ) => void)[]\n > = {};\n\n respond(\n shadowRootId: string,\n comp: React.FunctionComponent | React.ComponentClass,\n targetElement: HTMLElement\n ) {\n this.cache[shadowRootId] = { comp, target: targetElement };\n this.callbacks[shadowRootId]?.forEach((c) => c(comp, targetElement));\n }\n\n getBoundStore(shadowRootId: string) {\n this.boundCache[shadowRootId] ??= {\n subscribe: (onStoreChange: () => void) => {\n this.callbacks[shadowRootId] ??= [];\n this.callbacks[shadowRootId].push(onStoreChange);\n return () => {\n this.callbacks[shadowRootId] = this.callbacks[shadowRootId].filter(\n (c) => c !== onStoreChange\n );\n };\n },\n getSnapshot: () => this.cache[shadowRootId],\n };\n\n return this.boundCache[shadowRootId];\n }\n}\n\nconst COMPONENT_STORE = new ComponentStore();\nconst EXT_STORE_SYMBOL = Symbol.for(\"LGUI_EXT_STORE\");\nconst REQUIRE_SYMBOL = Symbol.for(\"LGUI_REQUIRE\");\nconst REQUIRE_EXTRA_SYMBOL = Symbol.for(\"LGUI_REQUIRE_EXTRA\");\n\ninterface LoadExternalComponentProps\n extends Pick<React.HTMLAttributes<HTMLDivElement>, \"style\" | \"className\"> {\n /** Stream of the assistant */\n stream: ReturnType<typeof useStream>;\n\n /** Namespace of UI components. Defaults to assistant ID. */\n namespace?: string;\n\n /** UI message to be rendered */\n message: UIMessage;\n\n /** Additional context to be passed to the child component */\n meta?: unknown;\n\n /** Fallback to be rendered when the component is loading */\n fallback?: React.ReactNode | Record<string, React.ReactNode>;\n\n /**\n * Map of components that can be rendered directly without fetching the UI code\n * from the server.\n */\n components?: Record<string, React.FunctionComponent | React.ComponentClass>;\n}\n\nconst isIterable = (value: unknown): value is Iterable<unknown> =>\n value != null && typeof value === \"object\" && Symbol.iterator in value;\n\nconst isPromise = (value: unknown): value is Promise<unknown> =>\n value != null &&\n typeof value === \"object\" &&\n \"then\" in value &&\n typeof value.then === \"function\";\n\nconst isReactNode = (value: unknown): value is React.ReactNode => {\n if (React.isValidElement(value)) return true;\n if (value == null) return true;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n if (isIterable(value)) return true;\n if (isPromise(value)) return true;\n\n return false;\n};\n\nexport function LoadExternalComponent({\n stream,\n namespace,\n message,\n meta,\n fallback,\n components,\n ...props\n}: LoadExternalComponentProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const id = React.useId();\n const shadowRootId = `child-shadow-${id}`;\n\n const store = React.useMemo(\n () => COMPONENT_STORE.getBoundStore(shadowRootId),\n [shadowRootId]\n );\n const state = React.useSyncExternalStore(store.subscribe, store.getSnapshot);\n\n const clientComponent = components?.[message.name];\n const hasClientComponent = clientComponent != null;\n\n let fallbackComponent = null;\n if (isReactNode(fallback)) {\n fallbackComponent = fallback;\n } else if (typeof fallback === \"object\" && fallback != null) {\n fallbackComponent = fallback?.[message.name];\n }\n\n const uiNamespace = namespace ?? stream.assistantId;\n const uiClient = stream.client[\"~ui\"];\n React.useEffect(() => {\n if (hasClientComponent) return;\n void uiClient.getComponent(uiNamespace, message.name).then((html) => {\n const dom = ref.current;\n if (!dom) return;\n const root = dom.shadowRoot ?? dom.attachShadow({ mode: \"open\" });\n const fragment = document\n .createRange()\n .createContextualFragment(\n html.replace(\"{{shadowRootId}}\", shadowRootId)\n );\n root.appendChild(fragment);\n });\n }, [uiClient, uiNamespace, message.name, shadowRootId, hasClientComponent]);\n\n if (hasClientComponent) {\n return (\n <UseStreamContext.Provider value={{ stream, meta }}>\n {React.createElement(clientComponent, message.props)}\n </UseStreamContext.Provider>\n );\n }\n\n return (\n <>\n <div id={shadowRootId} ref={ref} {...props} />\n\n <UseStreamContext.Provider value={{ stream, meta }}>\n {state?.target != null\n ? ReactDOM.createPortal(\n React.createElement(state.comp, message.props),\n state.target\n )\n : fallbackComponent}\n </UseStreamContext.Provider>\n </>\n );\n}\n\ndeclare global {\n interface Window {\n [EXT_STORE_SYMBOL]: ComponentStore;\n [REQUIRE_SYMBOL]: (name: string) => unknown;\n [REQUIRE_EXTRA_SYMBOL]: Record<string, unknown>;\n }\n}\n\nexport function experimental_loadShare(name: string, module: unknown) {\n if (typeof window === \"undefined\") return;\n\n window[REQUIRE_EXTRA_SYMBOL] ??= {};\n window[REQUIRE_EXTRA_SYMBOL][name] = module;\n}\n\nexport function bootstrapUiContext() {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window[EXT_STORE_SYMBOL] = COMPONENT_STORE;\n window[REQUIRE_SYMBOL] = (name: string) => {\n if (name === \"react\") return React;\n if (name === \"react-dom\") return ReactDOM;\n if (name === \"react/jsx-runtime\") return JsxRuntime;\n if (name === \"@langchain/langgraph-sdk/react\") return { useStream };\n if (name === \"@langchain/langgraph-sdk/react-ui\") {\n return {\n useStreamContext,\n LoadExternalComponent: () => {\n throw new Error(\"Nesting LoadExternalComponent is not supported\");\n },\n };\n }\n\n if (\n window[REQUIRE_EXTRA_SYMBOL] != null &&\n typeof window[REQUIRE_EXTRA_SYMBOL] === \"object\" &&\n name in window[REQUIRE_EXTRA_SYMBOL]\n ) {\n return window[REQUIRE_EXTRA_SYMBOL][name];\n }\n\n throw new Error(`Unknown module...: ${name}`);\n };\n}\n"],"mappings":"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"}