import { ThreadState } from "../schema.js"; import { DefaultToolCall, ToolCallWithResult } from "../types.messages.js"; import { AcceptBaseMessages, MessageMetadata, SubagentStreamInterface } from "./types.js"; import { QueueInterface } from "./queue.js"; import { HistoryWithBaseMessages, StateWithBaseMessages } from "./messages.js"; import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages"; //#region src/ui/class-messages.d.ts /** * Remaps an SDK {@link ToolCallWithResult} so that the `toolMessage` and * `aiMessage` fields use `@langchain/core` class instances * (`CoreToolMessage` / `CoreAIMessage`) instead of plain SDK message * objects. * * Framework SDKs convert messages to class instances at runtime via * `ensureMessageInstances`; this type reflects that conversion at the * type level. */ type ClassToolCallWithResult = T extends ToolCallWithResult ? ToolCallWithResult : T; /** * Subagent stream interface with `messages` typed as `BaseMessage[]` * instead of `Message[]`. * * Framework SDKs use class message instances end-to-end; this type is * the subagent counterpart of {@link WithClassMessages}. */ type ClassSubagentStreamInterface, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit, "messages" | "values"> & { messages: BaseMessage[]; values: StateWithBaseMessages; }; type StreamState = T extends { getMessagesMetadata: (message: unknown, index?: number) => MessageMetadata | undefined; } ? S extends Record ? S : Record : T extends { history: ThreadState[]; } ? S extends Record ? S : Record : T extends { values: infer V; } ? V extends Record ? V : Record : Record; type ClassOptimisticValues = StateType extends Record ? Partial> | ((prev: StateWithBaseMessages) => Partial>) : never; type WithClassSubmitOptions = Options extends { optimisticValues?: unknown; } ? Omit & { optimisticValues?: ClassOptimisticValues; } : Options; /** * Maps a stream interface to use `@langchain/core` {@link BaseMessage} * class instances instead of plain SDK {@link Message} objects. * * Specifically: * - `messages` becomes `BaseMessage[]` * - `getMessagesMetadata` accepts a `BaseMessage` * - `toolCalls` uses {@link ClassToolCallWithResult} * - `getToolCalls` accepts `CoreAIMessage` and returns class-based * tool call results * - `submit` accepts `BaseMessage` via {@link AcceptBaseMessages} * - `history` is remapped via {@link HistoryWithBaseMessages} * - Subagent properties use {@link ClassSubagentStreamInterface} * * React, Angular, and Svelte use this type directly. Vue applies * additional `Ref`/`ComputedRef` wrapping on top of the shared helper * types. */ type WithClassMessages = Omit & { messages: BaseMessage[]; values: StateWithBaseMessages>; getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata>> | undefined; } & ("history" extends keyof T ? { history: HistoryWithBaseMessages; } : unknown) & ("submit" extends keyof T ? { submit: T extends { submit: (values: infer V, options?: infer O) => infer Ret; } ? (values: AcceptBaseMessages> | null | undefined, options?: WithClassSubmitOptions, O>) => Ret : never; } : unknown) & ("queue" extends keyof T ? { queue: T extends { queue: QueueInterface; } ? QueueInterface, WithClassSubmitOptions> : never; } : unknown) & ("toolCalls" extends keyof T ? { toolCalls: T extends { toolCalls: (infer TC)[]; } ? ClassToolCallWithResult[] : never; } : unknown) & ("getToolCalls" extends keyof T ? { getToolCalls: T extends { getToolCalls: (message: infer _M) => (infer TC)[]; } ? (message: AIMessage) => ClassToolCallWithResult[] : never; } : unknown) & ("subagents" extends keyof T ? { subagents: T extends { subagents: Map>; } ? Map> : never; activeSubagents: T extends { activeSubagents: SubagentStreamInterface[]; } ? ClassSubagentStreamInterface[] : never; getSubagent: T extends { getSubagent: (id: string) => SubagentStreamInterface | undefined; } ? (toolCallId: string) => ClassSubagentStreamInterface | undefined : never; getSubagentsByType: T extends { getSubagentsByType: (type: string) => SubagentStreamInterface[]; } ? (type: string) => ClassSubagentStreamInterface[] : never; getSubagentsByMessage: T extends { getSubagentsByMessage: (id: string) => SubagentStreamInterface[]; } ? (messageId: string) => ClassSubagentStreamInterface[] : never; } : unknown); //#endregion export { ClassSubagentStreamInterface, ClassToolCallWithResult, WithClassMessages }; //# sourceMappingURL=class-messages.d.ts.map