export type ConversationTurnQueueStatus = "failed" | "queued" | "running";
export type ConversationTurnQueueItem = {
error?: unknown;
id: string;
input: Input;
status: ConversationTurnQueueStatus;
};
export type ConversationTurnQueueSnapshot = {
items: ReadonlyArray>;
running: boolean;
};
export type ConversationTurnQueueOptions = {
execute: (input: Input, context: {
id: string;
signal: AbortSignal;
}) => Promise;
maxSize?: number;
onError?: (error: unknown, item: ConversationTurnQueueItem) => void;
};
export declare class ConversationTurnQueueFullError extends Error {
constructor(maxSize: number);
}
/**
* Serializes turns for one conversation.
*
* The queue is transport-agnostic: WebSocket chat, REST/SSE applications, and
* durable adapters can all provide their own `execute` boundary. Failed turns
* remain visible and stop the queue until the host retries or removes them, so
* a later follow-up can never silently overtake a failed earlier message.
*/
export declare const createConversationTurnQueue: (options: ConversationTurnQueueOptions) => {
cancel: (input?: {
clearPending?: boolean;
}) => void;
enqueue: (input: Input, id?: string) => string;
getSnapshot: () => ConversationTurnQueueSnapshot;
remove: (id: string) => boolean;
retry: (id: string) => boolean;
subscribe: (listener: (snapshot: ConversationTurnQueueSnapshot) => void) => () => boolean;
};