@langchain/langgraph-sdk 1.6.5 → 1.7.1
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/_virtual/_rolldown/runtime.cjs +7 -13
- package/dist/auth/error.cjs +1 -2
- package/dist/auth/error.cjs.map +1 -1
- package/dist/auth/error.js +1 -1
- package/dist/auth/index.cjs +3 -4
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +1 -2
- package/dist/auth/index.js.map +1 -1
- package/dist/client.cjs +9 -9
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -3
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +5 -6
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -2
- package/dist/logging/index.cjs +2 -3
- package/dist/logging/index.cjs.map +1 -1
- package/dist/logging/index.js +1 -1
- package/dist/react/index.cjs +46 -11
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +14 -11
- package/dist/react/index.d.cts.map +1 -0
- package/dist/react/index.d.ts +14 -11
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +13 -4
- package/dist/react/index.js.map +1 -0
- package/dist/react-ui/index.cjs +39 -15
- package/dist/react-ui/index.d.cts +1 -2
- package/dist/react-ui/index.d.ts +1 -2
- package/dist/react-ui/index.js +1 -8
- package/dist/react-ui/server/index.cjs +15 -6
- package/dist/react-ui/server/index.d.cts +1 -2
- package/dist/react-ui/server/index.d.ts +1 -2
- package/dist/react-ui/server/index.js +2 -4
- package/dist/singletons/fetch.cjs +1 -2
- package/dist/singletons/fetch.cjs.map +1 -1
- package/dist/singletons/fetch.js +1 -1
- package/dist/singletons/fetch.js.map +1 -1
- package/dist/types.messages.d.cts +5 -3
- package/dist/types.messages.d.cts.map +1 -1
- package/dist/types.messages.d.ts +5 -3
- package/dist/types.messages.d.ts.map +1 -1
- package/dist/ui/branching.cjs +25 -2
- package/dist/ui/branching.cjs.map +1 -1
- package/dist/ui/branching.d.cts +26 -1
- package/dist/ui/branching.d.cts.map +1 -1
- package/dist/ui/branching.d.ts +26 -1
- package/dist/ui/branching.d.ts.map +1 -1
- package/dist/ui/branching.js +25 -2
- package/dist/ui/branching.js.map +1 -1
- package/dist/ui/errors.cjs +1 -2
- package/dist/ui/errors.cjs.map +1 -1
- package/dist/ui/errors.js +1 -1
- package/dist/ui/index.cjs +30 -0
- package/dist/ui/index.d.cts +15 -0
- package/dist/ui/index.d.ts +15 -0
- package/dist/ui/index.js +10 -0
- package/dist/ui/interrupts.cjs +20 -0
- package/dist/ui/interrupts.cjs.map +1 -0
- package/dist/ui/interrupts.d.cts +11 -0
- package/dist/ui/interrupts.d.cts.map +1 -0
- package/dist/ui/interrupts.d.ts +11 -0
- package/dist/ui/interrupts.d.ts.map +1 -0
- package/dist/ui/interrupts.js +20 -0
- package/dist/ui/interrupts.js.map +1 -0
- package/dist/ui/manager.cjs +13 -15
- package/dist/ui/manager.cjs.map +1 -1
- package/dist/ui/manager.d.cts +224 -0
- package/dist/ui/manager.d.cts.map +1 -0
- package/dist/ui/manager.d.ts +224 -0
- package/dist/ui/manager.d.ts.map +1 -0
- package/dist/ui/manager.js +10 -12
- package/dist/ui/manager.js.map +1 -1
- package/dist/ui/messages.cjs +40 -3
- package/dist/ui/messages.cjs.map +1 -1
- package/dist/ui/messages.d.cts +56 -0
- package/dist/ui/messages.d.cts.map +1 -0
- package/dist/ui/messages.d.ts +56 -0
- package/dist/ui/messages.d.ts.map +1 -0
- package/dist/ui/messages.js +37 -3
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/queue.cjs +74 -0
- package/dist/ui/queue.cjs.map +1 -0
- package/dist/ui/queue.d.cts +72 -0
- package/dist/ui/queue.d.cts.map +1 -0
- package/dist/ui/queue.d.ts +72 -0
- package/dist/ui/queue.d.ts.map +1 -0
- package/dist/ui/queue.js +74 -0
- package/dist/ui/queue.js.map +1 -0
- package/dist/ui/stream/base.d.cts +11 -0
- package/dist/ui/stream/base.d.cts.map +1 -1
- package/dist/ui/stream/base.d.ts +11 -0
- package/dist/ui/stream/base.d.ts.map +1 -1
- package/dist/ui/stream/index.d.cts +4 -4
- package/dist/ui/stream/index.d.cts.map +1 -1
- package/dist/ui/stream/index.d.ts +4 -4
- package/dist/ui/stream/index.d.ts.map +1 -1
- package/dist/ui/subagents.cjs +7 -5
- package/dist/ui/subagents.cjs.map +1 -1
- package/dist/ui/subagents.d.cts +7 -0
- package/dist/ui/subagents.d.cts.map +1 -1
- package/dist/ui/subagents.d.ts +7 -0
- package/dist/ui/subagents.d.ts.map +1 -1
- package/dist/ui/subagents.js +5 -3
- package/dist/ui/subagents.js.map +1 -1
- package/dist/ui/transport.cjs +30 -0
- package/dist/ui/transport.cjs.map +1 -0
- package/dist/{react/stream.custom.d.cts → ui/transport.d.cts} +3 -3
- package/dist/ui/transport.d.cts.map +1 -0
- package/dist/{react/stream.custom.d.ts → ui/transport.d.ts} +3 -3
- package/dist/ui/transport.d.ts.map +1 -0
- package/dist/ui/transport.js +30 -0
- package/dist/ui/transport.js.map +1 -0
- package/dist/ui/types.d.cts +125 -16
- package/dist/ui/types.d.cts.map +1 -1
- package/dist/ui/types.d.ts +125 -16
- package/dist/ui/types.d.ts.map +1 -1
- package/dist/ui/utils.cjs +1 -2
- package/dist/ui/utils.cjs.map +1 -1
- package/dist/ui/utils.d.cts +7 -0
- package/dist/ui/utils.d.cts.map +1 -0
- package/dist/ui/utils.d.ts +7 -0
- package/dist/ui/utils.d.ts.map +1 -0
- package/dist/ui/utils.js +1 -1
- package/dist/utils/async_caller.cjs +3 -4
- package/dist/utils/async_caller.cjs.map +1 -1
- package/dist/utils/async_caller.js +1 -2
- package/dist/utils/async_caller.js.map +1 -1
- package/dist/utils/env.cjs +1 -2
- package/dist/utils/env.cjs.map +1 -1
- package/dist/utils/env.js +1 -1
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/error.cjs +1 -2
- package/dist/utils/error.cjs.map +1 -1
- package/dist/utils/error.js +1 -1
- package/dist/utils/index.cjs +8 -0
- package/dist/utils/index.d.cts +4 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/signals.cjs +1 -2
- package/dist/utils/signals.cjs.map +1 -1
- package/dist/utils/signals.js +1 -1
- package/dist/utils/signals.js.map +1 -1
- package/dist/utils/sse.cjs +1 -2
- package/dist/utils/sse.cjs.map +1 -1
- package/dist/utils/sse.d.cts +11 -0
- package/dist/utils/sse.d.cts.map +1 -0
- package/dist/utils/sse.d.ts +11 -0
- package/dist/utils/sse.d.ts.map +1 -0
- package/dist/utils/sse.js +1 -1
- package/dist/utils/sse.js.map +1 -1
- package/dist/utils/stream.cjs +2 -3
- package/dist/utils/stream.cjs.map +1 -1
- package/dist/utils/stream.d.cts +19 -0
- package/dist/utils/stream.d.cts.map +1 -0
- package/dist/utils/stream.d.ts +19 -0
- package/dist/utils/stream.d.ts.map +1 -0
- package/dist/utils/stream.js +1 -2
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/tools.cjs +27 -19
- package/dist/utils/tools.cjs.map +1 -1
- package/dist/utils/tools.d.cts +7 -0
- package/dist/utils/tools.d.cts.map +1 -0
- package/dist/utils/tools.d.ts +7 -0
- package/dist/utils/tools.d.ts.map +1 -0
- package/dist/utils/tools.js +27 -18
- package/dist/utils/tools.js.map +1 -1
- package/package.json +41 -12
- package/dist/react/stream.cjs +0 -18
- package/dist/react/stream.cjs.map +0 -1
- package/dist/react/stream.custom.cjs +0 -164
- package/dist/react/stream.custom.cjs.map +0 -1
- package/dist/react/stream.custom.d.cts.map +0 -1
- package/dist/react/stream.custom.d.ts.map +0 -1
- package/dist/react/stream.custom.js +0 -162
- package/dist/react/stream.custom.js.map +0 -1
- package/dist/react/stream.d.cts +0 -174
- package/dist/react/stream.d.cts.map +0 -1
- package/dist/react/stream.d.ts +0 -174
- package/dist/react/stream.d.ts.map +0 -1
- package/dist/react/stream.js +0 -17
- package/dist/react/stream.js.map +0 -1
- package/dist/react/stream.lgp.cjs +0 -544
- package/dist/react/stream.lgp.cjs.map +0 -1
- package/dist/react/stream.lgp.js +0 -543
- package/dist/react/stream.lgp.js.map +0 -1
- package/dist/react/thread.cjs +0 -21
- package/dist/react/thread.cjs.map +0 -1
- package/dist/react/thread.js +0 -20
- package/dist/react/thread.js.map +0 -1
- package/dist/react/types.d.cts +0 -79
- package/dist/react/types.d.cts.map +0 -1
- package/dist/react/types.d.ts +0 -79
- package/dist/react/types.d.ts.map +0 -1
- package/dist/react-ui/client.cjs +0 -138
- package/dist/react-ui/client.cjs.map +0 -1
- package/dist/react-ui/client.d.cts +0 -76
- package/dist/react-ui/client.d.cts.map +0 -1
- package/dist/react-ui/client.d.ts +0 -76
- package/dist/react-ui/client.d.ts.map +0 -1
- package/dist/react-ui/client.js +0 -132
- package/dist/react-ui/client.js.map +0 -1
- package/dist/react-ui/index.cjs.map +0 -1
- package/dist/react-ui/index.js.map +0 -1
- package/dist/react-ui/server/server.cjs +0 -57
- package/dist/react-ui/server/server.cjs.map +0 -1
- package/dist/react-ui/server/server.d.cts +0 -54
- package/dist/react-ui/server/server.d.cts.map +0 -1
- package/dist/react-ui/server/server.d.ts +0 -54
- package/dist/react-ui/server/server.d.ts.map +0 -1
- package/dist/react-ui/server/server.js +0 -56
- package/dist/react-ui/server/server.js.map +0 -1
- package/dist/react-ui/types.cjs +0 -38
- package/dist/react-ui/types.cjs.map +0 -1
- package/dist/react-ui/types.d.cts +0 -25
- package/dist/react-ui/types.d.cts.map +0 -1
- package/dist/react-ui/types.d.ts +0 -25
- package/dist/react-ui/types.d.ts.map +0 -1
- package/dist/react-ui/types.js +0 -35
- package/dist/react-ui/types.js.map +0 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { Message } from "../types.messages.cjs";
|
|
2
|
+
import { CheckpointsStreamEvent, CustomStreamEvent, DebugStreamEvent, ErrorStreamEvent, EventsStreamEvent, FeedbackStreamEvent, MessagesTupleStreamEvent, MetadataStreamEvent, TasksStreamEvent, ToolsStreamEvent, UpdatesStreamEvent, ValuesStreamEvent } from "../types.stream.cjs";
|
|
3
|
+
import { BagTemplate } from "../types.template.cjs";
|
|
4
|
+
import { SubagentStreamInterface } from "./types.cjs";
|
|
5
|
+
import { MessageTupleManager } from "./messages.cjs";
|
|
6
|
+
import { BaseMessage } from "@langchain/core/messages";
|
|
7
|
+
|
|
8
|
+
//#region src/ui/manager.d.ts
|
|
9
|
+
type GetUpdateType<Bag extends BagTemplate, StateType extends Record<string, unknown>> = Bag extends {
|
|
10
|
+
UpdateType: unknown;
|
|
11
|
+
} ? Bag["UpdateType"] : Partial<StateType>;
|
|
12
|
+
type GetCustomEventType<Bag extends BagTemplate> = Bag extends {
|
|
13
|
+
CustomEventType: unknown;
|
|
14
|
+
} ? Bag["CustomEventType"] : unknown;
|
|
15
|
+
type EventStreamMap<StateType, UpdateType, CustomType> = {
|
|
16
|
+
values: ValuesStreamEvent<StateType>;
|
|
17
|
+
updates: UpdatesStreamEvent<UpdateType>;
|
|
18
|
+
custom: CustomStreamEvent<CustomType>;
|
|
19
|
+
debug: DebugStreamEvent;
|
|
20
|
+
messages: MessagesTupleStreamEvent;
|
|
21
|
+
events: EventsStreamEvent;
|
|
22
|
+
metadata: MetadataStreamEvent;
|
|
23
|
+
checkpoints: CheckpointsStreamEvent<StateType>;
|
|
24
|
+
tasks: TasksStreamEvent<StateType, UpdateType>;
|
|
25
|
+
error: ErrorStreamEvent;
|
|
26
|
+
feedback: FeedbackStreamEvent;
|
|
27
|
+
tools: ToolsStreamEvent;
|
|
28
|
+
};
|
|
29
|
+
type EventStreamEvent<StateType, UpdateType, CustomType> = EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<StateType, UpdateType, CustomType>];
|
|
30
|
+
interface StreamManagerEventCallbacks<StateType extends Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
|
|
31
|
+
onUpdateEvent?: (data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>["data"], options: {
|
|
32
|
+
namespace: string[] | undefined;
|
|
33
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
34
|
+
}) => void;
|
|
35
|
+
onCustomEvent?: (data: GetCustomEventType<Bag>, options: {
|
|
36
|
+
namespace: string[] | undefined;
|
|
37
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
38
|
+
}) => void;
|
|
39
|
+
onMetadataEvent?: (data: MetadataStreamEvent["data"]) => void;
|
|
40
|
+
onLangChainEvent?: (data: EventsStreamEvent["data"]) => void;
|
|
41
|
+
onDebugEvent?: (data: DebugStreamEvent["data"], options: {
|
|
42
|
+
namespace: string[] | undefined;
|
|
43
|
+
}) => void;
|
|
44
|
+
onCheckpointEvent?: (data: CheckpointsStreamEvent<StateType>["data"], options: {
|
|
45
|
+
namespace: string[] | undefined;
|
|
46
|
+
}) => void;
|
|
47
|
+
onTaskEvent?: (data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>["data"], options: {
|
|
48
|
+
namespace: string[] | undefined;
|
|
49
|
+
}) => void;
|
|
50
|
+
onToolEvent?: (data: ToolsStreamEvent["data"], options: {
|
|
51
|
+
namespace: string[] | undefined;
|
|
52
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
53
|
+
}) => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Options for StreamManager constructor.
|
|
57
|
+
*/
|
|
58
|
+
interface StreamManagerOptions {
|
|
59
|
+
/**
|
|
60
|
+
* Throttle the stream updates.
|
|
61
|
+
* If a number is provided, updates are throttled to the given milliseconds.
|
|
62
|
+
* If `true`, updates are batched in a single macrotask.
|
|
63
|
+
* If `false`, updates are not throttled.
|
|
64
|
+
*/
|
|
65
|
+
throttle: number | boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Tool names that indicate subagent invocation.
|
|
68
|
+
*
|
|
69
|
+
* When an AI message contains tool calls with these names, they are
|
|
70
|
+
* automatically tracked as subagent executions. This enables the
|
|
71
|
+
* `subagents`, `activeSubagents`, `getSubagent()`, and `getSubagentsByType()`
|
|
72
|
+
* properties on the stream.
|
|
73
|
+
*
|
|
74
|
+
* @default ["task"]
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* // Track both "task" and "delegate" as subagent tools
|
|
79
|
+
* subagentToolNames: ["task", "delegate", "spawn_agent"]
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
subagentToolNames?: string[];
|
|
83
|
+
/**
|
|
84
|
+
* Filter out messages from subagent streams in the main messages array.
|
|
85
|
+
*
|
|
86
|
+
* When enabled, messages from subagraph executions (those with a `tools:` namespace)
|
|
87
|
+
* are excluded from `stream.messages`. Instead, these messages are tracked
|
|
88
|
+
* per-subagent and accessible via `stream.subagents.get(id).messages`.
|
|
89
|
+
*
|
|
90
|
+
* This is useful for deep agent architectures where you want to display
|
|
91
|
+
* the main conversation separately from subagent activity.
|
|
92
|
+
*
|
|
93
|
+
* @default false
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const stream = useStream({
|
|
98
|
+
* assistantId: "my-agent",
|
|
99
|
+
* filterSubagentMessages: true,
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* // Main thread messages only (no subagent messages)
|
|
103
|
+
* stream.messages
|
|
104
|
+
*
|
|
105
|
+
* // Access subagent messages individually
|
|
106
|
+
* stream.subagents.get("call_xyz").messages
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
filterSubagentMessages?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Converts a @langchain/core BaseMessage to the desired output format.
|
|
112
|
+
*
|
|
113
|
+
* Defaults to `toMessageDict` which produces plain Message objects.
|
|
114
|
+
* Framework SDKs pass `toMessageClass` (identity) to keep class instances.
|
|
115
|
+
*/
|
|
116
|
+
toMessage?: (chunk: BaseMessage) => Message | BaseMessage;
|
|
117
|
+
}
|
|
118
|
+
declare class StreamManager<StateType extends Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
|
|
119
|
+
private abortRef;
|
|
120
|
+
private messages;
|
|
121
|
+
private subagentManager;
|
|
122
|
+
private listeners;
|
|
123
|
+
private throttle;
|
|
124
|
+
private filterSubagentMessages;
|
|
125
|
+
private toMessage;
|
|
126
|
+
private queue;
|
|
127
|
+
private queueSize;
|
|
128
|
+
private state;
|
|
129
|
+
constructor(messages: MessageTupleManager, options: StreamManagerOptions);
|
|
130
|
+
/**
|
|
131
|
+
* Increment version counter to trigger React re-renders.
|
|
132
|
+
* Called when subagent state changes.
|
|
133
|
+
*/
|
|
134
|
+
private bumpVersion;
|
|
135
|
+
/**
|
|
136
|
+
* Get all subagents as a Map.
|
|
137
|
+
*/
|
|
138
|
+
getSubagents(): Map<string, SubagentStreamInterface>;
|
|
139
|
+
/**
|
|
140
|
+
* Get all currently running subagents.
|
|
141
|
+
*/
|
|
142
|
+
getActiveSubagents(): SubagentStreamInterface[];
|
|
143
|
+
/**
|
|
144
|
+
* Get a specific subagent by tool call ID.
|
|
145
|
+
*/
|
|
146
|
+
getSubagent(toolCallId: string): SubagentStreamInterface | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Get all subagents of a specific type.
|
|
149
|
+
*/
|
|
150
|
+
getSubagentsByType(type: string): SubagentStreamInterface[];
|
|
151
|
+
/**
|
|
152
|
+
* Get all subagents triggered by a specific AI message.
|
|
153
|
+
*/
|
|
154
|
+
getSubagentsByMessage(messageId: string): SubagentStreamInterface[];
|
|
155
|
+
/**
|
|
156
|
+
* Reconstruct subagent state from historical messages.
|
|
157
|
+
*
|
|
158
|
+
* This method should be called when loading thread history to restore
|
|
159
|
+
* subagent visualization after:
|
|
160
|
+
* - Page refresh (when stream has already completed)
|
|
161
|
+
* - Loading thread history
|
|
162
|
+
* - Navigating between threads
|
|
163
|
+
*
|
|
164
|
+
* @param messages - Array of messages from thread history
|
|
165
|
+
* @param options - Optional configuration
|
|
166
|
+
* @param options.skipIfPopulated - If true, skip reconstruction if subagents already exist
|
|
167
|
+
*/
|
|
168
|
+
reconstructSubagents(messages: Message[], options?: {
|
|
169
|
+
skipIfPopulated?: boolean;
|
|
170
|
+
}): void;
|
|
171
|
+
/**
|
|
172
|
+
* Check if any subagents are currently tracked.
|
|
173
|
+
*/
|
|
174
|
+
hasSubagents(): boolean;
|
|
175
|
+
private setState;
|
|
176
|
+
private notifyListeners;
|
|
177
|
+
subscribe: (listener: () => void) => () => void;
|
|
178
|
+
getSnapshot: () => {
|
|
179
|
+
isLoading: boolean;
|
|
180
|
+
values: [values: StateType, kind: "stop" | "stream"] | null;
|
|
181
|
+
error: unknown; /** Version counter to force React re-renders on subagent changes */
|
|
182
|
+
version: number;
|
|
183
|
+
};
|
|
184
|
+
get isLoading(): boolean;
|
|
185
|
+
get values(): StateType | null;
|
|
186
|
+
get error(): unknown;
|
|
187
|
+
setStreamValues: (values: StateType | ((prev: StateType | null, kind: "stop" | "stream") => StateType | null) | null, kind?: "stop" | "stream") => void;
|
|
188
|
+
private getMutateFn;
|
|
189
|
+
private matchEventType;
|
|
190
|
+
protected enqueue: (action: (signal: AbortSignal) => Promise<AsyncGenerator<EventStreamEvent<StateType, GetUpdateType<Bag, StateType>, GetCustomEventType<Bag>>, any, any>>, options: {
|
|
191
|
+
getMessages: (values: StateType) => Message[];
|
|
192
|
+
setMessages: (current: StateType, messages: Message[]) => StateType;
|
|
193
|
+
initialValues: StateType;
|
|
194
|
+
callbacks: StreamManagerEventCallbacks<StateType, Bag>;
|
|
195
|
+
onSuccess: () => void | StateType | Promise<void | StateType | null | undefined> | null | undefined;
|
|
196
|
+
onError: (error: unknown) => void | Promise<void>;
|
|
197
|
+
onFinish?: (() => void) | undefined;
|
|
198
|
+
}) => Promise<void>;
|
|
199
|
+
start: (action: (signal: AbortSignal) => Promise<AsyncGenerator<EventStreamEvent<StateType, GetUpdateType<Bag, StateType>, GetCustomEventType<Bag>>, any, any>>, options: {
|
|
200
|
+
getMessages: (values: StateType) => Message[];
|
|
201
|
+
setMessages: (current: StateType, messages: Message[]) => StateType;
|
|
202
|
+
initialValues: StateType;
|
|
203
|
+
callbacks: StreamManagerEventCallbacks<StateType, Bag>;
|
|
204
|
+
onSuccess: () => void | StateType | Promise<void | StateType | null | undefined> | null | undefined;
|
|
205
|
+
onError: (error: unknown) => void | Promise<void>;
|
|
206
|
+
onFinish?: (() => void) | undefined;
|
|
207
|
+
}, startOptions?: {
|
|
208
|
+
/**
|
|
209
|
+
* If true, abort any currently running stream before starting this one.
|
|
210
|
+
* Used for multitask_strategy: "interrupt" and "rollback" to unblock
|
|
211
|
+
* the queue so the new run request can proceed immediately.
|
|
212
|
+
*/
|
|
213
|
+
abortPrevious?: boolean | undefined;
|
|
214
|
+
} | undefined) => Promise<void>;
|
|
215
|
+
stop: (historyValues: StateType, options: {
|
|
216
|
+
onStop?: ((options: {
|
|
217
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
218
|
+
}) => void) | undefined;
|
|
219
|
+
}) => Promise<void>;
|
|
220
|
+
clear: () => void;
|
|
221
|
+
}
|
|
222
|
+
//#endregion
|
|
223
|
+
export { EventStreamEvent, StreamManager };
|
|
224
|
+
//# sourceMappingURL=manager.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.cts","names":[],"sources":["../../src/ui/manager.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { Message } from "../types.messages.js";
|
|
2
|
+
import { CheckpointsStreamEvent, CustomStreamEvent, DebugStreamEvent, ErrorStreamEvent, EventsStreamEvent, FeedbackStreamEvent, MessagesTupleStreamEvent, MetadataStreamEvent, TasksStreamEvent, ToolsStreamEvent, UpdatesStreamEvent, ValuesStreamEvent } from "../types.stream.js";
|
|
3
|
+
import { BagTemplate } from "../types.template.js";
|
|
4
|
+
import { SubagentStreamInterface } from "./types.js";
|
|
5
|
+
import { MessageTupleManager } from "./messages.js";
|
|
6
|
+
import { BaseMessage } from "@langchain/core/messages";
|
|
7
|
+
|
|
8
|
+
//#region src/ui/manager.d.ts
|
|
9
|
+
type GetUpdateType<Bag extends BagTemplate, StateType extends Record<string, unknown>> = Bag extends {
|
|
10
|
+
UpdateType: unknown;
|
|
11
|
+
} ? Bag["UpdateType"] : Partial<StateType>;
|
|
12
|
+
type GetCustomEventType<Bag extends BagTemplate> = Bag extends {
|
|
13
|
+
CustomEventType: unknown;
|
|
14
|
+
} ? Bag["CustomEventType"] : unknown;
|
|
15
|
+
type EventStreamMap<StateType, UpdateType, CustomType> = {
|
|
16
|
+
values: ValuesStreamEvent<StateType>;
|
|
17
|
+
updates: UpdatesStreamEvent<UpdateType>;
|
|
18
|
+
custom: CustomStreamEvent<CustomType>;
|
|
19
|
+
debug: DebugStreamEvent;
|
|
20
|
+
messages: MessagesTupleStreamEvent;
|
|
21
|
+
events: EventsStreamEvent;
|
|
22
|
+
metadata: MetadataStreamEvent;
|
|
23
|
+
checkpoints: CheckpointsStreamEvent<StateType>;
|
|
24
|
+
tasks: TasksStreamEvent<StateType, UpdateType>;
|
|
25
|
+
error: ErrorStreamEvent;
|
|
26
|
+
feedback: FeedbackStreamEvent;
|
|
27
|
+
tools: ToolsStreamEvent;
|
|
28
|
+
};
|
|
29
|
+
type EventStreamEvent<StateType, UpdateType, CustomType> = EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<StateType, UpdateType, CustomType>];
|
|
30
|
+
interface StreamManagerEventCallbacks<StateType extends Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
|
|
31
|
+
onUpdateEvent?: (data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>["data"], options: {
|
|
32
|
+
namespace: string[] | undefined;
|
|
33
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
34
|
+
}) => void;
|
|
35
|
+
onCustomEvent?: (data: GetCustomEventType<Bag>, options: {
|
|
36
|
+
namespace: string[] | undefined;
|
|
37
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
38
|
+
}) => void;
|
|
39
|
+
onMetadataEvent?: (data: MetadataStreamEvent["data"]) => void;
|
|
40
|
+
onLangChainEvent?: (data: EventsStreamEvent["data"]) => void;
|
|
41
|
+
onDebugEvent?: (data: DebugStreamEvent["data"], options: {
|
|
42
|
+
namespace: string[] | undefined;
|
|
43
|
+
}) => void;
|
|
44
|
+
onCheckpointEvent?: (data: CheckpointsStreamEvent<StateType>["data"], options: {
|
|
45
|
+
namespace: string[] | undefined;
|
|
46
|
+
}) => void;
|
|
47
|
+
onTaskEvent?: (data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>["data"], options: {
|
|
48
|
+
namespace: string[] | undefined;
|
|
49
|
+
}) => void;
|
|
50
|
+
onToolEvent?: (data: ToolsStreamEvent["data"], options: {
|
|
51
|
+
namespace: string[] | undefined;
|
|
52
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
53
|
+
}) => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Options for StreamManager constructor.
|
|
57
|
+
*/
|
|
58
|
+
interface StreamManagerOptions {
|
|
59
|
+
/**
|
|
60
|
+
* Throttle the stream updates.
|
|
61
|
+
* If a number is provided, updates are throttled to the given milliseconds.
|
|
62
|
+
* If `true`, updates are batched in a single macrotask.
|
|
63
|
+
* If `false`, updates are not throttled.
|
|
64
|
+
*/
|
|
65
|
+
throttle: number | boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Tool names that indicate subagent invocation.
|
|
68
|
+
*
|
|
69
|
+
* When an AI message contains tool calls with these names, they are
|
|
70
|
+
* automatically tracked as subagent executions. This enables the
|
|
71
|
+
* `subagents`, `activeSubagents`, `getSubagent()`, and `getSubagentsByType()`
|
|
72
|
+
* properties on the stream.
|
|
73
|
+
*
|
|
74
|
+
* @default ["task"]
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* // Track both "task" and "delegate" as subagent tools
|
|
79
|
+
* subagentToolNames: ["task", "delegate", "spawn_agent"]
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
subagentToolNames?: string[];
|
|
83
|
+
/**
|
|
84
|
+
* Filter out messages from subagent streams in the main messages array.
|
|
85
|
+
*
|
|
86
|
+
* When enabled, messages from subagraph executions (those with a `tools:` namespace)
|
|
87
|
+
* are excluded from `stream.messages`. Instead, these messages are tracked
|
|
88
|
+
* per-subagent and accessible via `stream.subagents.get(id).messages`.
|
|
89
|
+
*
|
|
90
|
+
* This is useful for deep agent architectures where you want to display
|
|
91
|
+
* the main conversation separately from subagent activity.
|
|
92
|
+
*
|
|
93
|
+
* @default false
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const stream = useStream({
|
|
98
|
+
* assistantId: "my-agent",
|
|
99
|
+
* filterSubagentMessages: true,
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* // Main thread messages only (no subagent messages)
|
|
103
|
+
* stream.messages
|
|
104
|
+
*
|
|
105
|
+
* // Access subagent messages individually
|
|
106
|
+
* stream.subagents.get("call_xyz").messages
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
filterSubagentMessages?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Converts a @langchain/core BaseMessage to the desired output format.
|
|
112
|
+
*
|
|
113
|
+
* Defaults to `toMessageDict` which produces plain Message objects.
|
|
114
|
+
* Framework SDKs pass `toMessageClass` (identity) to keep class instances.
|
|
115
|
+
*/
|
|
116
|
+
toMessage?: (chunk: BaseMessage) => Message | BaseMessage;
|
|
117
|
+
}
|
|
118
|
+
declare class StreamManager<StateType extends Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
|
|
119
|
+
private abortRef;
|
|
120
|
+
private messages;
|
|
121
|
+
private subagentManager;
|
|
122
|
+
private listeners;
|
|
123
|
+
private throttle;
|
|
124
|
+
private filterSubagentMessages;
|
|
125
|
+
private toMessage;
|
|
126
|
+
private queue;
|
|
127
|
+
private queueSize;
|
|
128
|
+
private state;
|
|
129
|
+
constructor(messages: MessageTupleManager, options: StreamManagerOptions);
|
|
130
|
+
/**
|
|
131
|
+
* Increment version counter to trigger React re-renders.
|
|
132
|
+
* Called when subagent state changes.
|
|
133
|
+
*/
|
|
134
|
+
private bumpVersion;
|
|
135
|
+
/**
|
|
136
|
+
* Get all subagents as a Map.
|
|
137
|
+
*/
|
|
138
|
+
getSubagents(): Map<string, SubagentStreamInterface>;
|
|
139
|
+
/**
|
|
140
|
+
* Get all currently running subagents.
|
|
141
|
+
*/
|
|
142
|
+
getActiveSubagents(): SubagentStreamInterface[];
|
|
143
|
+
/**
|
|
144
|
+
* Get a specific subagent by tool call ID.
|
|
145
|
+
*/
|
|
146
|
+
getSubagent(toolCallId: string): SubagentStreamInterface | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Get all subagents of a specific type.
|
|
149
|
+
*/
|
|
150
|
+
getSubagentsByType(type: string): SubagentStreamInterface[];
|
|
151
|
+
/**
|
|
152
|
+
* Get all subagents triggered by a specific AI message.
|
|
153
|
+
*/
|
|
154
|
+
getSubagentsByMessage(messageId: string): SubagentStreamInterface[];
|
|
155
|
+
/**
|
|
156
|
+
* Reconstruct subagent state from historical messages.
|
|
157
|
+
*
|
|
158
|
+
* This method should be called when loading thread history to restore
|
|
159
|
+
* subagent visualization after:
|
|
160
|
+
* - Page refresh (when stream has already completed)
|
|
161
|
+
* - Loading thread history
|
|
162
|
+
* - Navigating between threads
|
|
163
|
+
*
|
|
164
|
+
* @param messages - Array of messages from thread history
|
|
165
|
+
* @param options - Optional configuration
|
|
166
|
+
* @param options.skipIfPopulated - If true, skip reconstruction if subagents already exist
|
|
167
|
+
*/
|
|
168
|
+
reconstructSubagents(messages: Message[], options?: {
|
|
169
|
+
skipIfPopulated?: boolean;
|
|
170
|
+
}): void;
|
|
171
|
+
/**
|
|
172
|
+
* Check if any subagents are currently tracked.
|
|
173
|
+
*/
|
|
174
|
+
hasSubagents(): boolean;
|
|
175
|
+
private setState;
|
|
176
|
+
private notifyListeners;
|
|
177
|
+
subscribe: (listener: () => void) => () => void;
|
|
178
|
+
getSnapshot: () => {
|
|
179
|
+
isLoading: boolean;
|
|
180
|
+
values: [values: StateType, kind: "stop" | "stream"] | null;
|
|
181
|
+
error: unknown; /** Version counter to force React re-renders on subagent changes */
|
|
182
|
+
version: number;
|
|
183
|
+
};
|
|
184
|
+
get isLoading(): boolean;
|
|
185
|
+
get values(): StateType | null;
|
|
186
|
+
get error(): unknown;
|
|
187
|
+
setStreamValues: (values: StateType | ((prev: StateType | null, kind: "stop" | "stream") => StateType | null) | null, kind?: "stop" | "stream") => void;
|
|
188
|
+
private getMutateFn;
|
|
189
|
+
private matchEventType;
|
|
190
|
+
protected enqueue: (action: (signal: AbortSignal) => Promise<AsyncGenerator<EventStreamEvent<StateType, GetUpdateType<Bag, StateType>, GetCustomEventType<Bag>>, any, any>>, options: {
|
|
191
|
+
getMessages: (values: StateType) => Message[];
|
|
192
|
+
setMessages: (current: StateType, messages: Message[]) => StateType;
|
|
193
|
+
initialValues: StateType;
|
|
194
|
+
callbacks: StreamManagerEventCallbacks<StateType, Bag>;
|
|
195
|
+
onSuccess: () => void | StateType | Promise<void | StateType | null | undefined> | null | undefined;
|
|
196
|
+
onError: (error: unknown) => void | Promise<void>;
|
|
197
|
+
onFinish?: (() => void) | undefined;
|
|
198
|
+
}) => Promise<void>;
|
|
199
|
+
start: (action: (signal: AbortSignal) => Promise<AsyncGenerator<EventStreamEvent<StateType, GetUpdateType<Bag, StateType>, GetCustomEventType<Bag>>, any, any>>, options: {
|
|
200
|
+
getMessages: (values: StateType) => Message[];
|
|
201
|
+
setMessages: (current: StateType, messages: Message[]) => StateType;
|
|
202
|
+
initialValues: StateType;
|
|
203
|
+
callbacks: StreamManagerEventCallbacks<StateType, Bag>;
|
|
204
|
+
onSuccess: () => void | StateType | Promise<void | StateType | null | undefined> | null | undefined;
|
|
205
|
+
onError: (error: unknown) => void | Promise<void>;
|
|
206
|
+
onFinish?: (() => void) | undefined;
|
|
207
|
+
}, startOptions?: {
|
|
208
|
+
/**
|
|
209
|
+
* If true, abort any currently running stream before starting this one.
|
|
210
|
+
* Used for multitask_strategy: "interrupt" and "rollback" to unblock
|
|
211
|
+
* the queue so the new run request can proceed immediately.
|
|
212
|
+
*/
|
|
213
|
+
abortPrevious?: boolean | undefined;
|
|
214
|
+
} | undefined) => Promise<void>;
|
|
215
|
+
stop: (historyValues: StateType, options: {
|
|
216
|
+
onStop?: ((options: {
|
|
217
|
+
mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
|
|
218
|
+
}) => void) | undefined;
|
|
219
|
+
}) => Promise<void>;
|
|
220
|
+
clear: () => void;
|
|
221
|
+
}
|
|
222
|
+
//#endregion
|
|
223
|
+
export { EventStreamEvent, StreamManager };
|
|
224
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","names":[],"sources":["../../src/ui/manager.ts"],"mappings":"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"}
|
package/dist/ui/manager.js
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { StreamError } from "./errors.js";
|
|
2
2
|
import { toMessageDict } from "./messages.js";
|
|
3
3
|
import { SubagentManager, extractToolCallIdFromNamespace, isSubagentNamespace } from "./subagents.js";
|
|
4
|
-
|
|
5
|
-
//#region src/ui/manager.ts
|
|
6
|
-
/**
|
|
7
|
-
* Special ID used by LangGraph's messagesStateReducer to signal
|
|
8
|
-
* that all messages should be removed from the state.
|
|
9
|
-
*/
|
|
10
|
-
const REMOVE_ALL_MESSAGES = "__remove_all__";
|
|
11
4
|
var StreamManager = class {
|
|
12
5
|
abortRef = new AbortController();
|
|
13
6
|
messages;
|
|
@@ -15,6 +8,7 @@ var StreamManager = class {
|
|
|
15
8
|
listeners = /* @__PURE__ */ new Set();
|
|
16
9
|
throttle;
|
|
17
10
|
filterSubagentMessages;
|
|
11
|
+
toMessage;
|
|
18
12
|
queue = Promise.resolve();
|
|
19
13
|
queueSize = 0;
|
|
20
14
|
state;
|
|
@@ -28,9 +22,11 @@ var StreamManager = class {
|
|
|
28
22
|
};
|
|
29
23
|
this.throttle = options.throttle;
|
|
30
24
|
this.filterSubagentMessages = options.filterSubagentMessages ?? false;
|
|
25
|
+
this.toMessage = options.toMessage ?? toMessageDict;
|
|
31
26
|
this.subagentManager = new SubagentManager({
|
|
32
27
|
subagentToolNames: options.subagentToolNames,
|
|
33
|
-
onSubagentChange: () => this.bumpVersion()
|
|
28
|
+
onSubagentChange: () => this.bumpVersion(),
|
|
29
|
+
toMessage: this.toMessage
|
|
34
30
|
});
|
|
35
31
|
}
|
|
36
32
|
/**
|
|
@@ -260,10 +256,10 @@ var StreamManager = class {
|
|
|
260
256
|
let messages = options.getMessages(values).slice();
|
|
261
257
|
const { chunk, index } = this.messages.get(messageId, messages.length) ?? {};
|
|
262
258
|
if (!chunk || index == null) return values;
|
|
263
|
-
if (chunk.getType() === "remove") if (chunk.id ===
|
|
259
|
+
if (chunk.getType() === "remove") if (chunk.id === "__remove_all__") messages = [];
|
|
264
260
|
else messages.splice(index, 1);
|
|
265
261
|
else {
|
|
266
|
-
const msgDict =
|
|
262
|
+
const msgDict = this.toMessage(chunk);
|
|
267
263
|
messages[index] = msgDict;
|
|
268
264
|
if (!isFromSubagent && msgDict.type === "ai" && "tool_calls" in msgDict && Array.isArray(msgDict.tool_calls)) this.subagentManager.registerFromToolCalls(msgDict.tool_calls, msgDict.id);
|
|
269
265
|
if (!isFromSubagent && msgDict.type === "tool" && "tool_call_id" in msgDict) {
|
|
@@ -297,7 +293,9 @@ var StreamManager = class {
|
|
|
297
293
|
start = async (action, options, startOptions) => {
|
|
298
294
|
if (startOptions?.abortPrevious) this.abortRef.abort();
|
|
299
295
|
this.queueSize += 1;
|
|
300
|
-
|
|
296
|
+
const queued = this.queue.then(() => this.enqueue(action, options));
|
|
297
|
+
this.queue = queued;
|
|
298
|
+
await queued;
|
|
301
299
|
};
|
|
302
300
|
stop = async (historyValues, options) => {
|
|
303
301
|
this.abortRef.abort();
|
|
@@ -316,7 +314,7 @@ var StreamManager = class {
|
|
|
316
314
|
this.subagentManager.clear();
|
|
317
315
|
};
|
|
318
316
|
};
|
|
319
|
-
|
|
320
317
|
//#endregion
|
|
321
318
|
export { StreamManager };
|
|
319
|
+
|
|
322
320
|
//# sourceMappingURL=manager.js.map
|