export type MessageRole = "user" | "assistant" | "system"; export type MessageType = "text" | "voice" | "image"; export interface Message { id: string; role: MessageRole; type: MessageType; content: string; audioUri?: string; imageBase64?: string; timestamp: number; status?: "sending" | "sent" | "error"; duration?: number; } export interface ServerConfig { host: string; port: number; localHost?: string; macAddress?: string; } export type ConnectionStatus = "disconnected" | "connecting" | "connected" | "compacting"; // --- WebSocket protocol --- /** Outgoing from app to watcher */ export interface WsTextMessage { type: "text"; content: string; } export interface WsVoiceMessage { type: "voice"; audioBase64: string; content: string; } export interface WsImageMessage { type: "image"; imageBase64: string; caption: string; mimeType: string; } export interface WsCommandMessage { type: "command"; command: string; args?: Record; } export type WsOutgoing = WsTextMessage | WsVoiceMessage | WsImageMessage | WsCommandMessage; /** Incoming from watcher to app */ export interface WsIncomingText { type: "text"; content: string; } export interface WsIncomingVoice { type: "voice"; content: string; audioBase64?: string; } export interface WsIncomingImage { type: "image"; imageBase64: string; caption?: string; } export interface WsSession { index: number; name: string; type: "claude" | "terminal"; kind?: "api" | "visual"; isActive: boolean; id: string; } export interface WsIncomingSessions { type: "sessions"; sessions: WsSession[]; } export interface WsIncomingSessionSwitched { type: "session_switched"; name: string; sessionId: string; } export interface WsIncomingSessionRenamed { type: "session_renamed"; sessionId: string; name: string; } export interface WsIncomingError { type: "error"; message: string; } export interface WsIncomingStatus { type: "status"; status: string; } export type WsIncoming = | WsIncomingText | WsIncomingVoice | WsIncomingImage | WsIncomingSessions | WsIncomingSessionSwitched | WsIncomingSessionRenamed | WsIncomingError | WsIncomingStatus;