47dce276a4
- platform_silent模式接入Orchestrator记忆提取:被动观察群聊时提取值得记住的信息到对应命名空间 - post_chat后台思考注入平台观察:对话后思考也能看到群聊摘要 - QQ适配器:OneBot v11 self_id动态捕获、CQ图片URL提取、视觉+OCR并行处理 - Router解耦:ConfigName/PlatformName分离,支持多QQ实例独立连接 - 黑白名单功能:后端API + Ethend代理 + UI面板 - \n\n双换行断句:AI回复按双换行分割为多条消息按间隔发送 - @提及修复:bot自感知UID进行@检测 - 群聊上下文共享:channel-based userID避免记忆碎片化 - 消息日志显示处理后内容而非原始SSE数据 - platform-bridge Dockerfile + docker-compose.yml更新 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
83 lines
3.4 KiB
Go
83 lines
3.4 KiB
Go
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"`
|
|
|
|
// Routing metadata.
|
|
RouteType string `json:"route_type,omitempty"` // "normal", "silent", "admin_mention"
|
|
OriginalSenderUID string `json:"original_sender_uid,omitempty"` // preserved before identity mapping
|
|
OriginalRawMessage interface{} `json:"-"` // preserved for SendMessage wiring
|
|
BotUID string `json:"-"` // bot's own platform UID, set by router
|
|
}
|
|
|
|
// 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"`
|
|
}
|