UNPKG

agents

Version:

A home for your AI agents

253 lines (251 loc) • 11.7 kB
import { JSONSchema7, UIMessage } from "ai"; //#region src/chat/protocol.d.ts /** * Wire protocol message type constants for the cf_agent_chat_* protocol. * * These are the string values used on the wire between agent servers and * clients. Both @cloudflare/ai-chat (via its MessageType enum) and * @cloudflare/think use these values. */ declare const STREAM_RESUME_NONE_REASONS: { /** No active, pending, or terminal stream exists for this agent. */ readonly IDLE: "idle" /** An active tool continuation is owned by another live connection. */; readonly CONTINUATION_OWNED: "continuation-owned"; }; type StreamResumeNoneReason = (typeof STREAM_RESUME_NONE_REASONS)[keyof typeof STREAM_RESUME_NONE_REASONS]; declare const CHAT_MESSAGE_TYPES: { readonly CHAT_MESSAGES: "cf_agent_chat_messages"; readonly USE_CHAT_REQUEST: "cf_agent_use_chat_request"; readonly USE_CHAT_RESPONSE: "cf_agent_use_chat_response"; readonly CHAT_CLEAR: "cf_agent_chat_clear"; readonly CHAT_REQUEST_CANCEL: "cf_agent_chat_request_cancel"; readonly STREAM_RESUMING: "cf_agent_stream_resuming"; readonly STREAM_RESUME_ACK: "cf_agent_stream_resume_ack"; readonly STREAM_RESUME_REQUEST: "cf_agent_stream_resume_request"; readonly STREAM_RESUME_NONE: "cf_agent_stream_resume_none"; readonly STREAM_PENDING: "cf_agent_stream_pending"; readonly TOOL_RESULT: "cf_agent_tool_result"; readonly TOOL_APPROVAL: "cf_agent_tool_approval"; readonly MESSAGE_UPDATED: "cf_agent_message_updated"; readonly CHAT_RECOVERING: "cf_agent_chat_recovering"; }; //#endregion //#region src/chat/wire-types.d.ts /** * How a chat request ended. * * - `completed`: the turn finished normally. * - `error`: the turn failed. * - `aborted`: the turn was cancelled while it ran. * - `skipped`: the turn never ran, because a newer send superseded it or the * concurrency policy dropped it. * - `recovering`: this request stopped, but recovery continues the same turn * under a new request that carries the same `messageIds`. */ type ChatTurnOutcome = | "completed" | "error" | "aborted" | "skipped" | "recovering"; /** * Enum for message types to improve type safety and maintainability */ declare enum MessageType { CF_AGENT_CHAT_MESSAGES = "cf_agent_chat_messages", CF_AGENT_USE_CHAT_REQUEST = "cf_agent_use_chat_request", CF_AGENT_USE_CHAT_RESPONSE = "cf_agent_use_chat_response", CF_AGENT_CHAT_CLEAR = "cf_agent_chat_clear", CF_AGENT_CHAT_REQUEST_CANCEL = "cf_agent_chat_request_cancel", /** Sent by server when client connects and there's an active stream to resume */ CF_AGENT_STREAM_RESUMING = "cf_agent_stream_resuming", /** Sent by client to acknowledge stream resuming notification and request chunks */ CF_AGENT_STREAM_RESUME_ACK = "cf_agent_stream_resume_ack", /** Sent by client after message handler is ready, requesting stream resume check */ CF_AGENT_STREAM_RESUME_REQUEST = "cf_agent_stream_resume_request", /** Sent by server when client requests resume but no active stream exists */ CF_AGENT_STREAM_RESUME_NONE = "cf_agent_stream_resume_none", /** * Sent by server when a turn is accepted but its resumable stream has not * started yet (queued / debouncing / waiting on MCP / async setup). Tells a * reconnecting client to keep waiting rather than resolve its resume probe to * "no stream". Resolved by a later `CF_AGENT_STREAM_RESUMING` (stream started) * or `CF_AGENT_STREAM_RESUME_NONE` (settled without streaming). See #1784. */ CF_AGENT_STREAM_PENDING = "cf_agent_stream_pending", /** Client sends tool result to server (for client-side tools) */ CF_AGENT_TOOL_RESULT = "cf_agent_tool_result", /** Server notifies client that a message was updated (e.g., tool result applied) */ CF_AGENT_MESSAGE_UPDATED = "cf_agent_message_updated", /** Client sends tool approval response to server (for tools with needsApproval) */ CF_AGENT_TOOL_APPROVAL = "cf_agent_tool_approval", /** * Server→client progress hint: a durable chat turn is being recovered * (interrupted by a deploy/eviction or a stream-stall watchdog abort and now * resuming). Sent when a recovery continuation is scheduled and cleared on * every terminal outcome. (`@cloudflare/think` also replays it on connect; * `@cloudflare/ai-chat` broadcasts the live signal only — see #1645.) * Backward-compatible — clients that don't understand it ignore it. See #1620. */ CF_AGENT_CHAT_RECOVERING = "cf_agent_chat_recovering" } /** * Types of messages sent from the Agent to clients */ type OutgoingMessage<ChatMessage extends UIMessage = UIMessage> = | { /** Indicates this message is a command to clear chat history */ type: MessageType.CF_AGENT_CHAT_CLEAR; } | { /** Indicates this message contains updated chat messages */ type: MessageType.CF_AGENT_CHAT_MESSAGES /** Array of chat messages */; messages: readonly ChatMessage[]; /** * Set on the transcript a server sends to a newly connected client. It * predates any request the client buffered while disconnected, so the * client keeps those optimistic sends; any other snapshot is * authoritative (#1983). */ connect?: boolean; } | { /** Indicates this message is a response to a chat request */ type: MessageType.CF_AGENT_USE_CHAT_RESPONSE /** Unique ID of the request this response corresponds to */; id: string /** Content body of the response */; body: string /** Whether this is the final chunk of the response */; done: boolean /** Whether this response contains an error */; error?: boolean /** Whether this is a continuation (append to last assistant message) */; continuation?: boolean /** Whether this chunk is being replayed from storage (stream resumption) */; replay?: boolean /** Signals that replay of stored chunks is complete (stream is still active) */; replayComplete?: boolean; /** * Index of this chunk within its stream. A live chunk carries the index * its replay will carry, so a client can skip replayed chunks it has * already applied. */ seq?: number; /** * IDs of the user messages the originating request carried (the * trailing user messages of its `messages`). Set on terminal frames * (`done` or `error`), live and replayed, when the server knows them, * so a client can settle exactly the sends a completion, error, or * cancellation belongs to. */ messageIds?: string[]; /** * How the request ended, on its terminal `done` frame. Absent means * `"error"` when the frame (or an earlier frame for the request) carried * `error`, and `"completed"` otherwise. */ outcome?: ChatTurnOutcome; } | { /** Indicates the server is resuming an active stream */ type: MessageType.CF_AGENT_STREAM_RESUMING /** The request ID of the stream being resumed */; id: string /** Present when this offer directly answers a client resume probe. */; probeId?: string; } | { /** Server notifies client that a message was updated (e.g., tool result applied) */ type: MessageType.CF_AGENT_MESSAGE_UPDATED /** The updated message */; message: ChatMessage; } | { /** Server responds to a resume request with no stream for this client. */ type: MessageType.CF_AGENT_STREAM_RESUME_NONE; /** * Why no stream was offered. Only `idle` proves global inactivity; * omitted by older servers and by non-authoritative delayed releases. */ reason?: StreamResumeNoneReason /** Correlates an authoritative response to its client resume probe. */; probeId?: string; } | { /** * Server signals an accepted turn whose resumable stream has not started * yet — the client should keep waiting for `STREAM_RESUMING` (or a later * `STREAM_RESUME_NONE`) rather than give up. See #1784. */ type: MessageType.CF_AGENT_STREAM_PENDING /** The accepted request id, when known. */; id?: string /** Correlates a direct keep-waiting response to its client probe. */; probeId?: string; } | { /** * Progress hint: a durable chat turn is being recovered (`recovering: * true`) or recovery has resolved (`recovering: false`). Purely advisory; * a client renders a "recovering…" indicator while true. */ type: MessageType.CF_AGENT_CHAT_RECOVERING /** Whether recovery is in progress (true) or has resolved (false). */; recovering: boolean /** The recovery-root request id of the turn being recovered, if known. */; id?: string; }; /** * Types of messages sent from clients to the Agent */ type IncomingMessage<ChatMessage extends UIMessage = UIMessage> = | { /** Indicates this message is a command to clear chat history */ type: MessageType.CF_AGENT_CHAT_CLEAR; } | { /** Indicates this message is a request to the chat API */ type: MessageType.CF_AGENT_USE_CHAT_REQUEST /** Unique ID for this request */; id: string /** Request initialization options */; init: Pick< RequestInit, | "method" | "keepalive" | "headers" | "body" | "redirect" | "integrity" | "credentials" | "mode" | "referrer" | "referrerPolicy" | "window" >; } | { /** Indicates this message contains updated chat messages */ type: MessageType.CF_AGENT_CHAT_MESSAGES /** Array of chat messages */; messages: ChatMessage[]; } | { /** Indicates the user wants to stop generation of this message */ type: MessageType.CF_AGENT_CHAT_REQUEST_CANCEL; id: string; } | { /** Client acknowledges stream resuming notification and is ready to receive chunks */ type: MessageType.CF_AGENT_STREAM_RESUME_ACK /** The request ID of the stream being resumed */; id: string; } | { /** Client requests stream resume check after message handler is registered */ type: MessageType.CF_AGENT_STREAM_RESUME_REQUEST /** Opaque correlation id echoed by direct server responses. */; probeId?: string; } | { /** Client sends tool result to server (for client-side tools) */ type: MessageType.CF_AGENT_TOOL_RESULT /** The tool call ID this result is for */; toolCallId: string /** The name of the tool */; toolName: string /** The output from the tool execution */; output: unknown /** Override the tool part state (e.g. "output-error" for custom denial) */; state?: | "output-available" | "output-error" /** Error message when state is "output-error" */; errorText?: string /** Whether server should auto-continue the conversation after applying result */; autoContinue?: boolean /** Client tool schemas for continuation (client is source of truth) */; clientTools?: Array<{ name: string; description?: string; parameters?: JSONSchema7; }>; } | { /** Client sends tool approval response to server (for tools with needsApproval) */ type: MessageType.CF_AGENT_TOOL_APPROVAL /** The tool call ID this approval is for */; toolCallId: string /** Whether the tool execution was approved */; approved: boolean /** Whether server should auto-continue the conversation after applying approval */; autoContinue?: boolean; }; //#endregion export { CHAT_MESSAGE_TYPES as a, OutgoingMessage as i, IncomingMessage as n, STREAM_RESUME_NONE_REASONS as o, MessageType as r, StreamResumeNoneReason as s, ChatTurnOutcome as t }; //# sourceMappingURL=wire-types-Cv0iwjk5.d.ts.map