You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(chat): add ch.at auto session titles with privacy toggle
- generate titles in background from first 3 user + 3 assistant text messages and stop after consolidation
- prevent stale async title updates on context/session switches and avoid regeneration on reopen when already consolidated
- add per-server "Enable AI generated titles" setting (default off) and wire persistence through app provider flows
- register ChatAtTitleGenerator in DI and send platform-aware word-limit instructions via prompt (4 mobile, 6 active desktop)
- expand provider/widget/integration tests and update ROADMAP/CODEBASE documentation
- Legacy migration creates a profile only when legacy server/auth keys exist; clean installs now keep an empty server list until the user adds one
578
579
579
580
### Session Module
580
581
- Session list loading and caching
@@ -584,6 +585,7 @@ Dependency injection via `get_it`. HTTP via `dio`. State management via `provide
584
585
- Last-session snapshot persistence (`session + messages`) scoped by `server + directory` for instant startup restore
585
586
- Stale-while-revalidate startup flow: cached last conversation renders immediately and message list revalidates silently in background
586
587
- Full lifecycle operations: create/delete/rename/archive/unarchive/share/unshare/fork
588
+
- Automatic AI title generation via `ch.at` after each user/assistant turn using up to the first 3 user + 3 assistant text messages, with per-session consolidation guard to stop after the 3+3 baseline is reached
587
589
- Session insights orchestration: status snapshot + children/todo/diff hydration
588
590
- Optimistic session mutations with rollback on API failure
589
591
- Server-scoped cache isolation to prevent cross-server leakage
@@ -613,6 +615,7 @@ Dependency injection via `get_it`. HTTP via `dio`. State management via `provide
613
615
- In-chat permission/question cards with actionable replies
614
616
- Directory-scoped context snapshots and dirty-context refresh strategy
615
617
- Chat-first shell: `AppShellPage` mounts `ChatPage` as primary route; `Logs` and `Settings` open as secondary routes with native back navigation to chat
618
+
- Startup onboarding guard: when no server profile exists, `AppShellPage` routes directly to `Settings > Servers` (mobile and desktop)
616
619
- Responsive shell with mobile drawer and desktop split-view layout
617
620
- Sidebar top action row appears above `Conversations`: compact one-line `Logs` and `Settings` buttons open secondary routes while chat remains implicit as the primary area
618
621
- Desktop shortcuts for new chat, refresh, input focus, and agent cycle
@@ -634,6 +637,7 @@ Dependency injection via `get_it`. HTTP via `dio`. State management via `provide
634
637
- dedicated Sounds section was removed after Notifications absorbed all per-category sound controls
635
638
- Server management moved into a dedicated `Servers` section:
636
639
- add/edit/remove, active/default, health badges and activation guard
640
+
- per-server privacy toggle `Enable AI generated titles` controls whether background title generation is allowed for that server profile
637
641
- Chat keyboard shortcuts are now resolved from persisted settings via runtime binding parsing
638
642
- Notification runtime adapters:
639
643
- Android/Linux/macOS/Windows through `flutter_local_notifications`
Copy file name to clipboardExpand all lines: ROADMAP.md
+21-8Lines changed: 21 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -307,24 +307,37 @@ Refinamento de conflito de foco: durante hold em bolha o toque é absorvido e o
307
307
-[ ] Emular `opencode serve` internamente como opção de servidor local (permitir ao CodeWalk iniciar e gerenciar um servidor OpenCode embutido sem depender de instância externa)
308
308
-[x] Adotar stale-while-revalidate e manter a última sessão em cache local para UX instantânea ao abrir o app (servidores remotos podem levar até ~10s para responder, causando lag perceptível na abertura da última conversa)
309
309
-[x] Auto-scroll para última mensagem como conversa de IM (WhatsApp/Telegram): avançar automaticamente para mensagens novas enquanto chegam, exceto quando usuário rolou para cima intencionalmente (detectar via botão seta pra baixo que aparece ao subir - significa que usuário está lendo histórico e não quer ser interrompido por auto-scroll)
310
-
-[] Tool bash: mostrar o comando executado junto com o resultado (atualmente só mostra o output, não mostra qual comando gerou aquele resultado)
310
+
-[x] Tool bash: mostrar o comando executado junto com o resultado (atualmente só mostra o output, não mostra qual comando gerou aquele resultado)
311
311
-[ ] Fazer atalhos de teclado funcionarem de verdade
312
312
-[ ] Exibir seção `Shortcuts` no mobile quando houver teclado físico conectado
313
313
-[x] Cada tool call deve mostrar no máximo duas linhas com opção discreta de expandir para exibir todo o conteúdo
314
-
-[] Remover o texto `tool call` das bolhas de tool call
314
+
-[x] Remover o texto `tool call` das bolhas de tool call
315
315
-[ ] Verificar atualizações baseadas nos releases do GitHub usando a API pública do GitHub
316
-
-[ ] Em mobile, exibir apenas o ícone de status nas tool calls (sem textos como `Running`, `Completed`, `Finished`); manter o texto de status apenas no desktop
317
-
-[ ] Usar o serviço `ch.at` para gerar títulos automaticamente
318
-
-[ ] Usar a cor fornecida pelo agent via backend
319
-
-[ ] Remover ícone do seletor de agente
320
-
-[ ] Remover bordas dos selects de agent, provider/model e thinking
321
-
-[ ] Subir o botão attach para ficar ao lado do select de agent, liberando mais espaço pro input de texto
316
+
-[x] Em mobile, exibir apenas o ícone de status nas tool calls (sem textos como `Running`, `Completed`, `Finished`); manter o texto de status apenas no desktop
317
+
-[x] Usar o serviço `ch.at` para gerar títulos automaticamente
318
+
-[x] Usar a cor fornecida pelo agent via backend
319
+
-[x] Remover ícone do seletor de agente
320
+
-[x] Remover bordas dos selects de agent, provider/model e thinking
321
+
-[x] Subir o botão attach para ficar ao lado do select de agent, liberando mais espaço pro input de texto
322
+
-[ ] Inserir botão de fácil acesso para exibir/ocultar o Thinking (toggle rápido no header da mensagem ou área do composer)
323
+
-[x] Simplificar barra de título: reduzir altura/padding, ocultar rótulos secundários, priorizar informações essenciais apenas
324
+
-[x] Mover ícone/botão de status do servidor para dentro da barra lateral; mostrar pontinho indicador no menu hamburguer quando servidor não estiver verde (desconectado/degradado)
325
+
-[x] Mover botão de logs para dentro de Settings (consolidar navegação secundária)
326
+
-[x] Transformar botão Settings em apenas um ícone (⚙️), removendo rótulo de texto
327
+
-[x] Quando não houver nenhum servidor cadastrado, redirecionar automaticamente para tela de servidores ao abrir o app
328
+
-[ ] Adicionar opção em Settings para escolher densidade de todos os elementos do app (denso, normal, espaçoso)
329
+
-[ ] Refresh providers/model em background de forma assíncrona ao abrir o app
330
+
-[ ] Adicionar instruções básicas de como instalar e executar um servidor OpenCode na tela de adicionar servidor
322
331
323
332
Pronta para análise: adicionada ação de arquivamento na seção de contextos fechados para ocultar projects fechados sem depender de `worktree`, com persistência por servidor para manter a curadoria da lista ao reiniciar/recarregar. Também foi implementado cache persistido da última sessão (sessão + mensagens) por escopo (`server + directory`) com restore instantâneo na abertura e revalidação silenciosa em background (SWR), preservando usabilidade mesmo com latência alta do servidor remoto. No mobile, o envio pelo teclado agora usa ação `send` e oculta o teclado/foco após submissão para liberar mais espaço da conversa.
333
+
Pronta para análise: o status/switch de servidor foi movido do app bar para a sidebar com controle centralizado e indicador de alerta no botão hambúrguer quando a conexão/saúde não está verde; `Logs` foi consolidado dentro de `Settings` como seção dedicada; e o acesso de `Settings` na sidebar foi simplificado para botão somente com ícone (sem rótulo textual), mantendo tooltip e cobertura de testes de navegação/UX.
324
334
Pronta para análise: comportamento de auto-scroll estilo IM foi finalizado no chat. Enquanto o usuário permanece no final da conversa, novas mensagens continuam acompanhando automaticamente; ao subir o histórico intencionalmente, o auto-follow pausa e a UI preserva a posição de leitura, destacando o FAB de retorno ao último item. Ao tocar no FAB, a conversa volta ao fim e o auto-follow é reativado.
335
+
Pronta para análise: os controles de agent/model/thinking foram refinados para visual sem borda, o seletor de agente ficou sem ícone e passou a aplicar a `color` recebida do backend (quando disponível) no chip e no menu de seleção. O botão de anexos foi movido para a barra de controles ao lado dos seletores, liberando espaço horizontal no composer sem alterar o fluxo de anexar imagens/PDF.
325
336
Pronta para análise: tool calls agora iniciam com preview compacto de no máximo duas linhas para saída/erro e exibem ação discreta de expandir/recolher (`Show more`/`Show less`) para alternar entre visão resumida e conteúdo completo, reduzindo ruído visual sem perder acesso ao detalhe.
326
337
Refinamento pós-entrega aplicado nos blocos de thinking: o bloco mais recente permanece expandido por padrão, e blocos anteriores são automaticamente colapsados quando um novo bloco de thinking é adicionado, mantendo opção manual de expandir/recolher em cada bloco.
327
338
Correção pós-validação aplicada: o critério de "bloco mais recente" passou a ser global na conversa (não apenas dentro da mesma mensagem), garantindo que thinkings anteriores realmente colapsem quando um novo thinking surgir em outro bloco/mensagem.
339
+
Pronta para análise: tool calls agora exibem comando executado (com extração resiliente de `input.command`/`input.cmd` e fallback legível), removeram o prefixo textual `Tool Call` do cabeçalho e aplicam status compacto por ícone no mobile, preservando label textual apenas no desktop/web. Cobertura de widget foi ampliada para validar comando visível, remoção do texto antigo e diferença mobile/desktop no chip de status.
340
+
Pronta para análise: onboarding de servidores aplicado no shell principal. Quando não há nenhum servidor configurado, o app abre automaticamente em `Settings > Servers` (mobile e desktop), com guarda de inicialização para evitar redirecionamento incorreto antes de carregar estado local. Também foi removida a criação automática de servidor padrão em instalações sem legado, habilitando estado inicial realmente vazio.
0 commit comments