refactor(core): restructure conversation/channel/message domains and modernize deployment

- Replace chat package with conversation flow architecture
- Add channel identity avatar support (migration 0002)
- Refactor channel adapters, identities, and message routing
- Update frontend: simplify composables, modernize UI components
- Improve Docker builds with cache mounts and version metadata
- Optimize healthchecks and simplify service dependencies
This commit is contained in:
BBQ
2026-02-12 20:52:34 +08:00
parent 30281742ef
commit 1c15eb2146
121 changed files with 3514 additions and 5961 deletions
+90 -62
View File
@@ -122,21 +122,24 @@ func (q *Queries) DeleteMessagesByBot(ctx context.Context, botID pgtype.UUID) er
const listMessages = `-- name: ListMessages :many
SELECT
id,
bot_id,
route_id,
sender_channel_identity_id,
sender_account_user_id AS sender_user_id,
channel_type AS platform,
source_message_id AS external_message_id,
source_reply_to_message_id,
role,
content,
metadata,
created_at
FROM bot_history_messages
WHERE bot_id = $1
ORDER BY created_at ASC
m.id,
m.bot_id,
m.route_id,
m.sender_channel_identity_id,
m.sender_account_user_id AS sender_user_id,
m.channel_type AS platform,
m.source_message_id AS external_message_id,
m.source_reply_to_message_id,
m.role,
m.content,
m.metadata,
m.created_at,
ci.display_name AS sender_display_name,
ci.avatar_url AS sender_avatar_url
FROM bot_history_messages m
LEFT JOIN channel_identities ci ON ci.id = m.sender_channel_identity_id
WHERE m.bot_id = $1
ORDER BY m.created_at ASC
`
type ListMessagesRow struct {
@@ -152,6 +155,8 @@ type ListMessagesRow struct {
Content []byte `json:"content"`
Metadata []byte `json:"metadata"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
SenderDisplayName pgtype.Text `json:"sender_display_name"`
SenderAvatarUrl pgtype.Text `json:"sender_avatar_url"`
}
func (q *Queries) ListMessages(ctx context.Context, botID pgtype.UUID) ([]ListMessagesRow, error) {
@@ -176,6 +181,8 @@ func (q *Queries) ListMessages(ctx context.Context, botID pgtype.UUID) ([]ListMe
&i.Content,
&i.Metadata,
&i.CreatedAt,
&i.SenderDisplayName,
&i.SenderAvatarUrl,
); err != nil {
return nil, err
}
@@ -189,22 +196,25 @@ func (q *Queries) ListMessages(ctx context.Context, botID pgtype.UUID) ([]ListMe
const listMessagesBefore = `-- name: ListMessagesBefore :many
SELECT
id,
bot_id,
route_id,
sender_channel_identity_id,
sender_account_user_id AS sender_user_id,
channel_type AS platform,
source_message_id AS external_message_id,
source_reply_to_message_id,
role,
content,
metadata,
created_at
FROM bot_history_messages
WHERE bot_id = $1
AND created_at < $2
ORDER BY created_at DESC
m.id,
m.bot_id,
m.route_id,
m.sender_channel_identity_id,
m.sender_account_user_id AS sender_user_id,
m.channel_type AS platform,
m.source_message_id AS external_message_id,
m.source_reply_to_message_id,
m.role,
m.content,
m.metadata,
m.created_at,
ci.display_name AS sender_display_name,
ci.avatar_url AS sender_avatar_url
FROM bot_history_messages m
LEFT JOIN channel_identities ci ON ci.id = m.sender_channel_identity_id
WHERE m.bot_id = $1
AND m.created_at < $2
ORDER BY m.created_at DESC
LIMIT $3
`
@@ -227,6 +237,8 @@ type ListMessagesBeforeRow struct {
Content []byte `json:"content"`
Metadata []byte `json:"metadata"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
SenderDisplayName pgtype.Text `json:"sender_display_name"`
SenderAvatarUrl pgtype.Text `json:"sender_avatar_url"`
}
func (q *Queries) ListMessagesBefore(ctx context.Context, arg ListMessagesBeforeParams) ([]ListMessagesBeforeRow, error) {
@@ -251,6 +263,8 @@ func (q *Queries) ListMessagesBefore(ctx context.Context, arg ListMessagesBefore
&i.Content,
&i.Metadata,
&i.CreatedAt,
&i.SenderDisplayName,
&i.SenderAvatarUrl,
); err != nil {
return nil, err
}
@@ -264,21 +278,24 @@ func (q *Queries) ListMessagesBefore(ctx context.Context, arg ListMessagesBefore
const listMessagesLatest = `-- name: ListMessagesLatest :many
SELECT
id,
bot_id,
route_id,
sender_channel_identity_id,
sender_account_user_id AS sender_user_id,
channel_type AS platform,
source_message_id AS external_message_id,
source_reply_to_message_id,
role,
content,
metadata,
created_at
FROM bot_history_messages
WHERE bot_id = $1
ORDER BY created_at DESC
m.id,
m.bot_id,
m.route_id,
m.sender_channel_identity_id,
m.sender_account_user_id AS sender_user_id,
m.channel_type AS platform,
m.source_message_id AS external_message_id,
m.source_reply_to_message_id,
m.role,
m.content,
m.metadata,
m.created_at,
ci.display_name AS sender_display_name,
ci.avatar_url AS sender_avatar_url
FROM bot_history_messages m
LEFT JOIN channel_identities ci ON ci.id = m.sender_channel_identity_id
WHERE m.bot_id = $1
ORDER BY m.created_at DESC
LIMIT $2
`
@@ -300,6 +317,8 @@ type ListMessagesLatestRow struct {
Content []byte `json:"content"`
Metadata []byte `json:"metadata"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
SenderDisplayName pgtype.Text `json:"sender_display_name"`
SenderAvatarUrl pgtype.Text `json:"sender_avatar_url"`
}
func (q *Queries) ListMessagesLatest(ctx context.Context, arg ListMessagesLatestParams) ([]ListMessagesLatestRow, error) {
@@ -324,6 +343,8 @@ func (q *Queries) ListMessagesLatest(ctx context.Context, arg ListMessagesLatest
&i.Content,
&i.Metadata,
&i.CreatedAt,
&i.SenderDisplayName,
&i.SenderAvatarUrl,
); err != nil {
return nil, err
}
@@ -337,22 +358,25 @@ func (q *Queries) ListMessagesLatest(ctx context.Context, arg ListMessagesLatest
const listMessagesSince = `-- name: ListMessagesSince :many
SELECT
id,
bot_id,
route_id,
sender_channel_identity_id,
sender_account_user_id AS sender_user_id,
channel_type AS platform,
source_message_id AS external_message_id,
source_reply_to_message_id,
role,
content,
metadata,
created_at
FROM bot_history_messages
WHERE bot_id = $1
AND created_at >= $2
ORDER BY created_at ASC
m.id,
m.bot_id,
m.route_id,
m.sender_channel_identity_id,
m.sender_account_user_id AS sender_user_id,
m.channel_type AS platform,
m.source_message_id AS external_message_id,
m.source_reply_to_message_id,
m.role,
m.content,
m.metadata,
m.created_at,
ci.display_name AS sender_display_name,
ci.avatar_url AS sender_avatar_url
FROM bot_history_messages m
LEFT JOIN channel_identities ci ON ci.id = m.sender_channel_identity_id
WHERE m.bot_id = $1
AND m.created_at >= $2
ORDER BY m.created_at ASC
`
type ListMessagesSinceParams struct {
@@ -373,6 +397,8 @@ type ListMessagesSinceRow struct {
Content []byte `json:"content"`
Metadata []byte `json:"metadata"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
SenderDisplayName pgtype.Text `json:"sender_display_name"`
SenderAvatarUrl pgtype.Text `json:"sender_avatar_url"`
}
func (q *Queries) ListMessagesSince(ctx context.Context, arg ListMessagesSinceParams) ([]ListMessagesSinceRow, error) {
@@ -397,6 +423,8 @@ func (q *Queries) ListMessagesSince(ctx context.Context, arg ListMessagesSincePa
&i.Content,
&i.Metadata,
&i.CreatedAt,
&i.SenderDisplayName,
&i.SenderAvatarUrl,
); err != nil {
return nil, err
}