@tanstack/ai-persistence
Version:
Composable state persistence for TanStack AI messages, runs, interrupts, metadata, and locks.
50 lines (49 loc) • 1.79 kB
TypeScript
import { Interrupt, ModelMessage, RunAgentResumeItem, RunStore, StreamChunk, SubagentWireInfo, UIMessage } from '@tanstack/ai';
import { InterruptStore, MessageStore } from './types.js';
/**
* Card data for a stored child transcript. It rides on the first message, in
* `metadata.tanstack.subagent`, the same shape the wire uses.
*/
export declare function storedSubagentInfo(messages: ReadonlyArray<ModelMessage>): SubagentWireInfo | undefined;
export declare function createSubagentRunRecorder(stores: {
messages: MessageStore;
runs?: RunStore;
interrupts?: InterruptStore;
/** Minimum milliseconds between writes while a child streams. */
intervalMs?: number;
}): {
loadChild: (subagentRunId: string, caller: {
threadId: string;
subagentRunId?: string;
}) => Promise<{
agent?: string | undefined;
messages: ModelMessage<string | import('@tanstack/ai').ContentPart<unknown, unknown, unknown, unknown, unknown>[] | null>[];
} | undefined>;
start(input: {
threadId: string;
runId: string;
messages: ReadonlyArray<UIMessage | ModelMessage>;
resume?: ReadonlyArray<RunAgentResumeItem>;
}): Promise<void>;
chunk(input: {
threadId: string;
runId: string;
/** Set when the chat that streams this chunk is a child itself. */
subagentRunId?: string;
chunk: StreamChunk;
}): Promise<void>;
suspend(input: {
threadId: string;
runId: string;
interrupts: ReadonlyArray<Interrupt>;
}): Promise<void>;
finish(input: {
threadId: string;
runId: string;
}): Promise<void>;
abort(input: {
threadId: string;
runId: string;
error?: unknown;
}): Promise<void>;
};