Implementa sistema de chat em tempo real entre agente e cliente

- Adiciona tabela liveChatSessions no schema Convex
- Cria convex/liveChat.ts com mutations e queries para chat
- Adiciona API routes para maquinas (sessions, messages, poll)
- Cria modulo chat.rs no Tauri com ChatRuntime e polling
- Adiciona comandos de chat no lib.rs (start/stop polling, open/close window)
- Cria componentes React do chat widget (ChatWidget, types)
- Adiciona botao "Iniciar Chat" no dashboard (ticket-chat-panel)
- Implementa menu de chat no system tray
- Polling de 2 segundos para maior responsividade
- Janela de chat flutuante, frameless, always-on-top

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
esdrasrenan 2025-12-07 01:00:27 -03:00
parent 0c8d53c0b6
commit ba91c1e0f5
15 changed files with 2004 additions and 15 deletions

View file

@ -410,6 +410,31 @@ export default defineSchema({
.index("by_ticket_created", ["ticketId", "createdAt"])
.index("by_tenant_created", ["tenantId", "createdAt"]),
// Sessoes de chat ao vivo entre agente (dashboard) e cliente (Raven desktop)
liveChatSessions: defineTable({
tenantId: v.string(),
ticketId: v.id("tickets"),
machineId: v.id("machines"),
agentId: v.id("users"),
agentSnapshot: v.optional(
v.object({
name: v.string(),
email: v.optional(v.string()),
avatarUrl: v.optional(v.string()),
})
),
status: v.string(), // ACTIVE | ENDED
startedAt: v.number(),
endedAt: v.optional(v.number()),
lastActivityAt: v.number(),
unreadByMachine: v.optional(v.number()),
unreadByAgent: v.optional(v.number()),
})
.index("by_ticket", ["ticketId"])
.index("by_machine_status", ["machineId", "status"])
.index("by_tenant_machine", ["tenantId", "machineId"])
.index("by_tenant_status", ["tenantId", "status"]),
commentTemplates: defineTable({
tenantId: v.string(),
kind: v.optional(v.string()),