@langchain/langgraph-sdk 1.6.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/error.d.cts.map +1 -1
- package/dist/auth/error.d.ts.map +1 -1
- package/dist/auth/index.d.cts.map +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/types.d.cts.map +1 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/client.d.cts.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/logging/index.d.cts.map +1 -1
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/react/index.d.cts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/stream.custom.d.cts.map +1 -1
- package/dist/react/stream.custom.d.ts.map +1 -1
- package/dist/react/stream.d.cts +0 -1
- package/dist/react/stream.d.cts.map +1 -1
- package/dist/react/stream.d.ts +0 -1
- package/dist/react/stream.d.ts.map +1 -1
- package/dist/react/types.d.cts +1 -1
- package/dist/react/types.d.cts.map +1 -1
- package/dist/react/types.d.ts +1 -1
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react-ui/client.d.cts.map +1 -1
- package/dist/react-ui/client.d.ts.map +1 -1
- package/dist/react-ui/server/server.d.cts +1 -2
- package/dist/react-ui/server/server.d.cts.map +1 -1
- package/dist/react-ui/server/server.d.ts +1 -2
- package/dist/react-ui/server/server.d.ts.map +1 -1
- package/dist/react-ui/types.d.cts.map +1 -1
- package/dist/react-ui/types.d.ts.map +1 -1
- package/dist/schema.d.cts +4 -2
- package/dist/schema.d.cts.map +1 -1
- package/dist/schema.d.ts +4 -2
- package/dist/schema.d.ts.map +1 -1
- package/dist/singletons/fetch.d.cts +0 -3
- package/dist/singletons/fetch.d.cts.map +1 -1
- package/dist/singletons/fetch.d.ts +0 -3
- package/dist/singletons/fetch.d.ts.map +1 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.messages.d.cts.map +1 -1
- package/dist/types.messages.d.ts.map +1 -1
- package/dist/types.stream.d.cts +0 -1
- package/dist/types.stream.d.cts.map +1 -1
- package/dist/types.stream.d.ts +0 -1
- package/dist/types.stream.d.ts.map +1 -1
- package/dist/types.template.d.cts.map +1 -1
- package/dist/types.template.d.ts.map +1 -1
- package/dist/ui/branching.d.cts.map +1 -1
- package/dist/ui/branching.d.ts.map +1 -1
- package/dist/ui/manager.cjs.map +1 -1
- package/dist/ui/manager.js.map +1 -1
- package/dist/ui/stream/agent.d.cts +0 -1
- package/dist/ui/stream/agent.d.cts.map +1 -1
- package/dist/ui/stream/agent.d.ts +0 -1
- package/dist/ui/stream/agent.d.ts.map +1 -1
- package/dist/ui/stream/base.d.cts +0 -1
- package/dist/ui/stream/base.d.cts.map +1 -1
- package/dist/ui/stream/base.d.ts +0 -1
- package/dist/ui/stream/base.d.ts.map +1 -1
- package/dist/ui/stream/deep-agent.d.cts +7 -8
- package/dist/ui/stream/deep-agent.d.cts.map +1 -1
- package/dist/ui/stream/deep-agent.d.ts +7 -8
- package/dist/ui/stream/deep-agent.d.ts.map +1 -1
- package/dist/ui/stream/index.d.cts +0 -1
- package/dist/ui/stream/index.d.cts.map +1 -1
- package/dist/ui/stream/index.d.ts +0 -1
- package/dist/ui/stream/index.d.ts.map +1 -1
- package/dist/ui/subagents.cjs.map +1 -1
- package/dist/ui/subagents.d.cts +6 -7
- package/dist/ui/subagents.d.cts.map +1 -1
- package/dist/ui/subagents.d.ts +6 -7
- package/dist/ui/subagents.d.ts.map +1 -1
- package/dist/ui/subagents.js.map +1 -1
- package/dist/ui/types.d.cts +50 -48
- package/dist/ui/types.d.cts.map +1 -1
- package/dist/ui/types.d.ts +50 -48
- package/dist/ui/types.d.ts.map +1 -1
- package/dist/utils/async_caller.d.cts.map +1 -1
- package/dist/utils/async_caller.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.messages.d.ts","names":["ImageDetail","MessageContentImageUrl","MessageContentText","MessageContentComplex","MessageContent","MessageAdditionalKwargs","Record","BaseMessage","HumanMessage","DefaultToolCall","InvalidToolCall","UsageMetadata","AIMessage","ToolCall","ToolMessage","SystemMessage","FunctionMessage","RemoveMessage","Message","InferSchemaInput","S","Args","InferToolInput","T","ToolCallFromTool","N","ToolCallsFromTools","First","Rest","ToolCallState","ToolCallWithResult"],"sources":["../src/types.messages.d.ts"],"sourcesContent":["type ImageDetail = \"auto\" | \"low\" | \"high\";\ntype MessageContentImageUrl = {\n type: \"image_url\";\n image_url: string | {\n url: string;\n detail?: ImageDetail | undefined;\n };\n};\ntype MessageContentText = {\n type: \"text\";\n text: string;\n};\ntype MessageContentComplex = MessageContentText | MessageContentImageUrl;\ntype MessageContent = string | MessageContentComplex[];\n/**\n * Model-specific additional kwargs, which is passed back to the underlying LLM.\n */\ntype MessageAdditionalKwargs = Record<string, unknown>;\ntype BaseMessage = {\n additional_kwargs?: MessageAdditionalKwargs | undefined;\n content: MessageContent;\n id?: string | undefined;\n name?: string | undefined;\n response_metadata?: Record<string, unknown> | undefined;\n};\nexport type HumanMessage = BaseMessage & {\n type: \"human\";\n example?: boolean | undefined;\n};\n/**\n * Default tool call type when no specific tool definitions are provided.\n */\nexport type DefaultToolCall = {\n name: string;\n args: {\n [x: string]: any;\n };\n id?: string | undefined;\n type?: \"tool_call\" | undefined;\n};\n/**\n * Invalid tool call type.\n */\nexport type InvalidToolCall = {\n name?: string | undefined;\n args?: string | undefined;\n id?: string | undefined;\n error?: string | undefined;\n type?: \"invalid_tool_call\" | undefined;\n};\n/**\n * Usage metadata for AI messages.\n */\nexport type UsageMetadata = {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_token_details?: {\n audio?: number | undefined;\n cache_read?: number | undefined;\n cache_creation?: number | undefined;\n } | undefined;\n output_token_details?: {\n audio?: number | undefined;\n reasoning?: number | undefined;\n } | undefined;\n};\n/**\n * AI message type that can be parameterized with custom tool call types.\n *\n * @template ToolCall The type of tool calls, defaults to DefaultToolCall.\n * Provide a discriminated union for type-safe tool call handling.\n *\n * @example\n * ```ts\n * // Define typed tool calls as a discriminated union\n * type MyToolCalls =\n * | { name: \"get_weather\"; args: { location: string }; id?: string }\n * | { name: \"search\"; args: { query: string; limit?: number }; id?: string };\n *\n * // Use with AIMessage\n * const message: AIMessage<MyToolCalls> = ...;\n *\n * // Now tool.name === \"get_weather\" narrows tool.args type\n * if (message.tool_calls) {\n * for (const tool of message.tool_calls) {\n * if (tool.name === \"get_weather\") {\n * // tool.args is now { location: string }\n * console.log(tool.args.location);\n * }\n * }\n * }\n * ```\n */\nexport type AIMessage<ToolCall = DefaultToolCall> = BaseMessage & {\n type: \"ai\";\n example?: boolean | undefined;\n tool_calls?: ToolCall[] | undefined;\n invalid_tool_calls?: InvalidToolCall[] | undefined;\n usage_metadata?: UsageMetadata | undefined;\n};\nexport type ToolMessage = BaseMessage & {\n type: \"tool\";\n status?: \"error\" | \"success\" | undefined;\n tool_call_id: string;\n /**\n * Artifact of the Tool execution which is not meant to be sent to the model.\n *\n * Should only be specified if it is different from the message content, e.g. if only\n * a subset of the full tool output is being passed as message content but the full\n * output is needed in other parts of the code.\n */\n artifact?: any;\n};\nexport type SystemMessage = BaseMessage & {\n type: \"system\";\n};\nexport type FunctionMessage = BaseMessage & {\n type: \"function\";\n};\nexport type RemoveMessage = BaseMessage & {\n type: \"remove\";\n};\n/**\n * Union of all message types.\n *\n * @template ToolCall The type of tool calls for AIMessage, defaults to DefaultToolCall.\n */\nexport type Message<ToolCall = DefaultToolCall> = HumanMessage | AIMessage<ToolCall> | ToolMessage | SystemMessage | FunctionMessage | RemoveMessage;\n/**\n * Helper type to infer schema input type, supporting both Zod v3 and v4.\n * - Zod v4 uses `_zod.input` property\n * - Zod v3 uses `_input` property\n *\n * Note: Zod v4 is checked first as it's the more specific structure.\n */\ntype InferSchemaInput<S> = S extends {\n _zod: {\n input: infer Args;\n };\n} ? Args : S extends {\n _input: infer Args;\n} ? Args : never;\n/**\n * Helper type to extract the input type from a DynamicStructuredTool's _call method.\n * This is more reliable than trying to infer from the schema directly because\n * DynamicStructuredTool has the input type baked into its _call signature.\n */\ntype InferToolInput<T> = T extends {\n _call: (arg: infer Args, ...rest: any[]) => any;\n} ? Args : T extends {\n schema: infer S;\n} ? InferSchemaInput<S> : never;\n/**\n * Infer a tool call type from a single tool.\n * Works with tools created via `tool()` from `@langchain/core/tools`.\n *\n * For DynamicStructuredTool, this extracts the input type from the _call method,\n * which is the most reliable source as it's the pre-computed input type.\n *\n * @template T The tool type (e.g., DynamicStructuredTool)\n *\n * @example\n * ```ts\n * import { tool } from \"@langchain/core/tools\";\n * import { z } from \"zod\";\n *\n * const getWeather = tool(\n * async ({ location }) => `Weather in ${location}`,\n * { name: \"get_weather\", schema: z.object({ location: z.string() }) }\n * );\n *\n * // Infer: { name: \"get_weather\"; args: { location: string }; id?: string; type?: \"tool_call\" }\n * type WeatherToolCall = ToolCallFromTool<typeof getWeather>;\n * ```\n */\nexport type ToolCallFromTool<T> = T extends {\n name: infer N;\n} ? InferToolInput<T> extends infer Args ? Args extends never ? never : Args extends Record<string, any> ? {\n name: N;\n args: Args;\n id?: string;\n type?: \"tool_call\";\n} : never : never : never;\n/**\n * Infer a union of tool call types from an array of tools.\n * Works with tools created via `tool()` from `@langchain/core/tools`.\n *\n * @template T A tuple/array of tools\n *\n * @example\n * ```ts\n * import { tool } from \"@langchain/core/tools\";\n * import { z } from \"zod\";\n *\n * const getWeather = tool(\n * async ({ location }) => `Weather in ${location}`,\n * { name: \"get_weather\", schema: z.object({ location: z.string() }) }\n * );\n *\n * const search = tool(\n * async ({ query }) => `Results for ${query}`,\n * { name: \"search\", schema: z.object({ query: z.string() }) }\n * );\n *\n * const tools = [getWeather, search] as const;\n *\n * // Infer union:\n * // | { name: \"get_weather\"; args: { location: string }; id?: string; type?: \"tool_call\" }\n * // | { name: \"search\"; args: { query: string }; id?: string; type?: \"tool_call\" }\n * type MyToolCalls = ToolCallsFromTools<typeof tools>;\n * ```\n */\nexport type ToolCallsFromTools<T extends readonly unknown[]> = T extends readonly [infer First, ...infer Rest] ? ToolCallFromTool<First> | ToolCallsFromTools<Rest> : never;\n/**\n * The lifecycle state of a tool call.\n *\n * - `pending`: Tool call received, awaiting result\n * - `completed`: Tool execution finished successfully\n * - `error`: Tool execution failed (result.status === \"error\")\n */\nexport type ToolCallState = \"pending\" | \"completed\" | \"error\";\n/**\n * Represents a tool call paired with its result.\n * Useful for rendering tool invocations and their outputs together.\n *\n * @template ToolCall The type of the tool call.\n */\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> = {\n /**\n * Unique identifier for this tool call.\n * Uses the tool call's id if available, otherwise generates one from aiMessage.id and index.\n */\n id: string;\n /**\n * The tool call from the AI message.\n */\n call: ToolCall;\n /**\n * The result message from tool execution.\n * `undefined` if the tool is still being executed or no result was received.\n */\n result: ToolMessage | undefined;\n /**\n * The AI message that initiated this tool call.\n */\n aiMessage: AIMessage<ToolCall>;\n /**\n * Index of this tool call within the AI message's tool_calls array.\n */\n index: number;\n /**\n * The current lifecycle state of the tool call.\n *\n * - `pending`: No result yet\n * - `completed`: Has result with success status\n * - `error`: Has result with error status\n */\n state: ToolCallState;\n};\nexport {};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.messages.d.ts","names":[],"sources":["../src/types.messages.ts"],"mappings":";KAAK,WAAA;AAAA,KACA,sBAAA;EACH,IAAA;EACA,SAAA;IAAsB,GAAA;IAAa,MAAA,GAAS,WAAA;EAAA;AAAA;AAAA,KAGzC,kBAAA;EAAuB,IAAA;EAAc,IAAA;AAAA;AAAA,KACrC,qBAAA,GAAwB,kBAAA,GAAqB,sBAAA;AAAA,KAC7C,cAAA,YAA0B,qBAAA;;;;KAK1B,uBAAA,GAA0B,MAAA;AAAA,KAE1B,WAAA;EACH,iBAAA,GAAoB,uBAAA;EACpB,OAAA,EAAS,cAAA;EACT,EAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;AAAA;AAAA,KAGV,YAAA,GAAe,WAAA;EACzB,IAAA;EACA,OAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EAEA,IAAA;IAAA,CAAS,CAAA;EAAA;EACT,EAAA;EACA,IAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;KAMU,aAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;IAEM,KAAA;IACA,UAAA;IACA,cAAA;EAAA;EAGN,oBAAA;IACM,KAAA;IAA4B,SAAA;EAAA;AAAA;;;;;;;;;AAvBpC;;;;;;;;;;;AAWA;;;;;;;;KA2CY,SAAA,YAAqB,eAAA,IAAmB,WAAA;EAClD,IAAA;EACA,OAAA;EACA,UAAA,GAAa,QAAA;EACb,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,aAAA;AAAA;AAAA,KAGP,WAAA,GAAc,WAAA;EACxB,IAAA;EACA,MAAA;EACA,YAAA;EAX+B;;;;;;;EAoB/B,QAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,WAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;;;AAxBF;;;KAgCY,OAAA,YAAmB,eAAA,IAC3B,YAAA,GACA,SAAA,CAAU,QAAA,IACV,WAAA,GACA,aAAA,GACA,eAAA,GACA,aAAA;;;;;;;;KAUC,gBAAA,MAAsB,CAAA;EAAY,IAAA;IAAQ,KAAA;EAAA;AAAA,IAC3C,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,IAAA;;;;AA5BJ;;KAoCK,cAAA,MAAoB,CAAA;EAEvB,KAAA,GAAQ,GAAA,iBAAoB,IAAA;AAAA,IAE1B,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,gBAAA,CAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;AA3BH;KAsDN,gBAAA,MAAsB,CAAA;EAAY,IAAA;AAAA,IAC1C,cAAA,CAAe,CAAA,uBACb,IAAA,yBAGA,IAAA,SAAa,MAAA;EACT,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,IAAA;EAAM,EAAA;EAAa,IAAA;AAAA;;;;;;;;AA/CpC;;;;;;;;;;;;;;;;;;;;;;KAiFI,kBAAA,iCACV,CAAA,iDACI,gBAAA,CAAiB,KAAA,IAAS,kBAAA,CAAmB,IAAA;AA1CnD;;;;;;;AAAA,KAoDY,aAAA;;;;;;;KAQA,kBAAA,YAA8B,eAAA;EA3DtC;;;;EAgEF,EAAA;EA5DiB;;;EAiEjB,IAAA,EAAM,QAAA;EAhEiB;;;;EAsEvB,MAAA,EAAQ,WAAA;EApCE;;;EAyCV,SAAA,EAAW,SAAA,CAAU,QAAA;EAvCA;;;EA4CrB,KAAA;EA5CgD;;;;;;;EAqDhD,KAAA,EAAO,aAAA;AAAA"}
|
package/dist/types.stream.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.stream.d.cts","names":["Message","Interrupt","Metadata","Config","ThreadTask","StreamMode","ThreadStreamMode","MessageTupleMetadata","AsSubgraph","TEvent","ValuesStreamEvent","StateType","SubgraphValuesStreamEvent","MessagesTupleStreamEvent","SubgraphMessagesTupleStreamEvent","MetadataStreamEvent","ErrorStreamEvent","SubgraphErrorStreamEvent","UpdatesStreamEvent","UpdateType","SubgraphUpdatesStreamEvent","CustomStreamEvent","T","SubgraphCustomStreamEvent","MessagesMetadataStreamEvent","MessagesCompleteStreamEvent","MessagesPartialStreamEvent","TasksStreamCreateEvent","TasksStreamResultEvent","TasksStreamErrorEvent","TasksStreamEvent","SubgraphTasksStreamEvent","CheckpointsStreamEvent","SubgraphCheckpointsStreamEvent","MessagesStreamEvent","SubgraphMessagesStreamEvent","DebugStreamEvent","SubgraphDebugStreamEvent","EventsStreamEvent","Record","SubgraphEventsStreamEvent","FeedbackStreamEvent","GetStreamModeMap","TStateType","TUpdateType","TCustomType","TStreamMode","GetSubgraphsStreamModeMap","TypedAsyncGenerator","TSubgraphs","AsyncGenerator"],"sources":["../src/types.stream.d.ts"],"sourcesContent":["import type { Message } from \"./types.messages.js\";\nimport type { Interrupt, Metadata, Config, ThreadTask } from \"./schema.js\";\n/**\nimport type { SubgraphCheckpointsStreamEvent } from \"./types.stream.subgraph.js\";\n * Stream modes\n * - \"values\": Stream only the state values.\n * - \"messages\": Stream complete messages.\n * - \"messages-tuple\": Stream (message chunk, metadata) tuples.\n * - \"updates\": Stream updates to the state.\n * - \"events\": Stream events occurring during execution.\n * - \"debug\": Stream detailed debug information.\n * - \"custom\": Stream custom events.\n */\nexport type StreamMode = \"values\" | \"messages\" | \"updates\" | \"events\" | \"debug\" | \"tasks\" | \"checkpoints\" | \"custom\" | \"messages-tuple\";\nexport type ThreadStreamMode = \"run_modes\" | \"lifecycle\" | \"state_update\";\ntype MessageTupleMetadata = {\n tags: string[];\n [key: string]: unknown;\n};\ntype AsSubgraph<TEvent extends {\n id?: string;\n event: string;\n data: unknown;\n}> = {\n id?: TEvent[\"id\"];\n event: TEvent[\"event\"] | `${TEvent[\"event\"]}|${string}`;\n data: TEvent[\"data\"];\n};\n/**\n * Stream event with values after completion of each step.\n */\nexport type ValuesStreamEvent<StateType> = {\n id?: string;\n event: \"values\";\n data: StateType;\n};\n/** @internal */\nexport type SubgraphValuesStreamEvent<StateType> = AsSubgraph<ValuesStreamEvent<StateType>>;\n/**\n * Stream event with message chunks coming from LLM invocations inside nodes.\n */\nexport type MessagesTupleStreamEvent = {\n event: \"messages\";\n data: [message: Message, config: MessageTupleMetadata];\n};\n/** @internal */\nexport type SubgraphMessagesTupleStreamEvent = AsSubgraph<MessagesTupleStreamEvent>;\n/**\n * Metadata stream event with information about the run and thread\n */\nexport type MetadataStreamEvent = {\n id?: string;\n event: \"metadata\";\n data: {\n run_id: string;\n thread_id: string;\n };\n};\n/**\n * Stream event with error information.\n */\nexport type ErrorStreamEvent = {\n id?: string;\n event: \"error\";\n data: {\n error: string;\n message: string;\n };\n};\n/** @internal */\nexport type SubgraphErrorStreamEvent = AsSubgraph<ErrorStreamEvent>;\n/**\n * Stream event with updates to the state after each step.\n * The streamed outputs include the name of the node that\n * produced the update as well as the update.\n */\nexport type UpdatesStreamEvent<UpdateType> = {\n id?: string;\n event: \"updates\";\n data: {\n [node: string]: UpdateType;\n };\n};\n/** @internal */\nexport type SubgraphUpdatesStreamEvent<UpdateType> = AsSubgraph<UpdatesStreamEvent<UpdateType>>;\n/**\n * Streaming custom data from inside the nodes.\n */\nexport type CustomStreamEvent<T> = {\n event: \"custom\";\n data: T;\n};\n/** @internal */\nexport type SubgraphCustomStreamEvent<T> = AsSubgraph<CustomStreamEvent<T>>;\ntype MessagesMetadataStreamEvent = {\n id?: string;\n event: \"messages/metadata\";\n data: {\n [messageId: string]: {\n metadata: unknown;\n };\n };\n};\ntype MessagesCompleteStreamEvent = {\n id?: string;\n event: \"messages/complete\";\n data: Message[];\n};\ntype MessagesPartialStreamEvent = {\n id?: string;\n event: \"messages/partial\";\n data: Message[];\n};\ntype TasksStreamCreateEvent<StateType> = {\n id?: string;\n event: \"tasks\";\n data: {\n id: string;\n name: string;\n interrupts: Interrupt[];\n input: StateType;\n triggers: string[];\n };\n};\ntype TasksStreamResultEvent<UpdateType> = {\n id?: string;\n event: \"tasks\";\n data: {\n id: string;\n name: string;\n interrupts: Interrupt[];\n result: [string, UpdateType][];\n };\n};\ntype TasksStreamErrorEvent = {\n id?: string;\n event: \"tasks\";\n data: {\n id: string;\n name: string;\n interrupts: Interrupt[];\n error: string;\n };\n};\nexport type TasksStreamEvent<StateType, UpdateType> = TasksStreamCreateEvent<StateType> | TasksStreamResultEvent<UpdateType> | TasksStreamErrorEvent;\ntype SubgraphTasksStreamEvent<StateType, UpdateType> = AsSubgraph<TasksStreamCreateEvent<StateType>> | AsSubgraph<TasksStreamResultEvent<UpdateType>> | AsSubgraph<TasksStreamErrorEvent>;\nexport type CheckpointsStreamEvent<StateType> = {\n id?: string;\n event: \"checkpoints\";\n data: {\n values: StateType;\n next: string[];\n config: Config;\n metadata: Metadata;\n tasks: ThreadTask[];\n };\n};\ntype SubgraphCheckpointsStreamEvent<StateType> = AsSubgraph<CheckpointsStreamEvent<StateType>>;\n/**\n * Message stream event specific to LangGraph Server.\n * @deprecated Use `streamMode: \"messages-tuple\"` instead.\n */\nexport type MessagesStreamEvent = MessagesMetadataStreamEvent | MessagesCompleteStreamEvent | MessagesPartialStreamEvent;\n/** @internal */\nexport type SubgraphMessagesStreamEvent = AsSubgraph<MessagesMetadataStreamEvent> | AsSubgraph<MessagesCompleteStreamEvent> | AsSubgraph<MessagesPartialStreamEvent>;\n/**\n * Stream event with detailed debug information.\n */\nexport type DebugStreamEvent = {\n id?: string;\n event: \"debug\";\n data: unknown;\n};\n/** @internal */\nexport type SubgraphDebugStreamEvent = AsSubgraph<DebugStreamEvent>;\n/**\n * Stream event with events occurring during execution.\n */\nexport type EventsStreamEvent = {\n id?: string;\n event: \"events\";\n data: {\n event: `on_${\"chat_model\" | \"llm\" | \"chain\" | \"tool\" | \"retriever\" | \"prompt\"}_${\"start\" | \"stream\" | \"end\"}` | (string & {});\n name: string;\n tags: string[];\n run_id: string;\n metadata: Record<string, unknown>;\n parent_ids: string[];\n data: unknown;\n };\n};\n/** @internal */\nexport type SubgraphEventsStreamEvent = AsSubgraph<EventsStreamEvent>;\n/**\n * Stream event with a feedback key to signed URL map. Set `feedbackKeys` in\n * the `RunsStreamPayload` to receive this event.\n */\nexport type FeedbackStreamEvent = {\n id?: string;\n event: \"feedback\";\n data: {\n [feedbackKey: string]: string;\n };\n};\ntype GetStreamModeMap<TStreamMode extends StreamMode | StreamMode[], TStateType = unknown, TUpdateType = TStateType, TCustomType = unknown> = {\n values: ValuesStreamEvent<TStateType>;\n updates: UpdatesStreamEvent<TUpdateType>;\n custom: CustomStreamEvent<TCustomType>;\n debug: DebugStreamEvent;\n messages: MessagesStreamEvent;\n \"messages-tuple\": MessagesTupleStreamEvent;\n tasks: TasksStreamEvent<TStateType, TUpdateType>;\n checkpoints: CheckpointsStreamEvent<TStateType>;\n events: EventsStreamEvent;\n}[TStreamMode extends StreamMode[] ? TStreamMode[number] : TStreamMode] | ErrorStreamEvent | MetadataStreamEvent | FeedbackStreamEvent;\ntype GetSubgraphsStreamModeMap<TStreamMode extends StreamMode | StreamMode[], TStateType = unknown, TUpdateType = TStateType, TCustomType = unknown> = {\n values: SubgraphValuesStreamEvent<TStateType>;\n updates: SubgraphUpdatesStreamEvent<TUpdateType>;\n custom: SubgraphCustomStreamEvent<TCustomType>;\n debug: SubgraphDebugStreamEvent;\n messages: SubgraphMessagesStreamEvent;\n \"messages-tuple\": SubgraphMessagesTupleStreamEvent;\n events: SubgraphEventsStreamEvent;\n tasks: SubgraphTasksStreamEvent<TStateType, TUpdateType>;\n checkpoints: SubgraphCheckpointsStreamEvent<TStateType>;\n}[TStreamMode extends StreamMode[] ? TStreamMode[number] : TStreamMode] | SubgraphErrorStreamEvent | MetadataStreamEvent | FeedbackStreamEvent;\nexport type TypedAsyncGenerator<TStreamMode extends StreamMode | StreamMode[] = [], TSubgraphs extends boolean = false, TStateType = unknown, TUpdateType = TStateType, TCustomType = unknown> = AsyncGenerator<TSubgraphs extends true ? GetSubgraphsStreamModeMap<TStreamMode, TStateType, TUpdateType, TCustomType> : GetStreamModeMap<TStreamMode, TStateType, TUpdateType, TCustomType>>;\nexport {};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.stream.d.cts","names":[],"sources":["../src/types.stream.ts"],"mappings":"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"}
|
package/dist/types.stream.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.stream.d.ts","names":["Message","Interrupt","Metadata","Config","ThreadTask","StreamMode","ThreadStreamMode","MessageTupleMetadata","AsSubgraph","TEvent","ValuesStreamEvent","StateType","SubgraphValuesStreamEvent","MessagesTupleStreamEvent","SubgraphMessagesTupleStreamEvent","MetadataStreamEvent","ErrorStreamEvent","SubgraphErrorStreamEvent","UpdatesStreamEvent","UpdateType","SubgraphUpdatesStreamEvent","CustomStreamEvent","T","SubgraphCustomStreamEvent","MessagesMetadataStreamEvent","MessagesCompleteStreamEvent","MessagesPartialStreamEvent","TasksStreamCreateEvent","TasksStreamResultEvent","TasksStreamErrorEvent","TasksStreamEvent","SubgraphTasksStreamEvent","CheckpointsStreamEvent","SubgraphCheckpointsStreamEvent","MessagesStreamEvent","SubgraphMessagesStreamEvent","DebugStreamEvent","SubgraphDebugStreamEvent","EventsStreamEvent","Record","SubgraphEventsStreamEvent","FeedbackStreamEvent","GetStreamModeMap","TStateType","TUpdateType","TCustomType","TStreamMode","GetSubgraphsStreamModeMap","TypedAsyncGenerator","TSubgraphs","AsyncGenerator"],"sources":["../src/types.stream.d.ts"],"sourcesContent":["import type { Message } from \"./types.messages.js\";\nimport type { Interrupt, Metadata, Config, ThreadTask } from \"./schema.js\";\n/**\nimport type { SubgraphCheckpointsStreamEvent } from \"./types.stream.subgraph.js\";\n * Stream modes\n * - \"values\": Stream only the state values.\n * - \"messages\": Stream complete messages.\n * - \"messages-tuple\": Stream (message chunk, metadata) tuples.\n * - \"updates\": Stream updates to the state.\n * - \"events\": Stream events occurring during execution.\n * - \"debug\": Stream detailed debug information.\n * - \"custom\": Stream custom events.\n */\nexport type StreamMode = \"values\" | \"messages\" | \"updates\" | \"events\" | \"debug\" | \"tasks\" | \"checkpoints\" | \"custom\" | \"messages-tuple\";\nexport type ThreadStreamMode = \"run_modes\" | \"lifecycle\" | \"state_update\";\ntype MessageTupleMetadata = {\n tags: string[];\n [key: string]: unknown;\n};\ntype AsSubgraph<TEvent extends {\n id?: string;\n event: string;\n data: unknown;\n}> = {\n id?: TEvent[\"id\"];\n event: TEvent[\"event\"] | `${TEvent[\"event\"]}|${string}`;\n data: TEvent[\"data\"];\n};\n/**\n * Stream event with values after completion of each step.\n */\nexport type ValuesStreamEvent<StateType> = {\n id?: string;\n event: \"values\";\n data: StateType;\n};\n/** @internal */\nexport type SubgraphValuesStreamEvent<StateType> = AsSubgraph<ValuesStreamEvent<StateType>>;\n/**\n * Stream event with message chunks coming from LLM invocations inside nodes.\n */\nexport type MessagesTupleStreamEvent = {\n event: \"messages\";\n data: [message: Message, config: MessageTupleMetadata];\n};\n/** @internal */\nexport type SubgraphMessagesTupleStreamEvent = AsSubgraph<MessagesTupleStreamEvent>;\n/**\n * Metadata stream event with information about the run and thread\n */\nexport type MetadataStreamEvent = {\n id?: string;\n event: \"metadata\";\n data: {\n run_id: string;\n thread_id: string;\n };\n};\n/**\n * Stream event with error information.\n */\nexport type ErrorStreamEvent = {\n id?: string;\n event: \"error\";\n data: {\n error: string;\n message: string;\n };\n};\n/** @internal */\nexport type SubgraphErrorStreamEvent = AsSubgraph<ErrorStreamEvent>;\n/**\n * Stream event with updates to the state after each step.\n * The streamed outputs include the name of the node that\n * produced the update as well as the update.\n */\nexport type UpdatesStreamEvent<UpdateType> = {\n id?: string;\n event: \"updates\";\n data: {\n [node: string]: UpdateType;\n };\n};\n/** @internal */\nexport type SubgraphUpdatesStreamEvent<UpdateType> = AsSubgraph<UpdatesStreamEvent<UpdateType>>;\n/**\n * Streaming custom data from inside the nodes.\n */\nexport type CustomStreamEvent<T> = {\n event: \"custom\";\n data: T;\n};\n/** @internal */\nexport type SubgraphCustomStreamEvent<T> = AsSubgraph<CustomStreamEvent<T>>;\ntype MessagesMetadataStreamEvent = {\n id?: string;\n event: \"messages/metadata\";\n data: {\n [messageId: string]: {\n metadata: unknown;\n };\n };\n};\ntype MessagesCompleteStreamEvent = {\n id?: string;\n event: \"messages/complete\";\n data: Message[];\n};\ntype MessagesPartialStreamEvent = {\n id?: string;\n event: \"messages/partial\";\n data: Message[];\n};\ntype TasksStreamCreateEvent<StateType> = {\n id?: string;\n event: \"tasks\";\n data: {\n id: string;\n name: string;\n interrupts: Interrupt[];\n input: StateType;\n triggers: string[];\n };\n};\ntype TasksStreamResultEvent<UpdateType> = {\n id?: string;\n event: \"tasks\";\n data: {\n id: string;\n name: string;\n interrupts: Interrupt[];\n result: [string, UpdateType][];\n };\n};\ntype TasksStreamErrorEvent = {\n id?: string;\n event: \"tasks\";\n data: {\n id: string;\n name: string;\n interrupts: Interrupt[];\n error: string;\n };\n};\nexport type TasksStreamEvent<StateType, UpdateType> = TasksStreamCreateEvent<StateType> | TasksStreamResultEvent<UpdateType> | TasksStreamErrorEvent;\ntype SubgraphTasksStreamEvent<StateType, UpdateType> = AsSubgraph<TasksStreamCreateEvent<StateType>> | AsSubgraph<TasksStreamResultEvent<UpdateType>> | AsSubgraph<TasksStreamErrorEvent>;\nexport type CheckpointsStreamEvent<StateType> = {\n id?: string;\n event: \"checkpoints\";\n data: {\n values: StateType;\n next: string[];\n config: Config;\n metadata: Metadata;\n tasks: ThreadTask[];\n };\n};\ntype SubgraphCheckpointsStreamEvent<StateType> = AsSubgraph<CheckpointsStreamEvent<StateType>>;\n/**\n * Message stream event specific to LangGraph Server.\n * @deprecated Use `streamMode: \"messages-tuple\"` instead.\n */\nexport type MessagesStreamEvent = MessagesMetadataStreamEvent | MessagesCompleteStreamEvent | MessagesPartialStreamEvent;\n/** @internal */\nexport type SubgraphMessagesStreamEvent = AsSubgraph<MessagesMetadataStreamEvent> | AsSubgraph<MessagesCompleteStreamEvent> | AsSubgraph<MessagesPartialStreamEvent>;\n/**\n * Stream event with detailed debug information.\n */\nexport type DebugStreamEvent = {\n id?: string;\n event: \"debug\";\n data: unknown;\n};\n/** @internal */\nexport type SubgraphDebugStreamEvent = AsSubgraph<DebugStreamEvent>;\n/**\n * Stream event with events occurring during execution.\n */\nexport type EventsStreamEvent = {\n id?: string;\n event: \"events\";\n data: {\n event: `on_${\"chat_model\" | \"llm\" | \"chain\" | \"tool\" | \"retriever\" | \"prompt\"}_${\"start\" | \"stream\" | \"end\"}` | (string & {});\n name: string;\n tags: string[];\n run_id: string;\n metadata: Record<string, unknown>;\n parent_ids: string[];\n data: unknown;\n };\n};\n/** @internal */\nexport type SubgraphEventsStreamEvent = AsSubgraph<EventsStreamEvent>;\n/**\n * Stream event with a feedback key to signed URL map. Set `feedbackKeys` in\n * the `RunsStreamPayload` to receive this event.\n */\nexport type FeedbackStreamEvent = {\n id?: string;\n event: \"feedback\";\n data: {\n [feedbackKey: string]: string;\n };\n};\ntype GetStreamModeMap<TStreamMode extends StreamMode | StreamMode[], TStateType = unknown, TUpdateType = TStateType, TCustomType = unknown> = {\n values: ValuesStreamEvent<TStateType>;\n updates: UpdatesStreamEvent<TUpdateType>;\n custom: CustomStreamEvent<TCustomType>;\n debug: DebugStreamEvent;\n messages: MessagesStreamEvent;\n \"messages-tuple\": MessagesTupleStreamEvent;\n tasks: TasksStreamEvent<TStateType, TUpdateType>;\n checkpoints: CheckpointsStreamEvent<TStateType>;\n events: EventsStreamEvent;\n}[TStreamMode extends StreamMode[] ? TStreamMode[number] : TStreamMode] | ErrorStreamEvent | MetadataStreamEvent | FeedbackStreamEvent;\ntype GetSubgraphsStreamModeMap<TStreamMode extends StreamMode | StreamMode[], TStateType = unknown, TUpdateType = TStateType, TCustomType = unknown> = {\n values: SubgraphValuesStreamEvent<TStateType>;\n updates: SubgraphUpdatesStreamEvent<TUpdateType>;\n custom: SubgraphCustomStreamEvent<TCustomType>;\n debug: SubgraphDebugStreamEvent;\n messages: SubgraphMessagesStreamEvent;\n \"messages-tuple\": SubgraphMessagesTupleStreamEvent;\n events: SubgraphEventsStreamEvent;\n tasks: SubgraphTasksStreamEvent<TStateType, TUpdateType>;\n checkpoints: SubgraphCheckpointsStreamEvent<TStateType>;\n}[TStreamMode extends StreamMode[] ? TStreamMode[number] : TStreamMode] | SubgraphErrorStreamEvent | MetadataStreamEvent | FeedbackStreamEvent;\nexport type TypedAsyncGenerator<TStreamMode extends StreamMode | StreamMode[] = [], TSubgraphs extends boolean = false, TStateType = unknown, TUpdateType = TStateType, TCustomType = unknown> = AsyncGenerator<TSubgraphs extends true ? GetSubgraphsStreamModeMap<TStreamMode, TStateType, TUpdateType, TCustomType> : GetStreamModeMap<TStreamMode, TStateType, TUpdateType, TCustomType>>;\nexport {};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.stream.d.ts","names":[],"sources":["../src/types.stream.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.template.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"types.template.d.cts","names":[],"sources":["../src/types.template.ts"],"mappings":";;AAQA;;;;;;;KAAY,WAAA;EACV,gBAAA,GAAmB,MAAA;EACnB,aAAA;EACA,eAAA;EACA,UAAA;EACA,QAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.template.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"types.template.d.ts","names":[],"sources":["../src/types.template.ts"],"mappings":";;AAQA;;;;;;;KAAY,WAAA;EACV,gBAAA,GAAmB,MAAA;EACnB,aAAA;EACA,eAAA;EACA,UAAA;EACA,QAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branching.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"branching.d.cts","names":[],"sources":["../../src/ui/branching.ts"],"mappings":";;;UAGU,IAAA;EACR,IAAA;EACA,KAAA,EAAO,WAAA,CAAY,SAAA;EACnB,IAAA;AAAA;AAAA,UAIQ,IAAA;EACR,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,SAAA;AAAA;AAAA,UAIP,QAAA;EACf,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branching.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"branching.d.ts","names":[],"sources":["../../src/ui/branching.ts"],"mappings":";;;UAGU,IAAA;EACR,IAAA;EACA,KAAA,EAAO,WAAA,CAAY,SAAA;EACnB,IAAA;AAAA;AAAA,UAIQ,IAAA;EACR,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,SAAA;AAAA;AAAA,UAIP,QAAA;EACf,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA"}
|
package/dist/ui/manager.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.cjs","names":["SubagentManager","StreamError","isSubagentNamespace","extractToolCallIdFromNamespace","toMessageDict"],"sources":["../../src/ui/manager.ts"],"sourcesContent":["import type {\n CheckpointsStreamEvent,\n CustomStreamEvent,\n DebugStreamEvent,\n ErrorStreamEvent,\n EventsStreamEvent,\n FeedbackStreamEvent,\n MessagesTupleStreamEvent,\n MetadataStreamEvent,\n TasksStreamEvent,\n UpdatesStreamEvent,\n ValuesStreamEvent,\n} from \"../types.stream.js\";\nimport { MessageTupleManager, toMessageDict } from \"./messages.js\";\nimport { StreamError } from \"./errors.js\";\nimport type { Message } from \"../types.messages.js\";\nimport type { BagTemplate } from \"../types.template.js\";\nimport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n isSubagentNamespace,\n} from \"./subagents.js\";\nimport type { SubagentStream } from \"./types.js\";\n\n/**\n * Special ID used by LangGraph's messagesStateReducer to signal\n * that all messages should be removed from the state.\n */\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\ntype GetUpdateType<\n Bag extends BagTemplate,\n StateType extends Record<string, unknown>\n> = Bag extends { UpdateType: unknown }\n ? Bag[\"UpdateType\"]\n : Partial<StateType>;\n\ntype GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n}\n ? Bag[\"CustomEventType\"]\n : unknown;\n\ntype EventStreamMap<StateType, UpdateType, CustomType> = {\n values: ValuesStreamEvent<StateType>;\n updates: UpdatesStreamEvent<UpdateType>;\n custom: CustomStreamEvent<CustomType>;\n debug: DebugStreamEvent;\n messages: MessagesTupleStreamEvent;\n events: EventsStreamEvent;\n metadata: MetadataStreamEvent;\n checkpoints: CheckpointsStreamEvent<StateType>;\n tasks: TasksStreamEvent<StateType, UpdateType>;\n error: ErrorStreamEvent;\n feedback: FeedbackStreamEvent;\n};\n\nexport type EventStreamEvent<StateType, UpdateType, CustomType> =\n EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<\n StateType,\n UpdateType,\n CustomType\n >];\n\ninterface StreamManagerEventCallbacks<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n onUpdateEvent?: (\n data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"],\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onCustomEvent?: (\n data: GetCustomEventType<Bag>,\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n onDebugEvent?: (\n data: DebugStreamEvent[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onCheckpointEvent?: (\n data: CheckpointsStreamEvent<StateType>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onTaskEvent?: (\n data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n}\n\n/**\n * Options for StreamManager constructor.\n */\nexport interface StreamManagerOptions {\n /**\n * Throttle the stream updates.\n * If a number is provided, updates are throttled to the given milliseconds.\n * If `true`, updates are batched in a single macrotask.\n * If `false`, updates are not throttled.\n */\n throttle: number | boolean;\n\n /**\n * Tool names that indicate subagent invocation.\n *\n * When an AI message contains tool calls with these names, they are\n * automatically tracked as subagent executions. This enables the\n * `subagents`, `activeSubagents`, `getSubagent()`, and `getSubagentsByType()`\n * properties on the stream.\n *\n * @default [\"task\"]\n *\n * @example\n * ```typescript\n * // Track both \"task\" and \"delegate\" as subagent tools\n * subagentToolNames: [\"task\", \"delegate\", \"spawn_agent\"]\n * ```\n */\n subagentToolNames?: string[];\n\n /**\n * Filter out messages from subagent streams in the main messages array.\n *\n * When enabled, messages from subagraph executions (those with a `tools:` namespace)\n * are excluded from `stream.messages`. Instead, these messages are tracked\n * per-subagent and accessible via `stream.subagents.get(id).messages`.\n *\n * This is useful for deep agent architectures where you want to display\n * the main conversation separately from subagent activity.\n *\n * @default false\n *\n * @example\n * ```typescript\n * const stream = useStream({\n * assistantId: \"my-agent\",\n * filterSubagentMessages: true,\n * });\n *\n * // Main thread messages only (no subagent messages)\n * stream.messages\n *\n * // Access subagent messages individually\n * stream.subagents.get(\"call_xyz\").messages\n * ```\n */\n filterSubagentMessages?: boolean;\n}\n\nexport class StreamManager<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n private abortRef = new AbortController();\n\n private messages: MessageTupleManager;\n\n private subagentManager: SubagentManager;\n\n private listeners = new Set<() => void>();\n\n private throttle: number | boolean;\n\n private filterSubagentMessages: boolean;\n\n private queue: Promise<unknown> = Promise.resolve();\n\n private queueSize: number = 0;\n\n private state: {\n isLoading: boolean;\n values: [values: StateType, kind: \"stream\" | \"stop\"] | null;\n error: unknown;\n /** Version counter to force React re-renders on subagent changes */\n version: number;\n };\n\n constructor(messages: MessageTupleManager, options: StreamManagerOptions) {\n this.messages = messages;\n this.state = {\n isLoading: false,\n values: null,\n error: undefined,\n version: 0,\n };\n this.throttle = options.throttle;\n this.filterSubagentMessages = options.filterSubagentMessages ?? false;\n this.subagentManager = new SubagentManager({\n subagentToolNames: options.subagentToolNames,\n onSubagentChange: () => this.bumpVersion(),\n });\n }\n\n /**\n * Increment version counter to trigger React re-renders.\n * Called when subagent state changes.\n */\n private bumpVersion = () => {\n this.state = { ...this.state, version: this.state.version + 1 };\n this.notifyListeners();\n };\n\n /**\n * Get all subagents as a Map.\n */\n getSubagents(): Map<string, SubagentStream> {\n return this.subagentManager.getSubagents();\n }\n\n /**\n * Get all currently running subagents.\n */\n getActiveSubagents(): SubagentStream[] {\n return this.subagentManager.getActiveSubagents();\n }\n\n /**\n * Get a specific subagent by tool call ID.\n */\n getSubagent(toolCallId: string): SubagentStream | undefined {\n return this.subagentManager.getSubagent(toolCallId);\n }\n\n /**\n * Get all subagents of a specific type.\n */\n getSubagentsByType(type: string): SubagentStream[] {\n return this.subagentManager.getSubagentsByType(type);\n }\n\n /**\n * Get all subagents triggered by a specific AI message.\n */\n getSubagentsByMessage(messageId: string): SubagentStream[] {\n return this.subagentManager.getSubagentsByMessage(messageId);\n }\n\n /**\n * Reconstruct subagent state from historical messages.\n *\n * This method should be called when loading thread history to restore\n * subagent visualization after:\n * - Page refresh (when stream has already completed)\n * - Loading thread history\n * - Navigating between threads\n *\n * @param messages - Array of messages from thread history\n * @param options - Optional configuration\n * @param options.skipIfPopulated - If true, skip reconstruction if subagents already exist\n */\n reconstructSubagents(\n messages: Message[],\n options?: { skipIfPopulated?: boolean }\n ): void {\n this.subagentManager.reconstructFromMessages(messages, options);\n }\n\n /**\n * Check if any subagents are currently tracked.\n */\n hasSubagents(): boolean {\n return this.subagentManager.hasSubagents();\n }\n\n private setState = (newState: Partial<typeof this.state>) => {\n this.state = { ...this.state, ...newState };\n this.notifyListeners();\n };\n\n private notifyListeners = () => {\n this.listeners.forEach((listener) => listener());\n };\n\n subscribe = (listener: () => void): (() => void) => {\n if (this.throttle === false) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n const timeoutMs = this.throttle === true ? 0 : this.throttle;\n let timeoutId: NodeJS.Timeout | number | undefined;\n\n const throttledListener = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n listener();\n }, timeoutMs);\n };\n\n this.listeners.add(throttledListener);\n return () => {\n clearTimeout(timeoutId);\n this.listeners.delete(throttledListener);\n };\n };\n\n getSnapshot = () => this.state;\n\n get isLoading() {\n return this.state.isLoading;\n }\n\n get values() {\n return this.state.values?.[0] ?? null;\n }\n\n get error() {\n return this.state.error;\n }\n\n setStreamValues = (\n values:\n | (StateType | null)\n | ((prev: StateType | null, kind: \"stream\" | \"stop\") => StateType | null),\n kind: \"stream\" | \"stop\" = \"stream\"\n ) => {\n if (typeof values === \"function\") {\n const [prevValues, prevKind] = this.state.values ?? [null, \"stream\"];\n const nextValues = values(prevValues, prevKind);\n this.setState({ values: nextValues != null ? [nextValues, kind] : null });\n } else {\n const nextValues = values != null ? [values, kind] : null;\n this.setState({ values: nextValues as [StateType, \"stream\" | \"stop\"] });\n }\n };\n\n private getMutateFn = (kind: \"stream\" | \"stop\", historyValues: StateType) => {\n return (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => {\n const stateValues = (this.state.values ?? [null, \"stream\"])[0];\n const prev = {\n ...historyValues,\n ...stateValues,\n };\n const next = typeof update === \"function\" ? update(prev) : update;\n this.setStreamValues({ ...prev, ...next }, kind);\n };\n };\n\n private matchEventType = <\n T extends keyof EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >(\n expected: T,\n actual: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"event\"],\n _data: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"data\"]\n ): _data is EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[T][\"data\"] => {\n return expected === actual || actual.startsWith(`${expected}|`);\n };\n\n protected enqueue = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ) => {\n try {\n this.queueSize = Math.max(0, this.queueSize - 1);\n this.setState({ isLoading: true, error: undefined });\n this.abortRef = new AbortController();\n\n const run = await action(this.abortRef.signal);\n\n let streamError: StreamError | undefined;\n for await (const { event, data } of run) {\n if (event === \"error\") {\n streamError = new StreamError(data);\n break;\n }\n\n const namespace = event.includes(\"|\")\n ? event.split(\"|\").slice(1)\n : undefined;\n\n const mutate = this.getMutateFn(\"stream\", options.initialValues);\n\n if (event === \"metadata\") options.callbacks.onMetadataEvent?.(data);\n if (event === \"events\") options.callbacks.onLangChainEvent?.(data);\n\n if (this.matchEventType(\"updates\", event, data)) {\n options.callbacks.onUpdateEvent?.(data, { namespace, mutate });\n\n // Track subagent streaming updates from subgraph namespaces\n // Mark the subagent as running when we receive updates\n // The actual message content is handled via addMessageToSubagent\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n this.subagentManager.markRunningFromNamespace(\n namespaceId,\n namespace\n );\n }\n }\n\n // Also register subagents from main agent updates (tool_calls in messages)\n // AND process tool results to complete subagents\n // This is needed because tool_calls often appear complete in updates\n // before they appear in the messages stream\n if (!namespace || !isSubagentNamespace(namespace)) {\n const updateData = data as Record<string, unknown>;\n for (const nodeData of Object.values(updateData)) {\n if (\n nodeData &&\n typeof nodeData === \"object\" &&\n \"messages\" in nodeData\n ) {\n const { messages } = nodeData as { messages: unknown[] };\n if (Array.isArray(messages)) {\n for (const msg of messages) {\n if (!msg || typeof msg !== \"object\") continue;\n const msgObj = msg as Record<string, unknown>;\n\n // Register subagents from AI messages with tool_calls\n if (\n msgObj.type === \"ai\" &&\n \"tool_calls\" in msgObj &&\n Array.isArray(msgObj.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgObj.tool_calls as Array<{\n id?: string;\n name: string;\n args: Record<string, unknown> | string;\n }>,\n msgObj.id as string | undefined\n );\n }\n\n // Complete subagents from tool messages (task results)\n if (\n msgObj.type === \"tool\" &&\n \"tool_call_id\" in msgObj &&\n typeof msgObj.tool_call_id === \"string\"\n ) {\n const content =\n typeof msgObj.content === \"string\"\n ? msgObj.content\n : JSON.stringify(msgObj.content);\n const status =\n \"status\" in msgObj && msgObj.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(\n msgObj.tool_call_id,\n content,\n status\n );\n }\n }\n }\n }\n }\n }\n }\n\n if (this.matchEventType(\"custom\", event, data)) {\n options.callbacks.onCustomEvent?.(data, { namespace, mutate });\n }\n\n if (this.matchEventType(\"checkpoints\", event, data)) {\n options.callbacks.onCheckpointEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"tasks\", event, data)) {\n options.callbacks.onTaskEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"debug\", event, data)) {\n options.callbacks.onDebugEvent?.(data, { namespace });\n }\n\n // Handle values events - use startsWith to match both \"values\" and \"values|tools:xxx\"\n if (event === \"values\" || event.startsWith(\"values|\")) {\n // Check if this is a subgraph values event (for namespace mapping and values)\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n const valuesData = data as Record<string, unknown>;\n\n // Try to establish namespace mapping from the initial human message\n const messages = valuesData.messages as unknown[];\n if (Array.isArray(messages) && messages.length > 0) {\n const firstMsg = messages[0] as Record<string, unknown>;\n if (\n firstMsg?.type === \"human\" &&\n typeof firstMsg?.content === \"string\"\n ) {\n this.subagentManager.matchSubgraphToSubagent(\n namespaceId,\n firstMsg.content\n );\n }\n }\n\n // Update the subagent's values with the full state\n this.subagentManager.updateSubagentValues(\n namespaceId,\n valuesData\n );\n }\n } else if (\n data &&\n typeof data === \"object\" &&\n \"__interrupt__\" in data\n ) {\n const interruptData = data as Partial<StateType>;\n this.setStreamValues(\n (prev) => ({ ...prev, ...interruptData } as StateType)\n );\n } else {\n this.setStreamValues(data as StateType);\n }\n }\n\n if (this.matchEventType(\"messages\", event, data)) {\n const [serialized, metadata] = data;\n\n // Check if this message is from a subagent namespace\n const rawCheckpointNs =\n (metadata?.langgraph_checkpoint_ns as string | undefined) ||\n (metadata?.checkpoint_ns as string | undefined);\n const checkpointNs: string | undefined =\n typeof rawCheckpointNs === \"string\" ? rawCheckpointNs : undefined;\n const isFromSubagent = isSubagentNamespace(checkpointNs);\n const toolCallId = isFromSubagent\n ? extractToolCallIdFromNamespace(checkpointNs?.split(\"|\"))\n : undefined;\n\n // If filtering is enabled and this is a subagent message,\n // add it to the subagent's messages instead of the main stream\n if (this.filterSubagentMessages && isFromSubagent && toolCallId) {\n // Add to subagent's message list\n this.subagentManager.addMessageToSubagent(\n toolCallId,\n serialized,\n metadata\n );\n continue;\n }\n\n const messageId = this.messages.add(serialized, metadata);\n if (!messageId) {\n console.warn(\n \"Failed to add message to manager, no message ID found\"\n );\n continue;\n }\n\n this.setStreamValues((streamValues) => {\n const values = {\n ...options.initialValues,\n ...streamValues,\n };\n\n // Assumption: we're concatenating the message\n let messages = options.getMessages(values).slice();\n const { chunk, index } =\n this.messages.get(messageId, messages.length) ?? {};\n\n if (!chunk || index == null) return values;\n if (chunk.getType() === \"remove\") {\n // Check for special REMOVE_ALL_MESSAGES sentinel\n if (chunk.id === REMOVE_ALL_MESSAGES) {\n // Clear all messages when __remove_all__ is received\n messages = [];\n } else {\n messages.splice(index, 1);\n }\n } else {\n const msgDict = toMessageDict(chunk);\n messages[index] = msgDict;\n\n // Track subagents from AI messages with tool calls (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"ai\" &&\n \"tool_calls\" in msgDict &&\n Array.isArray(msgDict.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgDict.tool_calls,\n msgDict.id as string | undefined\n );\n }\n\n // Complete subagents when tool messages arrive (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"tool\" &&\n \"tool_call_id\" in msgDict\n ) {\n const tcId = msgDict.tool_call_id as string;\n const content =\n typeof msgDict.content === \"string\"\n ? msgDict.content\n : JSON.stringify(msgDict.content);\n const status =\n \"status\" in msgDict && msgDict.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(tcId, content, status);\n }\n }\n\n return options.setMessages(values, messages);\n });\n }\n }\n\n if (streamError != null) throw streamError;\n\n const values = await options.onSuccess?.();\n if (typeof values !== \"undefined\" && this.queueSize === 0) {\n this.setStreamValues(values);\n }\n } catch (error) {\n if (\n !(\n error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n )\n ) {\n console.error(error);\n this.setState({ error });\n await options.onError?.(error);\n }\n } finally {\n this.setState({ isLoading: false });\n this.abortRef = new AbortController();\n options.onFinish?.();\n }\n };\n\n start = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ): Promise<void> => {\n this.queueSize += 1;\n this.queue = this.queue.then(() => this.enqueue(action, options));\n };\n\n stop = async (\n historyValues: StateType,\n options: {\n onStop?: (options: {\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }) => void;\n }\n ): Promise<void> => {\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n options.onStop?.({ mutate: this.getMutateFn(\"stop\", historyValues) });\n };\n\n clear = () => {\n // Cancel any running streams\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n // Set the stream state to null\n this.setState({ error: undefined, values: null, isLoading: false });\n\n // Clear any pending messages\n this.messages.clear();\n\n // Clear subagent state\n this.subagentManager.clear();\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.cjs","names":["SubagentManager","StreamError","isSubagentNamespace","extractToolCallIdFromNamespace","toMessageDict"],"sources":["../../src/ui/manager.ts"],"sourcesContent":["import type {\n CheckpointsStreamEvent,\n CustomStreamEvent,\n DebugStreamEvent,\n ErrorStreamEvent,\n EventsStreamEvent,\n FeedbackStreamEvent,\n MessagesTupleStreamEvent,\n MetadataStreamEvent,\n TasksStreamEvent,\n UpdatesStreamEvent,\n ValuesStreamEvent,\n} from \"../types.stream.js\";\nimport { MessageTupleManager, toMessageDict } from \"./messages.js\";\nimport { StreamError } from \"./errors.js\";\nimport type { Message } from \"../types.messages.js\";\nimport type { BagTemplate } from \"../types.template.js\";\nimport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n isSubagentNamespace,\n} from \"./subagents.js\";\nimport type { SubagentStreamInterface } from \"./types.js\";\n\n/**\n * Special ID used by LangGraph's messagesStateReducer to signal\n * that all messages should be removed from the state.\n */\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\ntype GetUpdateType<\n Bag extends BagTemplate,\n StateType extends Record<string, unknown>\n> = Bag extends { UpdateType: unknown }\n ? Bag[\"UpdateType\"]\n : Partial<StateType>;\n\ntype GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n}\n ? Bag[\"CustomEventType\"]\n : unknown;\n\ntype EventStreamMap<StateType, UpdateType, CustomType> = {\n values: ValuesStreamEvent<StateType>;\n updates: UpdatesStreamEvent<UpdateType>;\n custom: CustomStreamEvent<CustomType>;\n debug: DebugStreamEvent;\n messages: MessagesTupleStreamEvent;\n events: EventsStreamEvent;\n metadata: MetadataStreamEvent;\n checkpoints: CheckpointsStreamEvent<StateType>;\n tasks: TasksStreamEvent<StateType, UpdateType>;\n error: ErrorStreamEvent;\n feedback: FeedbackStreamEvent;\n};\n\nexport type EventStreamEvent<StateType, UpdateType, CustomType> =\n EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<\n StateType,\n UpdateType,\n CustomType\n >];\n\ninterface StreamManagerEventCallbacks<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n onUpdateEvent?: (\n data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"],\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onCustomEvent?: (\n data: GetCustomEventType<Bag>,\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n onDebugEvent?: (\n data: DebugStreamEvent[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onCheckpointEvent?: (\n data: CheckpointsStreamEvent<StateType>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onTaskEvent?: (\n data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n}\n\n/**\n * Options for StreamManager constructor.\n */\nexport interface StreamManagerOptions {\n /**\n * Throttle the stream updates.\n * If a number is provided, updates are throttled to the given milliseconds.\n * If `true`, updates are batched in a single macrotask.\n * If `false`, updates are not throttled.\n */\n throttle: number | boolean;\n\n /**\n * Tool names that indicate subagent invocation.\n *\n * When an AI message contains tool calls with these names, they are\n * automatically tracked as subagent executions. This enables the\n * `subagents`, `activeSubagents`, `getSubagent()`, and `getSubagentsByType()`\n * properties on the stream.\n *\n * @default [\"task\"]\n *\n * @example\n * ```typescript\n * // Track both \"task\" and \"delegate\" as subagent tools\n * subagentToolNames: [\"task\", \"delegate\", \"spawn_agent\"]\n * ```\n */\n subagentToolNames?: string[];\n\n /**\n * Filter out messages from subagent streams in the main messages array.\n *\n * When enabled, messages from subagraph executions (those with a `tools:` namespace)\n * are excluded from `stream.messages`. Instead, these messages are tracked\n * per-subagent and accessible via `stream.subagents.get(id).messages`.\n *\n * This is useful for deep agent architectures where you want to display\n * the main conversation separately from subagent activity.\n *\n * @default false\n *\n * @example\n * ```typescript\n * const stream = useStream({\n * assistantId: \"my-agent\",\n * filterSubagentMessages: true,\n * });\n *\n * // Main thread messages only (no subagent messages)\n * stream.messages\n *\n * // Access subagent messages individually\n * stream.subagents.get(\"call_xyz\").messages\n * ```\n */\n filterSubagentMessages?: boolean;\n}\n\nexport class StreamManager<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n private abortRef = new AbortController();\n\n private messages: MessageTupleManager;\n\n private subagentManager: SubagentManager;\n\n private listeners = new Set<() => void>();\n\n private throttle: number | boolean;\n\n private filterSubagentMessages: boolean;\n\n private queue: Promise<unknown> = Promise.resolve();\n\n private queueSize: number = 0;\n\n private state: {\n isLoading: boolean;\n values: [values: StateType, kind: \"stream\" | \"stop\"] | null;\n error: unknown;\n /** Version counter to force React re-renders on subagent changes */\n version: number;\n };\n\n constructor(messages: MessageTupleManager, options: StreamManagerOptions) {\n this.messages = messages;\n this.state = {\n isLoading: false,\n values: null,\n error: undefined,\n version: 0,\n };\n this.throttle = options.throttle;\n this.filterSubagentMessages = options.filterSubagentMessages ?? false;\n this.subagentManager = new SubagentManager({\n subagentToolNames: options.subagentToolNames,\n onSubagentChange: () => this.bumpVersion(),\n });\n }\n\n /**\n * Increment version counter to trigger React re-renders.\n * Called when subagent state changes.\n */\n private bumpVersion = () => {\n this.state = { ...this.state, version: this.state.version + 1 };\n this.notifyListeners();\n };\n\n /**\n * Get all subagents as a Map.\n */\n getSubagents(): Map<string, SubagentStreamInterface> {\n return this.subagentManager.getSubagents();\n }\n\n /**\n * Get all currently running subagents.\n */\n getActiveSubagents(): SubagentStreamInterface[] {\n return this.subagentManager.getActiveSubagents();\n }\n\n /**\n * Get a specific subagent by tool call ID.\n */\n getSubagent(toolCallId: string): SubagentStreamInterface | undefined {\n return this.subagentManager.getSubagent(toolCallId);\n }\n\n /**\n * Get all subagents of a specific type.\n */\n getSubagentsByType(type: string): SubagentStreamInterface[] {\n return this.subagentManager.getSubagentsByType(type);\n }\n\n /**\n * Get all subagents triggered by a specific AI message.\n */\n getSubagentsByMessage(messageId: string): SubagentStreamInterface[] {\n return this.subagentManager.getSubagentsByMessage(messageId);\n }\n\n /**\n * Reconstruct subagent state from historical messages.\n *\n * This method should be called when loading thread history to restore\n * subagent visualization after:\n * - Page refresh (when stream has already completed)\n * - Loading thread history\n * - Navigating between threads\n *\n * @param messages - Array of messages from thread history\n * @param options - Optional configuration\n * @param options.skipIfPopulated - If true, skip reconstruction if subagents already exist\n */\n reconstructSubagents(\n messages: Message[],\n options?: { skipIfPopulated?: boolean }\n ): void {\n this.subagentManager.reconstructFromMessages(messages, options);\n }\n\n /**\n * Check if any subagents are currently tracked.\n */\n hasSubagents(): boolean {\n return this.subagentManager.hasSubagents();\n }\n\n private setState = (newState: Partial<typeof this.state>) => {\n this.state = { ...this.state, ...newState };\n this.notifyListeners();\n };\n\n private notifyListeners = () => {\n this.listeners.forEach((listener) => listener());\n };\n\n subscribe = (listener: () => void): (() => void) => {\n if (this.throttle === false) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n const timeoutMs = this.throttle === true ? 0 : this.throttle;\n let timeoutId: NodeJS.Timeout | number | undefined;\n\n const throttledListener = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n listener();\n }, timeoutMs);\n };\n\n this.listeners.add(throttledListener);\n return () => {\n clearTimeout(timeoutId);\n this.listeners.delete(throttledListener);\n };\n };\n\n getSnapshot = () => this.state;\n\n get isLoading() {\n return this.state.isLoading;\n }\n\n get values() {\n return this.state.values?.[0] ?? null;\n }\n\n get error() {\n return this.state.error;\n }\n\n setStreamValues = (\n values:\n | (StateType | null)\n | ((prev: StateType | null, kind: \"stream\" | \"stop\") => StateType | null),\n kind: \"stream\" | \"stop\" = \"stream\"\n ) => {\n if (typeof values === \"function\") {\n const [prevValues, prevKind] = this.state.values ?? [null, \"stream\"];\n const nextValues = values(prevValues, prevKind);\n this.setState({ values: nextValues != null ? [nextValues, kind] : null });\n } else {\n const nextValues = values != null ? [values, kind] : null;\n this.setState({ values: nextValues as [StateType, \"stream\" | \"stop\"] });\n }\n };\n\n private getMutateFn = (kind: \"stream\" | \"stop\", historyValues: StateType) => {\n return (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => {\n const stateValues = (this.state.values ?? [null, \"stream\"])[0];\n const prev = {\n ...historyValues,\n ...stateValues,\n };\n const next = typeof update === \"function\" ? update(prev) : update;\n this.setStreamValues({ ...prev, ...next }, kind);\n };\n };\n\n private matchEventType = <\n T extends keyof EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >(\n expected: T,\n actual: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"event\"],\n _data: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"data\"]\n ): _data is EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[T][\"data\"] => {\n return expected === actual || actual.startsWith(`${expected}|`);\n };\n\n protected enqueue = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ) => {\n try {\n this.queueSize = Math.max(0, this.queueSize - 1);\n this.setState({ isLoading: true, error: undefined });\n this.abortRef = new AbortController();\n\n const run = await action(this.abortRef.signal);\n\n let streamError: StreamError | undefined;\n for await (const { event, data } of run) {\n if (event === \"error\") {\n streamError = new StreamError(data);\n break;\n }\n\n const namespace = event.includes(\"|\")\n ? event.split(\"|\").slice(1)\n : undefined;\n\n const mutate = this.getMutateFn(\"stream\", options.initialValues);\n\n if (event === \"metadata\") options.callbacks.onMetadataEvent?.(data);\n if (event === \"events\") options.callbacks.onLangChainEvent?.(data);\n\n if (this.matchEventType(\"updates\", event, data)) {\n options.callbacks.onUpdateEvent?.(data, { namespace, mutate });\n\n // Track subagent streaming updates from subgraph namespaces\n // Mark the subagent as running when we receive updates\n // The actual message content is handled via addMessageToSubagent\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n this.subagentManager.markRunningFromNamespace(\n namespaceId,\n namespace\n );\n }\n }\n\n // Also register subagents from main agent updates (tool_calls in messages)\n // AND process tool results to complete subagents\n // This is needed because tool_calls often appear complete in updates\n // before they appear in the messages stream\n if (!namespace || !isSubagentNamespace(namespace)) {\n const updateData = data as Record<string, unknown>;\n for (const nodeData of Object.values(updateData)) {\n if (\n nodeData &&\n typeof nodeData === \"object\" &&\n \"messages\" in nodeData\n ) {\n const { messages } = nodeData as { messages: unknown[] };\n if (Array.isArray(messages)) {\n for (const msg of messages) {\n if (!msg || typeof msg !== \"object\") continue;\n const msgObj = msg as Record<string, unknown>;\n\n // Register subagents from AI messages with tool_calls\n if (\n msgObj.type === \"ai\" &&\n \"tool_calls\" in msgObj &&\n Array.isArray(msgObj.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgObj.tool_calls as Array<{\n id?: string;\n name: string;\n args: Record<string, unknown> | string;\n }>,\n msgObj.id as string | undefined\n );\n }\n\n // Complete subagents from tool messages (task results)\n if (\n msgObj.type === \"tool\" &&\n \"tool_call_id\" in msgObj &&\n typeof msgObj.tool_call_id === \"string\"\n ) {\n const content =\n typeof msgObj.content === \"string\"\n ? msgObj.content\n : JSON.stringify(msgObj.content);\n const status =\n \"status\" in msgObj && msgObj.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(\n msgObj.tool_call_id,\n content,\n status\n );\n }\n }\n }\n }\n }\n }\n }\n\n if (this.matchEventType(\"custom\", event, data)) {\n options.callbacks.onCustomEvent?.(data, { namespace, mutate });\n }\n\n if (this.matchEventType(\"checkpoints\", event, data)) {\n options.callbacks.onCheckpointEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"tasks\", event, data)) {\n options.callbacks.onTaskEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"debug\", event, data)) {\n options.callbacks.onDebugEvent?.(data, { namespace });\n }\n\n // Handle values events - use startsWith to match both \"values\" and \"values|tools:xxx\"\n if (event === \"values\" || event.startsWith(\"values|\")) {\n // Check if this is a subgraph values event (for namespace mapping and values)\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n const valuesData = data as Record<string, unknown>;\n\n // Try to establish namespace mapping from the initial human message\n const messages = valuesData.messages as unknown[];\n if (Array.isArray(messages) && messages.length > 0) {\n const firstMsg = messages[0] as Record<string, unknown>;\n if (\n firstMsg?.type === \"human\" &&\n typeof firstMsg?.content === \"string\"\n ) {\n this.subagentManager.matchSubgraphToSubagent(\n namespaceId,\n firstMsg.content\n );\n }\n }\n\n // Update the subagent's values with the full state\n this.subagentManager.updateSubagentValues(\n namespaceId,\n valuesData\n );\n }\n } else if (\n data &&\n typeof data === \"object\" &&\n \"__interrupt__\" in data\n ) {\n const interruptData = data as Partial<StateType>;\n this.setStreamValues(\n (prev) => ({ ...prev, ...interruptData } as StateType)\n );\n } else {\n this.setStreamValues(data as StateType);\n }\n }\n\n if (this.matchEventType(\"messages\", event, data)) {\n const [serialized, metadata] = data;\n\n // Check if this message is from a subagent namespace\n const rawCheckpointNs =\n (metadata?.langgraph_checkpoint_ns as string | undefined) ||\n (metadata?.checkpoint_ns as string | undefined);\n const checkpointNs: string | undefined =\n typeof rawCheckpointNs === \"string\" ? rawCheckpointNs : undefined;\n const isFromSubagent = isSubagentNamespace(checkpointNs);\n const toolCallId = isFromSubagent\n ? extractToolCallIdFromNamespace(checkpointNs?.split(\"|\"))\n : undefined;\n\n // If filtering is enabled and this is a subagent message,\n // add it to the subagent's messages instead of the main stream\n if (this.filterSubagentMessages && isFromSubagent && toolCallId) {\n // Add to subagent's message list\n this.subagentManager.addMessageToSubagent(\n toolCallId,\n serialized,\n metadata\n );\n continue;\n }\n\n const messageId = this.messages.add(serialized, metadata);\n if (!messageId) {\n console.warn(\n \"Failed to add message to manager, no message ID found\"\n );\n continue;\n }\n\n this.setStreamValues((streamValues) => {\n const values = {\n ...options.initialValues,\n ...streamValues,\n };\n\n // Assumption: we're concatenating the message\n let messages = options.getMessages(values).slice();\n const { chunk, index } =\n this.messages.get(messageId, messages.length) ?? {};\n\n if (!chunk || index == null) return values;\n if (chunk.getType() === \"remove\") {\n // Check for special REMOVE_ALL_MESSAGES sentinel\n if (chunk.id === REMOVE_ALL_MESSAGES) {\n // Clear all messages when __remove_all__ is received\n messages = [];\n } else {\n messages.splice(index, 1);\n }\n } else {\n const msgDict = toMessageDict(chunk);\n messages[index] = msgDict;\n\n // Track subagents from AI messages with tool calls (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"ai\" &&\n \"tool_calls\" in msgDict &&\n Array.isArray(msgDict.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgDict.tool_calls,\n msgDict.id as string | undefined\n );\n }\n\n // Complete subagents when tool messages arrive (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"tool\" &&\n \"tool_call_id\" in msgDict\n ) {\n const tcId = msgDict.tool_call_id as string;\n const content =\n typeof msgDict.content === \"string\"\n ? msgDict.content\n : JSON.stringify(msgDict.content);\n const status =\n \"status\" in msgDict && msgDict.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(tcId, content, status);\n }\n }\n\n return options.setMessages(values, messages);\n });\n }\n }\n\n if (streamError != null) throw streamError;\n\n const values = await options.onSuccess?.();\n if (typeof values !== \"undefined\" && this.queueSize === 0) {\n this.setStreamValues(values);\n }\n } catch (error) {\n if (\n !(\n error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n )\n ) {\n console.error(error);\n this.setState({ error });\n await options.onError?.(error);\n }\n } finally {\n this.setState({ isLoading: false });\n this.abortRef = new AbortController();\n options.onFinish?.();\n }\n };\n\n start = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ): Promise<void> => {\n this.queueSize += 1;\n this.queue = this.queue.then(() => this.enqueue(action, options));\n };\n\n stop = async (\n historyValues: StateType,\n options: {\n onStop?: (options: {\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }) => void;\n }\n ): Promise<void> => {\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n options.onStop?.({ mutate: this.getMutateFn(\"stop\", historyValues) });\n };\n\n clear = () => {\n // Cancel any running streams\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n // Set the stream state to null\n this.setState({ error: undefined, values: null, isLoading: false });\n\n // Clear any pending messages\n this.messages.clear();\n\n // Clear subagent state\n this.subagentManager.clear();\n };\n}\n"],"mappings":"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"}
|
package/dist/ui/manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","names":[],"sources":["../../src/ui/manager.ts"],"sourcesContent":["import type {\n CheckpointsStreamEvent,\n CustomStreamEvent,\n DebugStreamEvent,\n ErrorStreamEvent,\n EventsStreamEvent,\n FeedbackStreamEvent,\n MessagesTupleStreamEvent,\n MetadataStreamEvent,\n TasksStreamEvent,\n UpdatesStreamEvent,\n ValuesStreamEvent,\n} from \"../types.stream.js\";\nimport { MessageTupleManager, toMessageDict } from \"./messages.js\";\nimport { StreamError } from \"./errors.js\";\nimport type { Message } from \"../types.messages.js\";\nimport type { BagTemplate } from \"../types.template.js\";\nimport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n isSubagentNamespace,\n} from \"./subagents.js\";\nimport type { SubagentStream } from \"./types.js\";\n\n/**\n * Special ID used by LangGraph's messagesStateReducer to signal\n * that all messages should be removed from the state.\n */\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\ntype GetUpdateType<\n Bag extends BagTemplate,\n StateType extends Record<string, unknown>\n> = Bag extends { UpdateType: unknown }\n ? Bag[\"UpdateType\"]\n : Partial<StateType>;\n\ntype GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n}\n ? Bag[\"CustomEventType\"]\n : unknown;\n\ntype EventStreamMap<StateType, UpdateType, CustomType> = {\n values: ValuesStreamEvent<StateType>;\n updates: UpdatesStreamEvent<UpdateType>;\n custom: CustomStreamEvent<CustomType>;\n debug: DebugStreamEvent;\n messages: MessagesTupleStreamEvent;\n events: EventsStreamEvent;\n metadata: MetadataStreamEvent;\n checkpoints: CheckpointsStreamEvent<StateType>;\n tasks: TasksStreamEvent<StateType, UpdateType>;\n error: ErrorStreamEvent;\n feedback: FeedbackStreamEvent;\n};\n\nexport type EventStreamEvent<StateType, UpdateType, CustomType> =\n EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<\n StateType,\n UpdateType,\n CustomType\n >];\n\ninterface StreamManagerEventCallbacks<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n onUpdateEvent?: (\n data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"],\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onCustomEvent?: (\n data: GetCustomEventType<Bag>,\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n onDebugEvent?: (\n data: DebugStreamEvent[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onCheckpointEvent?: (\n data: CheckpointsStreamEvent<StateType>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onTaskEvent?: (\n data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n}\n\n/**\n * Options for StreamManager constructor.\n */\nexport interface StreamManagerOptions {\n /**\n * Throttle the stream updates.\n * If a number is provided, updates are throttled to the given milliseconds.\n * If `true`, updates are batched in a single macrotask.\n * If `false`, updates are not throttled.\n */\n throttle: number | boolean;\n\n /**\n * Tool names that indicate subagent invocation.\n *\n * When an AI message contains tool calls with these names, they are\n * automatically tracked as subagent executions. This enables the\n * `subagents`, `activeSubagents`, `getSubagent()`, and `getSubagentsByType()`\n * properties on the stream.\n *\n * @default [\"task\"]\n *\n * @example\n * ```typescript\n * // Track both \"task\" and \"delegate\" as subagent tools\n * subagentToolNames: [\"task\", \"delegate\", \"spawn_agent\"]\n * ```\n */\n subagentToolNames?: string[];\n\n /**\n * Filter out messages from subagent streams in the main messages array.\n *\n * When enabled, messages from subagraph executions (those with a `tools:` namespace)\n * are excluded from `stream.messages`. Instead, these messages are tracked\n * per-subagent and accessible via `stream.subagents.get(id).messages`.\n *\n * This is useful for deep agent architectures where you want to display\n * the main conversation separately from subagent activity.\n *\n * @default false\n *\n * @example\n * ```typescript\n * const stream = useStream({\n * assistantId: \"my-agent\",\n * filterSubagentMessages: true,\n * });\n *\n * // Main thread messages only (no subagent messages)\n * stream.messages\n *\n * // Access subagent messages individually\n * stream.subagents.get(\"call_xyz\").messages\n * ```\n */\n filterSubagentMessages?: boolean;\n}\n\nexport class StreamManager<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n private abortRef = new AbortController();\n\n private messages: MessageTupleManager;\n\n private subagentManager: SubagentManager;\n\n private listeners = new Set<() => void>();\n\n private throttle: number | boolean;\n\n private filterSubagentMessages: boolean;\n\n private queue: Promise<unknown> = Promise.resolve();\n\n private queueSize: number = 0;\n\n private state: {\n isLoading: boolean;\n values: [values: StateType, kind: \"stream\" | \"stop\"] | null;\n error: unknown;\n /** Version counter to force React re-renders on subagent changes */\n version: number;\n };\n\n constructor(messages: MessageTupleManager, options: StreamManagerOptions) {\n this.messages = messages;\n this.state = {\n isLoading: false,\n values: null,\n error: undefined,\n version: 0,\n };\n this.throttle = options.throttle;\n this.filterSubagentMessages = options.filterSubagentMessages ?? false;\n this.subagentManager = new SubagentManager({\n subagentToolNames: options.subagentToolNames,\n onSubagentChange: () => this.bumpVersion(),\n });\n }\n\n /**\n * Increment version counter to trigger React re-renders.\n * Called when subagent state changes.\n */\n private bumpVersion = () => {\n this.state = { ...this.state, version: this.state.version + 1 };\n this.notifyListeners();\n };\n\n /**\n * Get all subagents as a Map.\n */\n getSubagents(): Map<string, SubagentStream> {\n return this.subagentManager.getSubagents();\n }\n\n /**\n * Get all currently running subagents.\n */\n getActiveSubagents(): SubagentStream[] {\n return this.subagentManager.getActiveSubagents();\n }\n\n /**\n * Get a specific subagent by tool call ID.\n */\n getSubagent(toolCallId: string): SubagentStream | undefined {\n return this.subagentManager.getSubagent(toolCallId);\n }\n\n /**\n * Get all subagents of a specific type.\n */\n getSubagentsByType(type: string): SubagentStream[] {\n return this.subagentManager.getSubagentsByType(type);\n }\n\n /**\n * Get all subagents triggered by a specific AI message.\n */\n getSubagentsByMessage(messageId: string): SubagentStream[] {\n return this.subagentManager.getSubagentsByMessage(messageId);\n }\n\n /**\n * Reconstruct subagent state from historical messages.\n *\n * This method should be called when loading thread history to restore\n * subagent visualization after:\n * - Page refresh (when stream has already completed)\n * - Loading thread history\n * - Navigating between threads\n *\n * @param messages - Array of messages from thread history\n * @param options - Optional configuration\n * @param options.skipIfPopulated - If true, skip reconstruction if subagents already exist\n */\n reconstructSubagents(\n messages: Message[],\n options?: { skipIfPopulated?: boolean }\n ): void {\n this.subagentManager.reconstructFromMessages(messages, options);\n }\n\n /**\n * Check if any subagents are currently tracked.\n */\n hasSubagents(): boolean {\n return this.subagentManager.hasSubagents();\n }\n\n private setState = (newState: Partial<typeof this.state>) => {\n this.state = { ...this.state, ...newState };\n this.notifyListeners();\n };\n\n private notifyListeners = () => {\n this.listeners.forEach((listener) => listener());\n };\n\n subscribe = (listener: () => void): (() => void) => {\n if (this.throttle === false) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n const timeoutMs = this.throttle === true ? 0 : this.throttle;\n let timeoutId: NodeJS.Timeout | number | undefined;\n\n const throttledListener = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n listener();\n }, timeoutMs);\n };\n\n this.listeners.add(throttledListener);\n return () => {\n clearTimeout(timeoutId);\n this.listeners.delete(throttledListener);\n };\n };\n\n getSnapshot = () => this.state;\n\n get isLoading() {\n return this.state.isLoading;\n }\n\n get values() {\n return this.state.values?.[0] ?? null;\n }\n\n get error() {\n return this.state.error;\n }\n\n setStreamValues = (\n values:\n | (StateType | null)\n | ((prev: StateType | null, kind: \"stream\" | \"stop\") => StateType | null),\n kind: \"stream\" | \"stop\" = \"stream\"\n ) => {\n if (typeof values === \"function\") {\n const [prevValues, prevKind] = this.state.values ?? [null, \"stream\"];\n const nextValues = values(prevValues, prevKind);\n this.setState({ values: nextValues != null ? [nextValues, kind] : null });\n } else {\n const nextValues = values != null ? [values, kind] : null;\n this.setState({ values: nextValues as [StateType, \"stream\" | \"stop\"] });\n }\n };\n\n private getMutateFn = (kind: \"stream\" | \"stop\", historyValues: StateType) => {\n return (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => {\n const stateValues = (this.state.values ?? [null, \"stream\"])[0];\n const prev = {\n ...historyValues,\n ...stateValues,\n };\n const next = typeof update === \"function\" ? update(prev) : update;\n this.setStreamValues({ ...prev, ...next }, kind);\n };\n };\n\n private matchEventType = <\n T extends keyof EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >(\n expected: T,\n actual: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"event\"],\n _data: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"data\"]\n ): _data is EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[T][\"data\"] => {\n return expected === actual || actual.startsWith(`${expected}|`);\n };\n\n protected enqueue = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ) => {\n try {\n this.queueSize = Math.max(0, this.queueSize - 1);\n this.setState({ isLoading: true, error: undefined });\n this.abortRef = new AbortController();\n\n const run = await action(this.abortRef.signal);\n\n let streamError: StreamError | undefined;\n for await (const { event, data } of run) {\n if (event === \"error\") {\n streamError = new StreamError(data);\n break;\n }\n\n const namespace = event.includes(\"|\")\n ? event.split(\"|\").slice(1)\n : undefined;\n\n const mutate = this.getMutateFn(\"stream\", options.initialValues);\n\n if (event === \"metadata\") options.callbacks.onMetadataEvent?.(data);\n if (event === \"events\") options.callbacks.onLangChainEvent?.(data);\n\n if (this.matchEventType(\"updates\", event, data)) {\n options.callbacks.onUpdateEvent?.(data, { namespace, mutate });\n\n // Track subagent streaming updates from subgraph namespaces\n // Mark the subagent as running when we receive updates\n // The actual message content is handled via addMessageToSubagent\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n this.subagentManager.markRunningFromNamespace(\n namespaceId,\n namespace\n );\n }\n }\n\n // Also register subagents from main agent updates (tool_calls in messages)\n // AND process tool results to complete subagents\n // This is needed because tool_calls often appear complete in updates\n // before they appear in the messages stream\n if (!namespace || !isSubagentNamespace(namespace)) {\n const updateData = data as Record<string, unknown>;\n for (const nodeData of Object.values(updateData)) {\n if (\n nodeData &&\n typeof nodeData === \"object\" &&\n \"messages\" in nodeData\n ) {\n const { messages } = nodeData as { messages: unknown[] };\n if (Array.isArray(messages)) {\n for (const msg of messages) {\n if (!msg || typeof msg !== \"object\") continue;\n const msgObj = msg as Record<string, unknown>;\n\n // Register subagents from AI messages with tool_calls\n if (\n msgObj.type === \"ai\" &&\n \"tool_calls\" in msgObj &&\n Array.isArray(msgObj.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgObj.tool_calls as Array<{\n id?: string;\n name: string;\n args: Record<string, unknown> | string;\n }>,\n msgObj.id as string | undefined\n );\n }\n\n // Complete subagents from tool messages (task results)\n if (\n msgObj.type === \"tool\" &&\n \"tool_call_id\" in msgObj &&\n typeof msgObj.tool_call_id === \"string\"\n ) {\n const content =\n typeof msgObj.content === \"string\"\n ? msgObj.content\n : JSON.stringify(msgObj.content);\n const status =\n \"status\" in msgObj && msgObj.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(\n msgObj.tool_call_id,\n content,\n status\n );\n }\n }\n }\n }\n }\n }\n }\n\n if (this.matchEventType(\"custom\", event, data)) {\n options.callbacks.onCustomEvent?.(data, { namespace, mutate });\n }\n\n if (this.matchEventType(\"checkpoints\", event, data)) {\n options.callbacks.onCheckpointEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"tasks\", event, data)) {\n options.callbacks.onTaskEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"debug\", event, data)) {\n options.callbacks.onDebugEvent?.(data, { namespace });\n }\n\n // Handle values events - use startsWith to match both \"values\" and \"values|tools:xxx\"\n if (event === \"values\" || event.startsWith(\"values|\")) {\n // Check if this is a subgraph values event (for namespace mapping and values)\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n const valuesData = data as Record<string, unknown>;\n\n // Try to establish namespace mapping from the initial human message\n const messages = valuesData.messages as unknown[];\n if (Array.isArray(messages) && messages.length > 0) {\n const firstMsg = messages[0] as Record<string, unknown>;\n if (\n firstMsg?.type === \"human\" &&\n typeof firstMsg?.content === \"string\"\n ) {\n this.subagentManager.matchSubgraphToSubagent(\n namespaceId,\n firstMsg.content\n );\n }\n }\n\n // Update the subagent's values with the full state\n this.subagentManager.updateSubagentValues(\n namespaceId,\n valuesData\n );\n }\n } else if (\n data &&\n typeof data === \"object\" &&\n \"__interrupt__\" in data\n ) {\n const interruptData = data as Partial<StateType>;\n this.setStreamValues(\n (prev) => ({ ...prev, ...interruptData } as StateType)\n );\n } else {\n this.setStreamValues(data as StateType);\n }\n }\n\n if (this.matchEventType(\"messages\", event, data)) {\n const [serialized, metadata] = data;\n\n // Check if this message is from a subagent namespace\n const rawCheckpointNs =\n (metadata?.langgraph_checkpoint_ns as string | undefined) ||\n (metadata?.checkpoint_ns as string | undefined);\n const checkpointNs: string | undefined =\n typeof rawCheckpointNs === \"string\" ? rawCheckpointNs : undefined;\n const isFromSubagent = isSubagentNamespace(checkpointNs);\n const toolCallId = isFromSubagent\n ? extractToolCallIdFromNamespace(checkpointNs?.split(\"|\"))\n : undefined;\n\n // If filtering is enabled and this is a subagent message,\n // add it to the subagent's messages instead of the main stream\n if (this.filterSubagentMessages && isFromSubagent && toolCallId) {\n // Add to subagent's message list\n this.subagentManager.addMessageToSubagent(\n toolCallId,\n serialized,\n metadata\n );\n continue;\n }\n\n const messageId = this.messages.add(serialized, metadata);\n if (!messageId) {\n console.warn(\n \"Failed to add message to manager, no message ID found\"\n );\n continue;\n }\n\n this.setStreamValues((streamValues) => {\n const values = {\n ...options.initialValues,\n ...streamValues,\n };\n\n // Assumption: we're concatenating the message\n let messages = options.getMessages(values).slice();\n const { chunk, index } =\n this.messages.get(messageId, messages.length) ?? {};\n\n if (!chunk || index == null) return values;\n if (chunk.getType() === \"remove\") {\n // Check for special REMOVE_ALL_MESSAGES sentinel\n if (chunk.id === REMOVE_ALL_MESSAGES) {\n // Clear all messages when __remove_all__ is received\n messages = [];\n } else {\n messages.splice(index, 1);\n }\n } else {\n const msgDict = toMessageDict(chunk);\n messages[index] = msgDict;\n\n // Track subagents from AI messages with tool calls (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"ai\" &&\n \"tool_calls\" in msgDict &&\n Array.isArray(msgDict.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgDict.tool_calls,\n msgDict.id as string | undefined\n );\n }\n\n // Complete subagents when tool messages arrive (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"tool\" &&\n \"tool_call_id\" in msgDict\n ) {\n const tcId = msgDict.tool_call_id as string;\n const content =\n typeof msgDict.content === \"string\"\n ? msgDict.content\n : JSON.stringify(msgDict.content);\n const status =\n \"status\" in msgDict && msgDict.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(tcId, content, status);\n }\n }\n\n return options.setMessages(values, messages);\n });\n }\n }\n\n if (streamError != null) throw streamError;\n\n const values = await options.onSuccess?.();\n if (typeof values !== \"undefined\" && this.queueSize === 0) {\n this.setStreamValues(values);\n }\n } catch (error) {\n if (\n !(\n error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n )\n ) {\n console.error(error);\n this.setState({ error });\n await options.onError?.(error);\n }\n } finally {\n this.setState({ isLoading: false });\n this.abortRef = new AbortController();\n options.onFinish?.();\n }\n };\n\n start = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ): Promise<void> => {\n this.queueSize += 1;\n this.queue = this.queue.then(() => this.enqueue(action, options));\n };\n\n stop = async (\n historyValues: StateType,\n options: {\n onStop?: (options: {\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }) => void;\n }\n ): Promise<void> => {\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n options.onStop?.({ mutate: this.getMutateFn(\"stop\", historyValues) });\n };\n\n clear = () => {\n // Cancel any running streams\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n // Set the stream state to null\n this.setState({ error: undefined, values: null, isLoading: false });\n\n // Clear any pending messages\n this.messages.clear();\n\n // Clear subagent state\n this.subagentManager.clear();\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","names":[],"sources":["../../src/ui/manager.ts"],"sourcesContent":["import type {\n CheckpointsStreamEvent,\n CustomStreamEvent,\n DebugStreamEvent,\n ErrorStreamEvent,\n EventsStreamEvent,\n FeedbackStreamEvent,\n MessagesTupleStreamEvent,\n MetadataStreamEvent,\n TasksStreamEvent,\n UpdatesStreamEvent,\n ValuesStreamEvent,\n} from \"../types.stream.js\";\nimport { MessageTupleManager, toMessageDict } from \"./messages.js\";\nimport { StreamError } from \"./errors.js\";\nimport type { Message } from \"../types.messages.js\";\nimport type { BagTemplate } from \"../types.template.js\";\nimport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n isSubagentNamespace,\n} from \"./subagents.js\";\nimport type { SubagentStreamInterface } from \"./types.js\";\n\n/**\n * Special ID used by LangGraph's messagesStateReducer to signal\n * that all messages should be removed from the state.\n */\nexport const REMOVE_ALL_MESSAGES = \"__remove_all__\";\n\ntype GetUpdateType<\n Bag extends BagTemplate,\n StateType extends Record<string, unknown>\n> = Bag extends { UpdateType: unknown }\n ? Bag[\"UpdateType\"]\n : Partial<StateType>;\n\ntype GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n}\n ? Bag[\"CustomEventType\"]\n : unknown;\n\ntype EventStreamMap<StateType, UpdateType, CustomType> = {\n values: ValuesStreamEvent<StateType>;\n updates: UpdatesStreamEvent<UpdateType>;\n custom: CustomStreamEvent<CustomType>;\n debug: DebugStreamEvent;\n messages: MessagesTupleStreamEvent;\n events: EventsStreamEvent;\n metadata: MetadataStreamEvent;\n checkpoints: CheckpointsStreamEvent<StateType>;\n tasks: TasksStreamEvent<StateType, UpdateType>;\n error: ErrorStreamEvent;\n feedback: FeedbackStreamEvent;\n};\n\nexport type EventStreamEvent<StateType, UpdateType, CustomType> =\n EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<\n StateType,\n UpdateType,\n CustomType\n >];\n\ninterface StreamManagerEventCallbacks<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n onUpdateEvent?: (\n data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"],\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onCustomEvent?: (\n data: GetCustomEventType<Bag>,\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n onDebugEvent?: (\n data: DebugStreamEvent[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onCheckpointEvent?: (\n data: CheckpointsStreamEvent<StateType>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onTaskEvent?: (\n data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n}\n\n/**\n * Options for StreamManager constructor.\n */\nexport interface StreamManagerOptions {\n /**\n * Throttle the stream updates.\n * If a number is provided, updates are throttled to the given milliseconds.\n * If `true`, updates are batched in a single macrotask.\n * If `false`, updates are not throttled.\n */\n throttle: number | boolean;\n\n /**\n * Tool names that indicate subagent invocation.\n *\n * When an AI message contains tool calls with these names, they are\n * automatically tracked as subagent executions. This enables the\n * `subagents`, `activeSubagents`, `getSubagent()`, and `getSubagentsByType()`\n * properties on the stream.\n *\n * @default [\"task\"]\n *\n * @example\n * ```typescript\n * // Track both \"task\" and \"delegate\" as subagent tools\n * subagentToolNames: [\"task\", \"delegate\", \"spawn_agent\"]\n * ```\n */\n subagentToolNames?: string[];\n\n /**\n * Filter out messages from subagent streams in the main messages array.\n *\n * When enabled, messages from subagraph executions (those with a `tools:` namespace)\n * are excluded from `stream.messages`. Instead, these messages are tracked\n * per-subagent and accessible via `stream.subagents.get(id).messages`.\n *\n * This is useful for deep agent architectures where you want to display\n * the main conversation separately from subagent activity.\n *\n * @default false\n *\n * @example\n * ```typescript\n * const stream = useStream({\n * assistantId: \"my-agent\",\n * filterSubagentMessages: true,\n * });\n *\n * // Main thread messages only (no subagent messages)\n * stream.messages\n *\n * // Access subagent messages individually\n * stream.subagents.get(\"call_xyz\").messages\n * ```\n */\n filterSubagentMessages?: boolean;\n}\n\nexport class StreamManager<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n private abortRef = new AbortController();\n\n private messages: MessageTupleManager;\n\n private subagentManager: SubagentManager;\n\n private listeners = new Set<() => void>();\n\n private throttle: number | boolean;\n\n private filterSubagentMessages: boolean;\n\n private queue: Promise<unknown> = Promise.resolve();\n\n private queueSize: number = 0;\n\n private state: {\n isLoading: boolean;\n values: [values: StateType, kind: \"stream\" | \"stop\"] | null;\n error: unknown;\n /** Version counter to force React re-renders on subagent changes */\n version: number;\n };\n\n constructor(messages: MessageTupleManager, options: StreamManagerOptions) {\n this.messages = messages;\n this.state = {\n isLoading: false,\n values: null,\n error: undefined,\n version: 0,\n };\n this.throttle = options.throttle;\n this.filterSubagentMessages = options.filterSubagentMessages ?? false;\n this.subagentManager = new SubagentManager({\n subagentToolNames: options.subagentToolNames,\n onSubagentChange: () => this.bumpVersion(),\n });\n }\n\n /**\n * Increment version counter to trigger React re-renders.\n * Called when subagent state changes.\n */\n private bumpVersion = () => {\n this.state = { ...this.state, version: this.state.version + 1 };\n this.notifyListeners();\n };\n\n /**\n * Get all subagents as a Map.\n */\n getSubagents(): Map<string, SubagentStreamInterface> {\n return this.subagentManager.getSubagents();\n }\n\n /**\n * Get all currently running subagents.\n */\n getActiveSubagents(): SubagentStreamInterface[] {\n return this.subagentManager.getActiveSubagents();\n }\n\n /**\n * Get a specific subagent by tool call ID.\n */\n getSubagent(toolCallId: string): SubagentStreamInterface | undefined {\n return this.subagentManager.getSubagent(toolCallId);\n }\n\n /**\n * Get all subagents of a specific type.\n */\n getSubagentsByType(type: string): SubagentStreamInterface[] {\n return this.subagentManager.getSubagentsByType(type);\n }\n\n /**\n * Get all subagents triggered by a specific AI message.\n */\n getSubagentsByMessage(messageId: string): SubagentStreamInterface[] {\n return this.subagentManager.getSubagentsByMessage(messageId);\n }\n\n /**\n * Reconstruct subagent state from historical messages.\n *\n * This method should be called when loading thread history to restore\n * subagent visualization after:\n * - Page refresh (when stream has already completed)\n * - Loading thread history\n * - Navigating between threads\n *\n * @param messages - Array of messages from thread history\n * @param options - Optional configuration\n * @param options.skipIfPopulated - If true, skip reconstruction if subagents already exist\n */\n reconstructSubagents(\n messages: Message[],\n options?: { skipIfPopulated?: boolean }\n ): void {\n this.subagentManager.reconstructFromMessages(messages, options);\n }\n\n /**\n * Check if any subagents are currently tracked.\n */\n hasSubagents(): boolean {\n return this.subagentManager.hasSubagents();\n }\n\n private setState = (newState: Partial<typeof this.state>) => {\n this.state = { ...this.state, ...newState };\n this.notifyListeners();\n };\n\n private notifyListeners = () => {\n this.listeners.forEach((listener) => listener());\n };\n\n subscribe = (listener: () => void): (() => void) => {\n if (this.throttle === false) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n const timeoutMs = this.throttle === true ? 0 : this.throttle;\n let timeoutId: NodeJS.Timeout | number | undefined;\n\n const throttledListener = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n listener();\n }, timeoutMs);\n };\n\n this.listeners.add(throttledListener);\n return () => {\n clearTimeout(timeoutId);\n this.listeners.delete(throttledListener);\n };\n };\n\n getSnapshot = () => this.state;\n\n get isLoading() {\n return this.state.isLoading;\n }\n\n get values() {\n return this.state.values?.[0] ?? null;\n }\n\n get error() {\n return this.state.error;\n }\n\n setStreamValues = (\n values:\n | (StateType | null)\n | ((prev: StateType | null, kind: \"stream\" | \"stop\") => StateType | null),\n kind: \"stream\" | \"stop\" = \"stream\"\n ) => {\n if (typeof values === \"function\") {\n const [prevValues, prevKind] = this.state.values ?? [null, \"stream\"];\n const nextValues = values(prevValues, prevKind);\n this.setState({ values: nextValues != null ? [nextValues, kind] : null });\n } else {\n const nextValues = values != null ? [values, kind] : null;\n this.setState({ values: nextValues as [StateType, \"stream\" | \"stop\"] });\n }\n };\n\n private getMutateFn = (kind: \"stream\" | \"stop\", historyValues: StateType) => {\n return (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => {\n const stateValues = (this.state.values ?? [null, \"stream\"])[0];\n const prev = {\n ...historyValues,\n ...stateValues,\n };\n const next = typeof update === \"function\" ? update(prev) : update;\n this.setStreamValues({ ...prev, ...next }, kind);\n };\n };\n\n private matchEventType = <\n T extends keyof EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >(\n expected: T,\n actual: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"event\"],\n _data: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"data\"]\n ): _data is EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[T][\"data\"] => {\n return expected === actual || actual.startsWith(`${expected}|`);\n };\n\n protected enqueue = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ) => {\n try {\n this.queueSize = Math.max(0, this.queueSize - 1);\n this.setState({ isLoading: true, error: undefined });\n this.abortRef = new AbortController();\n\n const run = await action(this.abortRef.signal);\n\n let streamError: StreamError | undefined;\n for await (const { event, data } of run) {\n if (event === \"error\") {\n streamError = new StreamError(data);\n break;\n }\n\n const namespace = event.includes(\"|\")\n ? event.split(\"|\").slice(1)\n : undefined;\n\n const mutate = this.getMutateFn(\"stream\", options.initialValues);\n\n if (event === \"metadata\") options.callbacks.onMetadataEvent?.(data);\n if (event === \"events\") options.callbacks.onLangChainEvent?.(data);\n\n if (this.matchEventType(\"updates\", event, data)) {\n options.callbacks.onUpdateEvent?.(data, { namespace, mutate });\n\n // Track subagent streaming updates from subgraph namespaces\n // Mark the subagent as running when we receive updates\n // The actual message content is handled via addMessageToSubagent\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n this.subagentManager.markRunningFromNamespace(\n namespaceId,\n namespace\n );\n }\n }\n\n // Also register subagents from main agent updates (tool_calls in messages)\n // AND process tool results to complete subagents\n // This is needed because tool_calls often appear complete in updates\n // before they appear in the messages stream\n if (!namespace || !isSubagentNamespace(namespace)) {\n const updateData = data as Record<string, unknown>;\n for (const nodeData of Object.values(updateData)) {\n if (\n nodeData &&\n typeof nodeData === \"object\" &&\n \"messages\" in nodeData\n ) {\n const { messages } = nodeData as { messages: unknown[] };\n if (Array.isArray(messages)) {\n for (const msg of messages) {\n if (!msg || typeof msg !== \"object\") continue;\n const msgObj = msg as Record<string, unknown>;\n\n // Register subagents from AI messages with tool_calls\n if (\n msgObj.type === \"ai\" &&\n \"tool_calls\" in msgObj &&\n Array.isArray(msgObj.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgObj.tool_calls as Array<{\n id?: string;\n name: string;\n args: Record<string, unknown> | string;\n }>,\n msgObj.id as string | undefined\n );\n }\n\n // Complete subagents from tool messages (task results)\n if (\n msgObj.type === \"tool\" &&\n \"tool_call_id\" in msgObj &&\n typeof msgObj.tool_call_id === \"string\"\n ) {\n const content =\n typeof msgObj.content === \"string\"\n ? msgObj.content\n : JSON.stringify(msgObj.content);\n const status =\n \"status\" in msgObj && msgObj.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(\n msgObj.tool_call_id,\n content,\n status\n );\n }\n }\n }\n }\n }\n }\n }\n\n if (this.matchEventType(\"custom\", event, data)) {\n options.callbacks.onCustomEvent?.(data, { namespace, mutate });\n }\n\n if (this.matchEventType(\"checkpoints\", event, data)) {\n options.callbacks.onCheckpointEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"tasks\", event, data)) {\n options.callbacks.onTaskEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"debug\", event, data)) {\n options.callbacks.onDebugEvent?.(data, { namespace });\n }\n\n // Handle values events - use startsWith to match both \"values\" and \"values|tools:xxx\"\n if (event === \"values\" || event.startsWith(\"values|\")) {\n // Check if this is a subgraph values event (for namespace mapping and values)\n if (namespace && isSubagentNamespace(namespace)) {\n const namespaceId = extractToolCallIdFromNamespace(namespace);\n if (namespaceId && this.filterSubagentMessages) {\n const valuesData = data as Record<string, unknown>;\n\n // Try to establish namespace mapping from the initial human message\n const messages = valuesData.messages as unknown[];\n if (Array.isArray(messages) && messages.length > 0) {\n const firstMsg = messages[0] as Record<string, unknown>;\n if (\n firstMsg?.type === \"human\" &&\n typeof firstMsg?.content === \"string\"\n ) {\n this.subagentManager.matchSubgraphToSubagent(\n namespaceId,\n firstMsg.content\n );\n }\n }\n\n // Update the subagent's values with the full state\n this.subagentManager.updateSubagentValues(\n namespaceId,\n valuesData\n );\n }\n } else if (\n data &&\n typeof data === \"object\" &&\n \"__interrupt__\" in data\n ) {\n const interruptData = data as Partial<StateType>;\n this.setStreamValues(\n (prev) => ({ ...prev, ...interruptData } as StateType)\n );\n } else {\n this.setStreamValues(data as StateType);\n }\n }\n\n if (this.matchEventType(\"messages\", event, data)) {\n const [serialized, metadata] = data;\n\n // Check if this message is from a subagent namespace\n const rawCheckpointNs =\n (metadata?.langgraph_checkpoint_ns as string | undefined) ||\n (metadata?.checkpoint_ns as string | undefined);\n const checkpointNs: string | undefined =\n typeof rawCheckpointNs === \"string\" ? rawCheckpointNs : undefined;\n const isFromSubagent = isSubagentNamespace(checkpointNs);\n const toolCallId = isFromSubagent\n ? extractToolCallIdFromNamespace(checkpointNs?.split(\"|\"))\n : undefined;\n\n // If filtering is enabled and this is a subagent message,\n // add it to the subagent's messages instead of the main stream\n if (this.filterSubagentMessages && isFromSubagent && toolCallId) {\n // Add to subagent's message list\n this.subagentManager.addMessageToSubagent(\n toolCallId,\n serialized,\n metadata\n );\n continue;\n }\n\n const messageId = this.messages.add(serialized, metadata);\n if (!messageId) {\n console.warn(\n \"Failed to add message to manager, no message ID found\"\n );\n continue;\n }\n\n this.setStreamValues((streamValues) => {\n const values = {\n ...options.initialValues,\n ...streamValues,\n };\n\n // Assumption: we're concatenating the message\n let messages = options.getMessages(values).slice();\n const { chunk, index } =\n this.messages.get(messageId, messages.length) ?? {};\n\n if (!chunk || index == null) return values;\n if (chunk.getType() === \"remove\") {\n // Check for special REMOVE_ALL_MESSAGES sentinel\n if (chunk.id === REMOVE_ALL_MESSAGES) {\n // Clear all messages when __remove_all__ is received\n messages = [];\n } else {\n messages.splice(index, 1);\n }\n } else {\n const msgDict = toMessageDict(chunk);\n messages[index] = msgDict;\n\n // Track subagents from AI messages with tool calls (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"ai\" &&\n \"tool_calls\" in msgDict &&\n Array.isArray(msgDict.tool_calls)\n ) {\n this.subagentManager.registerFromToolCalls(\n msgDict.tool_calls,\n msgDict.id as string | undefined\n );\n }\n\n // Complete subagents when tool messages arrive (main agent only)\n if (\n !isFromSubagent &&\n msgDict.type === \"tool\" &&\n \"tool_call_id\" in msgDict\n ) {\n const tcId = msgDict.tool_call_id as string;\n const content =\n typeof msgDict.content === \"string\"\n ? msgDict.content\n : JSON.stringify(msgDict.content);\n const status =\n \"status\" in msgDict && msgDict.status === \"error\"\n ? \"error\"\n : \"success\";\n this.subagentManager.processToolMessage(tcId, content, status);\n }\n }\n\n return options.setMessages(values, messages);\n });\n }\n }\n\n if (streamError != null) throw streamError;\n\n const values = await options.onSuccess?.();\n if (typeof values !== \"undefined\" && this.queueSize === 0) {\n this.setStreamValues(values);\n }\n } catch (error) {\n if (\n !(\n error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n )\n ) {\n console.error(error);\n this.setState({ error });\n await options.onError?.(error);\n }\n } finally {\n this.setState({ isLoading: false });\n this.abortRef = new AbortController();\n options.onFinish?.();\n }\n };\n\n start = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ): Promise<void> => {\n this.queueSize += 1;\n this.queue = this.queue.then(() => this.enqueue(action, options));\n };\n\n stop = async (\n historyValues: StateType,\n options: {\n onStop?: (options: {\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }) => void;\n }\n ): Promise<void> => {\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n options.onStop?.({ mutate: this.getMutateFn(\"stop\", historyValues) });\n };\n\n clear = () => {\n // Cancel any running streams\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n // Set the stream state to null\n this.setState({ error: undefined, values: null, isLoading: false });\n\n // Clear any pending messages\n this.messages.clear();\n\n // Clear subagent state\n this.subagentManager.clear();\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"agent.d.cts","names":[],"sources":["../../../src/ui/stream/agent.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8JA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA1EiB,cAAA,mBACG,MAAA,oBAA0B,MAAA,8BACjC,eAAA,cACC,WAAA,GAAc,WAAA,UAClB,UAAA,CAAW,SAAA,EAAW,QAAA,EAAU,GAAA;;;;;;;;;;;;;;;;;;EAkBxC,SAAA,EAAW,kBAAA,CAAmB,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,YAAA,GACE,OAAA,EAAS,SAAA,CAAU,QAAA,MAChB,kBAAA,CAAmB,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;;UAuBT,qBAAA,mBACG,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,UAClB,gBAAA,CAAiB,SAAA,EAAW,GAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"agent.d.ts","names":[],"sources":["../../../src/ui/stream/agent.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8JA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA1EiB,cAAA,mBACG,MAAA,oBAA0B,MAAA,8BACjC,eAAA,cACC,WAAA,GAAc,WAAA,UAClB,UAAA,CAAW,SAAA,EAAW,QAAA,EAAU,GAAA;;;;;;;;;;;;;;;;;;EAkBxC,SAAA,EAAW,kBAAA,CAAmB,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,YAAA,GACE,OAAA,EAAS,SAAA,CAAU,QAAA,MAChB,kBAAA,CAAmB,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;;UAuBT,qBAAA,mBACG,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,UAClB,gBAAA,CAAiB,SAAA,EAAW,GAAA"}
|