package bridge import "time" // UnifiedMessage is the internal message format all platforms convert to. type UnifiedMessage struct { SenderID string `json:"sender_id"` SenderName string `json:"sender_name"` Platform string `json:"platform"` ChannelID string `json:"channel_id"` ChannelType string `json:"channel_type"` // "direct", "group", "channel" Content string `json:"content"` ContentType string `json:"content_type"` // "text", "image", "voice", "file", "mixed" Attachments []Attachment `json:"attachments,omitempty"` MessageID string `json:"message_id,omitempty"` ReplyTo string `json:"reply_to,omitempty"` Mentions []string `json:"mentions,omitempty"` RawData interface{} `json:"raw_data,omitempty"` Timestamp time.Time `json:"timestamp"` } // Attachment represents a file/image/voice attachment. type Attachment struct { Type string `json:"type"` // "image", "voice", "file", "video" URL string `json:"url,omitempty"` FileName string `json:"file_name,omitempty"` MimeType string `json:"mime_type,omitempty"` Size int64 `json:"size,omitempty"` } // UnifiedResponse is AI-Core's response converted to unified format. type UnifiedResponse struct { Messages []ResponseMessage `json:"messages"` ReplyTo string `json:"reply_to,omitempty"` Platform string `json:"platform"` PlatformHints PlatformHints `json:"platform_hints,omitempty"` } // ResponseMessage is a single message in a response. type ResponseMessage struct { DisplayType string `json:"display_type"` // "chat", "action", "thinking", "system_info", "tool_progress" Content string `json:"content"` FormatMode string `json:"format_mode"` // "plain", "markdown", "html" } // PlatformHints tells the adapter how to deliver the response. type PlatformHints struct { TypingIndicator bool `json:"typing_indicator"` // show "typing..." before sending BurstMode bool `json:"burst_mode"` // send multiple messages rapidly ReplyAsThread bool `json:"reply_as_thread"` // reply in a thread } // PlatformCapabilities declares what a platform supports. type PlatformCapabilities struct { MaxMessageLength int `json:"max_message_length"` SupportsMarkdown bool `json:"supports_markdown"` SupportsImage bool `json:"supports_image"` SupportsVoice bool `json:"supports_voice"` SupportsEmoji bool `json:"supports_emoji"` SupportsReaction bool `json:"supports_reaction"` SupportsTypingHint bool `json:"supports_typing_hint"` RecommendBurstMax int `json:"recommend_burst_max"` } // PlatformMessage is the platform-specific message format returned by an adapter. type PlatformMessage struct { Content string `json:"content"` FormatMode string `json:"format_mode,omitempty"` ReplyTo string `json:"reply_to,omitempty"` Metadata map[string]string `json:"metadata,omitempty"` RawBody interface{} `json:"raw_body,omitempty"` }