Slm local

⛔ closed · #75 · willchen96/mike ← brauliogusmao/mike · opened 14d ago by brauliogusmao · closed 14d ago · +3,213-725 across 70 files · ↗ on GitHub

Our analysis

Project changelog (docs/alteracoes.md) — read the full analysis →

Chat API errors: surface + structured codes — read the full analysis →

Disable Next.js devIndicators — read the full analysis →

ReactMarkdown DOM crash during streaming — read the full analysis →

Whitelabel branding via env vars — read the full analysis →

Full pt-BR localization (next-intl) — read the full analysis →

Think the analysis missed something the PR description covers?

Commits in this PR (24)

SHA Subject Author Date
a096a76d chore: instala dependencias do backend e frontend Braulio Gabriel Gusmao 2026-05-11 ↗ GitHub
f12456ca feat(i18n): configura next-intl e cria traducoes pt-BR Braulio Gabriel Gusmao 2026-05-11 ↗ GitHub
1f6b1527 feat(i18n): traduz login, signup, modais shared e componentes de diretório Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
826e25fd feat(i18n): translate assistant and tabular components to pt-BR Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Covers AssistantWorkflowModal, ChatView, ChatInput, InitialView,
SelectAssistantProjectModal, AddColumnModal, AddNewTRModal,
TRChatPanel, and columnPresets. Also includes previously completed
files: NewProjectModal, ProjectExplorer, ProjectPage, ProjectsOverview.
Legal column preset names adapted to Brazilian terminology.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
693e2fe5 feat(i18n): traduz workflows, modais, páginas e hook de chat para pt-BR Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Completa a tradução dos arquivos restantes da lista em TRADUCAO.md:
workflows (ShareWorkflowModal, WFEditColumnModal, WorkflowList, NewWorkflowModal),
modais (delete-chats-modal), páginas (account, account/models,
tabular-reviews, workflows/[id], projects chat), suporte e
hook useAssistantChat. Todos os textos hardcoded em inglês substituídos
por chamadas t() com chaves no pt-BR.json.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
170e7bca feat(i18n): traduz menu lateral (AppSidebar) para pt-BR Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Itens de navegação, histórico, tooltips e nome do app
substituídos por chamadas t() no namespace shared.appSidebar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
b6ed3d1c feat(i18n): traduz botão de documentos (AddDocButton) para pt-BR Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ab9b0d7c feat(i18n): renomeia Revisões Tabulares para terminologia jurídica brasileira Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Menu lateral: "Dados"; página: "Extração e comparação de dados entre documentos".
Corrige título hardcoded na página de revisões tabulares.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
50553c3c feat(i18n): traduz painel de alterações rastreadas para pt-BR Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
AssistantMessage (labels de ferramentas, Accept all/Reject all, resumo
de alterações) e EditCard (Aceitar/Rejeitar/Ver por alteração individual).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
9dfa9ca9 feat: centraliza configuração de marca em brand.ts + componente AppLogo Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Cria src/config/brand.ts com NEXT_PUBLIC_APP_NAME e NEXT_PUBLIC_LOGO_URL.
Cria AppLogo que renderiza imagem customizada ou o ícone SVG padrão.
Substitui usos de MikeIcon como logo nos componentes de interface;
usos como spinner/status permanecem com MikeIcon.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4556c948 feat: título da aba do navegador configurável via variáveis de ambiente Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Substitui metadados hardcoded por NEXT_PUBLIC_APP_TITLE,
NEXT_PUBLIC_APP_DESCRIPTION e NEXT_PUBLIC_APP_URL. Usa NEXT_PUBLIC_APP_NAME
como fallback para o título quando APP_TITLE não for definido.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4872c90b fix: corrige removeChild durante streaming do ReactMarkdown Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Adiciona key="streaming"/"done" no ReactMarkdown para forçar remount
ao fim do streaming. Evita que rehypeKatex/remarkGfm produzam árvores
DOM inconsistentes durante reconciliação com markdown parcial.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
78e2b036 fix: desativa plugins do ReactMarkdown durante streaming para evitar conflito de DOM Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Durante streaming usa ReactMarkdown sem plugins (árvore DOM estável).
Ao fim do streaming, key muda para "done" forçando remount único com
rehypeKatex e remarkGfm ativos para renderização final completa.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
937d816a feat: traduz áreas de prática para português e documenta como config de instância Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Traduz todas as 19 opções de PRACTICE_OPTIONS para português jurídico e
atualiza os workflows embutidos para usar os novos valores. Adiciona
comentário de documentação em practices.ts explicando como gerenciar
as áreas de prática por instância.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0aef1737 chore: desativa painel de dev tools do Next.js (devIndicators) Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
O painel interno do Next.js estava em inglês e sobrepondo elementos
da interface. Como não é traduzível, foi desativado via devIndicators: false.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1dcd8a86 feat: renomeia Workflows para Fluxos de trabalho e adiciona label no botão Criar Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Atualiza sidebar nav, título da página e todas as strings relacionadas
para "Fluxos de trabalho". Adiciona label "Criar Fluxo" ao botão + na
página de listagem de fluxos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
846ce3f2 feat: atualiza modal de novo fluxo com nomenclatura em português Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Substitui todas as ocorrências de "workflow" por "fluxo" no modal de
criação/edição, incluindo breadcrumb, placeholder do nome, botão de
confirmação e mensagens de erro/estado.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
a9e0d671 fix: corrige label "Workflows" → "Fluxos de trabalho" no chat input Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Chave de tradução errada estava sendo usada no componente ChatInput,
mostrando "Workflows" em inglês mesmo após a renomeação.

Arquivos: frontend/messages/pt-BR.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
61e35e23 feat: traduz página de Configurações para português Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
- layout.tsx: "Settings" → "Configurações", "General" → "Geral",
  "Models & API Keys" → "Modelos e Chaves de API" via useTranslations
- models/page.tsx: labels dos campos de chave de API traduzidos;
  mensagens de alert() em português
- account/page.tsx: mensagens de alert() em português
- pt-BR.json: adiciona namespace pages.configLayout e chaves de erro
  para conta e modelos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fde100d5 merge: adaptação para português (pt-BR) Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
ed833e17 fix: exibe mensagem de erro da API no balão do chat Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Antes o backend enviava "Stream error" genérico e o frontend
ignorava o evento silenciosamente - o usuário via apenas o
spinner desaparecer sem explicação.

Backend: extrai a mensagem real do erro (ex: "Your credit balance
is too low...") da estrutura aninhada do SDK Anthropic/OpenAI e a
envia no evento SSE { type: "error", message: "..." }.

Frontend: trata o evento type="error" lançando a mensagem como
exceção, que é capturada pelo bloco catch existente e exibida
no balão do assistente como mensagem de erro.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4896b8c3 Traduz mensagens de erro do chat para português Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
commit body
Backend emite código de erro estruturado (code + message) para erros
conhecidos (saldo insuficiente, chave inválida, rate limit, etc.).
Frontend traduz pelo código; fallback para mensagem bruta ou genérica.
Corrige também o bug em que o throw dentro do try/catch interno era
silenciado - agora usa variável streamError propagada após o loop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
454ee916 docs: adiciona histórico de alterações do projeto Braulio Gabriel Gusmao 2026-05-12 ↗ GitHub
Documenta todas as mudanças feitas: adaptação pt-BR, sistema de erros
estruturados, correções de bugs e outras melhorias.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cb3e3b59 feat: integração com Ollama para modelos locais Braulio Gabriel Gusmao 2026-05-13 ↗ GitHub
commit body
Adiciona suporte a modelos rodando localmente via Ollama, com estratégia
de pré-carregamento de documentos no contexto antes da chamada ao LLM -
necessário porque modelos menores não lidam bem com tool calling reativo.

- Backend: adapter de streaming (ollama.ts), rota GET /ollama/models,
  dispatcher atualizado para provider "ollama/", models.ts e types.ts
  atualizados
- Frontend: grupo "Local (Ollama)" dinâmico no ModelToggle, busca de
  modelos via fetchOllamaModels(), useSelectedModel aceita IDs ollama/*,
  modelAvailability atualizado para provider ollama

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Capture this PR into my fork

Download a Markdown prompt that tells Claude how to port every commit in this PR into your working tree. Run it via claude -p < capture-pull-75.md from inside the repo you want the changes in.

⬇ Download capture-pull-75.md