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:
parent
0c8d53c0b6
commit
ba91c1e0f5
15 changed files with 2004 additions and 15 deletions
|
|
@ -1002,6 +1002,13 @@ export const listByTenant = query({
|
|||
})
|
||||
).then((arr) => arr.filter(Boolean) as Array<{ id: string; email: string; name: string }>)
|
||||
|
||||
// ticket count
|
||||
const ticketCount = await ctx.db
|
||||
.query("tickets")
|
||||
.withIndex("by_tenant_machine", (q) => q.eq("tenantId", tenantId).eq("machineId", machine._id))
|
||||
.collect()
|
||||
.then((tickets) => tickets.length)
|
||||
|
||||
const companyFromId = machine.companyId ? companyById.get(machine.companyId) ?? null : null
|
||||
const companyFromSlug = machine.companySlug ? companyBySlug.get(machine.companySlug) ?? null : null
|
||||
const resolvedCompany = companyFromId ?? companyFromSlug
|
||||
|
|
@ -1054,6 +1061,7 @@ export const listByTenant = query({
|
|||
usbPolicy: machine.usbPolicy ?? null,
|
||||
usbPolicyStatus: machine.usbPolicyStatus ?? null,
|
||||
usbPolicyError: machine.usbPolicyError ?? null,
|
||||
ticketCount,
|
||||
}
|
||||
})
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue