@langchain/langgraph-sdk 1.7.1 → 1.7.2
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/react/index.cjs +10 -46
- package/dist/react/index.d.cts +11 -14
- package/dist/react/index.d.ts +11 -14
- package/dist/react/index.js +3 -13
- package/dist/react/stream.cjs +17 -0
- package/dist/react/stream.cjs.map +1 -0
- package/dist/react/stream.custom.cjs +162 -0
- package/dist/react/stream.custom.cjs.map +1 -0
- package/dist/react/stream.custom.d.cts +40 -0
- package/dist/react/stream.custom.d.cts.map +1 -0
- package/dist/react/stream.custom.d.ts +39 -0
- package/dist/react/stream.custom.d.ts.map +1 -0
- package/dist/react/stream.custom.js +160 -0
- package/dist/react/stream.custom.js.map +1 -0
- package/dist/react/stream.d.cts +10 -0
- package/dist/react/stream.d.cts.map +1 -0
- package/dist/react/stream.d.ts +9 -0
- package/dist/react/stream.d.ts.map +1 -0
- package/dist/react/stream.js +16 -0
- package/dist/react/stream.js.map +1 -0
- package/dist/react/stream.lgp.cjs +550 -0
- package/dist/react/stream.lgp.cjs.map +1 -0
- package/dist/react/stream.lgp.js +549 -0
- package/dist/react/stream.lgp.js.map +1 -0
- package/dist/react/thread.cjs +19 -0
- package/dist/react/thread.cjs.map +1 -0
- package/dist/react/thread.js +18 -0
- package/dist/react/thread.js.map +1 -0
- package/dist/react/types.d.cts +79 -0
- package/dist/react/types.d.cts.map +1 -0
- package/dist/react/types.d.ts +79 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react-ui/client.cjs +136 -0
- package/dist/react-ui/client.cjs.map +1 -0
- package/dist/react-ui/client.d.cts +67 -0
- package/dist/react-ui/client.d.cts.map +1 -0
- package/dist/react-ui/client.d.ts +67 -0
- package/dist/react-ui/client.d.ts.map +1 -0
- package/dist/react-ui/client.js +130 -0
- package/dist/react-ui/client.js.map +1 -0
- package/dist/react-ui/index.cjs +13 -38
- package/dist/react-ui/index.cjs.map +1 -0
- package/dist/react-ui/index.d.cts +2 -1
- package/dist/react-ui/index.d.ts +2 -1
- package/dist/react-ui/index.js +7 -1
- package/dist/react-ui/index.js.map +1 -0
- package/dist/react-ui/server/index.cjs +4 -14
- package/dist/react-ui/server/index.d.cts +2 -1
- package/dist/react-ui/server/index.d.ts +2 -1
- package/dist/react-ui/server/index.js +2 -1
- package/dist/react-ui/server/server.cjs +56 -0
- package/dist/react-ui/server/server.cjs.map +1 -0
- package/dist/react-ui/server/server.d.cts +54 -0
- package/dist/react-ui/server/server.d.cts.map +1 -0
- package/dist/react-ui/server/server.d.ts +54 -0
- package/dist/react-ui/server/server.d.ts.map +1 -0
- package/dist/react-ui/server/server.js +55 -0
- package/dist/react-ui/server/server.js.map +1 -0
- package/dist/react-ui/types.cjs +37 -0
- package/dist/react-ui/types.cjs.map +1 -0
- package/dist/react-ui/types.d.cts +25 -0
- package/dist/react-ui/types.d.cts.map +1 -0
- package/dist/react-ui/types.d.ts +25 -0
- package/dist/react-ui/types.d.ts.map +1 -0
- package/dist/react-ui/types.js +35 -0
- package/dist/react-ui/types.js.map +1 -0
- package/dist/ui/index.d.cts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +11 -3
- package/dist/react/index.cjs.map +0 -1
- package/dist/react/index.d.cts.map +0 -1
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.lgp.js","names":[],"sources":["../../src/react/stream.lgp.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport {\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { filterStream, findLast, unique } from \"../ui/utils.js\";\nimport { StreamError } from \"../ui/errors.js\";\nimport { getBranchContext } from \"../ui/branching.js\";\nimport { EventStreamEvent, StreamManager } from \"../ui/manager.js\";\nimport type {\n AnyStreamOptions,\n GetUpdateType,\n GetCustomEventType,\n GetInterruptType,\n GetConfigurableType,\n GetToolCallsType,\n RunCallbackMeta,\n MessageMetadata,\n UseStreamThread,\n} from \"../ui/types.js\";\nimport type { UseStream, SubmitOptions } from \"./types.js\";\n\nimport { Client, getClientConfigHash } from \"../client.js\";\nimport { type Message } from \"../types.messages.js\";\nimport { getToolCallsWithResults } from \"../utils/tools.js\";\nimport type { Interrupt, ThreadState } from \"../schema.js\";\nimport type {\n StreamMode,\n ToolProgress,\n ToolsStreamEvent,\n} from \"../types.stream.js\";\nimport { MessageTupleManager } from \"../ui/messages.js\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport type { StreamEvent } from \"../types.js\";\nimport type { BagTemplate } from \"../types.template.js\";\n\nfunction getFetchHistoryKey(\n client: Client,\n threadId: string | undefined | null,\n limit: boolean | number\n) {\n return [getClientConfigHash(client), threadId, limit].join(\":\");\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\nfunction useThreadHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string | undefined | null,\n limit: boolean | number,\n options: {\n passthrough: boolean;\n submittingRef: RefObject<string | null>;\n onError?: (error: unknown, run?: RunCallbackMeta) => void;\n }\n): UseStreamThread<StateType> {\n const key = getFetchHistoryKey(client, threadId, limit);\n const [state, setState] = useState<{\n key: string | undefined;\n data: ThreadState<StateType>[] | undefined;\n error: unknown | undefined;\n isLoading: boolean;\n }>(() => ({\n key: undefined,\n data: undefined,\n error: undefined,\n isLoading: threadId != null,\n }));\n\n const clientRef = useRef(client);\n clientRef.current = client;\n\n const onErrorRef = useRef(options?.onError);\n onErrorRef.current = options?.onError;\n\n const fetcher = useCallback(\n (\n threadId: string | undefined | null,\n limit: boolean | number\n ): Promise<ThreadState<StateType>[]> => {\n // If only passthrough is enabled, don't fetch history\n if (options.passthrough) return Promise.resolve([]);\n\n const client = clientRef.current;\n const key = getFetchHistoryKey(client, threadId, limit);\n\n if (threadId != null) {\n setState((state) => {\n if (state.key === key) return { ...state, isLoading: true };\n return { key, data: undefined, error: undefined, isLoading: true };\n });\n return fetchHistory<StateType>(client, threadId, { limit }).then(\n (data) => {\n setState((state) => {\n if (state.key !== key) return state;\n return { key, data, error: undefined, isLoading: false };\n });\n return data;\n },\n (error) => {\n setState((state) => {\n if (state.key !== key) return state;\n return { key, data: state.data, error, isLoading: false };\n });\n onErrorRef.current?.(error);\n return Promise.reject(error);\n }\n );\n }\n\n setState({ key, data: undefined, error: undefined, isLoading: false });\n return Promise.resolve([]);\n },\n [options.passthrough]\n );\n\n useEffect(() => {\n // Skip if a stream is already in progress, no need to fetch history\n if (\n options.submittingRef.current != null &&\n options.submittingRef.current === threadId\n ) {\n return;\n }\n\n void fetcher(threadId, limit);\n // The `threadId` and `limit` arguments are already present in `key`\n // Thus we don't need to include them in the dependency array\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fetcher, key]);\n\n return {\n data: state.data,\n error: state.error,\n isLoading: state.isLoading,\n mutate: (mutateId?: string) => fetcher(mutateId ?? threadId, limit),\n };\n}\n\nexport function useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n>(options: AnyStreamOptions<StateType, Bag>): UseStream<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 reconnectOnMountRef = useRef(options.reconnectOnMount);\n const runMetadataStorage = useMemo(() => {\n if (typeof window === \"undefined\") return null;\n const storage = reconnectOnMountRef.current;\n if (storage === true) return window.sessionStorage;\n if (typeof storage === \"function\") return storage();\n return null;\n }, []);\n\n const client = useMemo(\n () =>\n options.client ??\n new Client({\n apiUrl: options.apiUrl,\n apiKey: options.apiKey,\n callerOptions: options.callerOptions,\n defaultHeaders: options.defaultHeaders,\n }),\n [\n options.client,\n options.apiKey,\n options.apiUrl,\n options.callerOptions,\n options.defaultHeaders,\n ]\n );\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () =>\n new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n })\n );\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot\n );\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n const trackStreamModeRef = useRef<Exclude<StreamMode, \"messages\">[]>([]);\n\n const trackStreamMode = useCallback(\n (...mode: Exclude<StreamMode, \"messages\">[]) => {\n const ref = trackStreamModeRef.current;\n for (const m of mode) {\n if (!ref.includes(m)) ref.push(m);\n }\n },\n []\n );\n\n const hasUpdateListener = options.onUpdateEvent != null;\n const hasCustomListener = options.onCustomEvent != null;\n const hasLangChainListener = options.onLangChainEvent != null;\n const hasDebugListener = options.onDebugEvent != null;\n const hasCheckpointListener = options.onCheckpointEvent != null;\n const hasTaskListener = options.onTaskEvent != null;\n const hasToolListener = options.onToolEvent != null;\n\n const callbackStreamMode = useMemo(() => {\n const modes: Exclude<StreamMode, \"messages\">[] = [];\n if (hasUpdateListener) modes.push(\"updates\");\n if (hasCustomListener) modes.push(\"custom\");\n if (hasLangChainListener) modes.push(\"events\");\n if (hasDebugListener) modes.push(\"debug\");\n if (hasCheckpointListener) modes.push(\"checkpoints\");\n if (hasTaskListener) modes.push(\"tasks\");\n if (hasToolListener) modes.push(\"tools\");\n return modes;\n }, [\n hasUpdateListener,\n hasCustomListener,\n hasLangChainListener,\n hasDebugListener,\n hasCheckpointListener,\n hasTaskListener,\n hasToolListener,\n ]);\n\n const threadIdRef = useRef<string | null>(threadId);\n const threadIdStreamingRef = useRef<string | null>(null);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const switchThread = useCallback(\n (newThreadId: string | null) => {\n if (newThreadId !== threadIdRef.current) {\n threadIdRef.current = newThreadId;\n stream.clear();\n onThreadId(newThreadId as string);\n }\n },\n [stream, onThreadId]\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 builtInHistory = useThreadHistory<StateType>(\n client,\n threadId,\n historyLimit,\n {\n passthrough: options.thread != null,\n submittingRef: threadIdStreamingRef,\n onError: options.onError,\n }\n );\n const history = options.thread ?? builtInHistory;\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 [branch, setBranch] = useState<string>(\"\");\n const branchContext = getBranchContext(branch, history.data ?? undefined);\n\n const [toolProgressMap, setToolProgressMap] = useState<\n Map<string, ToolProgress>\n >(new Map());\n\n const handleToolEvent = useCallback((data: ToolsStreamEvent[\"data\"]) => {\n setToolProgressMap((prev) => {\n const next = new Map(prev);\n const key = data.toolCallId ?? data.name;\n const existing = next.get(key);\n\n switch (data.event) {\n case \"on_tool_start\": {\n next.set(key, {\n toolCallId: data.toolCallId,\n name: data.name,\n state: \"starting\",\n input: data.input,\n });\n break;\n }\n case \"on_tool_event\": {\n if (existing) {\n next.set(key, { ...existing, state: \"running\", data: data.data });\n }\n break;\n }\n case \"on_tool_end\": {\n if (existing) {\n next.set(key, {\n ...existing,\n state: \"completed\",\n result: data.output,\n });\n }\n break;\n }\n case \"on_tool_error\": {\n if (existing) {\n next.set(key, { ...existing, state: \"error\", error: data.error });\n }\n break;\n }\n default: {\n throw new Error(\n `Unexpected tool event: ${(data as { event: string }).event}`\n );\n }\n }\n\n return next;\n });\n }, []);\n\n const historyValues =\n branchContext.threadHead?.values ??\n options.initialValues ??\n ({} as StateType);\n\n // Reconstruct subagents from history when:\n // 1. History is loaded (not loading, has data)\n // 2. No active stream is running\n // 3. Subagent filtering is enabled (otherwise subagents aren't tracked)\n // This ensures subagent visualization persists after page refresh or stream completion\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n !history.isLoading &&\n historyMessages.length > 0;\n\n useEffect(() => {\n if (shouldReconstructSubagents) {\n // skipIfPopulated: true ensures we don't overwrite subagents from active streaming\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n // We intentionally only run this when shouldReconstructSubagents changes\n // to avoid unnecessary reconstructions during streaming\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldReconstructSubagents, historyMessages.length]);\n\n const historyError = (() => {\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 messageMetadata = (() => {\n const alreadyShown = new Set<string>();\n return getMessages(historyValues).map(\n (message, idx): Omit<MessageMetadata<StateType>, \"streamMetadata\"> => {\n const messageId = message.id ?? idx;\n\n // Find the first checkpoint where the message was seen\n const firstSeenState = findLast(history.data ?? [], (state) =>\n getMessages(state.values)\n .map((m, idx) => m.id ?? idx)\n .includes(messageId)\n );\n\n const checkpointId = firstSeenState?.checkpoint?.checkpoint_id;\n let branch =\n checkpointId != null\n ? branchContext.branchByCheckpoint[checkpointId]\n : undefined;\n if (!branch?.branch?.length) branch = undefined;\n\n // serialize branches\n const optionsShown = branch?.branchOptions?.flat(2).join(\",\");\n if (optionsShown) {\n if (alreadyShown.has(optionsShown)) branch = undefined;\n alreadyShown.add(optionsShown);\n }\n\n return {\n messageId: messageId.toString(),\n firstSeenState,\n\n branch: branch?.branch,\n branchOptions: branch?.branchOptions,\n };\n }\n );\n })();\n\n const stop = () =>\n stream.stop(historyValues, {\n onStop: (args) => {\n if (runMetadataStorage && threadId) {\n const runId = runMetadataStorage.getItem(`lg:stream:${threadId}`);\n if (runId) void client.runs.cancel(threadId, runId);\n runMetadataStorage.removeItem(`lg:stream:${threadId}`);\n }\n\n options.onStop?.(args);\n },\n });\n\n // --- TRANSPORT ---\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>\n ) => {\n setToolProgressMap(new Map());\n\n // Unbranch things\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n setBranch(\n checkpointId != null\n ? branchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\"\n : \"\"\n );\n\n // When `fetchStateHistory` is requested, thus we assume that branching\n // is enabled. We then need to include the implicit branch.\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch =\n // We're expecting the whole thread state in onFinish\n options.onFinish != null ||\n // We're fetching history, thus we need the latest checkpoint\n // to ensure we're not accidentally submitting to a wrong branch\n includeImplicitBranch;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId = threadId;\n\n const shouldAbortPrevious =\n (submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\") &&\n stream.isLoading;\n\n await stream.start(\n async (signal: AbortSignal) => {\n stream.setStreamValues((values) => {\n const prev = { ...historyValues, ...values };\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 if (!usableThreadId) {\n const thread = await client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n signal,\n });\n\n usableThreadId = thread.thread_id;\n\n // Pre-emptively update the thread ID before\n // stream cancellation is kicked off and thread\n // is being refetched\n threadIdRef.current = usableThreadId;\n threadIdStreamingRef.current = usableThreadId;\n\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n threadIdStreamingRef.current = usableThreadId;\n\n const streamMode = unique([\n ...(submitOptions?.streamMode ?? []),\n ...trackStreamModeRef.current,\n ...callbackStreamMode,\n ]);\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? branchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n // Avoid specifying a checkpoint if user explicitly set it to null\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n return client.runs.stream(usableThreadId, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues,\n callbacks: {\n ...options,\n onToolEvent: (data, opts) => {\n handleToolEvent(data);\n options.onToolEvent?.(data, opts);\n },\n },\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch) {\n const newHistory = await history.mutate(usableThreadId!);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n // We now have the latest update from /history\n // Thus we can clear the local stream state\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n\n return undefined;\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish() {\n threadIdStreamingRef.current = null;\n },\n },\n { abortPrevious: shouldAbortPrevious }\n );\n };\n\n const joinStream = async (\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 setToolProgressMap(new Map());\n\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n if (!threadId) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: threadId,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n threadIdStreamingRef.current = threadId;\n const stream = client.runs.joinStream(threadId, 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(stream, joinOptions.filter)\n : stream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues,\n callbacks: {\n ...options,\n onToolEvent: (data, opts) => {\n handleToolEvent(data);\n options.onToolEvent?.(data, opts);\n },\n },\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${threadId}`);\n const newHistory = await history.mutate(threadId);\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 threadIdStreamingRef.current = null;\n },\n }\n );\n };\n\n const reconnectKey = useMemo(() => {\n if (!runMetadataStorage || stream.isLoading) return undefined;\n if (typeof window === \"undefined\") return undefined;\n const runId = runMetadataStorage?.getItem(`lg:stream:${threadId}`);\n if (!runId) return undefined;\n return { runId, threadId };\n }, [runMetadataStorage, stream.isLoading, threadId]);\n\n const shouldReconnect = !!runMetadataStorage;\n const reconnectRef = useRef({ threadId, shouldReconnect });\n\n const joinStreamRef = useRef<typeof joinStream>(joinStream);\n joinStreamRef.current = joinStream;\n\n useEffect(() => {\n // reset shouldReconnect when switching threads\n if (reconnectRef.current.threadId !== threadId) {\n reconnectRef.current = { threadId, shouldReconnect };\n }\n }, [threadId, shouldReconnect]);\n\n useEffect(() => {\n if (reconnectKey && reconnectRef.current.shouldReconnect) {\n reconnectRef.current.shouldReconnect = false;\n void joinStreamRef.current?.(reconnectKey.runId);\n }\n }, [reconnectKey]);\n\n const error = stream.error ?? historyError ?? history.error;\n const values = stream.values ?? historyValues;\n\n return {\n get values() {\n trackStreamMode(\"values\");\n return values;\n },\n\n client,\n assistantId: options.assistantId,\n\n error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n switchThread,\n\n joinStream,\n\n branch,\n setBranch,\n\n get history() {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\"\n );\n }\n\n return branchContext.flatHistory;\n },\n\n isThreadLoading: history.isLoading && history.data == null,\n\n get experimental_branchTree() {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\"\n );\n }\n\n return branchContext.branchTree;\n },\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n values != null &&\n \"__interrupt__\" in values &&\n Array.isArray(values.__interrupt__)\n ) {\n const valueInterrupts = values.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n // If we're deferring to old interrupt detection logic, don't show the interrupt if the stream is loading\n if (stream.isLoading) return [];\n\n // Collect interrupts from ALL tasks (not just the last one)\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 // check if there's a next task present (breakpoint-style interrupt)\n const next = branchContext.threadHead?.next ?? [];\n if (!next.length || error != null) return [];\n return [{ when: \"breakpoint\" }];\n },\n\n get interrupt() {\n const all = this.interrupts;\n if (all.length === 0) return undefined;\n if (all.length === 1) return all[0];\n\n // Multiple interrupts: return the array for backward compat\n return all as Interrupt<InterruptType>;\n },\n\n get messages(): Message<ToolCallType>[] {\n trackStreamMode(\"messages-tuple\", \"values\");\n return getMessages(values);\n },\n\n get toolCalls() {\n trackStreamMode(\"messages-tuple\", \"values\");\n const msgs = getMessages(values) as Message<ToolCallType>[];\n return getToolCallsWithResults<ToolCallType>(msgs);\n },\n\n get toolProgress(): ToolProgress[] {\n trackStreamMode(\"tools\");\n return Array.from(toolProgressMap.values());\n },\n\n getToolCalls(message) {\n trackStreamMode(\"messages-tuple\", \"values\");\n const msgs = getMessages(values) as Message<ToolCallType>[];\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n getMessagesMetadata(\n message: Message<ToolCallType>,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n trackStreamMode(\"values\");\n\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 get subagents() {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
require("../_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
//#region src/react/thread.tsx
|
|
5
|
+
const useControllableThreadId = (options) => {
|
|
6
|
+
const [localThreadId, _setLocalThreadId] = (0, react.useState)(options?.threadId ?? null);
|
|
7
|
+
const onThreadIdRef = (0, react.useRef)(options?.onThreadId);
|
|
8
|
+
onThreadIdRef.current = options?.onThreadId;
|
|
9
|
+
const setThreadId = (0, react.useCallback)((threadId) => {
|
|
10
|
+
_setLocalThreadId(threadId);
|
|
11
|
+
onThreadIdRef.current?.(threadId);
|
|
12
|
+
}, []);
|
|
13
|
+
if (!options || !("threadId" in options)) return [localThreadId, setThreadId];
|
|
14
|
+
return [options.threadId ?? null, setThreadId];
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
exports.useControllableThreadId = useControllableThreadId;
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=thread.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread.cjs","names":[],"sources":["../../src/react/thread.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useRef, useCallback } from \"react\";\n\nexport const useControllableThreadId = (options?: {\n threadId?: string | null;\n onThreadId?: (threadId: string) => void;\n}): [string | null, (threadId: string) => void] => {\n const [localThreadId, _setLocalThreadId] = useState<string | null>(\n options?.threadId ?? null\n );\n\n const onThreadIdRef = useRef(options?.onThreadId);\n onThreadIdRef.current = options?.onThreadId;\n\n const setThreadId = useCallback((threadId: string) => {\n _setLocalThreadId(threadId);\n onThreadIdRef.current?.(threadId);\n }, []);\n\n if (!options || !(\"threadId\" in options)) {\n return [localThreadId, setThreadId];\n }\n\n return [options.threadId ?? null, setThreadId];\n};\n"],"mappings":";;;;AAIA,MAAa,2BAA2B,YAGW;CACjD,MAAM,CAAC,eAAe,sBAAA,GAAA,MAAA,UACpB,SAAS,YAAY,KACtB;CAED,MAAM,iBAAA,GAAA,MAAA,QAAuB,SAAS,WAAW;AACjD,eAAc,UAAU,SAAS;CAEjC,MAAM,eAAA,GAAA,MAAA,cAA2B,aAAqB;AACpD,oBAAkB,SAAS;AAC3B,gBAAc,UAAU,SAAS;IAChC,EAAE,CAAC;AAEN,KAAI,CAAC,WAAW,EAAE,cAAc,SAC9B,QAAO,CAAC,eAAe,YAAY;AAGrC,QAAO,CAAC,QAAQ,YAAY,MAAM,YAAY"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useRef, useState } from "react";
|
|
3
|
+
//#region src/react/thread.tsx
|
|
4
|
+
const useControllableThreadId = (options) => {
|
|
5
|
+
const [localThreadId, _setLocalThreadId] = useState(options?.threadId ?? null);
|
|
6
|
+
const onThreadIdRef = useRef(options?.onThreadId);
|
|
7
|
+
onThreadIdRef.current = options?.onThreadId;
|
|
8
|
+
const setThreadId = useCallback((threadId) => {
|
|
9
|
+
_setLocalThreadId(threadId);
|
|
10
|
+
onThreadIdRef.current?.(threadId);
|
|
11
|
+
}, []);
|
|
12
|
+
if (!options || !("threadId" in options)) return [localThreadId, setThreadId];
|
|
13
|
+
return [options.threadId ?? null, setThreadId];
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { useControllableThreadId };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread.js","names":[],"sources":["../../src/react/thread.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useRef, useCallback } from \"react\";\n\nexport const useControllableThreadId = (options?: {\n threadId?: string | null;\n onThreadId?: (threadId: string) => void;\n}): [string | null, (threadId: string) => void] => {\n const [localThreadId, _setLocalThreadId] = useState<string | null>(\n options?.threadId ?? null\n );\n\n const onThreadIdRef = useRef(options?.onThreadId);\n onThreadIdRef.current = options?.onThreadId;\n\n const setThreadId = useCallback((threadId: string) => {\n _setLocalThreadId(threadId);\n onThreadIdRef.current?.(threadId);\n }, []);\n\n if (!options || !(\"threadId\" in options)) {\n return [localThreadId, setThreadId];\n }\n\n return [options.threadId ?? null, setThreadId];\n};\n"],"mappings":";;;AAIA,MAAa,2BAA2B,YAGW;CACjD,MAAM,CAAC,eAAe,qBAAqB,SACzC,SAAS,YAAY,KACtB;CAED,MAAM,gBAAgB,OAAO,SAAS,WAAW;AACjD,eAAc,UAAU,SAAS;CAEjC,MAAM,cAAc,aAAa,aAAqB;AACpD,oBAAkB,SAAS;AAC3B,gBAAc,UAAU,SAAS;IAChC,EAAE,CAAC;AAEN,KAAI,CAAC,WAAW,EAAE,cAAc,SAC9B,QAAO,CAAC,eAAe,YAAY;AAGrC,QAAO,CAAC,QAAQ,YAAY,MAAM,YAAY"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ThreadState } from "../schema.cjs";
|
|
2
|
+
import { Message } from "../types.messages.cjs";
|
|
3
|
+
import { StreamMode, ToolProgress } from "../types.stream.cjs";
|
|
4
|
+
import { StreamEvent } from "../types.cjs";
|
|
5
|
+
import { Client } from "../client.cjs";
|
|
6
|
+
import { BagTemplate } from "../types.template.cjs";
|
|
7
|
+
import { BaseSubagentState, CompiledSubAgentLike, CustomSubmitOptions, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, GetConfigurableType, GetInterruptType, GetToolCallsType, GetUpdateType, InferDeepAgentSubagents, InferSubagentByName, InferSubagentNames, InferSubagentState, IsDeepAgentLike, MessageMetadata, RunCallbackMeta, StreamBase, SubAgentLike, SubagentStateMap, SubagentStream, SubagentStreamInterface, SubmitOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport } from "../ui/types.cjs";
|
|
8
|
+
import { Sequence } from "../ui/branching.cjs";
|
|
9
|
+
|
|
10
|
+
//#region src/react/types.d.ts
|
|
11
|
+
interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> extends StreamBase<StateType, GetToolCallsType<StateType>, GetInterruptType<Bag>, SubagentStates> {
|
|
12
|
+
/**
|
|
13
|
+
* Whether the thread is currently being loaded.
|
|
14
|
+
*/
|
|
15
|
+
isThreadLoading: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Stops the stream.
|
|
18
|
+
*/
|
|
19
|
+
stop: () => Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Create and stream a run to the thread.
|
|
22
|
+
*/
|
|
23
|
+
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* The current branch of the thread.
|
|
26
|
+
*/
|
|
27
|
+
branch: string;
|
|
28
|
+
/**
|
|
29
|
+
* Set the branch of the thread.
|
|
30
|
+
*/
|
|
31
|
+
setBranch: (branch: string) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Flattened history of thread states of a thread.
|
|
34
|
+
*/
|
|
35
|
+
history: ThreadState<StateType>[];
|
|
36
|
+
/**
|
|
37
|
+
* Tree of all branches for the thread.
|
|
38
|
+
* @experimental
|
|
39
|
+
*/
|
|
40
|
+
experimental_branchTree: Sequence<StateType>;
|
|
41
|
+
/**
|
|
42
|
+
* Get the metadata for a message, such as first thread state the message
|
|
43
|
+
* was seen in and branch information.
|
|
44
|
+
*
|
|
45
|
+
* @param message - The message to get the metadata for.
|
|
46
|
+
* @param index - The index of the message in the thread.
|
|
47
|
+
* @returns The metadata for the message.
|
|
48
|
+
*/
|
|
49
|
+
getMessagesMetadata: (message: Message<GetToolCallsType<StateType>>, index?: number) => MessageMetadata<StateType> | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Progress of tool executions during streaming.
|
|
52
|
+
*/
|
|
53
|
+
toolProgress: ToolProgress[];
|
|
54
|
+
/**
|
|
55
|
+
* LangGraph SDK client used to send request and receive responses.
|
|
56
|
+
*/
|
|
57
|
+
client: Client;
|
|
58
|
+
/**
|
|
59
|
+
* The ID of the assistant to use.
|
|
60
|
+
*/
|
|
61
|
+
assistantId: string;
|
|
62
|
+
/**
|
|
63
|
+
* Join an active stream.
|
|
64
|
+
*/
|
|
65
|
+
joinStream: (runId: string, lastEventId?: string, options?: {
|
|
66
|
+
streamMode?: StreamMode | StreamMode[];
|
|
67
|
+
filter?: (event: {
|
|
68
|
+
id?: string;
|
|
69
|
+
event: StreamEvent;
|
|
70
|
+
data: unknown;
|
|
71
|
+
}) => boolean;
|
|
72
|
+
}) => Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> = Pick<UseStream<StateType, Bag, SubagentStates>, "values" | "error" | "isLoading" | "stop" | "interrupt" | "interrupts" | "messages" | "toolCalls" | "getToolCalls" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
75
|
+
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
76
|
+
};
|
|
77
|
+
//#endregion
|
|
78
|
+
export { UseStream, UseStreamCustom };
|
|
79
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/react/types.tsx"],"mappings":";;;;;;;;;;UA0EiB,SAAA,mBACG,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,UACzC,UAAA,CACN,SAAA,EACA,gBAAA,CAAiB,SAAA,GACjB,gBAAA,CAAiB,GAAA,GACjB,cAAA;EARa;;;EAaf,eAAA;EAZ4C;;;EAiB5C,IAAA,QAAY,OAAA;EAfqC;;;EAoBjD,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,aAAA,CAAc,SAAA,EAAW,mBAAA,CAAoB,GAAA,OACpD,OAAA;EAnBc;;;EAwBnB,MAAA;EAPwB;;;EAYxB,SAAA,GAAY,MAAA;EAX6C;;;EAgBzD,OAAA,EAAS,WAAA,CAAY,SAAA;EAAA;;;;EAMrB,uBAAA,EAAyB,QAAA,CAAS,SAAA;EAWf;;;;;;;;EADnB,mBAAA,GACE,OAAA,EAAS,OAAA,CAAQ,gBAAA,CAAiB,SAAA,IAClC,KAAA,cACG,eAAA,CAAgB,SAAA;EA+BhB;;;EA1BL,YAAA,EAAc,YAAA;EAhEd;;;EAqEA,MAAA,EAAQ,MAAA;EApEI;;;EAyEZ,WAAA;EAxEiD;;;EA6EjD,UAAA,GACE,KAAA,UACA,WAAA,WACA,OAAA;IACE,UAAA,GAAa,UAAA,GAAa,UAAA;IAC1B,MAAA,IAAU,KAAA;MACR,EAAA;MACA,KAAA,EAAO,WAAA;MACP,IAAA;IAAA;EAAA,MAGD,OAAA;AAAA;AAAA,KAGK,eAAA,mBACQ,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,IAC/C,IAAA,CACF,SAAA,CAAU,SAAA,EAAW,GAAA,EAAK,cAAA;EAgB1B,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,GAAA,OAC1D,OAAA;AAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ThreadState } from "../schema.js";
|
|
2
|
+
import { Message } from "../types.messages.js";
|
|
3
|
+
import { StreamMode, ToolProgress } from "../types.stream.js";
|
|
4
|
+
import { StreamEvent } from "../types.js";
|
|
5
|
+
import { Client } from "../client.js";
|
|
6
|
+
import { BagTemplate } from "../types.template.js";
|
|
7
|
+
import { BaseSubagentState, CompiledSubAgentLike, CustomSubmitOptions, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, GetConfigurableType, GetInterruptType, GetToolCallsType, GetUpdateType, InferDeepAgentSubagents, InferSubagentByName, InferSubagentNames, InferSubagentState, IsDeepAgentLike, MessageMetadata, RunCallbackMeta, StreamBase, SubAgentLike, SubagentStateMap, SubagentStream, SubagentStreamInterface, SubmitOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport } from "../ui/types.js";
|
|
8
|
+
import { Sequence } from "../ui/branching.js";
|
|
9
|
+
|
|
10
|
+
//#region src/react/types.d.ts
|
|
11
|
+
interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> extends StreamBase<StateType, GetToolCallsType<StateType>, GetInterruptType<Bag>, SubagentStates> {
|
|
12
|
+
/**
|
|
13
|
+
* Whether the thread is currently being loaded.
|
|
14
|
+
*/
|
|
15
|
+
isThreadLoading: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Stops the stream.
|
|
18
|
+
*/
|
|
19
|
+
stop: () => Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Create and stream a run to the thread.
|
|
22
|
+
*/
|
|
23
|
+
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* The current branch of the thread.
|
|
26
|
+
*/
|
|
27
|
+
branch: string;
|
|
28
|
+
/**
|
|
29
|
+
* Set the branch of the thread.
|
|
30
|
+
*/
|
|
31
|
+
setBranch: (branch: string) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Flattened history of thread states of a thread.
|
|
34
|
+
*/
|
|
35
|
+
history: ThreadState<StateType>[];
|
|
36
|
+
/**
|
|
37
|
+
* Tree of all branches for the thread.
|
|
38
|
+
* @experimental
|
|
39
|
+
*/
|
|
40
|
+
experimental_branchTree: Sequence<StateType>;
|
|
41
|
+
/**
|
|
42
|
+
* Get the metadata for a message, such as first thread state the message
|
|
43
|
+
* was seen in and branch information.
|
|
44
|
+
*
|
|
45
|
+
* @param message - The message to get the metadata for.
|
|
46
|
+
* @param index - The index of the message in the thread.
|
|
47
|
+
* @returns The metadata for the message.
|
|
48
|
+
*/
|
|
49
|
+
getMessagesMetadata: (message: Message<GetToolCallsType<StateType>>, index?: number) => MessageMetadata<StateType> | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Progress of tool executions during streaming.
|
|
52
|
+
*/
|
|
53
|
+
toolProgress: ToolProgress[];
|
|
54
|
+
/**
|
|
55
|
+
* LangGraph SDK client used to send request and receive responses.
|
|
56
|
+
*/
|
|
57
|
+
client: Client;
|
|
58
|
+
/**
|
|
59
|
+
* The ID of the assistant to use.
|
|
60
|
+
*/
|
|
61
|
+
assistantId: string;
|
|
62
|
+
/**
|
|
63
|
+
* Join an active stream.
|
|
64
|
+
*/
|
|
65
|
+
joinStream: (runId: string, lastEventId?: string, options?: {
|
|
66
|
+
streamMode?: StreamMode | StreamMode[];
|
|
67
|
+
filter?: (event: {
|
|
68
|
+
id?: string;
|
|
69
|
+
event: StreamEvent;
|
|
70
|
+
data: unknown;
|
|
71
|
+
}) => boolean;
|
|
72
|
+
}) => Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> = Pick<UseStream<StateType, Bag, SubagentStates>, "values" | "error" | "isLoading" | "stop" | "interrupt" | "interrupts" | "messages" | "toolCalls" | "getToolCalls" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
75
|
+
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
76
|
+
};
|
|
77
|
+
//#endregion
|
|
78
|
+
export { UseStream, UseStreamCustom };
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/react/types.tsx"],"mappings":";;;;;;;;;;UA0EiB,SAAA,mBACG,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,UACzC,UAAA,CACN,SAAA,EACA,gBAAA,CAAiB,SAAA,GACjB,gBAAA,CAAiB,GAAA,GACjB,cAAA;EARa;;;EAaf,eAAA;EAZ4C;;;EAiB5C,IAAA,QAAY,OAAA;EAfqC;;;EAoBjD,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,aAAA,CAAc,SAAA,EAAW,mBAAA,CAAoB,GAAA,OACpD,OAAA;EAnBc;;;EAwBnB,MAAA;EAPwB;;;EAYxB,SAAA,GAAY,MAAA;EAX6C;;;EAgBzD,OAAA,EAAS,WAAA,CAAY,SAAA;EAAA;;;;EAMrB,uBAAA,EAAyB,QAAA,CAAS,SAAA;EAWf;;;;;;;;EADnB,mBAAA,GACE,OAAA,EAAS,OAAA,CAAQ,gBAAA,CAAiB,SAAA,IAClC,KAAA,cACG,eAAA,CAAgB,SAAA;EA+BhB;;;EA1BL,YAAA,EAAc,YAAA;EAhEd;;;EAqEA,MAAA,EAAQ,MAAA;EApEI;;;EAyEZ,WAAA;EAxEiD;;;EA6EjD,UAAA,GACE,KAAA,UACA,WAAA,WACA,OAAA;IACE,UAAA,GAAa,UAAA,GAAa,UAAA;IAC1B,MAAA,IAAU,KAAA;MACR,EAAA;MACA,KAAA,EAAO,WAAA;MACP,IAAA;IAAA;EAAA,MAGD,OAAA;AAAA;AAAA,KAGK,eAAA,mBACQ,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,IAC/C,IAAA,CACF,SAAA,CAAU,SAAA,EAAW,GAAA,EAAK,cAAA;EAgB1B,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,GAAA,OAC1D,OAAA;AAAA"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_stream = require("../react/stream.cjs");
|
|
4
|
+
require("../react/index.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
react = require_runtime.__toESM(react);
|
|
7
|
+
let react_dom = require("react-dom");
|
|
8
|
+
react_dom = require_runtime.__toESM(react_dom);
|
|
9
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
+
react_jsx_runtime = require_runtime.__toESM(react_jsx_runtime);
|
|
11
|
+
//#region src/react-ui/client.tsx
|
|
12
|
+
const UseStreamContext = react.createContext(null);
|
|
13
|
+
function useStreamContext() {
|
|
14
|
+
const ctx = react.useContext(UseStreamContext);
|
|
15
|
+
if (!ctx) throw new Error("useStreamContext must be used within a LoadExternalComponent");
|
|
16
|
+
return new Proxy(ctx, { get(target, prop) {
|
|
17
|
+
if (prop === "meta") return target.meta;
|
|
18
|
+
return target.stream[prop];
|
|
19
|
+
} });
|
|
20
|
+
}
|
|
21
|
+
var ComponentStore = class {
|
|
22
|
+
cache = {};
|
|
23
|
+
boundCache = {};
|
|
24
|
+
callbacks = {};
|
|
25
|
+
respond(shadowRootId, comp, targetElement) {
|
|
26
|
+
this.cache[shadowRootId] = {
|
|
27
|
+
comp,
|
|
28
|
+
target: targetElement
|
|
29
|
+
};
|
|
30
|
+
this.callbacks[shadowRootId]?.forEach((c) => c(comp, targetElement));
|
|
31
|
+
}
|
|
32
|
+
getBoundStore(shadowRootId) {
|
|
33
|
+
this.boundCache[shadowRootId] ??= {
|
|
34
|
+
subscribe: (onStoreChange) => {
|
|
35
|
+
this.callbacks[shadowRootId] ??= [];
|
|
36
|
+
this.callbacks[shadowRootId].push(onStoreChange);
|
|
37
|
+
return () => {
|
|
38
|
+
this.callbacks[shadowRootId] = this.callbacks[shadowRootId].filter((c) => c !== onStoreChange);
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
getSnapshot: () => this.cache[shadowRootId]
|
|
42
|
+
};
|
|
43
|
+
return this.boundCache[shadowRootId];
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const COMPONENT_STORE = new ComponentStore();
|
|
47
|
+
const EXT_STORE_SYMBOL = Symbol.for("LGUI_EXT_STORE");
|
|
48
|
+
const REQUIRE_SYMBOL = Symbol.for("LGUI_REQUIRE");
|
|
49
|
+
const REQUIRE_EXTRA_SYMBOL = Symbol.for("LGUI_REQUIRE_EXTRA");
|
|
50
|
+
const isIterable = (value) => value != null && typeof value === "object" && Symbol.iterator in value;
|
|
51
|
+
const isPromise = (value) => value != null && typeof value === "object" && "then" in value && typeof value.then === "function";
|
|
52
|
+
const isReactNode = (value) => {
|
|
53
|
+
if (react.isValidElement(value)) return true;
|
|
54
|
+
if (value == null) return true;
|
|
55
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") return true;
|
|
56
|
+
if (isIterable(value)) return true;
|
|
57
|
+
if (isPromise(value)) return true;
|
|
58
|
+
return false;
|
|
59
|
+
};
|
|
60
|
+
function LoadExternalComponent({ stream, namespace, message, meta, fallback, components, ...props }) {
|
|
61
|
+
const ref = react.useRef(null);
|
|
62
|
+
const shadowRootId = `child-shadow-${react.useId()}`;
|
|
63
|
+
const store = react.useMemo(() => COMPONENT_STORE.getBoundStore(shadowRootId), [shadowRootId]);
|
|
64
|
+
const state = react.useSyncExternalStore(store.subscribe, store.getSnapshot);
|
|
65
|
+
const clientComponent = components?.[message.name];
|
|
66
|
+
const hasClientComponent = clientComponent != null;
|
|
67
|
+
let fallbackComponent = null;
|
|
68
|
+
if (isReactNode(fallback)) fallbackComponent = fallback;
|
|
69
|
+
else if (typeof fallback === "object" && fallback != null) fallbackComponent = fallback?.[message.name];
|
|
70
|
+
const uiNamespace = namespace ?? stream.assistantId;
|
|
71
|
+
const uiClient = stream.client["~ui"];
|
|
72
|
+
react.useEffect(() => {
|
|
73
|
+
if (hasClientComponent) return;
|
|
74
|
+
uiClient.getComponent(uiNamespace, message.name).then((html) => {
|
|
75
|
+
const dom = ref.current;
|
|
76
|
+
if (!dom) return;
|
|
77
|
+
const root = dom.shadowRoot ?? dom.attachShadow({ mode: "open" });
|
|
78
|
+
const fragment = document.createRange().createContextualFragment(html.replace("{{shadowRootId}}", shadowRootId));
|
|
79
|
+
root.appendChild(fragment);
|
|
80
|
+
});
|
|
81
|
+
}, [
|
|
82
|
+
uiClient,
|
|
83
|
+
uiNamespace,
|
|
84
|
+
message.name,
|
|
85
|
+
shadowRootId,
|
|
86
|
+
hasClientComponent
|
|
87
|
+
]);
|
|
88
|
+
if (hasClientComponent) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UseStreamContext.Provider, {
|
|
89
|
+
value: {
|
|
90
|
+
stream,
|
|
91
|
+
meta
|
|
92
|
+
},
|
|
93
|
+
children: react.createElement(clientComponent, message.props)
|
|
94
|
+
});
|
|
95
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
96
|
+
id: shadowRootId,
|
|
97
|
+
ref,
|
|
98
|
+
...props
|
|
99
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UseStreamContext.Provider, {
|
|
100
|
+
value: {
|
|
101
|
+
stream,
|
|
102
|
+
meta
|
|
103
|
+
},
|
|
104
|
+
children: state?.target != null ? react_dom.createPortal(react.createElement(state.comp, message.props), state.target) : fallbackComponent
|
|
105
|
+
})] });
|
|
106
|
+
}
|
|
107
|
+
function experimental_loadShare(name, module) {
|
|
108
|
+
if (typeof window === "undefined") return;
|
|
109
|
+
window[REQUIRE_EXTRA_SYMBOL] ??= {};
|
|
110
|
+
window[REQUIRE_EXTRA_SYMBOL][name] = module;
|
|
111
|
+
}
|
|
112
|
+
function bootstrapUiContext() {
|
|
113
|
+
if (typeof window === "undefined") return;
|
|
114
|
+
window[EXT_STORE_SYMBOL] = COMPONENT_STORE;
|
|
115
|
+
window[REQUIRE_SYMBOL] = (name) => {
|
|
116
|
+
if (name === "react") return react;
|
|
117
|
+
if (name === "react-dom") return react_dom;
|
|
118
|
+
if (name === "react/jsx-runtime") return react_jsx_runtime;
|
|
119
|
+
if (name === "@langchain/langgraph-sdk/react") return { useStream: require_stream.useStream };
|
|
120
|
+
if (name === "@langchain/langgraph-sdk/react-ui") return {
|
|
121
|
+
useStreamContext,
|
|
122
|
+
LoadExternalComponent: () => {
|
|
123
|
+
throw new Error("Nesting LoadExternalComponent is not supported");
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
if (window[REQUIRE_EXTRA_SYMBOL] != null && typeof window[REQUIRE_EXTRA_SYMBOL] === "object" && name in window[REQUIRE_EXTRA_SYMBOL]) return window[REQUIRE_EXTRA_SYMBOL][name];
|
|
127
|
+
throw new Error(`Unknown module...: ${name}`);
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
exports.LoadExternalComponent = LoadExternalComponent;
|
|
132
|
+
exports.bootstrapUiContext = bootstrapUiContext;
|
|
133
|
+
exports.experimental_loadShare = experimental_loadShare;
|
|
134
|
+
exports.useStreamContext = useStreamContext;
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=client.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.cjs","names":["React","ReactDOM","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 { BagTemplate } from \"@langchain/langgraph-sdk\";\nimport { useStream } from \"../react/index.js\";\nimport type { UIMessage } from \"./types.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 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 as keyof typeof target.stream];\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: ReturnType<typeof useStream>;\n namespace?: string;\n message: UIMessage;\n meta?: unknown;\n fallback?: React.ReactNode | Record<string, React.ReactNode>;\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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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { DefaultToolCall } from "../types.messages.cjs";
|
|
2
|
+
import { BagTemplate as BagTemplate$1 } from "../types.template.cjs";
|
|
3
|
+
import { BaseStream } from "../ui/stream/base.cjs";
|
|
4
|
+
import { UseStream } from "../react/types.cjs";
|
|
5
|
+
import { useStream } from "../react/stream.cjs";
|
|
6
|
+
import { UIMessage } from "./types.cjs";
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import * as JsxRuntime from "react/jsx-runtime";
|
|
9
|
+
import { BagTemplate } from "@langchain/langgraph-sdk";
|
|
10
|
+
|
|
11
|
+
//#region src/react-ui/client.d.ts
|
|
12
|
+
declare const UseStreamContext: React.Context<{
|
|
13
|
+
stream: BaseStream<Record<string, unknown>, DefaultToolCall, BagTemplate$1>;
|
|
14
|
+
meta: unknown;
|
|
15
|
+
}>;
|
|
16
|
+
type GetMetaType<Bag extends BagTemplate> = Bag extends {
|
|
17
|
+
MetaType: unknown;
|
|
18
|
+
} ? Bag["MetaType"] : unknown;
|
|
19
|
+
interface UseStreamContext<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> extends UseStream<StateType, Bag> {
|
|
20
|
+
meta?: GetMetaType<Bag>;
|
|
21
|
+
}
|
|
22
|
+
declare function useStreamContext<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(): UseStreamContext<StateType, Bag>;
|
|
23
|
+
interface ComponentTarget {
|
|
24
|
+
comp: React.FunctionComponent | React.ComponentClass;
|
|
25
|
+
target: HTMLElement;
|
|
26
|
+
}
|
|
27
|
+
declare class ComponentStore {
|
|
28
|
+
private cache;
|
|
29
|
+
private boundCache;
|
|
30
|
+
private callbacks;
|
|
31
|
+
respond(shadowRootId: string, comp: React.FunctionComponent | React.ComponentClass, targetElement: HTMLElement): void;
|
|
32
|
+
getBoundStore(shadowRootId: string): {
|
|
33
|
+
subscribe: (onStoreChange: () => void) => () => void;
|
|
34
|
+
getSnapshot: () => ComponentTarget | undefined;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
declare const EXT_STORE_SYMBOL: unique symbol;
|
|
38
|
+
declare const REQUIRE_SYMBOL: unique symbol;
|
|
39
|
+
declare const REQUIRE_EXTRA_SYMBOL: unique symbol;
|
|
40
|
+
interface LoadExternalComponentProps extends Pick<React.HTMLAttributes<HTMLDivElement>, "style" | "className"> {
|
|
41
|
+
stream: ReturnType<typeof useStream>;
|
|
42
|
+
namespace?: string;
|
|
43
|
+
message: UIMessage;
|
|
44
|
+
meta?: unknown;
|
|
45
|
+
fallback?: React.ReactNode | Record<string, React.ReactNode>;
|
|
46
|
+
components?: Record<string, React.FunctionComponent | React.ComponentClass>;
|
|
47
|
+
}
|
|
48
|
+
declare function LoadExternalComponent({
|
|
49
|
+
stream,
|
|
50
|
+
namespace,
|
|
51
|
+
message,
|
|
52
|
+
meta,
|
|
53
|
+
fallback,
|
|
54
|
+
components,
|
|
55
|
+
...props
|
|
56
|
+
}: LoadExternalComponentProps): JsxRuntime.JSX.Element;
|
|
57
|
+
declare global {
|
|
58
|
+
interface Window {
|
|
59
|
+
[EXT_STORE_SYMBOL]: ComponentStore;
|
|
60
|
+
[REQUIRE_SYMBOL]: (name: string) => unknown;
|
|
61
|
+
[REQUIRE_EXTRA_SYMBOL]: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
declare function experimental_loadShare(name: string, module: unknown): void;
|
|
65
|
+
//#endregion
|
|
66
|
+
export { LoadExternalComponent, experimental_loadShare, useStreamContext };
|
|
67
|
+
//# sourceMappingURL=client.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.cts","names":[],"sources":["../../src/react-ui/client.tsx"],"mappings":";;;;;;;;;;;cAUM,gBAAA,EAAgB,KAAA,CAAA,OAAA;;;;KAKjB,WAAA,aAAwB,WAAA,IAAe,GAAA;EAAc,QAAA;AAAA,IACtD,GAAA;AAAA,UAGM,gBAAA,mBACU,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,UAClB,SAAA,CAAU,SAAA,EAAW,GAAA;EAC7B,IAAA,GAAO,WAAA,CAAY,GAAA;AAAA;AAAA,iBAGL,gBAAA,mBACI,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,gBAAA,CAAiB,SAAA,EAAW,GAAA;AAAA,UAgBvB,eAAA;EACR,IAAA,EAAM,KAAA,CAAM,iBAAA,GAAoB,KAAA,CAAM,cAAA;EACtC,MAAA,EAAQ,WAAA;AAAA;AAAA,cAGJ,cAAA;EAAA,QACI,KAAA;EAAA,QAEA,UAAA;EAAA,QAQA,SAAA;EAQR,OAAA,CACE,YAAA,UACA,IAAA,EAAM,KAAA,CAAM,iBAAA,GAAoB,KAAA,CAAM,cAAA,EACtC,aAAA,EAAe,WAAA;EAMjB,aAAA,CAAc,YAAA;;;;;cAmBV,gBAAA;AAAA,cACA,cAAA;AAAA,cACA,oBAAA;AAAA,UAEI,0BAAA,SACA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,cAAA;EAClC,MAAA,EAAQ,UAAA,QAAkB,SAAA;EAC1B,SAAA;EACA,OAAA,EAAS,SAAA;EACT,IAAA;EACA,QAAA,GAAW,KAAA,CAAM,SAAA,GAAY,MAAA,SAAe,KAAA,CAAM,SAAA;EAClD,UAAA,GAAa,MAAA,SAAe,KAAA,CAAM,iBAAA,GAAoB,KAAA,CAAM,cAAA;AAAA;AAAA,iBA8B9C,qBAAA,CAAA;EACd,MAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EAAA,GACG;AAAA,GACF,0BAAA,GAA0B,UAAA,CAAA,GAAA,CAAA,OAAA;AAAA,QA8DrB,MAAA;EAAA,UACI,MAAA;IAAA,CACP,gBAAA,GAAmB,cAAA;IAAA,CACnB,cAAA,IAAkB,IAAA;IAAA,CAClB,oBAAA,GAAuB,MAAA;EAAA;AAAA;AAAA,iBAIZ,sBAAA,CAAuB,IAAA,UAAc,MAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { DefaultToolCall } from "../types.messages.js";
|
|
2
|
+
import { BagTemplate as BagTemplate$1 } from "../types.template.js";
|
|
3
|
+
import { BaseStream } from "../ui/stream/base.js";
|
|
4
|
+
import { UseStream } from "../react/types.js";
|
|
5
|
+
import { useStream } from "../react/stream.js";
|
|
6
|
+
import { UIMessage } from "./types.js";
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import * as JsxRuntime from "react/jsx-runtime";
|
|
9
|
+
import { BagTemplate } from "@langchain/langgraph-sdk";
|
|
10
|
+
|
|
11
|
+
//#region src/react-ui/client.d.ts
|
|
12
|
+
declare const UseStreamContext: React.Context<{
|
|
13
|
+
stream: BaseStream<Record<string, unknown>, DefaultToolCall, BagTemplate$1>;
|
|
14
|
+
meta: unknown;
|
|
15
|
+
}>;
|
|
16
|
+
type GetMetaType<Bag extends BagTemplate> = Bag extends {
|
|
17
|
+
MetaType: unknown;
|
|
18
|
+
} ? Bag["MetaType"] : unknown;
|
|
19
|
+
interface UseStreamContext<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> extends UseStream<StateType, Bag> {
|
|
20
|
+
meta?: GetMetaType<Bag>;
|
|
21
|
+
}
|
|
22
|
+
declare function useStreamContext<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(): UseStreamContext<StateType, Bag>;
|
|
23
|
+
interface ComponentTarget {
|
|
24
|
+
comp: React.FunctionComponent | React.ComponentClass;
|
|
25
|
+
target: HTMLElement;
|
|
26
|
+
}
|
|
27
|
+
declare class ComponentStore {
|
|
28
|
+
private cache;
|
|
29
|
+
private boundCache;
|
|
30
|
+
private callbacks;
|
|
31
|
+
respond(shadowRootId: string, comp: React.FunctionComponent | React.ComponentClass, targetElement: HTMLElement): void;
|
|
32
|
+
getBoundStore(shadowRootId: string): {
|
|
33
|
+
subscribe: (onStoreChange: () => void) => () => void;
|
|
34
|
+
getSnapshot: () => ComponentTarget | undefined;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
declare const EXT_STORE_SYMBOL: unique symbol;
|
|
38
|
+
declare const REQUIRE_SYMBOL: unique symbol;
|
|
39
|
+
declare const REQUIRE_EXTRA_SYMBOL: unique symbol;
|
|
40
|
+
interface LoadExternalComponentProps extends Pick<React.HTMLAttributes<HTMLDivElement>, "style" | "className"> {
|
|
41
|
+
stream: ReturnType<typeof useStream>;
|
|
42
|
+
namespace?: string;
|
|
43
|
+
message: UIMessage;
|
|
44
|
+
meta?: unknown;
|
|
45
|
+
fallback?: React.ReactNode | Record<string, React.ReactNode>;
|
|
46
|
+
components?: Record<string, React.FunctionComponent | React.ComponentClass>;
|
|
47
|
+
}
|
|
48
|
+
declare function LoadExternalComponent({
|
|
49
|
+
stream,
|
|
50
|
+
namespace,
|
|
51
|
+
message,
|
|
52
|
+
meta,
|
|
53
|
+
fallback,
|
|
54
|
+
components,
|
|
55
|
+
...props
|
|
56
|
+
}: LoadExternalComponentProps): JsxRuntime.JSX.Element;
|
|
57
|
+
declare global {
|
|
58
|
+
interface Window {
|
|
59
|
+
[EXT_STORE_SYMBOL]: ComponentStore;
|
|
60
|
+
[REQUIRE_SYMBOL]: (name: string) => unknown;
|
|
61
|
+
[REQUIRE_EXTRA_SYMBOL]: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
declare function experimental_loadShare(name: string, module: unknown): void;
|
|
65
|
+
//#endregion
|
|
66
|
+
export { LoadExternalComponent, experimental_loadShare, useStreamContext };
|
|
67
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/react-ui/client.tsx"],"mappings":";;;;;;;;;;;cAUM,gBAAA,EAAgB,KAAA,CAAA,OAAA;;;;KAKjB,WAAA,aAAwB,WAAA,IAAe,GAAA;EAAc,QAAA;AAAA,IACtD,GAAA;AAAA,UAGM,gBAAA,mBACU,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,UAClB,SAAA,CAAU,SAAA,EAAW,GAAA;EAC7B,IAAA,GAAO,WAAA,CAAY,GAAA;AAAA;AAAA,iBAGL,gBAAA,mBACI,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,gBAAA,CAAiB,SAAA,EAAW,GAAA;AAAA,UAgBvB,eAAA;EACR,IAAA,EAAM,KAAA,CAAM,iBAAA,GAAoB,KAAA,CAAM,cAAA;EACtC,MAAA,EAAQ,WAAA;AAAA;AAAA,cAGJ,cAAA;EAAA,QACI,KAAA;EAAA,QAEA,UAAA;EAAA,QAQA,SAAA;EAQR,OAAA,CACE,YAAA,UACA,IAAA,EAAM,KAAA,CAAM,iBAAA,GAAoB,KAAA,CAAM,cAAA,EACtC,aAAA,EAAe,WAAA;EAMjB,aAAA,CAAc,YAAA;;;;;cAmBV,gBAAA;AAAA,cACA,cAAA;AAAA,cACA,oBAAA;AAAA,UAEI,0BAAA,SACA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,cAAA;EAClC,MAAA,EAAQ,UAAA,QAAkB,SAAA;EAC1B,SAAA;EACA,OAAA,EAAS,SAAA;EACT,IAAA;EACA,QAAA,GAAW,KAAA,CAAM,SAAA,GAAY,MAAA,SAAe,KAAA,CAAM,SAAA;EAClD,UAAA,GAAa,MAAA,SAAe,KAAA,CAAM,iBAAA,GAAoB,KAAA,CAAM,cAAA;AAAA;AAAA,iBA8B9C,qBAAA,CAAA;EACd,MAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EAAA,GACG;AAAA,GACF,0BAAA,GAA0B,UAAA,CAAA,GAAA,CAAA,OAAA;AAAA,QA8DrB,MAAA;EAAA,UACI,MAAA;IAAA,CACP,gBAAA,GAAmB,cAAA;IAAA,CACnB,cAAA,IAAkB,IAAA;IAAA,CAClB,oBAAA,GAAuB,MAAA;EAAA;AAAA;AAAA,iBAIZ,sBAAA,CAAuB,IAAA,UAAc,MAAA"}
|