@langchain/vue 0.4.2 → 0.4.4

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/index.cjs CHANGED
@@ -1,4 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_subagents = require("./subagents.cjs");
2
3
  const require_stream_custom = require("./stream.custom.cjs");
3
4
  const require_context = require("./context.cjs");
4
5
  let vue = require("vue");
@@ -29,12 +30,17 @@ function useStreamLGP(options) {
29
30
  orchestrator.setThreadId(resolved);
30
31
  }, { flush: "sync" });
31
32
  const version = (0, vue.shallowRef)(0);
32
- const subagentsRef = (0, vue.shallowRef)(orchestrator.subagents);
33
- const activeSubagentsRef = (0, vue.shallowRef)(orchestrator.activeSubagents);
33
+ const reactiveSubagents = require_subagents.createReactiveSubagentAccessors({
34
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
35
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
36
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
37
+ }, version);
38
+ const subagentsRef = (0, vue.shallowRef)(reactiveSubagents.mapSubagents(orchestrator.subagents));
39
+ const activeSubagentsRef = (0, vue.shallowRef)(reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents));
34
40
  const unsubscribe = orchestrator.subscribe(() => {
35
41
  version.value += 1;
36
- subagentsRef.value = orchestrator.subagents;
37
- activeSubagentsRef.value = orchestrator.activeSubagents;
42
+ subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);
43
+ activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
38
44
  });
39
45
  (0, vue.onScopeDispose)(() => {
40
46
  unsubscribe();
@@ -88,6 +94,11 @@ function useStreamLGP(options) {
88
94
  }, (newBranch) => {
89
95
  if (branch.value !== newBranch) branch.value = newBranch;
90
96
  }, { immediate: true });
97
+ const messages = (0, vue.computed)(() => {
98
+ version.value;
99
+ orchestrator.trackStreamMode("messages-tuple");
100
+ return (0, _langchain_langgraph_sdk_ui.ensureMessageInstances)(orchestrator.messages);
101
+ });
91
102
  return {
92
103
  get assistantId() {
93
104
  return (0, vue.toValue)(options.assistantId);
@@ -102,11 +113,7 @@ function useStreamLGP(options) {
102
113
  setBranch(value) {
103
114
  orchestrator.setBranch(value);
104
115
  },
105
- messages: (0, vue.computed)(() => {
106
- version.value;
107
- orchestrator.trackStreamMode("messages-tuple");
108
- return (0, _langchain_langgraph_sdk_ui.ensureMessageInstances)(orchestrator.messages);
109
- }),
116
+ messages,
110
117
  toolCalls: (0, vue.computed)(() => {
111
118
  version.value;
112
119
  return orchestrator.toolCalls;
@@ -157,22 +164,29 @@ function useStreamLGP(options) {
157
164
  orchestrator.switchThread(newThreadId);
158
165
  },
159
166
  get subagents() {
160
- return subagentsRef.value;
167
+ messages.value.length;
168
+ version.value;
169
+ return reactiveSubagents.mapSubagents(orchestrator.subagents);
161
170
  },
162
171
  get activeSubagents() {
163
- return activeSubagentsRef.value;
172
+ messages.value.length;
173
+ version.value;
174
+ return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
164
175
  },
165
176
  getSubagent(toolCallId) {
177
+ messages.value.length;
166
178
  version.value;
167
- return orchestrator.getSubagent(toolCallId);
179
+ return reactiveSubagents.getSubagent(toolCallId);
168
180
  },
169
181
  getSubagentsByType(type) {
182
+ messages.value.length;
170
183
  version.value;
171
- return orchestrator.getSubagentsByType(type);
184
+ return reactiveSubagents.getSubagentsByType(type);
172
185
  },
173
186
  getSubagentsByMessage(messageId) {
187
+ messages.value.length;
174
188
  version.value;
175
- return orchestrator.getSubagentsByMessage(messageId);
189
+ return reactiveSubagents.getSubagentsByMessage(messageId);
176
190
  }
177
191
  };
178
192
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["LANGCHAIN_OPTIONS","Client","StreamOrchestrator","useStreamCustom"],"sources":["../src/index.ts"],"sourcesContent":["import {\n computed,\n inject,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\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 StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n type ClassToolCallWithResult,\n type ClassSubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type Message,\n type BagTemplate,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\n\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { VueReactiveOptions } from \"./types.js\";\nimport { LANGCHAIN_OPTIONS, type LangChainPluginOptions } from \"./context.js\";\n\nexport { FetchStreamTransport };\nexport type { VueReactiveOptions } from \"./types.js\";\nexport {\n LangChainPlugin,\n provideStream,\n useStreamContext,\n LANGCHAIN_OPTIONS,\n} from \"./context.js\";\nexport type { LangChainPluginOptions } from \"./context.js\";\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: VueReactiveOptions<AnyStreamOptions<StateType, Bag>>) {\n const pluginOptions: LangChainPluginOptions = inject(LANGCHAIN_OPTIONS, {});\n\n const client = computed(() => {\n const c = toValue(options.client) ?? pluginOptions.client;\n if (c) return c;\n return new Client({\n apiUrl: toValue(options.apiUrl) ?? pluginOptions.apiUrl,\n apiKey: toValue(options.apiKey) ?? pluginOptions.apiKey,\n callerOptions: toValue(options.callerOptions),\n defaultHeaders: toValue(options.defaultHeaders),\n });\n });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamOptions<StateType, Bag>,\n {\n getClient: () => client.value,\n getAssistantId: () => toValue(options.assistantId),\n getMessagesKey: () => toValue(options.messagesKey) ?? \"messages\",\n }\n );\n\n const initialThreadId = toValue(options.threadId) ?? undefined;\n orchestrator.initThreadId(initialThreadId);\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? undefined;\n orchestrator.setThreadId(resolved);\n },\n { flush: \"sync\" }\n );\n\n // Monotonically increasing counter bumped on every orchestrator update.\n // Computed properties read `version.value` (via `void version.value`)\n // solely to register a reactive dependency, so Vue knows to invalidate\n // their cached values when the orchestrator state changes.\n const version = shallowRef(0);\n const subagentsRef = shallowRef(orchestrator.subagents);\n const activeSubagentsRef = shallowRef(orchestrator.activeSubagents);\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.value += 1;\n subagentsRef.value = orchestrator.subagents;\n activeSubagentsRef.value = orchestrator.activeSubagents;\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n // Subagent reconstruction\n watch(\n () => {\n void version.value;\n const hvMessages = orchestrator.messages;\n return {\n should:\n options.filterSubagentMessages &&\n !orchestrator.isLoading &&\n !orchestrator.historyData.isLoading &&\n hvMessages.length > 0,\n len: hvMessages.length,\n };\n },\n ({ should }, _prev, onCleanup) => {\n if (should) {\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n if (controller) {\n onCleanup(() => controller.abort());\n }\n }\n },\n { immediate: true }\n );\n\n // Queue draining\n watch(\n () => ({\n loading: orchestrator.isLoading,\n size: orchestrator.queueSize,\n v: version.value,\n }),\n () => {\n orchestrator.drainQueue();\n }\n );\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n\n watch(\n () => {\n void version.value;\n return orchestrator.threadId;\n },\n () => {\n ({ shouldReconnect } = orchestrator);\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n }\n );\n\n // Cached computed properties derived from the orchestrator.\n //\n // The orchestrator is not itself reactive — it is a plain object whose\n // state is mutated in place. To bridge it into Vue's reactivity system\n // we bump `version` (a shallowRef) inside the orchestrator's subscribe\n // callback. Each computed below reads `version.value` (via `void`) to\n // register it as a dependency. When `version` increments, Vue marks\n // every computed that depends on it as dirty, causing a re-evaluation\n // on the next access. The `void` operator discards the unused value\n // and signals this intent to future readers.\n const values = computed(() => {\n void version.value;\n return orchestrator.values;\n });\n\n const error = computed(() => {\n void version.value;\n return orchestrator.error;\n });\n\n const isLoading = computed(() => {\n void version.value;\n return orchestrator.isLoading;\n });\n\n const branch = ref<string>(\"\");\n watch(\n () => {\n void version.value;\n return orchestrator.branch;\n },\n (newBranch) => {\n if (branch.value !== newBranch) branch.value = newBranch;\n },\n { immediate: true }\n );\n\n const messages = computed(() => {\n void version.value;\n orchestrator.trackStreamMode(\"messages-tuple\");\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCalls = computed(() => {\n void version.value;\n return orchestrator.toolCalls;\n });\n\n const interrupt = computed(() => {\n void version.value;\n return orchestrator.interrupt;\n });\n\n const interrupts = computed(() => {\n void version.value;\n return orchestrator.interrupts;\n });\n\n const flatHistory = computed(() => {\n void version.value;\n return orchestrator.flatHistory;\n });\n\n const isThreadLoading = computed(() => {\n void version.value;\n return orchestrator.isThreadLoading;\n });\n\n const experimentalBranchTree = computed(() => {\n void version.value;\n return orchestrator.experimental_branchTree;\n });\n\n const queueEntries = computed(() => {\n void version.value;\n return orchestrator.queueEntries;\n });\n\n const queueSize = computed(() => {\n void version.value;\n return orchestrator.queueSize;\n });\n\n return {\n get assistantId() {\n return toValue(options.assistantId);\n },\n get client() {\n return client.value;\n },\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch(value: string) {\n orchestrator.setBranch(value);\n },\n\n messages,\n toolCalls,\n\n getToolCalls(message: Message) {\n orchestrator.trackStreamMode(\"messages-tuple\");\n return orchestrator.getToolCalls(message);\n },\n\n interrupt,\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 return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n }),\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get subagents() {\n return subagentsRef.value;\n },\n get activeSubagents() {\n return activeSubagentsRef.value;\n },\n getSubagent(toolCallId: string) {\n void version.value;\n return orchestrator.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void version.value;\n return orchestrator.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void version.value;\n return orchestrator.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 : 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 : K extends \"history\"\n ? ComputedRef<HistoryWithBaseMessages<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: VueReactiveOptions<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: VueReactiveOptions<\n UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n >\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 { MaybeRefOrGetter } from \"vue\";\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 SubagentApi,\n SubagentStream,\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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["LANGCHAIN_OPTIONS","Client","StreamOrchestrator","createReactiveSubagentAccessors","useStreamCustom"],"sources":["../src/index.ts"],"sourcesContent":["import {\n computed,\n inject,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\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 StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n type ClassToolCallWithResult,\n type ClassSubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type Message,\n type BagTemplate,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\n\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { VueReactiveOptions } from \"./types.js\";\nimport { LANGCHAIN_OPTIONS, type LangChainPluginOptions } from \"./context.js\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\n\nexport { FetchStreamTransport };\nexport type { VueReactiveOptions } from \"./types.js\";\nexport {\n LangChainPlugin,\n provideStream,\n useStreamContext,\n LANGCHAIN_OPTIONS,\n} from \"./context.js\";\nexport type { LangChainPluginOptions } from \"./context.js\";\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: VueReactiveOptions<AnyStreamOptions<StateType, Bag>>) {\n const pluginOptions: LangChainPluginOptions = inject(LANGCHAIN_OPTIONS, {});\n\n const client = computed(() => {\n const c = toValue(options.client) ?? pluginOptions.client;\n if (c) return c;\n return new Client({\n apiUrl: toValue(options.apiUrl) ?? pluginOptions.apiUrl,\n apiKey: toValue(options.apiKey) ?? pluginOptions.apiKey,\n callerOptions: toValue(options.callerOptions),\n defaultHeaders: toValue(options.defaultHeaders),\n });\n });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamOptions<StateType, Bag>,\n {\n getClient: () => client.value,\n getAssistantId: () => toValue(options.assistantId),\n getMessagesKey: () => toValue(options.messagesKey) ?? \"messages\",\n }\n );\n\n const initialThreadId = toValue(options.threadId) ?? undefined;\n orchestrator.initThreadId(initialThreadId);\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? undefined;\n orchestrator.setThreadId(resolved);\n },\n { flush: \"sync\" }\n );\n\n // Monotonically increasing counter bumped on every orchestrator update.\n // Computed properties read `version.value` (via `void version.value`)\n // solely to register a reactive dependency, so Vue knows to invalidate\n // their cached values when the orchestrator state changes.\n const version = shallowRef(0);\n const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\n const subagentsRef = shallowRef(\n reactiveSubagents.mapSubagents(orchestrator.subagents)\n );\n const activeSubagentsRef = shallowRef(\n reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents)\n );\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.value += 1;\n subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);\n activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(\n orchestrator.activeSubagents\n );\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n // Subagent reconstruction\n watch(\n () => {\n void version.value;\n const hvMessages = orchestrator.messages;\n return {\n should:\n options.filterSubagentMessages &&\n !orchestrator.isLoading &&\n !orchestrator.historyData.isLoading &&\n hvMessages.length > 0,\n len: hvMessages.length,\n };\n },\n ({ should }, _prev, onCleanup) => {\n if (should) {\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n if (controller) {\n onCleanup(() => controller.abort());\n }\n }\n },\n { immediate: true }\n );\n\n // Queue draining\n watch(\n () => ({\n loading: orchestrator.isLoading,\n size: orchestrator.queueSize,\n v: version.value,\n }),\n () => {\n orchestrator.drainQueue();\n }\n );\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n\n watch(\n () => {\n void version.value;\n return orchestrator.threadId;\n },\n () => {\n ({ shouldReconnect } = orchestrator);\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n }\n );\n\n // Cached computed properties derived from the orchestrator.\n //\n // The orchestrator is not itself reactive — it is a plain object whose\n // state is mutated in place. To bridge it into Vue's reactivity system\n // we bump `version` (a shallowRef) inside the orchestrator's subscribe\n // callback. Each computed below reads `version.value` (via `void`) to\n // register it as a dependency. When `version` increments, Vue marks\n // every computed that depends on it as dirty, causing a re-evaluation\n // on the next access. The `void` operator discards the unused value\n // and signals this intent to future readers.\n const values = computed(() => {\n void version.value;\n return orchestrator.values;\n });\n\n const error = computed(() => {\n void version.value;\n return orchestrator.error;\n });\n\n const isLoading = computed(() => {\n void version.value;\n return orchestrator.isLoading;\n });\n\n const branch = ref<string>(\"\");\n watch(\n () => {\n void version.value;\n return orchestrator.branch;\n },\n (newBranch) => {\n if (branch.value !== newBranch) branch.value = newBranch;\n },\n { immediate: true }\n );\n\n const messages = computed(() => {\n void version.value;\n orchestrator.trackStreamMode(\"messages-tuple\");\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCalls = computed(() => {\n void version.value;\n return orchestrator.toolCalls;\n });\n\n const interrupt = computed(() => {\n void version.value;\n return orchestrator.interrupt;\n });\n\n const interrupts = computed(() => {\n void version.value;\n return orchestrator.interrupts;\n });\n\n const flatHistory = computed(() => {\n void version.value;\n return orchestrator.flatHistory;\n });\n\n const isThreadLoading = computed(() => {\n void version.value;\n return orchestrator.isThreadLoading;\n });\n\n const experimentalBranchTree = computed(() => {\n void version.value;\n return orchestrator.experimental_branchTree;\n });\n\n const queueEntries = computed(() => {\n void version.value;\n return orchestrator.queueEntries;\n });\n\n const queueSize = computed(() => {\n void version.value;\n return orchestrator.queueSize;\n });\n\n return {\n get assistantId() {\n return toValue(options.assistantId);\n },\n get client() {\n return client.value;\n },\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch(value: string) {\n orchestrator.setBranch(value);\n },\n\n messages,\n toolCalls,\n\n getToolCalls(message: Message) {\n orchestrator.trackStreamMode(\"messages-tuple\");\n return orchestrator.getToolCalls(message);\n },\n\n interrupt,\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 return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n }),\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get subagents() {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.mapSubagents(orchestrator.subagents);\n },\n get activeSubagents() {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);\n },\n getSubagent(toolCallId: string) {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 : 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 : K extends \"history\"\n ? ComputedRef<HistoryWithBaseMessages<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: VueReactiveOptions<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: VueReactiveOptions<\n UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n >\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 { MaybeRefOrGetter } from \"vue\";\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 SubagentApi,\n SubagentStream,\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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;KAgVK,iBAAA,oBACS,CAAA,IAAK,CAAA,kFAKb,CAAA,GAAI,CAAA,sBACJ,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,kCAEiB,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,EAAG,EAAA,eACpB,IAAA,6BAEG,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,CAAA,CAAE,CAAA,EAAG,EAAA,MAEX,CAAA,oCACE,CAAA,CAAE,CAAA,IACF,CAAA,uBACE,CAAA,CAAE,CAAA,UAAW,GAAA,SAEX,yBAAA,gCAEA,GAAA,SAAY,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,KAChD,CAAA,CAAE,CAAA,IACJ,CAAA,6BACE,CAAA,CAAE,CAAA,UAAW,yBAAA,iCAKX,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,MACpC,CAAA,CAAE,CAAA,IACJ,CAAA,oBACE,CAAA,CAAE,CAAA,YACA,MAAA,WACA,OAAA,6BAGE,MAAA,EACI,kBAAA,CAAmB,OAAA,CAAQ,CAAA,yCAG/B,OAAA,GAAU,CAAA,KACP,GAAA,GACL,CAAA,CAAE,CAAA,IACJ,CAAA,qBACE,WAAA,CAAY,uBAAA,CAAwB,CAAA,CAAE,CAAA,MACtC,CAAA,CAAE,CAAA,eAAe,IAAA,6BACX,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,GAAA,CAAI,CAAA,CAAE,CAAA,kCACD,CAAA;EAEzB,WAAA,EAAa,CAAA;IACX,WAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAGD,UAAA,aACG,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE7C,kBAAA,EAAoB,CAAA;IAClB,kBAAA,GACE,IAAA,aACG,yBAAA;EAAA,KAEF,IAAA,aAAiB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE1D,qBAAA,EAAuB,CAAA;IACrB,qBAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAEF,SAAA,aAAsB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA;AAAA,iBAKrD,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CAAmB,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,MAC/D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CACP,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,MAEvD,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAyD/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":";;;;;;;;KAuWK,iBAAA,oBACS,CAAA,IAAK,CAAA,kFAKb,CAAA,GAAI,CAAA,sBACJ,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,kCAEiB,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,EAAG,EAAA,eACpB,IAAA,6BAEG,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,CAAA,CAAE,CAAA,EAAG,EAAA,MAEX,CAAA,oCACE,CAAA,CAAE,CAAA,IACF,CAAA,uBACE,CAAA,CAAE,CAAA,UAAW,GAAA,SAEX,yBAAA,gCAEA,GAAA,SAAY,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,KAChD,CAAA,CAAE,CAAA,IACJ,CAAA,6BACE,CAAA,CAAE,CAAA,UAAW,yBAAA,iCAKX,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,MACpC,CAAA,CAAE,CAAA,IACJ,CAAA,oBACE,CAAA,CAAE,CAAA,YACA,MAAA,WACA,OAAA,6BAGE,MAAA,EACI,kBAAA,CAAmB,OAAA,CAAQ,CAAA,yCAG/B,OAAA,GAAU,CAAA,KACP,GAAA,GACL,CAAA,CAAE,CAAA,IACJ,CAAA,qBACE,WAAA,CAAY,uBAAA,CAAwB,CAAA,CAAE,CAAA,MACtC,CAAA,CAAE,CAAA,eAAe,IAAA,6BACX,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,GAAA,CAAI,CAAA,CAAE,CAAA,kCACD,CAAA;EAEzB,WAAA,EAAa,CAAA;IACX,WAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAGD,UAAA,aACG,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE7C,kBAAA,EAAoB,CAAA;IAClB,kBAAA,GACE,IAAA,aACG,yBAAA;EAAA,KAEF,IAAA,aAAiB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE1D,qBAAA,EAAuB,CAAA;IACrB,qBAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAEF,SAAA,aAAsB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA;AAAA,iBAKrD,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CAAmB,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,MAC/D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CACP,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,MAEvD,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAyD/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;KAgVK,iBAAA,oBACS,CAAA,IAAK,CAAA,kFAKb,CAAA,GAAI,CAAA,sBACJ,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,kCAEiB,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,EAAG,EAAA,eACpB,IAAA,6BAEG,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,CAAA,CAAE,CAAA,EAAG,EAAA,MAEX,CAAA,oCACE,CAAA,CAAE,CAAA,IACF,CAAA,uBACE,CAAA,CAAE,CAAA,UAAW,GAAA,SAEX,yBAAA,gCAEA,GAAA,SAAY,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,KAChD,CAAA,CAAE,CAAA,IACJ,CAAA,6BACE,CAAA,CAAE,CAAA,UAAW,yBAAA,iCAKX,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,MACpC,CAAA,CAAE,CAAA,IACJ,CAAA,oBACE,CAAA,CAAE,CAAA,YACA,MAAA,WACA,OAAA,6BAGE,MAAA,EACI,kBAAA,CAAmB,OAAA,CAAQ,CAAA,yCAG/B,OAAA,GAAU,CAAA,KACP,GAAA,GACL,CAAA,CAAE,CAAA,IACJ,CAAA,qBACE,WAAA,CAAY,uBAAA,CAAwB,CAAA,CAAE,CAAA,MACtC,CAAA,CAAE,CAAA,eAAe,IAAA,6BACX,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,GAAA,CAAI,CAAA,CAAE,CAAA,kCACD,CAAA;EAEzB,WAAA,EAAa,CAAA;IACX,WAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAGD,UAAA,aACG,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE7C,kBAAA,EAAoB,CAAA;IAClB,kBAAA,GACE,IAAA,aACG,yBAAA;EAAA,KAEF,IAAA,aAAiB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE1D,qBAAA,EAAuB,CAAA;IACrB,qBAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAEF,SAAA,aAAsB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA;AAAA,iBAKrD,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CAAmB,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,MAC/D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CACP,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,MAEvD,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAyD/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":";;;;;;;;KAuWK,iBAAA,oBACS,CAAA,IAAK,CAAA,kFAKb,CAAA,GAAI,CAAA,sBACJ,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,kCAEiB,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,EAAG,EAAA,eACpB,IAAA,6BAEG,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,CAAA,CAAE,CAAA,EAAG,EAAA,MAEX,CAAA,oCACE,CAAA,CAAE,CAAA,IACF,CAAA,uBACE,CAAA,CAAE,CAAA,UAAW,GAAA,SAEX,yBAAA,gCAEA,GAAA,SAAY,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,KAChD,CAAA,CAAE,CAAA,IACJ,CAAA,6BACE,CAAA,CAAE,CAAA,UAAW,yBAAA,iCAKX,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA,MACpC,CAAA,CAAE,CAAA,IACJ,CAAA,oBACE,CAAA,CAAE,CAAA,YACA,MAAA,WACA,OAAA,6BAGE,MAAA,EACI,kBAAA,CAAmB,OAAA,CAAQ,CAAA,yCAG/B,OAAA,GAAU,CAAA,KACP,GAAA,GACL,CAAA,CAAE,CAAA,IACJ,CAAA,qBACE,WAAA,CAAY,uBAAA,CAAwB,CAAA,CAAE,CAAA,MACtC,CAAA,CAAE,CAAA,eAAe,IAAA,6BACX,IAAA,EAAM,CAAA,KAAM,CAAA,GAChB,GAAA,CAAI,CAAA,CAAE,CAAA,kCACD,CAAA;EAEzB,WAAA,EAAa,CAAA;IACX,WAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAGD,UAAA,aACG,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE7C,kBAAA,EAAoB,CAAA;IAClB,kBAAA,GACE,IAAA,aACG,yBAAA;EAAA,KAEF,IAAA,aAAiB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE1D,qBAAA,EAAuB,CAAA;IACrB,qBAAA,GACE,EAAA,aACG,yBAAA;EAAA,KAEF,SAAA,aAAsB,8BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA;AAAA,iBAKrD,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CAAmB,sBAAA,CAAqB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA,MAC/D,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,iBAE3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,kBAAA,CACP,wBAAA,CAAuB,gBAAA,CAAe,CAAA,GAAI,UAAA,CAAS,CAAA,EAAG,GAAA,MAEvD,iBAAA,CAAkB,wBAAA,CAAuB,CAAA,EAAG,UAAA,CAAS,CAAA,EAAG,GAAA;AAAA,KAyD/C,kBAAA,YAA8B,iBAAA,IACxC,oBAAA,CAAoB,QAAA,EAAU,WAAA,EAAiB,SAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createReactiveSubagentAccessors } from "./subagents.js";
1
2
  import { useStreamCustom } from "./stream.custom.js";
2
3
  import { LANGCHAIN_OPTIONS, LangChainPlugin, provideStream, useStreamContext } from "./context.js";
3
4
  import { computed, inject, onScopeDispose, reactive, ref, shallowRef, toValue, watch } from "vue";
@@ -28,12 +29,17 @@ function useStreamLGP(options) {
28
29
  orchestrator.setThreadId(resolved);
29
30
  }, { flush: "sync" });
30
31
  const version = shallowRef(0);
31
- const subagentsRef = shallowRef(orchestrator.subagents);
32
- const activeSubagentsRef = shallowRef(orchestrator.activeSubagents);
32
+ const reactiveSubagents = createReactiveSubagentAccessors({
33
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
34
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
35
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
36
+ }, version);
37
+ const subagentsRef = shallowRef(reactiveSubagents.mapSubagents(orchestrator.subagents));
38
+ const activeSubagentsRef = shallowRef(reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents));
33
39
  const unsubscribe = orchestrator.subscribe(() => {
34
40
  version.value += 1;
35
- subagentsRef.value = orchestrator.subagents;
36
- activeSubagentsRef.value = orchestrator.activeSubagents;
41
+ subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);
42
+ activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
37
43
  });
38
44
  onScopeDispose(() => {
39
45
  unsubscribe();
@@ -87,6 +93,11 @@ function useStreamLGP(options) {
87
93
  }, (newBranch) => {
88
94
  if (branch.value !== newBranch) branch.value = newBranch;
89
95
  }, { immediate: true });
96
+ const messages = computed(() => {
97
+ version.value;
98
+ orchestrator.trackStreamMode("messages-tuple");
99
+ return ensureMessageInstances(orchestrator.messages);
100
+ });
90
101
  return {
91
102
  get assistantId() {
92
103
  return toValue(options.assistantId);
@@ -101,11 +112,7 @@ function useStreamLGP(options) {
101
112
  setBranch(value) {
102
113
  orchestrator.setBranch(value);
103
114
  },
104
- messages: computed(() => {
105
- version.value;
106
- orchestrator.trackStreamMode("messages-tuple");
107
- return ensureMessageInstances(orchestrator.messages);
108
- }),
115
+ messages,
109
116
  toolCalls: computed(() => {
110
117
  version.value;
111
118
  return orchestrator.toolCalls;
@@ -156,22 +163,29 @@ function useStreamLGP(options) {
156
163
  orchestrator.switchThread(newThreadId);
157
164
  },
158
165
  get subagents() {
159
- return subagentsRef.value;
166
+ messages.value.length;
167
+ version.value;
168
+ return reactiveSubagents.mapSubagents(orchestrator.subagents);
160
169
  },
161
170
  get activeSubagents() {
162
- return activeSubagentsRef.value;
171
+ messages.value.length;
172
+ version.value;
173
+ return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
163
174
  },
164
175
  getSubagent(toolCallId) {
176
+ messages.value.length;
165
177
  version.value;
166
- return orchestrator.getSubagent(toolCallId);
178
+ return reactiveSubagents.getSubagent(toolCallId);
167
179
  },
168
180
  getSubagentsByType(type) {
181
+ messages.value.length;
169
182
  version.value;
170
- return orchestrator.getSubagentsByType(type);
183
+ return reactiveSubagents.getSubagentsByType(type);
171
184
  },
172
185
  getSubagentsByMessage(messageId) {
186
+ messages.value.length;
173
187
  version.value;
174
- return orchestrator.getSubagentsByMessage(messageId);
188
+ return reactiveSubagents.getSubagentsByMessage(messageId);
175
189
  }
176
190
  };
177
191
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n computed,\n inject,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\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 StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n type ClassToolCallWithResult,\n type ClassSubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type Message,\n type BagTemplate,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\n\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { VueReactiveOptions } from \"./types.js\";\nimport { LANGCHAIN_OPTIONS, type LangChainPluginOptions } from \"./context.js\";\n\nexport { FetchStreamTransport };\nexport type { VueReactiveOptions } from \"./types.js\";\nexport {\n LangChainPlugin,\n provideStream,\n useStreamContext,\n LANGCHAIN_OPTIONS,\n} from \"./context.js\";\nexport type { LangChainPluginOptions } from \"./context.js\";\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: VueReactiveOptions<AnyStreamOptions<StateType, Bag>>) {\n const pluginOptions: LangChainPluginOptions = inject(LANGCHAIN_OPTIONS, {});\n\n const client = computed(() => {\n const c = toValue(options.client) ?? pluginOptions.client;\n if (c) return c;\n return new Client({\n apiUrl: toValue(options.apiUrl) ?? pluginOptions.apiUrl,\n apiKey: toValue(options.apiKey) ?? pluginOptions.apiKey,\n callerOptions: toValue(options.callerOptions),\n defaultHeaders: toValue(options.defaultHeaders),\n });\n });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamOptions<StateType, Bag>,\n {\n getClient: () => client.value,\n getAssistantId: () => toValue(options.assistantId),\n getMessagesKey: () => toValue(options.messagesKey) ?? \"messages\",\n }\n );\n\n const initialThreadId = toValue(options.threadId) ?? undefined;\n orchestrator.initThreadId(initialThreadId);\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? undefined;\n orchestrator.setThreadId(resolved);\n },\n { flush: \"sync\" }\n );\n\n // Monotonically increasing counter bumped on every orchestrator update.\n // Computed properties read `version.value` (via `void version.value`)\n // solely to register a reactive dependency, so Vue knows to invalidate\n // their cached values when the orchestrator state changes.\n const version = shallowRef(0);\n const subagentsRef = shallowRef(orchestrator.subagents);\n const activeSubagentsRef = shallowRef(orchestrator.activeSubagents);\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.value += 1;\n subagentsRef.value = orchestrator.subagents;\n activeSubagentsRef.value = orchestrator.activeSubagents;\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n // Subagent reconstruction\n watch(\n () => {\n void version.value;\n const hvMessages = orchestrator.messages;\n return {\n should:\n options.filterSubagentMessages &&\n !orchestrator.isLoading &&\n !orchestrator.historyData.isLoading &&\n hvMessages.length > 0,\n len: hvMessages.length,\n };\n },\n ({ should }, _prev, onCleanup) => {\n if (should) {\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n if (controller) {\n onCleanup(() => controller.abort());\n }\n }\n },\n { immediate: true }\n );\n\n // Queue draining\n watch(\n () => ({\n loading: orchestrator.isLoading,\n size: orchestrator.queueSize,\n v: version.value,\n }),\n () => {\n orchestrator.drainQueue();\n }\n );\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n\n watch(\n () => {\n void version.value;\n return orchestrator.threadId;\n },\n () => {\n ({ shouldReconnect } = orchestrator);\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n }\n );\n\n // Cached computed properties derived from the orchestrator.\n //\n // The orchestrator is not itself reactive — it is a plain object whose\n // state is mutated in place. To bridge it into Vue's reactivity system\n // we bump `version` (a shallowRef) inside the orchestrator's subscribe\n // callback. Each computed below reads `version.value` (via `void`) to\n // register it as a dependency. When `version` increments, Vue marks\n // every computed that depends on it as dirty, causing a re-evaluation\n // on the next access. The `void` operator discards the unused value\n // and signals this intent to future readers.\n const values = computed(() => {\n void version.value;\n return orchestrator.values;\n });\n\n const error = computed(() => {\n void version.value;\n return orchestrator.error;\n });\n\n const isLoading = computed(() => {\n void version.value;\n return orchestrator.isLoading;\n });\n\n const branch = ref<string>(\"\");\n watch(\n () => {\n void version.value;\n return orchestrator.branch;\n },\n (newBranch) => {\n if (branch.value !== newBranch) branch.value = newBranch;\n },\n { immediate: true }\n );\n\n const messages = computed(() => {\n void version.value;\n orchestrator.trackStreamMode(\"messages-tuple\");\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCalls = computed(() => {\n void version.value;\n return orchestrator.toolCalls;\n });\n\n const interrupt = computed(() => {\n void version.value;\n return orchestrator.interrupt;\n });\n\n const interrupts = computed(() => {\n void version.value;\n return orchestrator.interrupts;\n });\n\n const flatHistory = computed(() => {\n void version.value;\n return orchestrator.flatHistory;\n });\n\n const isThreadLoading = computed(() => {\n void version.value;\n return orchestrator.isThreadLoading;\n });\n\n const experimentalBranchTree = computed(() => {\n void version.value;\n return orchestrator.experimental_branchTree;\n });\n\n const queueEntries = computed(() => {\n void version.value;\n return orchestrator.queueEntries;\n });\n\n const queueSize = computed(() => {\n void version.value;\n return orchestrator.queueSize;\n });\n\n return {\n get assistantId() {\n return toValue(options.assistantId);\n },\n get client() {\n return client.value;\n },\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch(value: string) {\n orchestrator.setBranch(value);\n },\n\n messages,\n toolCalls,\n\n getToolCalls(message: Message) {\n orchestrator.trackStreamMode(\"messages-tuple\");\n return orchestrator.getToolCalls(message);\n },\n\n interrupt,\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 return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n }),\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get subagents() {\n return subagentsRef.value;\n },\n get activeSubagents() {\n return activeSubagentsRef.value;\n },\n getSubagent(toolCallId: string) {\n void version.value;\n return orchestrator.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void version.value;\n return orchestrator.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void version.value;\n return orchestrator.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 : 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 : K extends \"history\"\n ? ComputedRef<HistoryWithBaseMessages<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: VueReactiveOptions<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: VueReactiveOptions<\n UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n >\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 { MaybeRefOrGetter } from \"vue\";\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 SubagentApi,\n SubagentStream,\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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n computed,\n inject,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\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 StreamOrchestrator,\n FetchStreamTransport,\n ensureMessageInstances,\n type MessageMetadata,\n type AnyStreamOptions,\n type ResolveStreamInterface,\n type ResolveStreamOptions,\n type InferBag,\n type InferStateType,\n type AcceptBaseMessages,\n type UseStreamCustomOptions,\n type SubagentStreamInterface,\n type HistoryWithBaseMessages,\n type ClassToolCallWithResult,\n type ClassSubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\n\nimport {\n Client,\n type Message,\n type BagTemplate,\n type ToolCallWithResult as _ToolCallWithResult,\n type DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\n\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { VueReactiveOptions } from \"./types.js\";\nimport { LANGCHAIN_OPTIONS, type LangChainPluginOptions } from \"./context.js\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\n\nexport { FetchStreamTransport };\nexport type { VueReactiveOptions } from \"./types.js\";\nexport {\n LangChainPlugin,\n provideStream,\n useStreamContext,\n LANGCHAIN_OPTIONS,\n} from \"./context.js\";\nexport type { LangChainPluginOptions } from \"./context.js\";\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: VueReactiveOptions<AnyStreamOptions<StateType, Bag>>) {\n const pluginOptions: LangChainPluginOptions = inject(LANGCHAIN_OPTIONS, {});\n\n const client = computed(() => {\n const c = toValue(options.client) ?? pluginOptions.client;\n if (c) return c;\n return new Client({\n apiUrl: toValue(options.apiUrl) ?? pluginOptions.apiUrl,\n apiKey: toValue(options.apiKey) ?? pluginOptions.apiKey,\n callerOptions: toValue(options.callerOptions),\n defaultHeaders: toValue(options.defaultHeaders),\n });\n });\n\n const orchestrator = new StreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamOptions<StateType, Bag>,\n {\n getClient: () => client.value,\n getAssistantId: () => toValue(options.assistantId),\n getMessagesKey: () => toValue(options.messagesKey) ?? \"messages\",\n }\n );\n\n const initialThreadId = toValue(options.threadId) ?? undefined;\n orchestrator.initThreadId(initialThreadId);\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? undefined;\n orchestrator.setThreadId(resolved);\n },\n { flush: \"sync\" }\n );\n\n // Monotonically increasing counter bumped on every orchestrator update.\n // Computed properties read `version.value` (via `void version.value`)\n // solely to register a reactive dependency, so Vue knows to invalidate\n // their cached values when the orchestrator state changes.\n const version = shallowRef(0);\n const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\n const subagentsRef = shallowRef(\n reactiveSubagents.mapSubagents(orchestrator.subagents)\n );\n const activeSubagentsRef = shallowRef(\n reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents)\n );\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.value += 1;\n subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);\n activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(\n orchestrator.activeSubagents\n );\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n // Subagent reconstruction\n watch(\n () => {\n void version.value;\n const hvMessages = orchestrator.messages;\n return {\n should:\n options.filterSubagentMessages &&\n !orchestrator.isLoading &&\n !orchestrator.historyData.isLoading &&\n hvMessages.length > 0,\n len: hvMessages.length,\n };\n },\n ({ should }, _prev, onCleanup) => {\n if (should) {\n const controller = orchestrator.reconstructSubagentsIfNeeded();\n if (controller) {\n onCleanup(() => controller.abort());\n }\n }\n },\n { immediate: true }\n );\n\n // Queue draining\n watch(\n () => ({\n loading: orchestrator.isLoading,\n size: orchestrator.queueSize,\n v: version.value,\n }),\n () => {\n orchestrator.drainQueue();\n }\n );\n\n // Auto-reconnect\n let { shouldReconnect } = orchestrator;\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n\n watch(\n () => {\n void version.value;\n return orchestrator.threadId;\n },\n () => {\n ({ shouldReconnect } = orchestrator);\n if (shouldReconnect) {\n orchestrator.tryReconnect();\n }\n }\n );\n\n // Cached computed properties derived from the orchestrator.\n //\n // The orchestrator is not itself reactive — it is a plain object whose\n // state is mutated in place. To bridge it into Vue's reactivity system\n // we bump `version` (a shallowRef) inside the orchestrator's subscribe\n // callback. Each computed below reads `version.value` (via `void`) to\n // register it as a dependency. When `version` increments, Vue marks\n // every computed that depends on it as dirty, causing a re-evaluation\n // on the next access. The `void` operator discards the unused value\n // and signals this intent to future readers.\n const values = computed(() => {\n void version.value;\n return orchestrator.values;\n });\n\n const error = computed(() => {\n void version.value;\n return orchestrator.error;\n });\n\n const isLoading = computed(() => {\n void version.value;\n return orchestrator.isLoading;\n });\n\n const branch = ref<string>(\"\");\n watch(\n () => {\n void version.value;\n return orchestrator.branch;\n },\n (newBranch) => {\n if (branch.value !== newBranch) branch.value = newBranch;\n },\n { immediate: true }\n );\n\n const messages = computed(() => {\n void version.value;\n orchestrator.trackStreamMode(\"messages-tuple\");\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCalls = computed(() => {\n void version.value;\n return orchestrator.toolCalls;\n });\n\n const interrupt = computed(() => {\n void version.value;\n return orchestrator.interrupt;\n });\n\n const interrupts = computed(() => {\n void version.value;\n return orchestrator.interrupts;\n });\n\n const flatHistory = computed(() => {\n void version.value;\n return orchestrator.flatHistory;\n });\n\n const isThreadLoading = computed(() => {\n void version.value;\n return orchestrator.isThreadLoading;\n });\n\n const experimentalBranchTree = computed(() => {\n void version.value;\n return orchestrator.experimental_branchTree;\n });\n\n const queueEntries = computed(() => {\n void version.value;\n return orchestrator.queueEntries;\n });\n\n const queueSize = computed(() => {\n void version.value;\n return orchestrator.queueSize;\n });\n\n return {\n get assistantId() {\n return toValue(options.assistantId);\n },\n get client() {\n return client.value;\n },\n\n values,\n error,\n isLoading,\n\n branch,\n setBranch(value: string) {\n orchestrator.setBranch(value);\n },\n\n messages,\n toolCalls,\n\n getToolCalls(message: Message) {\n orchestrator.trackStreamMode(\"messages-tuple\");\n return orchestrator.getToolCalls(message);\n },\n\n interrupt,\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 return orchestrator.getMessagesMetadata(message, index);\n },\n\n submit: (...args: Parameters<typeof orchestrator.submit>) =>\n orchestrator.submit(...args),\n stop: () => orchestrator.stop(),\n joinStream: (...args: Parameters<typeof orchestrator.joinStream>) =>\n orchestrator.joinStream(...args),\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: (id: string) => orchestrator.cancelQueueItem(id),\n clear: () => orchestrator.clearQueue(),\n }),\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get subagents() {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.mapSubagents(orchestrator.subagents);\n },\n get activeSubagents() {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);\n },\n getSubagent(toolCallId: string) {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void messages.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByMessage(messageId);\n },\n };\n}\n\nexport type { ClassSubagentStreamInterface } from \"@langchain/langgraph-sdk/ui\";\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 : 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 : K extends \"history\"\n ? ComputedRef<HistoryWithBaseMessages<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: VueReactiveOptions<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: VueReactiveOptions<\n UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n >\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 { MaybeRefOrGetter } from \"vue\";\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 SubagentApi,\n SubagentStream,\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\";\nexport type {\n HeadlessToolImplementation,\n AnyHeadlessToolImplementation,\n ToolEvent,\n HeadlessToolInterrupt,\n OnToolCallback,\n FlushPendingHeadlessToolInterruptsOptions,\n} from \"@langchain/langgraph-sdk\";\n\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/langgraph-sdk/ui\";\nexport {\n isHeadlessToolInterrupt,\n parseHeadlessToolInterruptPayload,\n filterOutHeadlessToolInterrupts,\n findHeadlessTool,\n executeHeadlessTool,\n handleHeadlessToolInterrupt,\n headlessToolResumeCommand,\n flushPendingHeadlessToolInterrupts,\n} from \"@langchain/langgraph-sdk\";\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ const require_subagents = require("./subagents.cjs");
1
2
  let vue = require("vue");
2
3
  let _langchain_langgraph_sdk_ui = require("@langchain/langgraph-sdk/ui");
3
4
  //#region src/stream.custom.ts
@@ -15,14 +16,21 @@ function useStreamCustom(options) {
15
16
  const streamValues = (0, vue.shallowRef)(null);
16
17
  const streamError = (0, vue.shallowRef)(void 0);
17
18
  const isLoading = (0, vue.shallowRef)(false);
18
- const subagentsRef = (0, vue.shallowRef)(orchestrator.subagents);
19
- const activeSubagentsRef = (0, vue.shallowRef)(orchestrator.activeSubagents);
19
+ const version = (0, vue.shallowRef)(0);
20
+ const reactiveSubagents = require_subagents.createReactiveSubagentAccessors({
21
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
22
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
23
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
24
+ }, version);
25
+ const subagentsRef = (0, vue.shallowRef)(reactiveSubagents.mapSubagents(orchestrator.subagents));
26
+ const activeSubagentsRef = (0, vue.shallowRef)(reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents));
20
27
  const unsubscribe = orchestrator.subscribe(() => {
28
+ version.value += 1;
21
29
  streamValues.value = orchestrator.streamValues;
22
30
  streamError.value = orchestrator.error;
23
31
  isLoading.value = orchestrator.isLoading;
24
- subagentsRef.value = orchestrator.subagents;
25
- activeSubagentsRef.value = orchestrator.activeSubagents;
32
+ subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);
33
+ activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
26
34
  });
27
35
  (0, vue.onScopeDispose)(() => {
28
36
  unsubscribe();
@@ -93,22 +101,29 @@ function useStreamCustom(options) {
93
101
  return orchestrator.getToolCalls(message);
94
102
  },
95
103
  get subagents() {
96
- return subagentsRef.value;
104
+ messagesComputed.value.length;
105
+ version.value;
106
+ return reactiveSubagents.mapSubagents(orchestrator.subagents);
97
107
  },
98
108
  get activeSubagents() {
99
- return activeSubagentsRef.value;
109
+ messagesComputed.value.length;
110
+ version.value;
111
+ return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
100
112
  },
101
113
  getSubagent(toolCallId) {
102
- subagentsRef.value;
103
- return orchestrator.getSubagent(toolCallId);
114
+ messagesComputed.value.length;
115
+ version.value;
116
+ return reactiveSubagents.getSubagent(toolCallId);
104
117
  },
105
118
  getSubagentsByType(type) {
106
- subagentsRef.value;
107
- return orchestrator.getSubagentsByType(type);
119
+ messagesComputed.value.length;
120
+ version.value;
121
+ return reactiveSubagents.getSubagentsByType(type);
108
122
  },
109
123
  getSubagentsByMessage(messageId) {
110
- subagentsRef.value;
111
- return orchestrator.getSubagentsByMessage(messageId);
124
+ messagesComputed.value.length;
125
+ version.value;
126
+ return reactiveSubagents.getSubagentsByMessage(messageId);
112
127
  }
113
128
  };
114
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.cjs","names":["CustomStreamOrchestrator"],"sources":["../src/stream.custom.ts"],"sourcesContent":["import {\n computed,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\n watch,\n} from \"vue\";\nimport {\n CustomStreamOrchestrator,\n ensureMessageInstances,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type GetUpdateType,\n type GetInterruptType,\n type GetConfigurableType,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport type { VueReactiveOptions } from \"./types.js\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: VueReactiveOptions<AnyStreamCustomOptions<StateType, Bag>>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const orchestrator = new CustomStreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamCustomOptions<StateType, Bag>\n );\n\n const branch = ref<string>(\"\");\n\n let threadId: string | null = toValue(options.threadId) ?? null;\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? null;\n if (resolved !== threadId) {\n threadId = resolved;\n orchestrator.syncThreadId(resolved);\n }\n },\n { flush: \"sync\" }\n );\n\n const streamValues = shallowRef<StateType | null>(null);\n const streamError = shallowRef<unknown>(undefined);\n const isLoading = shallowRef(false);\n const subagentsRef = shallowRef(orchestrator.subagents);\n const activeSubagentsRef = shallowRef(orchestrator.activeSubagents);\n\n const unsubscribe = orchestrator.subscribe(() => {\n streamValues.value = orchestrator.streamValues;\n streamError.value = orchestrator.error;\n isLoading.value = orchestrator.isLoading;\n subagentsRef.value = orchestrator.subagents;\n activeSubagentsRef.value = orchestrator.activeSubagents;\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n watch(\n () => ({\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n streamValues.value != null &&\n orchestrator.messages.length > 0,\n len: orchestrator.messages.length,\n }),\n ({ should }) => {\n if (should) {\n orchestrator.reconstructSubagentsIfNeeded();\n }\n },\n { immediate: true }\n );\n\n // Cached computed properties — unlike plain getters, `computed()` only\n // recomputes when a tracked dependency changes, and caches the result\n // between reads. Getters below unwrap `.value` so callers see plain\n // values (matching the original API surface).\n //\n // `void isLoading.value` / reading `streamValues.value` accesses the\n // ref solely to register it as a dependency of the computed, so Vue\n // knows to invalidate the cached value when the orchestrator pushes an\n // update. The `void` operator discards the unused value and signals\n // intent to future readers.\n const interruptsComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupts as Interrupt<InterruptType>[];\n });\n\n const interruptComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupt as Interrupt<InterruptType> | undefined;\n });\n\n const messagesComputed = computed(() => {\n if (!streamValues.value) return [];\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCallsComputed = computed(() => {\n if (!streamValues.value) return [];\n return orchestrator.toolCalls;\n });\n\n const queueEntries = shallowRef<unknown[]>([]);\n const queueSize = shallowRef(0);\n\n return {\n get values() {\n return streamValues.value ?? ({} as StateType);\n },\n\n error: streamError,\n isLoading,\n\n stop: () => orchestrator.stop(),\n\n submit: async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>\n ) => {\n await orchestrator.submit(values, submitOptions);\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n branch,\n setBranch(value: string) {\n branch.value = value;\n orchestrator.setBranch(value);\n },\n\n getMessagesMetadata(\n message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: async () => false,\n clear: async () => {},\n }),\n\n get interrupts(): Interrupt<InterruptType>[] {\n return interruptsComputed.value;\n },\n get interrupt(): Interrupt<InterruptType> | undefined {\n return interruptComputed.value;\n },\n get messages() {\n return messagesComputed.value;\n },\n get toolCalls() {\n return toolCallsComputed.value;\n },\n\n getToolCalls(message: Message) {\n return orchestrator.getToolCalls(message);\n },\n\n get subagents() {\n return subagentsRef.value;\n },\n\n get activeSubagents() {\n return activeSubagentsRef.value;\n },\n\n getSubagent(toolCallId: string) {\n void subagentsRef.value;\n return orchestrator.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void subagentsRef.value;\n return orchestrator.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void subagentsRef.value;\n return orchestrator.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream.custom.cjs","names":["CustomStreamOrchestrator","createReactiveSubagentAccessors"],"sources":["../src/stream.custom.ts"],"sourcesContent":["import {\n computed,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\n watch,\n} from \"vue\";\nimport {\n CustomStreamOrchestrator,\n ensureMessageInstances,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type GetUpdateType,\n type GetInterruptType,\n type GetConfigurableType,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport type { VueReactiveOptions } from \"./types.js\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: VueReactiveOptions<AnyStreamCustomOptions<StateType, Bag>>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const orchestrator = new CustomStreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamCustomOptions<StateType, Bag>\n );\n\n const branch = ref<string>(\"\");\n\n let threadId: string | null = toValue(options.threadId) ?? null;\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? null;\n if (resolved !== threadId) {\n threadId = resolved;\n orchestrator.syncThreadId(resolved);\n }\n },\n { flush: \"sync\" }\n );\n\n const streamValues = shallowRef<StateType | null>(null);\n const streamError = shallowRef<unknown>(undefined);\n const isLoading = shallowRef(false);\n const version = shallowRef(0);\n const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\n const subagentsRef = shallowRef(\n reactiveSubagents.mapSubagents(orchestrator.subagents)\n );\n const activeSubagentsRef = shallowRef(\n reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents)\n );\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.value += 1;\n streamValues.value = orchestrator.streamValues;\n streamError.value = orchestrator.error;\n isLoading.value = orchestrator.isLoading;\n subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);\n activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(\n orchestrator.activeSubagents\n );\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n watch(\n () => ({\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n streamValues.value != null &&\n orchestrator.messages.length > 0,\n len: orchestrator.messages.length,\n }),\n ({ should }) => {\n if (should) {\n orchestrator.reconstructSubagentsIfNeeded();\n }\n },\n { immediate: true }\n );\n\n // Cached computed properties — unlike plain getters, `computed()` only\n // recomputes when a tracked dependency changes, and caches the result\n // between reads. Getters below unwrap `.value` so callers see plain\n // values (matching the original API surface).\n //\n // `void isLoading.value` / reading `streamValues.value` accesses the\n // ref solely to register it as a dependency of the computed, so Vue\n // knows to invalidate the cached value when the orchestrator pushes an\n // update. The `void` operator discards the unused value and signals\n // intent to future readers.\n const interruptsComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupts as Interrupt<InterruptType>[];\n });\n\n const interruptComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupt as Interrupt<InterruptType> | undefined;\n });\n\n const messagesComputed = computed(() => {\n if (!streamValues.value) return [];\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCallsComputed = computed(() => {\n if (!streamValues.value) return [];\n return orchestrator.toolCalls;\n });\n\n const queueEntries = shallowRef<unknown[]>([]);\n const queueSize = shallowRef(0);\n\n return {\n get values() {\n return streamValues.value ?? ({} as StateType);\n },\n\n error: streamError,\n isLoading,\n\n stop: () => orchestrator.stop(),\n\n submit: async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>\n ) => {\n await orchestrator.submit(values, submitOptions);\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n branch,\n setBranch(value: string) {\n branch.value = value;\n orchestrator.setBranch(value);\n },\n\n getMessagesMetadata(\n message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: async () => false,\n clear: async () => {},\n }),\n\n get interrupts(): Interrupt<InterruptType>[] {\n return interruptsComputed.value;\n },\n get interrupt(): Interrupt<InterruptType> | undefined {\n return interruptComputed.value;\n },\n get messages() {\n return messagesComputed.value;\n },\n get toolCalls() {\n return toolCallsComputed.value;\n },\n\n getToolCalls(message: Message) {\n return orchestrator.getToolCalls(message);\n },\n\n get subagents() {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.mapSubagents(orchestrator.subagents);\n },\n\n get activeSubagents() {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);\n },\n\n getSubagent(toolCallId: string) {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { createReactiveSubagentAccessors } from "./subagents.js";
1
2
  import { computed, onScopeDispose, reactive, ref, shallowRef, toValue, watch } from "vue";
2
3
  import { CustomStreamOrchestrator, ensureMessageInstances } from "@langchain/langgraph-sdk/ui";
3
4
  //#region src/stream.custom.ts
@@ -15,14 +16,21 @@ function useStreamCustom(options) {
15
16
  const streamValues = shallowRef(null);
16
17
  const streamError = shallowRef(void 0);
17
18
  const isLoading = shallowRef(false);
18
- const subagentsRef = shallowRef(orchestrator.subagents);
19
- const activeSubagentsRef = shallowRef(orchestrator.activeSubagents);
19
+ const version = shallowRef(0);
20
+ const reactiveSubagents = createReactiveSubagentAccessors({
21
+ getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),
22
+ getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),
23
+ getSubagentsByMessage: (messageId) => orchestrator.getSubagentsByMessage(messageId)
24
+ }, version);
25
+ const subagentsRef = shallowRef(reactiveSubagents.mapSubagents(orchestrator.subagents));
26
+ const activeSubagentsRef = shallowRef(reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents));
20
27
  const unsubscribe = orchestrator.subscribe(() => {
28
+ version.value += 1;
21
29
  streamValues.value = orchestrator.streamValues;
22
30
  streamError.value = orchestrator.error;
23
31
  isLoading.value = orchestrator.isLoading;
24
- subagentsRef.value = orchestrator.subagents;
25
- activeSubagentsRef.value = orchestrator.activeSubagents;
32
+ subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);
33
+ activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
26
34
  });
27
35
  onScopeDispose(() => {
28
36
  unsubscribe();
@@ -93,22 +101,29 @@ function useStreamCustom(options) {
93
101
  return orchestrator.getToolCalls(message);
94
102
  },
95
103
  get subagents() {
96
- return subagentsRef.value;
104
+ messagesComputed.value.length;
105
+ version.value;
106
+ return reactiveSubagents.mapSubagents(orchestrator.subagents);
97
107
  },
98
108
  get activeSubagents() {
99
- return activeSubagentsRef.value;
109
+ messagesComputed.value.length;
110
+ version.value;
111
+ return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);
100
112
  },
101
113
  getSubagent(toolCallId) {
102
- subagentsRef.value;
103
- return orchestrator.getSubagent(toolCallId);
114
+ messagesComputed.value.length;
115
+ version.value;
116
+ return reactiveSubagents.getSubagent(toolCallId);
104
117
  },
105
118
  getSubagentsByType(type) {
106
- subagentsRef.value;
107
- return orchestrator.getSubagentsByType(type);
119
+ messagesComputed.value.length;
120
+ version.value;
121
+ return reactiveSubagents.getSubagentsByType(type);
108
122
  },
109
123
  getSubagentsByMessage(messageId) {
110
- subagentsRef.value;
111
- return orchestrator.getSubagentsByMessage(messageId);
124
+ messagesComputed.value.length;
125
+ version.value;
126
+ return reactiveSubagents.getSubagentsByMessage(messageId);
112
127
  }
113
128
  };
114
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import {\n computed,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\n watch,\n} from \"vue\";\nimport {\n CustomStreamOrchestrator,\n ensureMessageInstances,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type GetUpdateType,\n type GetInterruptType,\n type GetConfigurableType,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport type { VueReactiveOptions } from \"./types.js\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: VueReactiveOptions<AnyStreamCustomOptions<StateType, Bag>>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const orchestrator = new CustomStreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamCustomOptions<StateType, Bag>\n );\n\n const branch = ref<string>(\"\");\n\n let threadId: string | null = toValue(options.threadId) ?? null;\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? null;\n if (resolved !== threadId) {\n threadId = resolved;\n orchestrator.syncThreadId(resolved);\n }\n },\n { flush: \"sync\" }\n );\n\n const streamValues = shallowRef<StateType | null>(null);\n const streamError = shallowRef<unknown>(undefined);\n const isLoading = shallowRef(false);\n const subagentsRef = shallowRef(orchestrator.subagents);\n const activeSubagentsRef = shallowRef(orchestrator.activeSubagents);\n\n const unsubscribe = orchestrator.subscribe(() => {\n streamValues.value = orchestrator.streamValues;\n streamError.value = orchestrator.error;\n isLoading.value = orchestrator.isLoading;\n subagentsRef.value = orchestrator.subagents;\n activeSubagentsRef.value = orchestrator.activeSubagents;\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n watch(\n () => ({\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n streamValues.value != null &&\n orchestrator.messages.length > 0,\n len: orchestrator.messages.length,\n }),\n ({ should }) => {\n if (should) {\n orchestrator.reconstructSubagentsIfNeeded();\n }\n },\n { immediate: true }\n );\n\n // Cached computed properties — unlike plain getters, `computed()` only\n // recomputes when a tracked dependency changes, and caches the result\n // between reads. Getters below unwrap `.value` so callers see plain\n // values (matching the original API surface).\n //\n // `void isLoading.value` / reading `streamValues.value` accesses the\n // ref solely to register it as a dependency of the computed, so Vue\n // knows to invalidate the cached value when the orchestrator pushes an\n // update. The `void` operator discards the unused value and signals\n // intent to future readers.\n const interruptsComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupts as Interrupt<InterruptType>[];\n });\n\n const interruptComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupt as Interrupt<InterruptType> | undefined;\n });\n\n const messagesComputed = computed(() => {\n if (!streamValues.value) return [];\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCallsComputed = computed(() => {\n if (!streamValues.value) return [];\n return orchestrator.toolCalls;\n });\n\n const queueEntries = shallowRef<unknown[]>([]);\n const queueSize = shallowRef(0);\n\n return {\n get values() {\n return streamValues.value ?? ({} as StateType);\n },\n\n error: streamError,\n isLoading,\n\n stop: () => orchestrator.stop(),\n\n submit: async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>\n ) => {\n await orchestrator.submit(values, submitOptions);\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n branch,\n setBranch(value: string) {\n branch.value = value;\n orchestrator.setBranch(value);\n },\n\n getMessagesMetadata(\n message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: async () => false,\n clear: async () => {},\n }),\n\n get interrupts(): Interrupt<InterruptType>[] {\n return interruptsComputed.value;\n },\n get interrupt(): Interrupt<InterruptType> | undefined {\n return interruptComputed.value;\n },\n get messages() {\n return messagesComputed.value;\n },\n get toolCalls() {\n return toolCallsComputed.value;\n },\n\n getToolCalls(message: Message) {\n return orchestrator.getToolCalls(message);\n },\n\n get subagents() {\n return subagentsRef.value;\n },\n\n get activeSubagents() {\n return activeSubagentsRef.value;\n },\n\n getSubagent(toolCallId: string) {\n void subagentsRef.value;\n return orchestrator.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void subagentsRef.value;\n return orchestrator.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void subagentsRef.value;\n return orchestrator.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":";;;AAsBA,SAAgB,gBAGd,SAAqE;CAKrE,MAAM,eAAe,IAAI,yBACvB,QACD;CAED,MAAM,SAAS,IAAY,GAAG;CAE9B,IAAI,WAA0B,QAAQ,QAAQ,SAAS,IAAI;AAE3D,aACQ,QAAQ,QAAQ,SAAS,GAC9B,UAAU;EACT,MAAM,WAAW,SAAS;AAC1B,MAAI,aAAa,UAAU;AACzB,cAAW;AACX,gBAAa,aAAa,SAAS;;IAGvC,EAAE,OAAO,QAAQ,CAClB;CAED,MAAM,eAAe,WAA6B,KAAK;CACvD,MAAM,cAAc,WAAoB,KAAA,EAAU;CAClD,MAAM,YAAY,WAAW,MAAM;CACnC,MAAM,eAAe,WAAW,aAAa,UAAU;CACvD,MAAM,qBAAqB,WAAW,aAAa,gBAAgB;CAEnE,MAAM,cAAc,aAAa,gBAAgB;AAC/C,eAAa,QAAQ,aAAa;AAClC,cAAY,QAAQ,aAAa;AACjC,YAAU,QAAQ,aAAa;AAC/B,eAAa,QAAQ,aAAa;AAClC,qBAAmB,QAAQ,aAAa;GACxC;AAEF,sBAAqB;AACnB,eAAa;AACb,eAAa,SAAS;GACtB;AAEF,cACS;EACL,QACE,QAAQ,0BACR,CAAC,UAAU,SACX,aAAa,SAAS,QACtB,aAAa,SAAS,SAAS;EACjC,KAAK,aAAa,SAAS;EAC5B,IACA,EAAE,aAAa;AACd,MAAI,OACF,cAAa,8BAA8B;IAG/C,EAAE,WAAW,MAAM,CACpB;CAYD,MAAM,qBAAqB,eAAe;AACnC,YAAU;AACf,SAAO,aAAa;GACpB;CAEF,MAAM,oBAAoB,eAAe;AAClC,YAAU;AACf,SAAO,aAAa;GACpB;CAEF,MAAM,mBAAmB,eAAe;AACtC,MAAI,CAAC,aAAa,MAAO,QAAO,EAAE;AAClC,SAAO,uBAAuB,aAAa,SAAS;GACpD;CAEF,MAAM,oBAAoB,eAAe;AACvC,MAAI,CAAC,aAAa,MAAO,QAAO,EAAE;AAClC,SAAO,aAAa;GACpB;AAKF,QAAO;EACL,IAAI,SAAS;AACX,UAAO,aAAa,SAAU,EAAE;;EAGlC,OAAO;EACP;EAEA,YAAY,aAAa,MAAM;EAE/B,QAAQ,OACN,QACA,kBACG;AACH,SAAM,aAAa,OAAO,QAAQ,cAAc;;EAGlD,aAAa,aAA4B;AACvC,gBAAa,aAAa,YAAY;;EAGxC;EACA,UAAU,OAAe;AACvB,UAAO,QAAQ;AACf,gBAAa,UAAU,MAAM;;EAG/B,oBACE,SACA,OACwC;AACxC,UAAO,aAAa,oBAAoB,SAAS,MAAM;;EAGzD,OAAO,SAAS;GACd,SAtCiB,WAAsB,EAAE,CAAC;GAuC1C,MAtCc,WAAW,EAAE;GAuC3B,QAAQ,YAAY;GACpB,OAAO,YAAY;GACpB,CAAC;EAEF,IAAI,aAAyC;AAC3C,UAAO,mBAAmB;;EAE5B,IAAI,YAAkD;AACpD,UAAO,kBAAkB;;EAE3B,IAAI,WAAW;AACb,UAAO,iBAAiB;;EAE1B,IAAI,YAAY;AACd,UAAO,kBAAkB;;EAG3B,aAAa,SAAkB;AAC7B,UAAO,aAAa,aAAa,QAAQ;;EAG3C,IAAI,YAAY;AACd,UAAO,aAAa;;EAGtB,IAAI,kBAAkB;AACpB,UAAO,mBAAmB;;EAG5B,YAAY,YAAoB;AACzB,gBAAa;AAClB,UAAO,aAAa,YAAY,WAAW;;EAE7C,mBAAmB,MAAc;AAC1B,gBAAa;AAClB,UAAO,aAAa,mBAAmB,KAAK;;EAE9C,sBAAsB,WAAmB;AAClC,gBAAa;AAClB,UAAO,aAAa,sBAAsB,UAAU;;EAEvD"}
1
+ {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import {\n computed,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\n watch,\n} from \"vue\";\nimport {\n CustomStreamOrchestrator,\n ensureMessageInstances,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type GetUpdateType,\n type GetInterruptType,\n type GetConfigurableType,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport type { VueReactiveOptions } from \"./types.js\";\nimport { createReactiveSubagentAccessors } from \"./subagents.js\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: VueReactiveOptions<AnyStreamCustomOptions<StateType, Bag>>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const orchestrator = new CustomStreamOrchestrator<StateType, Bag>(\n options as unknown as AnyStreamCustomOptions<StateType, Bag>\n );\n\n const branch = ref<string>(\"\");\n\n let threadId: string | null = toValue(options.threadId) ?? null;\n\n watch(\n () => toValue(options.threadId),\n (newId) => {\n const resolved = newId ?? null;\n if (resolved !== threadId) {\n threadId = resolved;\n orchestrator.syncThreadId(resolved);\n }\n },\n { flush: \"sync\" }\n );\n\n const streamValues = shallowRef<StateType | null>(null);\n const streamError = shallowRef<unknown>(undefined);\n const isLoading = shallowRef(false);\n const version = shallowRef(0);\n const reactiveSubagents = createReactiveSubagentAccessors(\n {\n getSubagent: (toolCallId) => orchestrator.getSubagent(toolCallId),\n getSubagentsByType: (type) => orchestrator.getSubagentsByType(type),\n getSubagentsByMessage: (messageId) =>\n orchestrator.getSubagentsByMessage(messageId),\n },\n version\n );\n const subagentsRef = shallowRef(\n reactiveSubagents.mapSubagents(orchestrator.subagents)\n );\n const activeSubagentsRef = shallowRef(\n reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents)\n );\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.value += 1;\n streamValues.value = orchestrator.streamValues;\n streamError.value = orchestrator.error;\n isLoading.value = orchestrator.isLoading;\n subagentsRef.value = reactiveSubagents.mapSubagents(orchestrator.subagents);\n activeSubagentsRef.value = reactiveSubagents.mapActiveSubagents(\n orchestrator.activeSubagents\n );\n });\n\n onScopeDispose(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n watch(\n () => ({\n should:\n options.filterSubagentMessages &&\n !isLoading.value &&\n streamValues.value != null &&\n orchestrator.messages.length > 0,\n len: orchestrator.messages.length,\n }),\n ({ should }) => {\n if (should) {\n orchestrator.reconstructSubagentsIfNeeded();\n }\n },\n { immediate: true }\n );\n\n // Cached computed properties — unlike plain getters, `computed()` only\n // recomputes when a tracked dependency changes, and caches the result\n // between reads. Getters below unwrap `.value` so callers see plain\n // values (matching the original API surface).\n //\n // `void isLoading.value` / reading `streamValues.value` accesses the\n // ref solely to register it as a dependency of the computed, so Vue\n // knows to invalidate the cached value when the orchestrator pushes an\n // update. The `void` operator discards the unused value and signals\n // intent to future readers.\n const interruptsComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupts as Interrupt<InterruptType>[];\n });\n\n const interruptComputed = computed(() => {\n void isLoading.value;\n return orchestrator.interrupt as Interrupt<InterruptType> | undefined;\n });\n\n const messagesComputed = computed(() => {\n if (!streamValues.value) return [];\n return ensureMessageInstances(orchestrator.messages);\n });\n\n const toolCallsComputed = computed(() => {\n if (!streamValues.value) return [];\n return orchestrator.toolCalls;\n });\n\n const queueEntries = shallowRef<unknown[]>([]);\n const queueSize = shallowRef(0);\n\n return {\n get values() {\n return streamValues.value ?? ({} as StateType);\n },\n\n error: streamError,\n isLoading,\n\n stop: () => orchestrator.stop(),\n\n submit: async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>\n ) => {\n await orchestrator.submit(values, submitOptions);\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n branch,\n setBranch(value: string) {\n branch.value = value;\n orchestrator.setBranch(value);\n },\n\n getMessagesMetadata(\n message: Message,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n queue: reactive({\n entries: queueEntries,\n size: queueSize,\n cancel: async () => false,\n clear: async () => {},\n }),\n\n get interrupts(): Interrupt<InterruptType>[] {\n return interruptsComputed.value;\n },\n get interrupt(): Interrupt<InterruptType> | undefined {\n return interruptComputed.value;\n },\n get messages() {\n return messagesComputed.value;\n },\n get toolCalls() {\n return toolCallsComputed.value;\n },\n\n getToolCalls(message: Message) {\n return orchestrator.getToolCalls(message);\n },\n\n get subagents() {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.mapSubagents(orchestrator.subagents);\n },\n\n get activeSubagents() {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.mapActiveSubagents(orchestrator.activeSubagents);\n },\n\n getSubagent(toolCallId: string) {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n void messagesComputed.value.length;\n void version.value;\n return reactiveSubagents.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ //#region src/subagents.ts
2
+ /**
3
+ * Create stable proxy objects for subagents so retained references stay in sync
4
+ * with the latest orchestrator snapshot while still participating in Vue
5
+ * dependency tracking through the provided version ref.
6
+ */
7
+ function createReactiveSubagentAccessors(accessors, version) {
8
+ const subagentCache = /* @__PURE__ */ new Map();
9
+ const getCachedSubagent = (toolCallId) => {
10
+ if (!accessors.getSubagent(toolCallId)) {
11
+ subagentCache.delete(toolCallId);
12
+ return;
13
+ }
14
+ let cached = subagentCache.get(toolCallId);
15
+ if (!cached) {
16
+ cached = new Proxy({ id: toolCallId }, {
17
+ get(_target, prop, receiver) {
18
+ version.value;
19
+ const latest = accessors.getSubagent(toolCallId);
20
+ if (!latest) return void 0;
21
+ const value = Reflect.get(latest, prop, receiver);
22
+ return typeof value === "function" ? value.bind(latest) : value;
23
+ },
24
+ has(_target, prop) {
25
+ const latest = accessors.getSubagent(toolCallId);
26
+ return latest ? prop in latest : false;
27
+ },
28
+ ownKeys() {
29
+ version.value;
30
+ const latest = accessors.getSubagent(toolCallId);
31
+ return latest ? Reflect.ownKeys(latest) : [];
32
+ },
33
+ getOwnPropertyDescriptor(_target, prop) {
34
+ return {
35
+ configurable: true,
36
+ enumerable: true,
37
+ get() {
38
+ version.value;
39
+ const latest = accessors.getSubagent(toolCallId);
40
+ if (!latest) return void 0;
41
+ return Reflect.get(latest, prop);
42
+ }
43
+ };
44
+ }
45
+ });
46
+ subagentCache.set(toolCallId, cached);
47
+ }
48
+ return cached;
49
+ };
50
+ const mapSubagents = (subagents) => {
51
+ const nextIds = new Set(subagents.keys());
52
+ for (const toolCallId of subagentCache.keys()) if (!nextIds.has(toolCallId)) subagentCache.delete(toolCallId);
53
+ return new Map([...subagents.keys()].map((toolCallId) => {
54
+ const cached = getCachedSubagent(toolCallId);
55
+ return cached ? [toolCallId, cached] : void 0;
56
+ }).filter((entry) => entry != null));
57
+ };
58
+ const mapActiveSubagents = (subagents) => subagents.map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
59
+ return {
60
+ mapSubagents,
61
+ mapActiveSubagents,
62
+ getSubagent: getCachedSubagent,
63
+ getSubagentsByType(type) {
64
+ version.value;
65
+ return accessors.getSubagentsByType(type).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
66
+ },
67
+ getSubagentsByMessage(messageId) {
68
+ version.value;
69
+ return accessors.getSubagentsByMessage(messageId).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
70
+ }
71
+ };
72
+ }
73
+ //#endregion
74
+ exports.createReactiveSubagentAccessors = createReactiveSubagentAccessors;
75
+
76
+ //# sourceMappingURL=subagents.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents.cjs","names":[],"sources":["../src/subagents.ts"],"sourcesContent":["import type { Ref } from \"vue\";\n\ntype SubagentLike = {\n id: string;\n};\n\ntype SubagentAccessors<TSubagent extends SubagentLike> = {\n getSubagent: (toolCallId: string) => TSubagent | undefined;\n getSubagentsByType: (type: string) => TSubagent[];\n getSubagentsByMessage: (messageId: string) => TSubagent[];\n};\n\n/**\n * Create stable proxy objects for subagents so retained references stay in sync\n * with the latest orchestrator snapshot while still participating in Vue\n * dependency tracking through the provided version ref.\n */\nexport function createReactiveSubagentAccessors<TSubagent extends SubagentLike>(\n accessors: SubagentAccessors<TSubagent>,\n version: Ref<number>\n) {\n const subagentCache = new Map<string, TSubagent>();\n\n const getCachedSubagent = (toolCallId: string): TSubagent | undefined => {\n const current = accessors.getSubagent(toolCallId);\n if (!current) {\n subagentCache.delete(toolCallId);\n return undefined;\n }\n\n let cached = subagentCache.get(toolCallId);\n if (!cached) {\n cached = new Proxy({ id: toolCallId } as TSubagent, {\n get(_target, prop, receiver) {\n void version.value;\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n\n const value = Reflect.get(latest as object, prop, receiver);\n return typeof value === \"function\" ? value.bind(latest) : value;\n },\n has(_target, prop) {\n const latest = accessors.getSubagent(toolCallId);\n return latest ? prop in (latest as object) : false;\n },\n ownKeys() {\n void version.value;\n const latest = accessors.getSubagent(toolCallId);\n return latest ? Reflect.ownKeys(latest as object) : [];\n },\n getOwnPropertyDescriptor(_target, prop) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n void version.value;\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n return Reflect.get(latest as object, prop);\n },\n };\n },\n });\n subagentCache.set(toolCallId, cached);\n }\n\n return cached;\n };\n\n const mapSubagents = (subagents: Map<string, TSubagent>) => {\n const nextIds = new Set(subagents.keys());\n for (const toolCallId of subagentCache.keys()) {\n if (!nextIds.has(toolCallId)) {\n subagentCache.delete(toolCallId);\n }\n }\n\n return new Map(\n [...subagents.keys()]\n .map((toolCallId) => {\n const cached = getCachedSubagent(toolCallId);\n return cached ? ([toolCallId, cached] as const) : undefined;\n })\n .filter((entry): entry is readonly [string, TSubagent] => entry != null)\n );\n };\n\n const mapActiveSubagents = (subagents: readonly TSubagent[]) =>\n subagents\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n\n return {\n mapSubagents,\n mapActiveSubagents,\n getSubagent: getCachedSubagent,\n getSubagentsByType(type: string): TSubagent[] {\n void version.value;\n return accessors\n .getSubagentsByType(type)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n getSubagentsByMessage(messageId: string): TSubagent[] {\n void version.value;\n return accessors\n .getSubagentsByMessage(messageId)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n };\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,gCACd,WACA,SACA;CACA,MAAM,gCAAgB,IAAI,KAAwB;CAElD,MAAM,qBAAqB,eAA8C;AAEvE,MAAI,CADY,UAAU,YAAY,WAAW,EACnC;AACZ,iBAAc,OAAO,WAAW;AAChC;;EAGF,IAAI,SAAS,cAAc,IAAI,WAAW;AAC1C,MAAI,CAAC,QAAQ;AACX,YAAS,IAAI,MAAM,EAAE,IAAI,YAAY,EAAe;IAClD,IAAI,SAAS,MAAM,UAAU;AACtB,aAAQ;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,SAAI,CAAC,OAAQ,QAAO,KAAA;KAEpB,MAAM,QAAQ,QAAQ,IAAI,QAAkB,MAAM,SAAS;AAC3D,YAAO,OAAO,UAAU,aAAa,MAAM,KAAK,OAAO,GAAG;;IAE5D,IAAI,SAAS,MAAM;KACjB,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAS,SAAoB;;IAE/C,UAAU;AACH,aAAQ;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAQ,QAAQ,OAAiB,GAAG,EAAE;;IAExD,yBAAyB,SAAS,MAAM;AACtC,YAAO;MACL,cAAc;MACd,YAAY;MACZ,MAAM;AACC,eAAQ;OACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,WAAI,CAAC,OAAQ,QAAO,KAAA;AACpB,cAAO,QAAQ,IAAI,QAAkB,KAAK;;MAE7C;;IAEJ,CAAC;AACF,iBAAc,IAAI,YAAY,OAAO;;AAGvC,SAAO;;CAGT,MAAM,gBAAgB,cAAsC;EAC1D,MAAM,UAAU,IAAI,IAAI,UAAU,MAAM,CAAC;AACzC,OAAK,MAAM,cAAc,cAAc,MAAM,CAC3C,KAAI,CAAC,QAAQ,IAAI,WAAW,CAC1B,eAAc,OAAO,WAAW;AAIpC,SAAO,IAAI,IACT,CAAC,GAAG,UAAU,MAAM,CAAC,CAClB,KAAK,eAAe;GACnB,MAAM,SAAS,kBAAkB,WAAW;AAC5C,UAAO,SAAU,CAAC,YAAY,OAAO,GAAa,KAAA;IAClD,CACD,QAAQ,UAAiD,SAAS,KAAK,CAC3E;;CAGH,MAAM,sBAAsB,cAC1B,UACG,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;AAElE,QAAO;EACL;EACA;EACA,aAAa;EACb,mBAAmB,MAA2B;AACvC,WAAQ;AACb,UAAO,UACJ,mBAAmB,KAAK,CACxB,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAElE,sBAAsB,WAAgC;AAC/C,WAAQ;AACb,UAAO,UACJ,sBAAsB,UAAU,CAChC,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAEnE"}
@@ -0,0 +1,76 @@
1
+ //#region src/subagents.ts
2
+ /**
3
+ * Create stable proxy objects for subagents so retained references stay in sync
4
+ * with the latest orchestrator snapshot while still participating in Vue
5
+ * dependency tracking through the provided version ref.
6
+ */
7
+ function createReactiveSubagentAccessors(accessors, version) {
8
+ const subagentCache = /* @__PURE__ */ new Map();
9
+ const getCachedSubagent = (toolCallId) => {
10
+ if (!accessors.getSubagent(toolCallId)) {
11
+ subagentCache.delete(toolCallId);
12
+ return;
13
+ }
14
+ let cached = subagentCache.get(toolCallId);
15
+ if (!cached) {
16
+ cached = new Proxy({ id: toolCallId }, {
17
+ get(_target, prop, receiver) {
18
+ version.value;
19
+ const latest = accessors.getSubagent(toolCallId);
20
+ if (!latest) return void 0;
21
+ const value = Reflect.get(latest, prop, receiver);
22
+ return typeof value === "function" ? value.bind(latest) : value;
23
+ },
24
+ has(_target, prop) {
25
+ const latest = accessors.getSubagent(toolCallId);
26
+ return latest ? prop in latest : false;
27
+ },
28
+ ownKeys() {
29
+ version.value;
30
+ const latest = accessors.getSubagent(toolCallId);
31
+ return latest ? Reflect.ownKeys(latest) : [];
32
+ },
33
+ getOwnPropertyDescriptor(_target, prop) {
34
+ return {
35
+ configurable: true,
36
+ enumerable: true,
37
+ get() {
38
+ version.value;
39
+ const latest = accessors.getSubagent(toolCallId);
40
+ if (!latest) return void 0;
41
+ return Reflect.get(latest, prop);
42
+ }
43
+ };
44
+ }
45
+ });
46
+ subagentCache.set(toolCallId, cached);
47
+ }
48
+ return cached;
49
+ };
50
+ const mapSubagents = (subagents) => {
51
+ const nextIds = new Set(subagents.keys());
52
+ for (const toolCallId of subagentCache.keys()) if (!nextIds.has(toolCallId)) subagentCache.delete(toolCallId);
53
+ return new Map([...subagents.keys()].map((toolCallId) => {
54
+ const cached = getCachedSubagent(toolCallId);
55
+ return cached ? [toolCallId, cached] : void 0;
56
+ }).filter((entry) => entry != null));
57
+ };
58
+ const mapActiveSubagents = (subagents) => subagents.map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
59
+ return {
60
+ mapSubagents,
61
+ mapActiveSubagents,
62
+ getSubagent: getCachedSubagent,
63
+ getSubagentsByType(type) {
64
+ version.value;
65
+ return accessors.getSubagentsByType(type).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
66
+ },
67
+ getSubagentsByMessage(messageId) {
68
+ version.value;
69
+ return accessors.getSubagentsByMessage(messageId).map((subagent) => getCachedSubagent(subagent.id)).filter((subagent) => subagent != null);
70
+ }
71
+ };
72
+ }
73
+ //#endregion
74
+ export { createReactiveSubagentAccessors };
75
+
76
+ //# sourceMappingURL=subagents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents.js","names":[],"sources":["../src/subagents.ts"],"sourcesContent":["import type { Ref } from \"vue\";\n\ntype SubagentLike = {\n id: string;\n};\n\ntype SubagentAccessors<TSubagent extends SubagentLike> = {\n getSubagent: (toolCallId: string) => TSubagent | undefined;\n getSubagentsByType: (type: string) => TSubagent[];\n getSubagentsByMessage: (messageId: string) => TSubagent[];\n};\n\n/**\n * Create stable proxy objects for subagents so retained references stay in sync\n * with the latest orchestrator snapshot while still participating in Vue\n * dependency tracking through the provided version ref.\n */\nexport function createReactiveSubagentAccessors<TSubagent extends SubagentLike>(\n accessors: SubagentAccessors<TSubagent>,\n version: Ref<number>\n) {\n const subagentCache = new Map<string, TSubagent>();\n\n const getCachedSubagent = (toolCallId: string): TSubagent | undefined => {\n const current = accessors.getSubagent(toolCallId);\n if (!current) {\n subagentCache.delete(toolCallId);\n return undefined;\n }\n\n let cached = subagentCache.get(toolCallId);\n if (!cached) {\n cached = new Proxy({ id: toolCallId } as TSubagent, {\n get(_target, prop, receiver) {\n void version.value;\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n\n const value = Reflect.get(latest as object, prop, receiver);\n return typeof value === \"function\" ? value.bind(latest) : value;\n },\n has(_target, prop) {\n const latest = accessors.getSubagent(toolCallId);\n return latest ? prop in (latest as object) : false;\n },\n ownKeys() {\n void version.value;\n const latest = accessors.getSubagent(toolCallId);\n return latest ? Reflect.ownKeys(latest as object) : [];\n },\n getOwnPropertyDescriptor(_target, prop) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n void version.value;\n const latest = accessors.getSubagent(toolCallId);\n if (!latest) return undefined;\n return Reflect.get(latest as object, prop);\n },\n };\n },\n });\n subagentCache.set(toolCallId, cached);\n }\n\n return cached;\n };\n\n const mapSubagents = (subagents: Map<string, TSubagent>) => {\n const nextIds = new Set(subagents.keys());\n for (const toolCallId of subagentCache.keys()) {\n if (!nextIds.has(toolCallId)) {\n subagentCache.delete(toolCallId);\n }\n }\n\n return new Map(\n [...subagents.keys()]\n .map((toolCallId) => {\n const cached = getCachedSubagent(toolCallId);\n return cached ? ([toolCallId, cached] as const) : undefined;\n })\n .filter((entry): entry is readonly [string, TSubagent] => entry != null)\n );\n };\n\n const mapActiveSubagents = (subagents: readonly TSubagent[]) =>\n subagents\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n\n return {\n mapSubagents,\n mapActiveSubagents,\n getSubagent: getCachedSubagent,\n getSubagentsByType(type: string): TSubagent[] {\n void version.value;\n return accessors\n .getSubagentsByType(type)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n getSubagentsByMessage(messageId: string): TSubagent[] {\n void version.value;\n return accessors\n .getSubagentsByMessage(messageId)\n .map((subagent) => getCachedSubagent(subagent.id))\n .filter((subagent): subagent is TSubagent => subagent != null);\n },\n };\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,gCACd,WACA,SACA;CACA,MAAM,gCAAgB,IAAI,KAAwB;CAElD,MAAM,qBAAqB,eAA8C;AAEvE,MAAI,CADY,UAAU,YAAY,WAAW,EACnC;AACZ,iBAAc,OAAO,WAAW;AAChC;;EAGF,IAAI,SAAS,cAAc,IAAI,WAAW;AAC1C,MAAI,CAAC,QAAQ;AACX,YAAS,IAAI,MAAM,EAAE,IAAI,YAAY,EAAe;IAClD,IAAI,SAAS,MAAM,UAAU;AACtB,aAAQ;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,SAAI,CAAC,OAAQ,QAAO,KAAA;KAEpB,MAAM,QAAQ,QAAQ,IAAI,QAAkB,MAAM,SAAS;AAC3D,YAAO,OAAO,UAAU,aAAa,MAAM,KAAK,OAAO,GAAG;;IAE5D,IAAI,SAAS,MAAM;KACjB,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAS,SAAoB;;IAE/C,UAAU;AACH,aAAQ;KACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,YAAO,SAAS,QAAQ,QAAQ,OAAiB,GAAG,EAAE;;IAExD,yBAAyB,SAAS,MAAM;AACtC,YAAO;MACL,cAAc;MACd,YAAY;MACZ,MAAM;AACC,eAAQ;OACb,MAAM,SAAS,UAAU,YAAY,WAAW;AAChD,WAAI,CAAC,OAAQ,QAAO,KAAA;AACpB,cAAO,QAAQ,IAAI,QAAkB,KAAK;;MAE7C;;IAEJ,CAAC;AACF,iBAAc,IAAI,YAAY,OAAO;;AAGvC,SAAO;;CAGT,MAAM,gBAAgB,cAAsC;EAC1D,MAAM,UAAU,IAAI,IAAI,UAAU,MAAM,CAAC;AACzC,OAAK,MAAM,cAAc,cAAc,MAAM,CAC3C,KAAI,CAAC,QAAQ,IAAI,WAAW,CAC1B,eAAc,OAAO,WAAW;AAIpC,SAAO,IAAI,IACT,CAAC,GAAG,UAAU,MAAM,CAAC,CAClB,KAAK,eAAe;GACnB,MAAM,SAAS,kBAAkB,WAAW;AAC5C,UAAO,SAAU,CAAC,YAAY,OAAO,GAAa,KAAA;IAClD,CACD,QAAQ,UAAiD,SAAS,KAAK,CAC3E;;CAGH,MAAM,sBAAsB,cAC1B,UACG,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;AAElE,QAAO;EACL;EACA;EACA,aAAa;EACb,mBAAmB,MAA2B;AACvC,WAAQ;AACb,UAAO,UACJ,mBAAmB,KAAK,CACxB,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAElE,sBAAsB,WAAgC;AAC/C,WAAQ;AACb,UAAO,UACJ,sBAAsB,UAAU,CAChC,KAAK,aAAa,kBAAkB,SAAS,GAAG,CAAC,CACjD,QAAQ,aAAoC,YAAY,KAAK;;EAEnE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/vue",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Vue integration for LangGraph & LangChain",
5
5
  "type": "module",
6
6
  "license": "MIT",