branch:
types.ts
6012 bytesRaw
import type { JSONSchema7, UIMessage } from "ai";
/**
* Enum for message types to improve type safety and maintainability
*/
export 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",
/** 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"
}
/**
* Types of messages sent from the Agent to clients
*/
export 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: ChatMessage[];
}
| {
/** 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;
}
| {
/** Indicates the server is resuming an active stream */
type: MessageType.CF_AGENT_STREAM_RESUMING;
/** The request ID of the stream being resumed */
id: 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 resume request when no active stream exists */
type: MessageType.CF_AGENT_STREAM_RESUME_NONE;
};
/**
* Types of messages sent from clients to the Agent
*/
export 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;
}
| {
/** 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;
};