@langchain/vue 0.0.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;KA0uBK,uBAAA,MACH,CAAA,SAAU,oBAAA,+BACN,oBAAA,CAAoB,EAAA,EAAI,WAAA,EAAiB,SAAA,IACzC,CAAA;AAlrB0B;;;;;;;;;AAAA,KA6rB3B,iBAAA,oBACS,CAAA,GAAI,CAAA,sBACZ,WAAA,CAAY,WAAA,MACZ,CAAA,kCAEI,OAAA,EAAS,WAAA,EACT,KAAA,cACG,iBAAA,CAAgB,MAAA,iCACrB,CAAA,uBACE,CAAA,CAAE,CAAA,yBACA,GAAA,CAAI,uBAAA,CAAwB,EAAA,OAC5B,GAAA,CAAI,CAAA,CAAE,CAAA,KACR,CAAA,0BACE,CAAA,CAAE,CAAA,YAAY,OAAA,gCACX,OAAA,EAAS,SAAA,KAAkB,uBAAA,CAAwB,EAAA,MACpD,CAAA,CAAE,CAAA,IACJ,CAAA,CAAE,CAAA,eAAe,IAAA,6BACT,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,GAAA,CAAI,CAAA,CAAE,CAAA;AAAA,iBAGN,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAoD/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,23 +1,38 @@
1
1
  import { ComputedRef, Ref } from "vue";
2
- import { AgentTypeConfigLike, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetToolCallsType, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentManager, SubagentStateMap, SubagentStatus, SubagentToolCall, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
2
+ import { AcceptBaseMessages, AgentTypeConfigLike, BaseStream, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, FetchStreamTransport, GetToolCallsType, InferAgentToolCalls, InferBag, InferBag as InferBag$1, InferDeepAgentSubagents, InferNodeNames, InferStateType, InferStateType as InferStateType$1, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageMetadata as MessageMetadata$1, QueueEntry, QueueInterface, ResolveStreamInterface, ResolveStreamInterface as ResolveStreamInterface$1, ResolveStreamOptions, ResolveStreamOptions as ResolveStreamOptions$1, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentStreamInterface as SubagentStreamInterface$1, SubagentToolCall, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamCustomOptions as UseStreamCustomOptions$1, UseStreamOptions, UseStreamThread, UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "@langchain/langgraph-sdk/ui";
3
3
  import { BagTemplate, DefaultToolCall, DefaultToolCall as DefaultToolCall$1, ToolCallFromTool, ToolCallState, ToolCallWithResult as ToolCallWithResult$1, ToolCallsFromTools } from "@langchain/langgraph-sdk";
4
4
  import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
5
5
 
6
6
  //#region src/index.d.ts
7
7
  type ClassToolCallWithResult<T> = T extends ToolCallWithResult$1<infer TC, unknown, unknown> ? ToolCallWithResult$1<TC, ToolMessage, AIMessage> : T;
8
+ type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall$1, SubagentName extends string = string> = Omit<SubagentStreamInterface$1<StateType, ToolCall, SubagentName>, "messages"> & {
9
+ messages: BaseMessage[];
10
+ };
8
11
  /**
9
12
  * Maps a stream interface to Vue-reactive types:
10
13
  * - `messages` becomes `ComputedRef<BaseMessage[]>`
11
14
  * - `getMessagesMetadata` accepts `BaseMessage`
12
15
  * - `toolCalls` uses `@langchain/core` message classes, wrapped in `Ref`
13
16
  * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results
17
+ * - `queue` properties are individually mapped (reactive → `Ref`, functions unchanged)
18
+ * - `client`, `assistantId`, `subagents`, `activeSubagents` remain unwrapped
14
19
  * - Functions remain unchanged
15
20
  * - All other properties are wrapped in `Ref<T>` to match Vue's reactivity
16
21
  */
17
- type WithClassMessages<T> = { [K in keyof T]: K extends "messages" ? ComputedRef<BaseMessage[]> : K extends "getMessagesMetadata" ? (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined : K extends "toolCalls" ? T[K] extends (infer TC)[] ? Ref<ClassToolCallWithResult<TC>[]> : Ref<T[K]> : K extends "getToolCalls" ? T[K] extends ((message: infer _M) => (infer TC)[]) ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : T[K] : T[K] extends ((...args: infer A) => infer R) ? (...args: A) => R : Ref<T[K]> };
22
+ type WithClassMessages<T> = { [K in keyof T as K extends "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage" ? never : K]: K extends "messages" ? ComputedRef<BaseMessage[]> : K extends "getMessagesMetadata" ? (message: BaseMessage, index?: number) => MessageMetadata$1<Record<string, unknown>> | undefined : K extends "toolCalls" ? T[K] extends (infer TC)[] ? Ref<ClassToolCallWithResult<TC>[]> : Ref<T[K]> : K extends "getToolCalls" ? T[K] extends ((message: infer _M) => (infer TC)[]) ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : T[K] : K extends "queue" ? { [QK in keyof T[K]]: T[K][QK] extends ((...args: infer A) => infer R) ? (...args: A) => R : Ref<T[K][QK]> } : K extends "client" | "assistantId" ? T[K] : K extends "subagents" ? T[K] extends Map<string, SubagentStreamInterface$1<infer S, infer TC, infer N>> ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : T[K] : K extends "activeSubagents" ? T[K] extends SubagentStreamInterface$1<infer S, infer TC, infer N>[] ? ClassSubagentStreamInterface<S, TC, N>[] : T[K] : K extends "submit" ? T[K] extends ((values: infer V, options?: infer O) => infer Ret) ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : T[K] : T[K] extends ((...args: infer A) => infer R) ? (...args: A) => R : Ref<T[K]> } & ("subagents" extends keyof T ? {
23
+ getSubagent: T extends {
24
+ getSubagent: (id: string) => SubagentStreamInterface$1<infer S, infer TC, infer N> | undefined;
25
+ } ? (toolCallId: string) => ClassSubagentStreamInterface<S, TC, N> | undefined : never;
26
+ getSubagentsByType: T extends {
27
+ getSubagentsByType: (type: string) => SubagentStreamInterface$1<infer S, infer TC, infer N>[];
28
+ } ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[] : never;
29
+ getSubagentsByMessage: T extends {
30
+ getSubagentsByMessage: (id: string) => SubagentStreamInterface$1<infer S, infer TC, infer N>[];
31
+ } ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[] : never;
32
+ } : unknown);
18
33
  declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: ResolveStreamOptions$1<T, InferBag$1<T, Bag>>): WithClassMessages<ResolveStreamInterface$1<T, InferBag$1<T, Bag>>>;
19
34
  declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: UseStreamCustomOptions$1<InferStateType$1<T>, InferBag$1<T, Bag>>): WithClassMessages<ResolveStreamInterface$1<T, InferBag$1<T, Bag>>>;
20
35
  type ToolCallWithResult<ToolCall = DefaultToolCall$1> = ToolCallWithResult$1<ToolCall, ToolMessage, AIMessage>;
21
36
  //#endregion
22
- export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type QueueEntry, type QueueInterface, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
37
+ export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, ClassSubagentStreamInterface, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type QueueEntry, type QueueInterface, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, type SubagentApi, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
23
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;KA0uBK,uBAAA,MACH,CAAA,SAAU,oBAAA,+BACN,oBAAA,CAAoB,EAAA,EAAI,WAAA,EAAiB,SAAA,IACzC,CAAA;AAlrB0B;;;;;;;;;AAAA,KA6rB3B,iBAAA,oBACS,CAAA,GAAI,CAAA,sBACZ,WAAA,CAAY,WAAA,MACZ,CAAA,kCAEI,OAAA,EAAS,WAAA,EACT,KAAA,cACG,iBAAA,CAAgB,MAAA,iCACrB,CAAA,uBACE,CAAA,CAAE,CAAA,yBACA,GAAA,CAAI,uBAAA,CAAwB,EAAA,OAC5B,GAAA,CAAI,CAAA,CAAE,CAAA,KACR,CAAA,0BACE,CAAA,CAAE,CAAA,YAAY,OAAA,gCACX,OAAA,EAAS,SAAA,KAAkB,uBAAA,CAAwB,EAAA,MACpD,CAAA,CAAE,CAAA,IACJ,CAAA,CAAE,CAAA,eAAe,IAAA,6BACT,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,GAAA,CAAI,CAAA,CAAE,CAAA;AAAA,iBAGN,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAoD/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { useStreamCustom } from "./stream.custom.js";
2
- import { computed, onMounted, onUnmounted, ref, shallowRef, watch } from "vue";
3
- import { FetchStreamTransport, MessageTupleManager, PendingRunsTracker, StreamError, StreamManager, SubagentManager, calculateDepthFromNamespace, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass, unique } from "@langchain/langgraph-sdk/ui";
2
+ import { computed, onScopeDispose, ref, shallowRef, watch } from "vue";
3
+ import { FetchStreamTransport, MessageTupleManager, PendingRunsTracker, StreamError, StreamManager, SubagentManager, calculateDepthFromNamespace, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass, unique } from "@langchain/langgraph-sdk/ui";
4
4
  import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
5
5
  import { Client } from "@langchain/langgraph-sdk";
6
-
7
6
  //#region src/index.ts
8
7
  function fetchHistory(client, threadId, options) {
9
8
  if (options?.limit === false) return client.threads.getState(threadId).then((state) => {
@@ -34,6 +33,7 @@ function useStreamLGP(options) {
34
33
  };
35
34
  const historyLimit = typeof options.fetchStateHistory === "object" && options.fetchStateHistory != null ? options.fetchStateHistory.limit ?? false : options.fetchStateHistory ?? false;
36
35
  const threadId = ref(void 0);
36
+ let threadIdPromise = null;
37
37
  const client = options.client ?? new Client({ apiUrl: options.apiUrl });
38
38
  const history = shallowRef({
39
39
  data: void 0,
@@ -79,6 +79,17 @@ function useStreamLGP(options) {
79
79
  const pendingRuns = new PendingRunsTracker();
80
80
  const queueEntries = shallowRef(pendingRuns.entries);
81
81
  const queueSize = ref(pendingRuns.size);
82
+ const trackedStreamModes = [];
83
+ function trackStreamMode(...modes) {
84
+ for (const mode of modes) if (!trackedStreamModes.includes(mode)) trackedStreamModes.push(mode);
85
+ }
86
+ const callbackStreamModes = [];
87
+ if (options.onUpdateEvent) callbackStreamModes.push("updates");
88
+ if (options.onCustomEvent) callbackStreamModes.push("custom");
89
+ if (options.onCheckpointEvent) callbackStreamModes.push("checkpoints");
90
+ if (options.onTaskEvent) callbackStreamModes.push("tasks");
91
+ if ("onDebugEvent" in options && options.onDebugEvent) callbackStreamModes.push("debug");
92
+ if ("onLangChainEvent" in options && options.onLangChainEvent) callbackStreamModes.push("events");
82
93
  const historyValues = computed(() => branchContext.value.threadHead?.values ?? options.initialValues ?? {});
83
94
  const historyError = computed(() => {
84
95
  const error = branchContext.value.threadHead?.tasks?.at(-1)?.error;
@@ -101,18 +112,21 @@ function useStreamLGP(options) {
101
112
  getMessages,
102
113
  branchContext: branchContext.value
103
114
  }));
115
+ const subagentVersion = shallowRef(0);
104
116
  const unsubscribe = stream.subscribe(() => {
105
117
  streamValues.value = stream.values;
106
118
  streamError.value = stream.error;
107
119
  isLoading.value = stream.isLoading;
120
+ subagentVersion.value += 1;
108
121
  });
109
122
  const unsubQueue = pendingRuns.subscribe(() => {
110
123
  queueEntries.value = pendingRuns.entries;
111
124
  queueSize.value = pendingRuns.size;
112
125
  });
113
- onUnmounted(() => {
126
+ onScopeDispose(() => {
114
127
  unsubscribe();
115
128
  unsubQueue();
129
+ stop();
116
130
  });
117
131
  watch(() => {
118
132
  const hvMessages = getMessages(historyValues.value);
@@ -183,24 +197,22 @@ function useStreamLGP(options) {
183
197
  return stream.start(async (signal) => {
184
198
  usableThreadId = threadId.value;
185
199
  if (!usableThreadId) {
186
- usableThreadId = (await client.threads.create({
200
+ const threadPromise = client.threads.create({
187
201
  threadId: submitOptions?.threadId,
188
202
  metadata: submitOptions?.metadata
189
- })).thread_id;
203
+ });
204
+ threadIdPromise = threadPromise.then((t) => t.thread_id);
205
+ usableThreadId = (await threadPromise).thread_id;
190
206
  threadId.value = usableThreadId;
191
207
  options.onThreadId?.(usableThreadId);
192
208
  }
193
209
  const streamMode = unique([
194
- ...submitOptions?.streamMode ?? [],
195
210
  "values",
196
- "messages-tuple"
211
+ "updates",
212
+ ...submitOptions?.streamMode ?? [],
213
+ ...trackedStreamModes,
214
+ ...callbackStreamModes
197
215
  ]);
198
- if (options.onUpdateEvent && !streamMode.includes("updates")) streamMode.push("updates");
199
- if (options.onCustomEvent && !streamMode.includes("custom")) streamMode.push("custom");
200
- if (options.onCheckpointEvent && !streamMode.includes("checkpoints")) streamMode.push("checkpoints");
201
- if (options.onTaskEvent && !streamMode.includes("tasks")) streamMode.push("tasks");
202
- if ("onDebugEvent" in options && options.onDebugEvent && !streamMode.includes("debug")) streamMode.push("debug");
203
- if ("onLangChainEvent" in options && options.onLangChainEvent && !streamMode.includes("events")) streamMode.push("events");
204
216
  stream.setStreamValues(() => {
205
217
  const prev = {
206
218
  ...historyValues.value,
@@ -257,25 +269,32 @@ function useStreamLGP(options) {
257
269
  }
258
270
  }
259
271
  },
260
- onError: (error) => options.onError?.(error, callbackMeta),
272
+ onError: (error) => {
273
+ options.onError?.(error, callbackMeta);
274
+ submitOptions?.onError?.(error, callbackMeta);
275
+ },
261
276
  onFinish: () => {}
262
277
  });
263
278
  }
264
279
  const submitting = ref(false);
265
- watch(() => ({
266
- loading: isLoading.value,
267
- submitting: submitting.value,
268
- size: pendingRuns.size
269
- }), ({ loading, submitting: s, size }) => {
270
- if (!loading && !s && size > 0) {
280
+ function drainQueue() {
281
+ if (!isLoading.value && !submitting.value && pendingRuns.size > 0) {
271
282
  const next = pendingRuns.shift();
272
283
  if (next) {
273
284
  submitting.value = true;
274
285
  joinStream(next.id).finally(() => {
275
286
  submitting.value = false;
287
+ drainQueue();
276
288
  });
277
289
  }
278
290
  }
291
+ }
292
+ watch(() => ({
293
+ loading: isLoading.value,
294
+ submitting: submitting.value,
295
+ size: pendingRuns.size
296
+ }), () => {
297
+ drainQueue();
279
298
  });
280
299
  async function submit(values, submitOptions) {
281
300
  if (stream.isLoading || submitting.value) {
@@ -288,27 +307,33 @@ function useStreamLGP(options) {
288
307
  }
289
308
  return;
290
309
  }
291
- const usableThreadId = threadId.value;
310
+ let usableThreadId = threadId.value;
311
+ if (!usableThreadId && threadIdPromise) usableThreadId = await threadIdPromise;
292
312
  if (usableThreadId) {
293
- const run = await client.runs.create(usableThreadId, options.assistantId, {
294
- input: values,
295
- config: submitOptions?.config,
296
- context: submitOptions?.context,
297
- command: submitOptions?.command,
298
- interruptBefore: submitOptions?.interruptBefore,
299
- interruptAfter: submitOptions?.interruptAfter,
300
- metadata: submitOptions?.metadata,
301
- multitaskStrategy: "enqueue",
302
- streamResumable: true,
303
- streamSubgraphs: submitOptions?.streamSubgraphs,
304
- durability: submitOptions?.durability
305
- });
306
- pendingRuns.add({
307
- id: run.run_id,
308
- values,
309
- options: submitOptions,
310
- createdAt: new Date(run.created_at)
311
- });
313
+ try {
314
+ const run = await client.runs.create(usableThreadId, options.assistantId, {
315
+ input: values,
316
+ config: submitOptions?.config,
317
+ context: submitOptions?.context,
318
+ command: submitOptions?.command,
319
+ interruptBefore: submitOptions?.interruptBefore,
320
+ interruptAfter: submitOptions?.interruptAfter,
321
+ metadata: submitOptions?.metadata,
322
+ multitaskStrategy: "enqueue",
323
+ streamResumable: true,
324
+ streamSubgraphs: submitOptions?.streamSubgraphs,
325
+ durability: submitOptions?.durability
326
+ });
327
+ pendingRuns.add({
328
+ id: run.run_id,
329
+ values,
330
+ options: submitOptions,
331
+ createdAt: new Date(run.created_at)
332
+ });
333
+ } catch (error) {
334
+ options.onError?.(error, void 0);
335
+ submitOptions?.onError?.(error, void 0);
336
+ }
312
337
  return;
313
338
  }
314
339
  }
@@ -316,11 +341,12 @@ function useStreamLGP(options) {
316
341
  const result = submitDirect(values, submitOptions);
317
342
  Promise.resolve(result).finally(() => {
318
343
  submitting.value = false;
344
+ drainQueue();
319
345
  });
320
346
  return result;
321
347
  }
322
348
  let shouldReconnect = !!runMetadataStorage;
323
- onMounted(() => {
349
+ function tryReconnect() {
324
350
  if (shouldReconnect && runMetadataStorage && threadId.value) {
325
351
  const runId = runMetadataStorage.getItem(`lg:stream:${threadId.value}`);
326
352
  if (runId) {
@@ -328,12 +354,18 @@ function useStreamLGP(options) {
328
354
  joinStream(runId);
329
355
  }
330
356
  }
331
- });
357
+ }
358
+ tryReconnect();
332
359
  watch(() => threadId.value, () => {
333
360
  shouldReconnect = !!runMetadataStorage;
361
+ tryReconnect();
362
+ });
363
+ const toolCalls = computed(() => {
364
+ trackStreamMode("messages-tuple");
365
+ return getToolCallsWithResults(getMessages(values.value));
334
366
  });
335
- const toolCalls = computed(() => getToolCallsWithResults(getMessages(values.value)));
336
367
  function getToolCalls(message) {
368
+ trackStreamMode("messages-tuple");
337
369
  return getToolCallsWithResults(getMessages(values.value)).filter((tc) => tc.aiMessage.id === message.id);
338
370
  }
339
371
  const interrupts = computed(() => {
@@ -366,7 +398,10 @@ function useStreamLGP(options) {
366
398
  isLoading,
367
399
  branch,
368
400
  setBranch,
369
- messages: computed(() => getMessages(streamValues.value ?? historyValues.value)),
401
+ messages: computed(() => {
402
+ trackStreamMode("messages-tuple");
403
+ return ensureMessageInstances(getMessages(streamValues.value ?? historyValues.value));
404
+ }),
370
405
  toolCalls,
371
406
  getToolCalls,
372
407
  interrupt: computed(() => extractInterrupts(streamValues.value, {
@@ -415,9 +450,11 @@ function useStreamLGP(options) {
415
450
  }
416
451
  },
417
452
  get subagents() {
453
+ subagentVersion.value;
418
454
  return stream.getSubagents();
419
455
  },
420
456
  get activeSubagents() {
457
+ subagentVersion.value;
421
458
  return stream.getActiveSubagents();
422
459
  },
423
460
  getSubagent(toolCallId) {
@@ -435,7 +472,7 @@ function useStream(options) {
435
472
  if ("transport" in options) return useStreamCustom(options);
436
473
  return useStreamLGP(options);
437
474
  }
438
-
439
475
  //#endregion
440
476
  export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
477
+
441
478
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n computed,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n watch,\n type ComputedRef,\n type Ref,\n} from \"vue\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n filterStream,\n unique,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n FetchStreamTransport,\n toMessageClass,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type UseStreamCustomOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\n\nimport {\n Client,\n type StreamMode,\n type StreamEvent,\n type Message,\n type Interrupt,\n type BagTemplate,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\n\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport };\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nfunction useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const runMetadataStorage = (() => {\n if (typeof window === \"undefined\") return null;\n const storage = options.reconnectOnMount;\n if (storage === true) return window.sessionStorage;\n if (typeof storage === \"function\") return storage();\n return null;\n })();\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = ref<string | undefined>(undefined);\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = shallowRef<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? threadId.value;\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.value = {\n data,\n error: undefined,\n isLoading: false,\n mutate,\n };\n return data;\n } catch (err) {\n history.value = {\n ...history.value,\n error: err,\n isLoading: false,\n };\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.value = { ...history.value, mutate };\n\n const branch = ref<string>(\"\");\n const branchContext = computed(() =>\n getBranchContext(branch.value, history.value.data ?? undefined),\n );\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n const queueEntries = shallowRef(pendingRuns.entries);\n const queueSize = ref(pendingRuns.size);\n\n const historyValues = computed(\n () =>\n branchContext.value.threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = computed(() => {\n const error = branchContext.value.threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\n\n const streamValues = shallowRef<StateType | null>(stream.values);\n const streamError = shallowRef<unknown>(stream.error);\n const isLoading = shallowRef(stream.isLoading);\n\n const values = computed(() => streamValues.value ?? historyValues.value);\n const error = computed(\n () => streamError.value ?? historyError.value ?? history.value.error,\n );\n\n const messageMetadata = computed(() =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history.value.data,\n getMessages,\n branchContext: branchContext.value,\n }),\n );\n\n const unsubscribe = stream.subscribe(() => {\n streamValues.value = stream.values;\n streamError.value = stream.error;\n isLoading.value = stream.isLoading;\n });\n\n const unsubQueue = pendingRuns.subscribe(() => {\n queueEntries.value = pendingRuns.entries;\n queueSize.value = pendingRuns.size;\n });\n\n onUnmounted(() => {\n unsubscribe();\n unsubQueue();\n });\n\n watch(\n () => {\n const hvMessages = getMessages(historyValues.value);\n return {\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n !history.value.isLoading &&\n hvMessages.length > 0,\n len: hvMessages.length,\n };\n },\n ({ should }) => {\n if (should) {\n const hvMessages = getMessages(historyValues.value);\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n },\n { immediate: true },\n );\n\n function stop() {\n return stream.stop(historyValues.value, {\n onStop: (args) => {\n if (runMetadataStorage && threadId.value) {\n const runId = runMetadataStorage.getItem(\n `lg:stream:${threadId.value}`,\n );\n if (runId) void client.runs.cancel(threadId.value, runId);\n runMetadataStorage.removeItem(`lg:stream:${threadId.value}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.value = value;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n if (!threadId.value) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: threadId.value,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(threadId.value!, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues.value,\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${threadId.value}`);\n const newHistory = await mutate(threadId.value);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n },\n );\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = branchContext.value;\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.value =\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\";\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = threadId.value;\n if (!usableThreadId) {\n const thread = await client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n usableThreadId = thread.thread_id;\n threadId.value = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode = unique([\n ...(submitOptions?.streamMode ?? []),\n \"values\" as StreamMode,\n \"messages-tuple\" as StreamMode,\n ]);\n\n if (options.onUpdateEvent && !streamMode.includes(\"updates\"))\n streamMode.push(\"updates\");\n if (options.onCustomEvent && !streamMode.includes(\"custom\"))\n streamMode.push(\"custom\");\n if (options.onCheckpointEvent && !streamMode.includes(\"checkpoints\"))\n streamMode.push(\"checkpoints\");\n if (options.onTaskEvent && !streamMode.includes(\"tasks\"))\n streamMode.push(\"tasks\");\n if (\n \"onDebugEvent\" in options &&\n options.onDebugEvent &&\n !streamMode.includes(\"debug\")\n )\n streamMode.push(\"debug\");\n if (\n \"onLangChainEvent\" in options &&\n options.onLangChainEvent &&\n !streamMode.includes(\"events\")\n )\n streamMode.push(\"events\");\n\n stream.setStreamValues(() => {\n const prev = { ...historyValues.value, ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues.value,\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError: (error) => options.onError?.(error, callbackMeta),\n onFinish: () => {},\n },\n );\n }\n\n const submitting = ref(false);\n\n watch(\n () => ({\n loading: isLoading.value,\n submitting: submitting.value,\n size: pendingRuns.size,\n }),\n ({ loading, submitting: s, size }) => {\n if (!loading && !s && size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting.value = true;\n void joinStream(next.id).finally(() => {\n submitting.value = false;\n });\n }\n }\n },\n );\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting.value) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting.value = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting.value = false;\n }\n return;\n }\n\n const usableThreadId = threadId.value;\n if (usableThreadId) {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n return;\n }\n }\n\n submitting.value = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting.value = false;\n });\n return result;\n }\n\n // --- Auto-reconnect on mount ---\n let shouldReconnect = !!runMetadataStorage;\n\n onMounted(() => {\n if (shouldReconnect && runMetadataStorage && threadId.value) {\n const runId = runMetadataStorage.getItem(`lg:stream:${threadId.value}`);\n if (runId) {\n shouldReconnect = false;\n void joinStream(runId);\n }\n }\n });\n\n watch(\n () => threadId.value,\n () => {\n shouldReconnect = !!runMetadataStorage;\n },\n );\n\n const toolCalls = computed(() =>\n getToolCallsWithResults(getMessages(values.value)),\n );\n\n function getToolCalls(message: Message) {\n const allToolCalls = getToolCallsWithResults(getMessages(values.value));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const interrupts = computed((): Interrupt<InterruptType>[] => {\n const v = values.value;\n if (v != null && \"__interrupt__\" in v && Array.isArray(v.__interrupt__)) {\n const valueInterrupts = v.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if (isLoading.value) return [];\n\n const allTasks = branchContext.value.threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n if (allInterrupts.length > 0) {\n return allInterrupts as Interrupt<InterruptType>[];\n }\n\n const next = branchContext.value.threadHead?.next ?? [];\n if (!next.length || error.value != null) return [];\n return [{ when: \"breakpoint\" }];\n });\n\n const flatHistory = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return branchContext.value.flatHistory;\n });\n\n const isThreadLoading = computed(\n () => history.value.isLoading && history.value.data == null,\n );\n\n const experimentalBranchTree = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return branchContext.value.branchTree;\n });\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch,\n\n messages: computed(() =>\n getMessages(streamValues.value ?? historyValues.value),\n ),\n\n toolCalls,\n getToolCalls,\n\n interrupt: computed(() =>\n extractInterrupts<InterruptType>(streamValues.value, {\n isLoading: isLoading.value,\n threadState: branchContext.value.threadHead,\n error: streamError.value,\n }),\n ),\n\n interrupts,\n history: flatHistory,\n isThreadLoading,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata: (\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined => {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata.value?.find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n },\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = threadId.value;\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = threadId.value;\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(\n removed.map((e) => client.runs.cancel(tid, e.id)),\n );\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = threadId.value ?? null;\n if (newThreadId !== current) {\n const prevThreadId = threadId.value;\n threadId.value = newThreadId ?? undefined;\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\n/**\n * Maps a stream interface to Vue-reactive types:\n * - `messages` becomes `ComputedRef<BaseMessage[]>`\n * - `getMessagesMetadata` accepts `BaseMessage`\n * - `toolCalls` uses `@langchain/core` message classes, wrapped in `Ref`\n * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results\n * - Functions remain unchanged\n * - All other properties are wrapped in `Ref<T>` to match Vue's reactivity\n */\ntype WithClassMessages<T> = {\n [K in keyof T]: K extends \"messages\"\n ? ComputedRef<BaseMessage[]>\n : K extends \"getMessagesMetadata\"\n ? (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined\n : K extends \"toolCalls\"\n ? T[K] extends (infer TC)[]\n ? Ref<ClassToolCallWithResult<TC>[]>\n : Ref<T[K]>\n : K extends \"getToolCalls\"\n ? T[K] extends (message: infer _M) => (infer TC)[]\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : T[K]\n : T[K] extends (...args: infer A) => infer R\n ? (...args: A) => R\n : Ref<T[K]>;\n};\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n if (\"transport\" in options) {\n return useStreamCustom(options);\n }\n return useStreamLGP(options);\n}\n\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n computed,\n onScopeDispose,\n ref,\n shallowRef,\n watch,\n type ComputedRef,\n type Ref,\n} from \"vue\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport {\n StreamManager,\n MessageTupleManager,\n PendingRunsTracker,\n filterStream,\n unique,\n getBranchContext,\n getMessagesMetadataMap,\n StreamError,\n extractInterrupts,\n FetchStreamTransport,\n toMessageClass,\n ensureMessageInstances,\n type UseStreamThread,\n type GetConfigurableType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetUpdateType,\n type MessageMetadata,\n type AnyStreamOptions,\n type SubmitOptions,\n type EventStreamEvent,\n type RunCallbackMeta,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\n\nimport {\n Client,\n type StreamMode,\n type StreamEvent,\n type Message,\n type Interrupt,\n type BagTemplate,\n type ThreadState,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\n\nimport { useStreamCustom } from \"./stream.custom.js\";\n\nexport { FetchStreamTransport };\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number },\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nfunction useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const runMetadataStorage = (() => {\n if (typeof window === \"undefined\") return null;\n const storage = options.reconnectOnMount;\n if (storage === true) return window.sessionStorage;\n if (typeof storage === \"function\") return storage();\n return null;\n })();\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const threadId = ref<string | undefined>(undefined);\n let threadIdPromise: Promise<string> | null = null;\n\n const client = options.client ?? new Client({ apiUrl: options.apiUrl });\n\n const history = shallowRef<UseStreamThread<StateType>>({\n data: undefined,\n error: undefined,\n isLoading: false,\n mutate: async () => undefined,\n });\n\n async function mutate(\n mutateId?: string,\n ): Promise<ThreadState<StateType>[] | undefined> {\n const tid = mutateId ?? threadId.value;\n if (!tid) return undefined;\n try {\n const data = await fetchHistory<StateType>(client, tid, {\n limit: historyLimit,\n });\n history.value = {\n data,\n error: undefined,\n isLoading: false,\n mutate,\n };\n return data;\n } catch (err) {\n history.value = {\n ...history.value,\n error: err,\n isLoading: false,\n };\n options.onError?.(err, undefined);\n return undefined;\n }\n }\n\n history.value = { ...history.value, mutate };\n\n const branch = ref<string>(\"\");\n const branchContext = computed(() =>\n getBranchContext(branch.value, history.value.data ?? undefined),\n );\n\n const messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n const pendingRuns = new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >();\n const queueEntries = shallowRef(pendingRuns.entries);\n const queueSize = ref(pendingRuns.size);\n\n const trackedStreamModes: StreamMode[] = [];\n function trackStreamMode(...modes: StreamMode[]) {\n for (const mode of modes) {\n if (!trackedStreamModes.includes(mode)) {\n trackedStreamModes.push(mode);\n }\n }\n }\n\n const callbackStreamModes: StreamMode[] = [];\n if (options.onUpdateEvent) callbackStreamModes.push(\"updates\");\n if (options.onCustomEvent) callbackStreamModes.push(\"custom\");\n if (options.onCheckpointEvent) callbackStreamModes.push(\"checkpoints\");\n if (options.onTaskEvent) callbackStreamModes.push(\"tasks\");\n if (\"onDebugEvent\" in options && options.onDebugEvent)\n callbackStreamModes.push(\"debug\");\n if (\"onLangChainEvent\" in options && options.onLangChainEvent)\n callbackStreamModes.push(\"events\");\n\n const historyValues = computed(\n () =>\n branchContext.value.threadHead?.values ??\n options.initialValues ??\n ({} as StateType),\n );\n\n const historyError = computed(() => {\n const error = branchContext.value.threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n });\n\n const streamValues = shallowRef<StateType | null>(stream.values);\n const streamError = shallowRef<unknown>(stream.error);\n const isLoading = shallowRef(stream.isLoading);\n\n const values = computed(() => streamValues.value ?? historyValues.value);\n const error = computed(\n () => streamError.value ?? historyError.value ?? history.value.error,\n );\n\n const messageMetadata = computed(() =>\n getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history.value.data,\n getMessages,\n branchContext: branchContext.value,\n }),\n );\n\n const subagentVersion = shallowRef(0);\n\n const unsubscribe = stream.subscribe(() => {\n streamValues.value = stream.values;\n streamError.value = stream.error;\n isLoading.value = stream.isLoading;\n subagentVersion.value += 1;\n });\n\n const unsubQueue = pendingRuns.subscribe(() => {\n queueEntries.value = pendingRuns.entries;\n queueSize.value = pendingRuns.size;\n });\n\n onScopeDispose(() => {\n unsubscribe();\n unsubQueue();\n void stop();\n });\n\n watch(\n () => {\n const hvMessages = getMessages(historyValues.value);\n return {\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n !history.value.isLoading &&\n hvMessages.length > 0,\n len: hvMessages.length,\n };\n },\n ({ should }) => {\n if (should) {\n const hvMessages = getMessages(historyValues.value);\n stream.reconstructSubagents(hvMessages, { skipIfPopulated: true });\n }\n },\n { immediate: true },\n );\n\n function stop() {\n return stream.stop(historyValues.value, {\n onStop: (args) => {\n if (runMetadataStorage && threadId.value) {\n const runId = runMetadataStorage.getItem(\n `lg:stream:${threadId.value}`,\n );\n if (runId) void client.runs.cancel(threadId.value, runId);\n runMetadataStorage.removeItem(`lg:stream:${threadId.value}`);\n }\n\n options.onStop?.(args);\n },\n });\n }\n\n function setBranch(value: string) {\n branch.value = value;\n }\n\n async function joinStream(\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n },\n ) {\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n if (!threadId.value) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: threadId.value,\n run_id: runId,\n };\n\n await stream.start(\n async (signal: AbortSignal) => {\n const rawStream = client.runs.joinStream(threadId.value!, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(rawStream, joinOptions.filter)\n : rawStream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues.value,\n callbacks: options,\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${threadId.value}`);\n const newHistory = await mutate(threadId.value);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n },\n );\n }\n\n function submitDirect(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentBranchContext = branchContext.value;\n\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n branch.value =\n checkpointId != null\n ? (currentBranchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\";\n\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch = options.onFinish != null || includeImplicitBranch;\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? currentBranchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId: string | undefined;\n\n return stream.start(\n async (signal) => {\n usableThreadId = threadId.value;\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n });\n\n threadIdPromise = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n threadId.value = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n const streamMode = unique([\n \"values\" as StreamMode,\n \"updates\" as StreamMode,\n ...(submitOptions?.streamMode ?? []),\n ...trackedStreamModes,\n ...callbackStreamModes,\n ]);\n\n stream.setStreamValues(() => {\n const prev = { ...historyValues.value, ...stream.values };\n\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n return client.runs.stream(usableThreadId!, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues.value,\n callbacks: options,\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch && usableThreadId) {\n const newHistory = await mutate(usableThreadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n }\n return undefined;\n },\n onError: (error) => {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish: () => {},\n },\n );\n }\n\n const submitting = ref(false);\n\n function drainQueue() {\n if (!isLoading.value && !submitting.value && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submitting.value = true;\n void joinStream(next.id).finally(() => {\n submitting.value = false;\n drainQueue();\n });\n }\n }\n }\n\n watch(\n () => ({\n loading: isLoading.value,\n submitting: submitting.value,\n size: pendingRuns.size,\n }),\n () => {\n drainQueue();\n },\n );\n\n async function submit(\n values: StateType,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>,\n ) {\n if (stream.isLoading || submitting.value) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submitting.value = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submitting.value = false;\n }\n return;\n }\n\n let usableThreadId: string | undefined = threadId.value;\n if (!usableThreadId && threadIdPromise) {\n usableThreadId = await threadIdPromise;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n },\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submitting.value = true;\n const result = submitDirect(values, submitOptions);\n void Promise.resolve(result).finally(() => {\n submitting.value = false;\n drainQueue();\n });\n return result;\n }\n\n // --- Auto-reconnect ---\n let shouldReconnect = !!runMetadataStorage;\n\n function tryReconnect() {\n if (shouldReconnect && runMetadataStorage && threadId.value) {\n const runId = runMetadataStorage.getItem(`lg:stream:${threadId.value}`);\n if (runId) {\n shouldReconnect = false;\n void joinStream(runId);\n }\n }\n }\n\n tryReconnect();\n\n watch(\n () => threadId.value,\n () => {\n shouldReconnect = !!runMetadataStorage;\n tryReconnect();\n },\n );\n\n const toolCalls = computed(() => {\n trackStreamMode(\"messages-tuple\");\n return getToolCallsWithResults(getMessages(values.value));\n });\n\n function getToolCalls(message: Message) {\n trackStreamMode(\"messages-tuple\");\n const allToolCalls = getToolCallsWithResults(getMessages(values.value));\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n const interrupts = computed((): Interrupt<InterruptType>[] => {\n const v = values.value;\n if (v != null && \"__interrupt__\" in v && Array.isArray(v.__interrupt__)) {\n const valueInterrupts = v.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n if (isLoading.value) return [];\n\n const allTasks = branchContext.value.threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n if (allInterrupts.length > 0) {\n return allInterrupts as Interrupt<InterruptType>[];\n }\n\n const next = branchContext.value.threadHead?.next ?? [];\n if (!next.length || error.value != null) return [];\n return [{ when: \"breakpoint\" }];\n });\n\n const flatHistory = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\",\n );\n }\n return branchContext.value.flatHistory;\n });\n\n const isThreadLoading = computed(\n () => history.value.isLoading && history.value.data == null,\n );\n\n const experimentalBranchTree = computed(() => {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\",\n );\n }\n return branchContext.value.branchTree;\n });\n\n return {\n assistantId: options.assistantId,\n client,\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch,\n\n messages: computed(() => {\n trackStreamMode(\"messages-tuple\");\n return ensureMessageInstances(\n getMessages(streamValues.value ?? historyValues.value),\n );\n }),\n\n toolCalls,\n getToolCalls,\n\n interrupt: computed(() =>\n extractInterrupts<InterruptType>(streamValues.value, {\n isLoading: isLoading.value,\n threadState: branchContext.value.threadHead,\n error: streamError.value,\n }),\n ),\n\n interrupts,\n history: flatHistory,\n isThreadLoading,\n experimental_branchTree: experimentalBranchTree,\n\n getMessagesMetadata: (\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined => {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata.value?.find(\n (m) => m.messageId === (message.id ?? index),\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n },\n\n submit,\n stop,\n joinStream,\n\n queue: {\n entries: queueEntries,\n size: queueSize,\n async cancel(id: string) {\n const tid = threadId.value;\n const removed = pendingRuns.remove(id);\n if (removed && tid) {\n await client.runs.cancel(tid, id);\n }\n return removed;\n },\n async clear() {\n const tid = threadId.value;\n const removed = pendingRuns.removeAll();\n if (tid && removed.length > 0) {\n await Promise.all(removed.map((e) => client.runs.cancel(tid, e.id)));\n }\n },\n },\n\n switchThread(newThreadId: string | null) {\n const current = threadId.value ?? null;\n if (newThreadId !== current) {\n const prevThreadId = threadId.value;\n threadId.value = newThreadId ?? undefined;\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id)),\n );\n }\n\n if (newThreadId != null) {\n options.onThreadId?.(newThreadId);\n }\n }\n },\n\n get subagents() {\n void subagentVersion.value;\n return stream.getSubagents();\n },\n get activeSubagents() {\n void subagentVersion.value;\n return stream.getActiveSubagents();\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n\ntype ClassToolCallWithResult<T> =\n T extends _ToolCallWithResult<infer TC, unknown, unknown>\n ? _ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\n/**\n * Maps a stream interface to Vue-reactive types:\n * - `messages` becomes `ComputedRef<BaseMessage[]>`\n * - `getMessagesMetadata` accepts `BaseMessage`\n * - `toolCalls` uses `@langchain/core` message classes, wrapped in `Ref`\n * - `getToolCalls` accepts `CoreAIMessage`, returns class-based tool call results\n * - `queue` properties are individually mapped (reactive → `Ref`, functions unchanged)\n * - `client`, `assistantId`, `subagents`, `activeSubagents` remain unwrapped\n * - Functions remain unchanged\n * - All other properties are wrapped in `Ref<T>` to match Vue's reactivity\n */\ntype WithClassMessages<T> = {\n [K in keyof T as K extends\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n ? never\n : K]: K extends \"messages\"\n ? ComputedRef<BaseMessage[]>\n : K extends \"getMessagesMetadata\"\n ? (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined\n : K extends \"toolCalls\"\n ? T[K] extends (infer TC)[]\n ? Ref<ClassToolCallWithResult<TC>[]>\n : Ref<T[K]>\n : K extends \"getToolCalls\"\n ? T[K] extends (message: infer _M) => (infer TC)[]\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : T[K]\n : K extends \"queue\"\n ? {\n [QK in keyof T[K]]: T[K][QK] extends (\n ...args: infer A\n ) => infer R\n ? (...args: A) => R\n : Ref<T[K][QK]>;\n }\n : K extends \"client\" | \"assistantId\"\n ? T[K]\n : K extends \"subagents\"\n ? T[K] extends Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : T[K]\n : K extends \"activeSubagents\"\n ? T[K] extends SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[]\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : T[K]\n : K extends \"submit\"\n ? T[K] extends (\n values: infer V,\n options?: infer O,\n ) => infer Ret\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : T[K]\n : T[K] extends (...args: infer A) => infer R\n ? (...args: A) => R\n : Ref<T[K]>;\n} & (\"subagents\" extends keyof T\n ? {\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n if (\"transport\" in options) {\n return useStreamCustom(options);\n }\n return useStreamLGP(options);\n}\n\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubagentStream,\n SubagentApi,\n SubagentStreamInterface,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n QueueEntry,\n QueueInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nexport type ToolCallWithResult<ToolCall = DefaultToolCall> =\n _ToolCallWithResult<ToolCall, CoreToolMessage, CoreAIMessage>;\nexport type {\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  let vue = require("vue");
2
2
  let _langchain_langgraph_sdk_ui = require("@langchain/langgraph-sdk/ui");
3
3
  let _langchain_langgraph_sdk_utils = require("@langchain/langgraph-sdk/utils");
4
-
5
4
  //#region src/stream.custom.ts
6
5
  function useStreamCustom(options) {
7
- const stream = new _langchain_langgraph_sdk_ui.StreamManager(new _langchain_langgraph_sdk_ui.MessageTupleManager(), {
6
+ const messageManager = new _langchain_langgraph_sdk_ui.MessageTupleManager();
7
+ const stream = new _langchain_langgraph_sdk_ui.StreamManager(messageManager, {
8
8
  throttle: options.throttle ?? false,
9
9
  subagentToolNames: options.subagentToolNames,
10
10
  filterSubagentMessages: options.filterSubagentMessages,
@@ -13,14 +13,14 @@ function useStreamCustom(options) {
13
13
  const streamValues = (0, vue.shallowRef)(stream.values);
14
14
  const streamError = (0, vue.shallowRef)(stream.error);
15
15
  const isLoading = (0, vue.shallowRef)(stream.isLoading);
16
+ const subagentVersion = (0, vue.shallowRef)(0);
16
17
  const unsubscribe = stream.subscribe(() => {
17
18
  streamValues.value = stream.values;
18
19
  streamError.value = stream.error;
19
20
  isLoading.value = stream.isLoading;
21
+ subagentVersion.value += 1;
20
22
  });
21
- (0, vue.onUnmounted)(() => {
22
- unsubscribe();
23
- });
23
+ const branch = (0, vue.ref)("");
24
24
  let threadId = options.threadId ?? null;
25
25
  (0, vue.watch)(() => options.threadId, (newId) => {
26
26
  const resolved = newId ?? null;
@@ -28,7 +28,7 @@ function useStreamCustom(options) {
28
28
  threadId = resolved;
29
29
  stream.clear();
30
30
  }
31
- });
31
+ }, { flush: "sync" });
32
32
  const getMessages = (value) => {
33
33
  const messagesKey = options.messagesKey ?? "messages";
34
34
  return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];
@@ -41,6 +41,10 @@ function useStreamCustom(options) {
41
41
  };
42
42
  };
43
43
  const historyValues = options.initialValues ?? {};
44
+ (0, vue.onScopeDispose)(() => {
45
+ unsubscribe();
46
+ stream.stop(historyValues, { onStop: options.onStop });
47
+ });
44
48
  const historyMessages = getMessages(historyValues);
45
49
  options.filterSubagentMessages && !stream.isLoading && historyMessages.length;
46
50
  (0, vue.watch)(() => ({
@@ -98,12 +102,26 @@ function useStreamCustom(options) {
98
102
  onSuccess: () => void 0,
99
103
  onError(error) {
100
104
  options.onError?.(error, void 0);
105
+ submitOptions?.onError?.(error, void 0);
101
106
  }
102
107
  });
103
108
  }
104
109
  async function submit(values, submitOptions) {
105
110
  await submitDirect(values, submitOptions);
106
111
  }
112
+ function setBranch(value) {
113
+ branch.value = value;
114
+ }
115
+ function getMessagesMetadata(message, index) {
116
+ const streamMetadata = messageManager.get(message.id)?.metadata;
117
+ if (streamMetadata != null) return {
118
+ messageId: message.id ?? String(index),
119
+ firstSeenState: void 0,
120
+ branch: void 0,
121
+ branchOptions: void 0,
122
+ streamMetadata
123
+ };
124
+ }
107
125
  return {
108
126
  get values() {
109
127
  return streamValues.value ?? {};
@@ -113,6 +131,9 @@ function useStreamCustom(options) {
113
131
  stop,
114
132
  submit,
115
133
  switchThread,
134
+ branch,
135
+ setBranch,
136
+ getMessagesMetadata,
116
137
  queue: {
117
138
  entries: [],
118
139
  size: 0,
@@ -134,7 +155,7 @@ function useStreamCustom(options) {
134
155
  },
135
156
  get messages() {
136
157
  if (!streamValues.value) return [];
137
- return getMessages(streamValues.value);
158
+ return (0, _langchain_langgraph_sdk_ui.ensureMessageInstances)(getMessages(streamValues.value));
138
159
  },
139
160
  get toolCalls() {
140
161
  if (!streamValues.value) return [];
@@ -145,9 +166,11 @@ function useStreamCustom(options) {
145
166
  return (0, _langchain_langgraph_sdk_utils.getToolCallsWithResults)(getMessages(streamValues.value)).filter((tc) => tc.aiMessage.id === message.id);
146
167
  },
147
168
  get subagents() {
169
+ subagentVersion.value;
148
170
  return stream.getSubagents();
149
171
  },
150
172
  get activeSubagents() {
173
+ subagentVersion.value;
151
174
  return stream.getActiveSubagents();
152
175
  },
153
176
  getSubagent(toolCallId) {
@@ -161,7 +184,7 @@ function useStreamCustom(options) {
161
184
  }
162
185
  };
163
186
  }
164
-
165
187
  //#endregion
166
188
  exports.useStreamCustom = useStreamCustom;
189
+
167
190
  //# sourceMappingURL=stream.custom.cjs.map