Histórico de mudanças
Notas de versão e histórico do aplicativo Upvault para desktop.
Adicionado
- As configurações têm uma aba Conta que reúne login, seu plano, licença e upgrade
- As respostas mostram quantas conversas anteriores e notas foram usadas como contexto
- As configurações gerais têm uma opção de layout (livre ou fixo), e a aba Dados tem uma seção Armazenamento que mostra onde seus dados ficam
Alterado
- O menu de configurações está organizado em cinco grupos, com Geral no topo. As configurações do servidor MCP local foram para Acesso de IA externa, os downloads de modelos para Sistema e os tokens máximos para Modelos
- As chaves de licença são inseridas depois do login e ficam vinculadas à conta que as comprou
- O plano Free agora inclui até 10 espaços de trabalho e sincronização com o Google Drive em um computador. O Standard cobre 4 dispositivos e o Premium 8
- Notas e mensagens que chegam pela sincronização ficam pesquisáveis logo após a sincronização, e não só na próxima inicialização
- As configurações de sincronização têm nomes mais claros: "Backup automático" agora é "Enviar alterações automaticamente", e as duas listas de dispositivos têm nomes diferentes
- Remover um servidor MCP pede confirmação antes
Corrigido
- Sair em um dispositivo desconectava também os outros dispositivos e interrompia a sincronização deles com o Google Drive
- Depois de sair e reiniciar, o app mostrava Convidado, mas abria os dados da última conta
- O app podia parecer conectado depois que a sessão tinha terminado, enquanto a sincronização e a verificação de licença falhavam
- Quando o acesso ao Google Drive expirava, a aba Sincronização mostrava um erro bruto, sem opção de reconectar
- A sincronização desistia em conexões interrompidas em vez de tentar de novo, e informava um download incompleto como concluído
- Um dispositivo removido da sua lista de dispositivos podia iniciar uma sincronização completa antes de ser solicitado a se registrar de novo
- Alguns modelos escreviam uma busca na web ou chamada de ferramenta como texto e inventavam uma resposta. O app agora tenta mais uma vez e explica o que aconteceu
- Modelos gratuitos do OpenRouter devolviam respostas cortadas em poucas linhas ou vazias
- Uma falha em "Continuar" adicionava uma mensagem de erro à conversa a cada vez. O motivo agora aparece no aviso da resposta cortada
- A contagem da lixeira na barra lateral só era atualizada quando a lixeira era aberta
Removido
- "Importar backup" na aba Dados, que fazia o mesmo que Restaurar
- A tabela de tempos limite somente leitura das configurações gerais e a opção de classificação automática, sempre desativada, das configurações de Memória
Interno
- Os turnos do chat podem ser rastreados para diagnóstico em builds de desenvolvimento
- Removidas dependências de armazenamento em nuvem não utilizadas do banco de dados vetorial
- Removidos 96 textos de configurações não utilizados
Adicionado
- Quando uma resposta para no limite de tamanho de saída do modelo, o chat avisa e oferece um botão Continuar que retoma de onde parou
- Respostas com busca na web citam os resultados como notas de rodapé numeradas, com uma lista de fontes abaixo da mensagem
- As configurações do servidor MCP local agora têm um registro de acesso, avisam quando os dados de conexão usados pelo seu cliente de IA mudam e pedem confirmação antes de emitir um novo token
Alterado
- Os botões da barra de ferramentas do chat mostram os rótulos quando há espaço e só passam a mostrar apenas ícones quando a janela fica estreita
- Em telas largas, a coluna de mensagens para em uma largura confortável para leitura
- Nomes longos de modelos aparecem mais completos, e o nome inteiro aparece ao passar o mouse
- O servidor MCP local mantém a mesma porta após reinícios e trocas de conta, então os clientes de IA já configurados continuam funcionando
- Os resultados de busca em documentos enviados a clientes de IA pelo servidor MCP local mostram o nome original do arquivo
Corrigido
- Uma resposta em andamento podia sumir quando uma sincronização do Google Drive terminava no meio dela
- Depois de uma busca na web, perguntas feitas em outros idiomas eram respondidas em inglês
- Quebras de linha em tabelas e blocos de código apareciam como código HTML em vez de iniciar uma nova linha
- A lista de modelos podia ultrapassar a borda da tela
- Redefinir todos os dados deixava o servidor MCP local em execução e o token antigo válido
Interno
- Tentativas de acesso repetidas bloqueadas pela verificação do plano são agrupadas em uma entrada por minuto no registro de acesso
Adicionado
- Digite / no início de uma linha na caixa de mensagem para buscar na sua biblioteca de prompts e inserir um prompt sem abri-la
Alterado
- A caixa de mensagem já aparece larga no início de um novo chat, fica alinhada às mensagens e se estreita junto com a janela
- A dica da caixa de mensagem agora mostra os atalhos / e @
Corrigido
- A caixa de mensagem ficava estreita, com botões só de ícone, até a primeira mensagem ser enviada
- O botão de agente mostrava o nome em inglês de um agente integrado em outros idiomas
- A pesquisa na web, o seletor de modelos e várias telas de configurações mostravam texto em inglês em alemão, espanhol, francês, japonês, português e chinês
Interno
- As cores do chat agora vêm dos tokens de design
Adicionado
- Arraste uma pasta da barra lateral para dentro de uma pasta vizinha ou para o nível superior
- Passe o mouse sobre um nome de arquivo, nota ou conversa cortado para vê-lo inteiro. Os nomes de arquivo são encurtados no meio para manter o final e a extensão visíveis
Alterado
- Adicionar um documento longo à busca com IA usa bem menos memória e a libera ao terminar
- Ao excluir um arquivo que está no Google Drive, o app avisa que a cópia no Drive fica guardada por 30 dias para restauração, e a lixeira mostra quando ela será removida
Corrigido
- Os botões de copiar nos blocos de código das notas, nas mensagens do chat e nas configurações do servidor MCP local não copiavam nada no Windows
- Uma sincronização cujo envio falhou, total ou parcialmente, aparecia como concluída. Agora aparece como parcialmente falha e o envio é repetido
- Erros temporários de servidor do Google Drive faziam a sincronização falhar em vez de tentar de novo
- Renomear um arquivo durante o envio deixava o nome antigo no Google Drive
- Itens excluídos em lote, pela barra lateral ou junto com uma pasta não apareciam na lixeira aberta
- Era possível excluir permanentemente da lixeira um item que outro dispositivo tinha acabado de restaurar
Interno
- QA automatizado de sincronização e da caixa de arquivos com uma conta real do Google Drive
- Travessões removidos dos textos do app
Adicionado
- Caixa de arquivos do espaço de trabalho: guarde qualquer arquivo em um espaço de trabalho, sincronize pelo seu próprio Google Drive e baixe em outro dispositivo só quando precisar
- Adicionar um arquivo da caixa à busca por IA, ou tirá-lo de lá sem excluir o arquivo
- Renomear arquivos na caixa de arquivos
- Salvar um arquivo da caixa em qualquer lugar do disco, com confirmação quando já existe um arquivo de mesmo nome e atalhos para abrir ou mostrar na pasta
- Uso de armazenamento do Google Drive na barra lateral, com detalhamento por pasta nas configurações de sincronização
- Busca entre conversas, para o assistente trazer contexto dos seus outros chats
- Busca de mensagens dentro de uma conversa
- Configuração da chave de API de busca na web nas configurações
- Ícone do provedor no avatar do assistente
Alterado
- O formato de armazenamento foi atualizado (esquema v46). Atualize seus outros dispositivos para esta versão antes de sincronizá-los, caso contrário a sincronização deles vai parar
- O explorador lista conversas primeiro, depois notas e depois arquivos, e mostra o progresso da transferência na linha do arquivo
- As transferências de arquivos para o Google Drive continuam de onde pararam após uma reinicialização ou queda de conexão
Corrigido
- Documentos anexados com @ não carregavam o conteúdo
- Os originais em CSV, XLSX e XLS nunca eram enviados para o Google Drive
- Excluir vários documentos de uma vez deixava para trás os arquivos locais e as cópias no Drive
- A restauração de fábrica não propagava a exclusão de documentos e modelos personalizados para os outros dispositivos
- Os resultados da busca de documentos mostravam nomes de arquivo UUID internos em vez dos originais
- O Ctrl+K não encontrava documentos pelo nome de arquivo original
- As listas de documentos não eram atualizadas depois que a sincronização terminava
- O app podia travar durante a sincronização, ao mesclar o banco de dados vetorial
- Pastas excluídas voltavam a aparecer depois da sincronização
- Faltava o tamanho do arquivo nos documentos adicionados antes da caixa de arquivos
- Os selos de indexado no explorador não ficavam alinhados
Interno
- Reforço do servidor MCP local: isolamento por conta e verificação de transporte (D-14 A1 Step 1 e 2)
- Automação de capturas de tela para a landing page
Adicionado
- Exibição de informações do assistente de chat (modelo, provedor, contexto)
Alterado
- Melhorada a estabilidade da sincronização
Alterado
- Agendamento automático de atualização da lista de modelos de IA (novos modelos dos provedores agora aparecem automaticamente)
Interno
- CI: caches duplicados removidos, verificações limitadas a MRs para pipelines mais rápidos
Adicionado
- Pipeline de rerank: reordena resultados de busca/RAG para maior precisão nos primeiros resultados
- Nova lógica de busca com combinações mais robustas de hierarquia/filtros
Alterado
- Renovação do design do editor Tiptap + melhor persistência da sessão de edição
- Ajustes finais na renovação de design em larga escala (fontes, barra de tarefas)
- Melhorias no parser de PDF
Corrigido
- Script de deploy: proteção contra o push da tag prosseguir quando o push da main falha
Alterado
- Pequena release de estabilização
Adicionado
- Novo provedor de IA
Alterado
- Renovação de design 3: Spine card, Explorer, Folder, Header
- Sidebar, header e toggle switches redesenhados
Corrigido
- Diversos problemas de Spine card / CSS
Alterado
- Renovação de design: sistema de fontes unificado (DM Sans / DM Serif Display / JetBrains Mono / Pretendard / Noto Serif KR / D2Coding)
Interno
- Fluxo de release reforçado contra o main lock do GitLab CI (push da tag v* bloqueia pushes para main com 403 durante o CI)
- deploy.ps1: proteção não interativa -Yes mais robusta
Corrigido
- Mensagens de erro de licença aprimoradas
- Bug de exibição de mensagem de erro no chat
- Problema de rolagem em abas
Interno
- deploy.ps1: flags -Yes/-Shutdown para deploys não interativos
Corrigido
- Licença sendo liberada espontaneamente
- Limpeza de UX de toast/diálogo de confirmação
Corrigido
- Bugs relacionados a toasts
- Consistência do script de deploy
Interno
- Alinhamento das versões da API JS do Tauri e do crate Rust (@tauri-apps/api, plugin-dialog)
Adicionado
- Recursos de Configurações expandidos
Alterado
- Consolidação das melhorias de abril~maio
Adicionado
- Redesign da UI do editor Fase 1: BubbleMenu (9 botões de formatação + submenu de IA), placeholder de Slash command, limpeza do LinkEditPopover
- Catálogo remoto de modelos: busca automaticamente os modelos mais recentes do R2 com cache de 24 horas (22 modelos)
- Redesign de UX do visualizador de documentos (Fase A): visualizador inline TXT/MD, diálogo de orientação para PDF/DOCX, 4 modos de visualização
- Funcionalidade Inbox (Fase A/B/C): Inbox como workspace do sistema, barra de ação dedicada, classificação manual por IA + Desfazer
- Importação de notas: traga arquivos de texto TXT/MD como notas + Import Dialog
- Download sob demanda de documento original: baixe originais enviados de outro dispositivo da nuvem somente quando necessário
- Tooltip de hover em pastas da sidebar: pré-visualização do conteúdo da pasta
- Tempo limite de inatividade da chave-mestra: bloqueio automático após tempo configurável (0/5/15/30/60 min) + botão Lock Now
Alterado
- Limpeza de 45 strings em inglês hardcoded em 9 idiomas
Corrigido
- Renomear pasta na sidebar: race condition entre Enter/Blur, Escape para cancelar
- Cache stale do tooltip de hover de pasta
- Token do Google Drive não sendo cacheado após reiniciar o app
- Falha no download de documento na nuvem
- Falha do Lance Pull merge ao restaurar quando a tabela estava ausente
- Problema de instalação do modelo de embedding
Adicionado
- Reformulação de CI/CD e assinatura de código (Certificate): início da distribuição de instalador Windows assinado
Adicionado
- Limpeza de vetores órfãos do LanceDB (M-6): exclusão automática de vetores de conversas expiradas + compactação periódica de 3 tabelas
- Utilitário de reconciliação: verificação de consistência entre fontes deletadas e vetores
- Múltiplas melhorias em documentos/notas
Corrigido
- Problema no download do modelo de embedding
- Falha no download de documento na nuvem (troca para immutable_files + limpeza do oplog + fallback para Drive)
- CI: curl --ssl-no-revoke aplicado, node_modules excluído do cache
Adicionado
- Gestão de dispositivos e desativação remota (EDGE-2-C): visualize dispositivos registrados na sua licença + desative remotamente um dispositivo específico
- Gestão de OAuth do Google Drive (M-3): aprovação em Produção, refresh proativo de 55 minutos, parada imediata em invalid_grant, banner no app quando reautenticação for necessária
- Estabilidade de chamadas LLM (M-2): backoff exponencial x3 para 429/5xx nos pipelines de auto-título/resumo/memória
- Melhorias de integridade de sincronização (série SYNC-D): hashing Merkle BLAKE3, resolvida duplicação de drive_file_id, Lance Pull preserva vetores exclusivamente locais (merge baseado em source_file), histórico de Push rastreado até 50 entradas
- Barra "linguagem + copiar" em blocos de código (L-10): aplicada ao chat e ao editor de notas, suporta indentação com Tab
Corrigido
- Definição duplicada no hook NSIS (hooks.nsh)
Adicionado
- Sincronização totalmente redesenhada (SYNC-REDESIGN): R/W sempre em todos os dispositivos, WriterLocker removido, Union Merge, unificação do oplog.jsonl, UX de 5 estados (Synced/Syncing/Offline/Error/NotConnected)
- Pipeline completo de pagamento (D-15-D): integração da API de licença do Lemon Squeezy, Grace Period offline de 7 dias, UI da aba License, exibição de status de dispositivo, cupom de upgrade Standard→Premium
- Gating de planos Fase 2 (D-15-B): limite de 50 documentos no Free (triplas verificações único/lote/pasta), UpgradePromptModal, badges de plano
- Redesign do tutorial de onboarding (U-1): Welcome → TutorialCarousel de 4 etapas, entrar no app sem chave de API, card de guia inline + reenvio automático quando faltar chave de API
- Sistema de design de botões v1+v2: 7 variantes × 7 tamanhos, sistema de camadas de profundidade, ~80+ botões unificados em ~38 arquivos
- Item Upload Docs nos menus de contexto do Explorer/pasta
- 3 camadas de UX para documentos remotos entre dispositivos: banner quando o arquivo original estiver ausente, badge CloudOff no Explorer, toast de conscientização de upload
- UX de sincronização em desligamento gracioso do app: detecção automática de alterações não enviadas → overlay → push → sair
- Menu de contexto da aba: Close to the Left/Right, proteção Pin
- UX de download em runtime do bge-m3 (R-2): exibição de progresso, previne degradação silenciosa do RAG, caminhos de cache normalizados
- Infraestrutura da landing page: deploy estático no R2, exibição dinâmica de versão, overlay de checkout, ToS + Política de Reembolso em 9 idiomas
- Normalização do Auto Updater (UPDATER-FIX): R2 unificado, detecção dinâmica de nome de arquivo, guarda de versão tag/build
- Atualização do cache de ícones do Windows: chamada SHChangeNotify após atualização força o recarregamento do IconCache
- Alternador de planos DEV-only: troca instantânea entre Free/Standard/Premium (não incluído em builds de release)
Corrigido
- 4 bugs críticos de sincronização (SYNC-HOTFIX): bloqueia Push quando o Pull falha, trata falhas de parse do fetch_remote_state, protege a primeira sincronização com Pull-only
- Sincronização de imagem (SYNC-IMG-FIX): proteção contra Pull miss + delete imutável
- last_seen_at do dispositivo não atualizando + rotulação incorreta como "Synced" ao iniciar o app
- Auto Sync rodando no startup quando estava OFF
- Bug de criação de instância de dispositivo duplicada (D-15-D-FIX2)
- Recuperação de Cargo.toml / package.json corrompidos
- Toast de erro tomando controle da UI (limite de visibleToasts, id fixo para dedup)
- Quebra de responsividade mobile na landing
Interno
- Supabase Edge Functions: API de Checkout dinâmica, gerenciador de dispositivos, webhook LS → subscriptions
- Lógica de retry de upload via curl no CI
- URL de checkout dividida em UUIDs separados para Standard/Premium
Interno
- Tags de release candidate para pré-verificação (detecção dinâmica de arquivo no pipeline de CI, etc.)
Adicionado
- Sistema de agentes (2C-2): integração com chat, relay de temperature por provedor, UI de gestão de presets, limpeza de i18n
- Abstração de Transport do MCP + Streamable HTTP: estabilidade de stdio + suporte a servidor HTTP + migração de armazenamento para SQLite + armazenamento de token de auth no Keyring
- Sync Batch A: camada universal de sincronização de arquivos, dirty flag em tempo real
- Batch de recursos de chat: anexo de PDF (nativo para 3 provedores + fallback customizado), salvar memo por seleção de intervalo, galeria de imagens
- Melhorias na busca hierárquica de IA + aprimoramentos de busca (trigram FTS5, RRF de 3 vias, pré-visualização em 2 colunas, UI de filtros)
Alterado
- Sistema de design GLASS aplicado
- Redesign de UI/UX S1~S6: gerenciador de janelas (FloatingPanel + PanelCanvas), adoção do shadcn/ui, redesign da TaskBar, painel Explorer, modo de layout Docked
- Primeira passagem de substituição por Phosphor Icons
- Melhorias no breadcrumb / popover de Tools
Corrigido
- Múltiplos patches de QA para a busca hierárquica de IA
- Validação de target_id do painel de doc, salvamento incompleto de mensagem após cancelar, indicador de workspace ativo e outros
Adicionado
- Lixeira: soft delete + TrashView + restauração, previne perda de dados por CASCADE
- Factory Reset: 8 categorias selecionáveis individualmente
Alterado
- Múltiplas melhorias de UI, patches de QA
Corrigido
- Clippy manual_flatten, etc.
Corrigido
- Correção raiz do 404 no download de releases do CI/CD: migração para o GitLab Generic Packages Registry
- Correção raiz de .nsis.zip não gerado: adicionado createUpdaterArtifacts
- Build do CI: diagnóstico de chave de assinatura + verificação do zip do updater
Corrigido
- Exibição de versão, 3 problemas de build de deploy
Segurança
- Tratamento aprimorado de PAT (Personal Access Token)
Adicionado
- Anexar imagem no chat: Ctrl+V / seleção de arquivo / arrastar-e-soltar, roteamento multimodal por provedor
- Salvar memo de par Q&A: inclui a pergunta automaticamente, formato blockquote
- Alternador de visualização de conversa/memo na sidebar: controle segmentado
- Pré-visualização estendida de chunks de documento: Split View, score de similaridade, badge de referência
- Gestão avançada de modelos: tags de Capabilities, reordenação DnD, dashboard de custo, 9 provedores predefinidos
- Supabase Auth (Google/GitHub) completo: PKCE + callback localhost, auto-refresh, UI de perfil
Alterado
- Automação de RAG (2C-RAG-FIX): useRag padrão true, delete-before-ingest, ferramenta search_documents aprimorada
- Removido o jargão "chunks" em favor de termos intuitivos (2C-CHUNK-UX)
- Terminologia Workspace → Folder unificada (i18n em 5 idiomas)
- Sistema de cores migrado para tons frios + accent roxo profundo
- Tamanhos de fonte unificados ao padrão da indústria
- Refactor de layout da sidebar/configurações (sem bordas, arranjo de 3 colunas)
- ChatHeader redesenhado e mesclado com o rodapé da barra de input
Corrigido
- Redesign raiz do pipeline de imagem de notas (2C-IMG-FIX3): race condition, atomicidade, caminhos relativos, limpeza de exclusão
- Colisão de state em OAuth (o PKCE agora cuida da proteção CSRF)
- 8 correções de lint do Clippy
Adicionado
- Editor de notas WYSIWYG Tiptap
- Sincronização entre dispositivos (Fase 2B): backend Google Drive, Union Merge do SQLite, UX de Sync
- Contexto persistente (2B-3/4): resumo automático de conversa, extração automática de memória, forget_note, busca semântica
- Busca semântica de conversas (2B-5): híbrido FTS5 + LanceDB, modal de busca redesenhado
- Registro dinâmico de modelos (2C-1): registro de provedores customizados, busca automática de /v1/models
- Tema "Soft Depth": sistema de variáveis CSS (--v-*), paleta de cores, árvore da sidebar
- Barra de abas: abas temporárias/fixadas, estado de expansão da sidebar movido para o Zustand
- Recurso de atualização manual
Alterado
- Limpeza de UI do chat: bordas em gradiente, welcome card, blocos de código
- Colapso de pasta, conversa em novo workspace, painel de notas, terminologia de Sync
Corrigido
- Aviso type_complexity do Clippy
- Prevenção de contaminação do cache do CI
Adicionado
- Hierarquia de workspaces (3 níveis)
- CRUD de memos + criptografia AES-256-GCM
- Seleção de contexto por @menção: referencie documentos/memos diretamente do input
- Conversão de conversa → memo (📌 salvar)
- Ferramentas embutidas de IA (busca, consulta de documentos, etc.)
- Exibição em tempo real de token/custo (diferenciação BYOK)
- Persistência de conversa (SQLite) + título automático + busca FTS5 + dados reais na sidebar + modal de busca Ctrl+K
- Onboarding OOBE + UI de confiança da chave de API
- GitLab CI/CD + instalador NSIS + Auto Updater
Adicionado
- Primeira release alpha: MVP (Fase 1) concluído
- Chat multimodelo (BYOK): streaming de Claude, GPT (código do Gemini pronto)
- DB vetorial local: vetorização e busca de conversas/documentos com base em LanceDB
- Embedding local: execução em CPU do bge-m3, suporte multilíngue (30~86ms/chunk)
- RAG básico: upload de TXT/MD/HTML/PDF/DOCX → chunking → embedding → busca → resposta
- Integração básica do MCP: servidor stdio, orquestração de Tool Use para 3 provedores (Claude/GPT/Gemini), servidor de filesystem (14 ferramentas) testado ao vivo
- Layout de 3 painéis + núcleo do chat (streaming + Markdown + ToolCall) + UI de Settings/MCP/RAG + ModelSelector