Web UI: paperclip button for file upload (images, PDFs, text), inline attachment cards with file icon/name/size, image thumbnails with fullscreen overlay, attachment display in thread panel. Threads: always-visible reply count badges on messages, clickable to open thread panel. reply_count and attachments enriched in all API responses via batch queries. MCP: attachments parameter on send_message tool, updated tool descriptions for threading and attachment workflow guidance. Backend: file type validation (allowlist), AttachmentLinker interface to avoid circular deps, GetReplyCounts batch query, EnrichMessages method on MessagingService. Admin CLI: synapbus attachments backup/restore with tar.gz archives, dedup-safe restore. 24 new test cases across 4 packages. All 24 test packages pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
44 lines
2.0 KiB
Go
44 lines
2.0 KiB
Go
package messaging
|
|
|
|
// SendOptions configures message sending behavior.
|
|
type SendOptions struct {
|
|
Subject string `json:"subject,omitempty"`
|
|
Priority int `json:"priority,omitempty"`
|
|
Metadata string `json:"metadata,omitempty"`
|
|
ChannelID *int64 `json:"channel_id,omitempty"`
|
|
ConversationID *int64 `json:"conversation_id,omitempty"`
|
|
ReplyTo *int64 `json:"reply_to,omitempty"`
|
|
Attachments []string `json:"attachments,omitempty"` // attachment hashes to link
|
|
}
|
|
|
|
// ReadOptions configures inbox reading behavior.
|
|
type ReadOptions struct {
|
|
Status string `json:"status,omitempty"`
|
|
FromAgent string `json:"from_agent,omitempty"`
|
|
ConversationID *int64 `json:"conversation_id,omitempty"`
|
|
MinPriority int `json:"min_priority,omitempty"`
|
|
Limit int `json:"limit,omitempty"`
|
|
Offset int `json:"offset,omitempty"`
|
|
After string `json:"after,omitempty"`
|
|
Before string `json:"before,omitempty"`
|
|
IncludeRead bool `json:"include_read,omitempty"`
|
|
}
|
|
|
|
// SearchOptions configures message search behavior.
|
|
type SearchOptions struct {
|
|
FromAgent string `json:"from_agent,omitempty"`
|
|
ToAgent string `json:"to_agent,omitempty"`
|
|
ChannelID *int64 `json:"channel_id,omitempty"`
|
|
MinPriority int `json:"min_priority,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
Limit int `json:"limit,omitempty"`
|
|
Offset int `json:"offset,omitempty"`
|
|
After string `json:"after,omitempty"`
|
|
Before string `json:"before,omitempty"`
|
|
Channel string `json:"channel,omitempty"`
|
|
Channels []string `json:"channels,omitempty"` // include messages in these channels
|
|
ExcludeChannels []string `json:"exclude_channels,omitempty"` // exclude messages in these channels
|
|
Agents []string `json:"agents,omitempty"` // include messages from/to these agents
|
|
ExcludeAgents []string `json:"exclude_agents,omitempty"` // exclude messages from/to these agents
|
|
}
|