Repository navigation
Changelog
- 165536e Merge branch 'docs/cloud-spec'
- 83cce16 Merge branch 'docs/zapi-parity'
- 5f92f33 Merge branch 'feat/m6-messages' into integration/preview
- 53284b4 Merge branch 'feat/m7-events' into integration/m5-m7
- 07e5a63 Merge branch 'feat/m7-events' into integration/m5-m7
- 9246650 Merge branch 'feat/m8-groups' into feat/m9-chats-profile
- 8f91a30 Merge branch 'feat/site-docs'
- a914c4b Merge branch 'main' (marco 11) into feat/m10-status-channels
- d050572 Merge branch 'worktree-agent-a1cf4927ae1520103'
- ca10ee5 Merge branch 'worktree-agent-a1fff95ec377ff8dd'
- 4705ebd Merge branch 'worktree-agent-a2e69ba5c1a1c77c8'
- e743665 Merge branch 'worktree-agent-a3ec45bffd541937b'
- 94d3e64 Merge branch 'worktree-agent-a803e93d3e85e3a43'
- 73ba3ea Merge branch 'worktree-agent-ac14451c5b9c062e2'
- c2d79a0 Merge main (M10 status/channels/labels) into feat/attendant
- 89d200b Merge: Cardápio do LiteZap (catálogo próprio, sem escrita na Meta)
- ee6a6ec Merge: IA por assinatura (plantão no Claude Code e runtime Codex)
- 7b2c19c feat(agentes): OpenAPI, guia de Agentes e changelog
- e1ffd56 feat(agentes): aba Agentes no painel
- af404b7 feat(agentes): loop de tool use, executor com permissões e gatilho pelo hook
- e210a52 feat(agentes): rotas /agents na API e ligação no serve
- 909db89 feat(agentes): runtime codex_cli (assinatura ChatGPT pelo Codex CLI), opt-in
- b0f4823 feat(agentes): tabela única de ferramentas do MCP e tool use nos provedores
- 771fe0f feat(agenthook): hook de agente (marco 5): POST assinado, resposta pela fila, pausa por humano, loop guard, rotas e aba Atendente IA
- 279da78 feat(api): CRUD de webhooks com escopo admin/instância, entregas e retry da dead-letter; SSE por instância e global
- 382975a feat(api): GET /v1/me, escopo do chamador no contexto e montagem autenticada de /mcp
- 7f4f520 feat(api): REST de instâncias com auth admin/instância
- a648dee feat(api): rotas de mensagens, chats, contatos, settings e mídia; wiring da fila, ingestão e lookup
- 56e498b feat(apierr): envelope de erro da API
- b3efc89 feat(app): extensão do Claude Desktop (.mcpb), vigia da configuração e erros do painel em português
- 7639c63 feat(app): janela nativa no macOS com ícone no Dock
- e0bf8b1 feat(app): lançador de bandeja litezap-app (fyne.io/systray, motor no processo, pasta por usuário, login em um clique, estado e Sair gracioso), ícone gerado em Go, script do .app para macOS e docs
- 764c812 feat(app): litezap-app mcp e "Conectar a IA" em um clique
- ef7019a feat(atendente): atendente IA embutido no motor (perfis, provedores, multimodal)
- db5aef8 feat(atendente): painel, docs, OpenAPI e página do site do atendente IA
- bdee8af feat(cardapio): aba Cardápio no painel
- 1bab90b feat(cardapio): atendente, agentes e MCP usam o cardápio
- a33c894 feat(cardapio): catálogo próprio do LiteZap (modelo, API e importações)
- 7ec9a11 feat(cardapio): coleções, várias fotos, promoção, oculto, busca, massa e pedidos
- 7e72d61 feat(cardapio): ferramentas MCP do catálogo completo e permissões dos agentes
- 3e86dff feat(cardapio): montar o cardápio com a assinatura do usuário (Claude/ChatGPT)
- dc9c731 feat(cardapio): painel com coleções, galeria de fotos, filtros, massa e pedidos
- c119361 feat(cardapio): rotas REST de coleções, fotos, busca, massa, pedidos e CSV
- 2cc5a2d feat(cloud): configuração por ambiente (LITEZAP_CONFIG_JSON e variáveis das opções novas) e tabelas da nuvem (uso diário, kv do motor, flags por instância, dono do webhook)
- d84e37e feat(cloud): login de um clique emitido pelo operador e exportação lógica (E7, E8)
- b2feb3a feat(cloud): logs JSON, watchdog de conexão zumbi e retenção de mensagens e mídia (E9, E13, E15)
- aee87cc feat(cloud): token de operador, settings travadas, limite de instâncias, proxy obrigatório, webhooks do operador e envio suspenso (E4, E5, E17)
- 2be9c75 feat(cloud): uso diário persistido, /metrics Prometheus, instance.proxy_failed, endpoint de ops e upgrade gracioso (E2, E3, E6, E11, E12)
- 97fa42f feat(config): carrega yaml + env e gera token admin
- fc3b24b feat(dashboard): painel web embutido em /app/ (instâncias com SSE, pareamento por QR/código, conversas e envio com a fila explicada, settings, webhooks com entregas/retry, eventos ao vivo) e login em um clique por código de uso único só em loopback
- 433fc47 feat(events): barramento com envelope v1, produtores de instância, mensagens, recibos, envios e history.synced
- 71fa7b7 feat(examples): agent-claude, atendente de referencia com a API da Anthropic; docs do hook de agente
- fb08339 feat(ia): IA grátis por padrão (Ollama, Gemini e Groq)
- 2aaed78 feat(ingest): grava mensagens, recibos e history sync no log
- 123bfba feat(instance): máquina de estados com tabela de transições
- 7b0ade1 feat(lookup): resolução de números com cache e limite por minuto
- d9be7af feat(m10): MCP e painel de status, canais e etiquetas
- 6e0f9da feat(m10): status, canais e etiquetas Business (worker, store, service, API)
- efa7248 feat(m11): painel com renomear/etiquetas/allowlist e gerador de link de pareamento
- 385b234 feat(m11): plataforma e parceiros no motor
- 910bd22 feat(m12): catálogo e pedidos (fase 1) e limpeza explícita do perfil comercial
- 05307af feat(m12): editar o perfil comercial do WhatsApp Business
- 5c39c91 feat(m7): eventos de chamada e presença, status played, respostas de botão e filtros de webhook
- a3de169 feat(m8): grupos e comunidades — serviço gRPC Groups, rotas REST, cotas anti-ban, group.updated, MCP e aba Grupos
- 4a1daff feat(m9): MCP, painel, docs e OpenAPI de chats, contatos, perfil e privacidade
- cd44eed feat(m9): chats, contatos, perfil e privacidade (worker, store, service, API)
- d2fe68a feat(manager): observers, Client(id), first_connected_at e histórico fora do laço de supervisão
- 92bf581 feat(manager): supervisão com heartbeat, backoff e circuit breaker
- 4ca4a80 feat(mcp): send_message e send_media com reply_to/menções e tipos novos; ferramentas send_reaction, send_location, send_contact, edit_message e delete_message com avisos de segurança
- def9ce7 feat(mcp): servidor MCP com ferramentas sobre Backend (service local em /mcp e cliente REST no litezap mcp stdio)
- 7b77cf7 feat(media): download de media.url com bloqueio SSRF, MIME confiável, base64 e URLs assinadas
- 6f3ec91 feat(painel): identidade LiteZap, criação guiada de instância e correção do congelamento
- 4932c5b feat(plugin): comando whatsapp-plantao para atender com a assinatura Claude
- 3daa123 feat(proto): RPCs e eventos de mensagens com mídia por caminho; limite gRPC de 32MB
- 9763a21 feat(proto): contrato gRPC supervisor-worker
- 61f61b3 feat(queue): carência após conectar, janela de envio, TTL e verificação de número antes do primeiro envio
- 6605837 feat(queue): despachante por instância com ordem estrita, rampa, retry e wait
- 4bf46f3 feat(queue): relógio injetável, ritmo, digitação e backoff
- 2689b4b feat(secure): ids, tokens de instância e hash
- f9c2402 feat(serve): liga barramento, webhooks e SSE; config webhook_allow_private_urls e retenções
- 8ee4640 feat(service): casos de uso de instância
- 944c06d feat(service): chats, histórico paginado, marcar lido, contatos, números com cache e mídia sob demanda com download único
- 5137b84 feat(service): envio com validação, mídia, idempotência, TTL e wait; settings com restart por proxy
- aa740cc feat(service,api): validação dos tipos novos, reply_to, menções, prévia de link com filtro SSRF e limite de 5s, editar/apagar/fixar com janelas, encaminhar mídia recebida; fila visível (listar, cancelar item, esvaziar)
- ff8f9ee feat(settings): settings por instância (ritmo com pisos, janela, fuso, rampa, proxy) e defaults na config
- 8904a5c feat(site): docs na profundidade Z-API/Supabase, referência por operação, marco 3 e páginas em breve
- 823539f feat(site): identidade visual atual do LiteZap (logo, azul #377AFB, Public Sans)
- 4c52504 feat(site): site do produto e docs (Astro + Starlight), OpenAPI 3.1 e imagem Docker
- 9a6e8dd feat(spawner): interfaces e caminho curto de socket
- eb557ac feat(spawner): spawner de processos com pid files e limpeza de órfãos
- 9d6d335 feat(store): fila de envio com pending, idempotência, recuperação e cache de números
- 93ecd24 feat(store): migração 0002, log de mensagens, chats e mídia
- 74430ea feat(store): sqlite com migrações e CRUD de instâncias
- 50fd531 feat(store): tabelas webhooks e webhook_deliveries (outbox) com retry, expiração e retenção
- 7c46b71 feat(webhook): outbox com entrega assinada, backoff por entrega e por endpoint, dead-letter, retry manual e retenção
- db4e853 feat(worker): adaptador whatsmeow e entrada do subcomando worker
- 06682b8 feat(worker): envio e download por arquivo, contatos, números e eventos de mensagem via whatsmeow
- 25c735e feat(worker): filas ao vivo e de histórico com contrapressão e RPCs de mensagens
- 0a26c1a feat(worker): proxy por instância, sem proxy herdado do ambiente e sem fallback direto
- 8486a98 feat(worker): servidor gRPC com hub de eventos e snapshot
- 682101c feat(worker,queue): tipos novos de envio (sticker, gif, ptv, localização, contatos, enquete), citação, menções, prévia de link, editar/apagar/fixar/encaminhar; recepção de edições, revogações e votos; delay_ms/typing_ms; cancelar e esvaziar fila
- 55db3da feat: LiteZap no Claude sem reiniciar e plugin do Claude Code
- 31c3184 feat: subcomandos serve/worker/version e wiring do supervisor
- b55b4f8 fix(agentes): endurece o executor conforme a revisão de segurança
- a42a257 fix(agentes): endurece o runtime codex_cli conforme a revisão de segurança
- 3f2b003 fix(agenthook): correcoes da revisao: humano assumindo cancela respostas na fila, loop guard escalona e nao perde contagem, resposta antes das reacoes
- cfc160b fix(api): aceita JID com @ codificado (%40) nas rotas
- 204f481 fix(api): corpo acima do limite responde 413 media_too_large em vez de JSON inválido
- ad6e9af fix(app): correções da revisão da janela nativa
- f36034d fix(app): correções da revisão de segurança do Conectar a IA
- 78e1fe7 fix(app): correções da revisão independente (MIME fixo dos assets, bandeja responsiva após erro e com consulta de estado fora do loop, código de 1 min que descarta os pendentes, settings sem 0 em campo vazio nem senha mascarada do proxy, status de mensagem não regride, hash malformado)
- 5c0a6e8 fix(app): endurece a busca do app pela extensão e a detecção do Claude no Windows
- 2dd743f fix(app): impede que o Claude Desktop recoloque o LiteZap depois de desconectar
- 5008376 fix(atendente): correções da revisão de segurança
- 487622f fix(cardapio): corrige os pontos da revisão de segurança
- d3105f7 fix(cardapio): pontos da revisão do catálogo completo
- 244671e fix(cardapio): tags nas ferramentas, motivo de cada linha inválida e include_empty
- cfab93b fix(cloud): correções da revisão independente
- 560b976 fix(lookup): cota só é gasta depois de obter o worker; Lookup informa ida à rede; Cached sem rede; check-numbers com limite diário
- 76940b5 fix(lookup): lote maior que a cota devolve ErrTooManyNumbers (não retentável); plano limita check-numbers a 10
- befcfa5 fix(m10): correções da revisão independente
- 67f0d20 fix(m11): correções da revisão de segurança
- ac44561 fix(m12): endurece o catálogo e os pedidos conforme a revisão de segurança
- a707f46 fix(m12): recusa remover o pin do mapa e registra a validação no aparelho
- 23a217a fix(m6): correções da revisão independente (edições/revogações recebidas só do autor ou admin, sem encaminhar visualização única, menção LID no texto, limites da miniatura, prévia nunca em endereço privado, janela de edição 15 min)
- 8a2d244 fix(m7): chamadas reais — reject de aparelho hospedado ignorado, atendida e não atendida
- 14d43e4 fix(m7): correções da revisão independente
- 17a8f2c fix(m7): presença só é enviada ao worker com a instância conectada
- 1b5353d fix(m7): reject vindo de aparelho da própria conta não encerra a chamada
- da2d917 fix(m8): correções da revisão independente; docs: README, specs, OpenAPI e guia de grupos
- d9ab789 fix(m8): grupos respondem na hora com a instância não pareada (smoke)
- f4a230c fix(m8,m9): fotos PNG/GIF convertidas para JPEG; criação de comunidade
- 819a1cc fix(m9): chamadas de conta falham na hora sem sessão
- b17d440 fix(m9): correções da revisão independente
- b4496cd fix(m9): recado do perfil pelo IQ "status" clássico
- 73185f5 fix(manager): aguarda o gravador de histórico ao encerrar o worker; first_connected_at só após persistir connected
- 69efe53 fix(manager): clear the instance JID when logged_out is persisted
- d20bd6b fix(manager): exiting junto do pedido de stop/logout, doc de locking, teste de estado final
- eb7a2fd fix(manager): logout sem depender do evento, halt sem worker duplicado, shutdown fecha Start
- aee2c81 fix(mcp): correções da revisão independente
- 8570cef fix(media): ResolveMime sempre confere os bytes; HTML rotulado como imagem/vídeo/áudio é recusado
- f481fe9 fix(media): identifica o LiteZap no download de mídia e avisa fotos que falharam
- 341613e fix(media): media.url com esquema inválido responde validation_failed, não media_fetch_failed
- df500b3 fix(media): media_key cai para O_EXCL sem hard link; imagem leva o tipo detectado nos bytes
- b0575af fix(media): media_key criada de forma atômica e exclusiva; MAC da URL assinada com prefixo de tamanho
- 2027a6d fix(queue): Delete da instância encerra o despachante e libera as esperas (Queues.Forget)
- cbfe1ef fix(queue): MaxPerMinute <= 0 desliga o limite por minuto no pacer
- 6432cd5 fix(queue): consultas de número com ritmo e limite diário; resposta no outro formato do 9º dígito resolvida pelo cache; worker indisponível não conta falha de consulta
- 54af009 fix(queue): destinatário novo independe da rampa; erro de escrita no store pausa o despachante
- 8bd69fc fix(queue): rampa antes da consulta de número, carência só após o aviso de connected, consulta interrompida não conta falha
- b7d9f03 fix(serve): fecha conexões que passam do prazo do shutdown antes de parar fila, workers e store
- 0e0cf69 fix(service): Delete aposenta a instância no manager para Start concorrente não deixar worker órfão
- 4d6e496 fix(service): UpdateSettings serializado por instância para não perder atualizações concorrentes
- bcd0252 fix(service): bound best-effort logout and unretire on failed Delete
- 62dc925 fix(service): client_message_id concorrente com outro corpo responde conflict
- 9731a04 fix(service): limita legenda, emoji da reação e nome do arquivo no envio
- dcb9a25 fix(service): map worker gRPC errors to API errors
- f96990f fix(service): media_download_failed com Unavailable responde 502 worker_error (retentável), não instance_not_connected
- 9a79f9f fix(service): worker DeadlineExceeded is worker_timeout (504), not not_connected
- 458a2a4 fix(spawner): dial worker socket via custom dialer so Windows paths work
- 0a3be81 fix(spawner): fecha conn de worker morto, Close gracioso, pipe de vida do pai, socket dir seguro
- e9e784a fix(spawner): remove LITEZAP_WORKER_PROXY_URL herdada e compara variáveis sem diferenciar maiúsculas
- 254a54d fix(store): índice parcial dos itens queued; spec: linha 6 (site e documentação)
- a2dd3a9 fix(webhook): correções da revisão independente
- 9b09d48 fix(worker): back off and give up on repeated unknown connect failures
- e50bb5d fix(worker): logout durante pareamento, rounds de QR com backoff e shutdown limpo
- a790ab9 fix(worker): resolver LID do histórico pelo blob, endereçamento de grupos LID, erros de download e recibos inactive
- 6a2f14e fix(worker): temporary ban is a recoverable failure; reconnect after unknown connect failure
- b0149e7 fix(worker): timeout do primeiro QR, ready limpo no fim da rodada, copia dos codes
- a301283 fix: bind antes de matar órfãos, timeouts e orçamento de shutdown, endurecimento da API
- 5ce6595 fix: clear the cached QR when a pairing round ends
- c0bb15b fix: endurece token admin vazio, Equal vazio e lista de instâncias não nula
- 9e2dd26 merge: app local (painel + bandeja) sobre o marco 4 (MCP)
- 5210aff merge: integration/preview (marco 6) em feat/cloud-c1-engine
- 14cd002 merge: marco 7 (eventos e chamadas) sobre o marco 5 (hook de agente)
- 3519e81 refactor(agentes): tira um auxiliar sem uso da sessão do atendente
- 7324b1f refactor(worker): pareamento sem GetQRChannel, rotacao de QR propria
- aedea56 refactor: remove o Cardápio (catálogo próprio do LiteZap)
App para quem não usa terminal (sobe em alguns minutos, depois dos binários): LiteZap-macos.dmg, LiteZap-windows.zip, LiteZap-linux-amd64.tar.gz. Veja https://github.com/douglasdf99/litezap#baixar-o-app
Imagem Docker: docker pull ghcr.io/douglasdf99/litezap:0.1.0
LiteZap é um projeto não oficial, sem vínculo com o WhatsApp ou a Meta. Use por sua conta e risco.