@langchain/langgraph-sdk 1.6.4 → 1.7.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/client.cjs +4 -2
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +7 -0
- package/dist/client.d.cts.map +1 -1
- package/dist/client.d.ts +7 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -2
- package/dist/client.js.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/react/index.cjs +46 -10
- 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 +14 -4
- package/dist/react/index.js.map +1 -0
- package/dist/react-ui/index.cjs +38 -13
- package/dist/react-ui/index.d.cts +1 -2
- package/dist/react-ui/index.d.ts +1 -2
- package/dist/react-ui/index.js +2 -8
- package/dist/react-ui/server/index.cjs +14 -4
- 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 +1 -2
- package/dist/schema.d.cts +2 -0
- package/dist/schema.d.cts.map +1 -1
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.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/types.stream.d.cts +40 -2
- package/dist/types.stream.d.cts.map +1 -1
- package/dist/types.stream.d.ts +40 -2
- package/dist/types.stream.d.ts.map +1 -1
- package/dist/ui/branching.cjs +24 -0
- 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 -1
- package/dist/ui/branching.js.map +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 +11 -0
- package/dist/ui/interrupts.cjs +21 -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 +12 -3
- 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 +12 -3
- package/dist/ui/manager.js.map +1 -1
- package/dist/ui/messages.cjs +19 -0
- package/dist/ui/messages.cjs.map +1 -1
- package/dist/ui/messages.d.cts +36 -0
- package/dist/ui/messages.d.cts.map +1 -0
- package/dist/ui/messages.d.ts +36 -0
- package/dist/ui/messages.d.ts.map +1 -0
- package/dist/ui/messages.js +18 -1
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/queue.cjs +75 -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 +17 -1
- package/dist/ui/stream/base.d.cts.map +1 -1
- package/dist/ui/stream/base.d.ts +17 -1
- 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 +4 -1
- 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 +4 -1
- package/dist/ui/subagents.js.map +1 -1
- package/dist/ui/transport.cjs +31 -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 +31 -0
- package/dist/ui/transport.js.map +1 -0
- package/dist/ui/types.d.cts +134 -18
- package/dist/ui/types.d.cts.map +1 -1
- package/dist/ui/types.d.ts +134 -18
- package/dist/ui/types.d.ts.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/utils/index.cjs +9 -0
- package/dist/utils/index.d.cts +4 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +5 -0
- 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/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/tools.cjs +26 -17
- 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 +26 -17
- package/dist/utils/tools.js.map +1 -1
- package/package.json +42 -13
- 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 -482
- package/dist/react/stream.lgp.cjs.map +0 -1
- package/dist/react/stream.lgp.js +0 -481
- 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 -75
- package/dist/react/types.d.cts.map +0 -1
- package/dist/react/types.d.ts +0 -75
- 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
|
@@ -15,6 +15,7 @@ var StreamManager = class {
|
|
|
15
15
|
listeners = /* @__PURE__ */ new Set();
|
|
16
16
|
throttle;
|
|
17
17
|
filterSubagentMessages;
|
|
18
|
+
toMessage;
|
|
18
19
|
queue = Promise.resolve();
|
|
19
20
|
queueSize = 0;
|
|
20
21
|
state;
|
|
@@ -28,9 +29,11 @@ var StreamManager = class {
|
|
|
28
29
|
};
|
|
29
30
|
this.throttle = options.throttle;
|
|
30
31
|
this.filterSubagentMessages = options.filterSubagentMessages ?? false;
|
|
32
|
+
this.toMessage = options.toMessage ?? toMessageDict;
|
|
31
33
|
this.subagentManager = new SubagentManager({
|
|
32
34
|
subagentToolNames: options.subagentToolNames,
|
|
33
|
-
onSubagentChange: () => this.bumpVersion()
|
|
35
|
+
onSubagentChange: () => this.bumpVersion(),
|
|
36
|
+
toMessage: this.toMessage
|
|
34
37
|
});
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
@@ -215,6 +218,10 @@ var StreamManager = class {
|
|
|
215
218
|
if (this.matchEventType("checkpoints", event, data)) options.callbacks.onCheckpointEvent?.(data, { namespace });
|
|
216
219
|
if (this.matchEventType("tasks", event, data)) options.callbacks.onTaskEvent?.(data, { namespace });
|
|
217
220
|
if (this.matchEventType("debug", event, data)) options.callbacks.onDebugEvent?.(data, { namespace });
|
|
221
|
+
if (this.matchEventType("tools", event, data)) options.callbacks.onToolEvent?.(data, {
|
|
222
|
+
namespace,
|
|
223
|
+
mutate
|
|
224
|
+
});
|
|
218
225
|
if (event === "values" || event.startsWith("values|")) if (namespace && isSubagentNamespace(namespace)) {
|
|
219
226
|
const namespaceId = extractToolCallIdFromNamespace(namespace);
|
|
220
227
|
if (namespaceId && this.filterSubagentMessages) {
|
|
@@ -259,7 +266,7 @@ var StreamManager = class {
|
|
|
259
266
|
if (chunk.getType() === "remove") if (chunk.id === REMOVE_ALL_MESSAGES) messages = [];
|
|
260
267
|
else messages.splice(index, 1);
|
|
261
268
|
else {
|
|
262
|
-
const msgDict =
|
|
269
|
+
const msgDict = this.toMessage(chunk);
|
|
263
270
|
messages[index] = msgDict;
|
|
264
271
|
if (!isFromSubagent && msgDict.type === "ai" && "tool_calls" in msgDict && Array.isArray(msgDict.tool_calls)) this.subagentManager.registerFromToolCalls(msgDict.tool_calls, msgDict.id);
|
|
265
272
|
if (!isFromSubagent && msgDict.type === "tool" && "tool_call_id" in msgDict) {
|
|
@@ -293,7 +300,9 @@ var StreamManager = class {
|
|
|
293
300
|
start = async (action, options, startOptions) => {
|
|
294
301
|
if (startOptions?.abortPrevious) this.abortRef.abort();
|
|
295
302
|
this.queueSize += 1;
|
|
296
|
-
|
|
303
|
+
const queued = this.queue.then(() => this.enqueue(action, options));
|
|
304
|
+
this.queue = queued;
|
|
305
|
+
await queued;
|
|
297
306
|
};
|
|
298
307
|
stop = async (historyValues, options) => {
|
|
299
308
|
this.abortRef.abort();
|