export type SessionState = 'idle' | 'listening' | 'thinking' | 'speaking'; export type MessageEnvelope = { type: TType; payload: TPayload; }; export type ClientEventPayloads = { 'session.start': Record; 'input_audio.append': { chunk: string; }; 'input_audio.commit': Record; 'response.cancel': Record; }; export type ServerEventPayloads = { 'session.ready': { sessionId: string; }; 'session.state': { value: SessionState; }; 'transcript.partial': { text: string; }; 'transcript.final': { text: string; }; 'response.text.delta': { text: string; }; 'response.completed': Record; 'error': { code: string; message: string; retryable?: boolean; }; }; export type ClientEventType = keyof ClientEventPayloads; export type ServerEventType = keyof ServerEventPayloads; export type ClientEvent = { [Type in ClientEventType]: MessageEnvelope; }[ClientEventType]; export type ServerEvent = { [Type in ServerEventType]: MessageEnvelope; }[ServerEventType]; export const PROTOCOL_PACKAGE_NAME: '@vela/protocol'; export const SESSION_STATES: readonly SessionState[]; export const CLIENT_EVENT_TYPES: readonly ClientEventType[]; export const SERVER_EVENT_TYPES: readonly ServerEventType[]; export function createMessageEnvelope( type: TType, payload: ClientEventPayloads[TType] ): MessageEnvelope; export function createMessageEnvelope( type: TType, payload: ServerEventPayloads[TType] ): MessageEnvelope; export function isMessageEnvelope(value: unknown): value is MessageEnvelope; export function isClientEventType(type: string): type is ClientEventType; export function isServerEventType(type: string): type is ServerEventType;