Agent Orchestrator 0.12.0

80 commits desde a 0.11.2. O app desktop agora fala oito idiomas, usa uma nova paleta de cores e permite fixar sessões e escolher um revisor por sessão. O app mobile ganhou temas e ditado por pressionar para falar. Os contêineres iniciados por uma sessão são limpos quando ela morre.

Cobre tudo desde a v0.11.2.

Usuários do macOS devem ir direto para a 0.12.1 ou posterior. Esta build vaza descritores de arquivo e quebra a visualização Files e a criação de tarefas depois de algumas horas de uso.

A 0.11.0 foi sobre a base aguentar o peso. A 0.12.0 é o que foi construído em cima dela: o app agora fala oito idiomas, a barra lateral e as configurações funcionam do jeito que você espera, e uma classe de falhas que podia apagar todas as sessões do seu quadro deixou de existir.

Esta release adiciona novos recursos ao produto e melhorias de confiabilidade sem quebrar os fluxos existentes.

Destaques

O app fala oito idiomas

O app desktop agora tem uma camada de localização de verdade, construída sobre o i18next, com o idioma escolhido em Settings > General e salvo em ~/.ao/ui-settings.json. O chinês simplificado chegou primeiro e cobre a estrutura do shell, a barra lateral, o quadro, as configurações, os diálogos, as abas do inspetor, a paleta de comandos e os textos do terminal. Japonês, coreano, espanhol, francês, alemão e português do Brasil vieram em seguida, com READMEs em cada idioma. O inglês continua sendo o padrão e o fallback, então uma string sem tradução aparece em inglês em vez de mostrar a chave. (#3465, #3541)

Mobile: temas, sheets nativos e pressionar para falar

O app mobile não é mais só escuro. Ele traz paletas clara e escura, além de uma preferência "sistema" que continua acompanhando o sistema operacional em vez de travar no que leu ao abrir. A estrutura do app foi reconstruída sobre sheets nativos, e o quadro de sessões passou a separar as sessões pelo runtime encerrado, e não pelo status de concluída.

Ele também tem ditado por pressionar para falar. Segure a tecla do microfone no compositor para falar, solte para inserir ou deslize para cima para travar o ditado e falar sem as mãos. O reconhecimento roda no próprio dispositivo (iOS SFSpeechRecognizer, Android SpeechRecognizer), então não há chave de API nem custo por minuto, e ele favorece o vocabulário que enche os prompts de agentes, para que você receba "git" e "npm" em vez de "get" e "MPM". A transcrição chega ao compositor como um rascunho editável em vez de ser enviada, porque a conversão de fala em texto entende código errado com frequência suficiente para que o envio silencioso não seja seguro. Trechos gravados são acrescentados, então vários toques constroem um único prompt.

Além disso, um ícone do app em Liquid Glass igual ao da build desktop e uma correção na porta padrão da LAN, que apontava para a porta do daemon restrita ao loopback em vez da ponte mobile na 3011, de modo que uma instalação nova não conseguia se conectar sem edição manual. (#3399, #3400, #3304, #3494)

Uma nova base de cores

O renderer passou a usar uma paleta de design tokens em oklch, com Geist como fonte da UI e os aliases de cor do shadcn mapeados sobre ela, substituindo valores fixos no código em toda a biblioteca de componentes. O status das sessões agora tem uma paleta consistente em todo lugar onde aparece: trabalhando é azul, precisa de você é laranja, em revisão é amarelo, pronto é verde. (#3421)

Fixe as sessões às quais você sempre volta

As sessões podem ser fixadas em uma seção Pinned no topo da barra lateral, salva no servidor para que a fixação sobreviva a uma reinicialização. A própria barra lateral ficou recolhível: Pinned e Projects podem ser recolhidas, e um clique no ícone de pasta de um projeto o expande ou recolhe sem precisar abri-lo antes. (#3511, #3310)

Escolha o revisor por sessão

O agente revisor era uma configuração única para o projeto inteiro. Agora você pode escolher um para uma sessão específica, e rodar essa revisão não muda o que as outras sessões do projeto usam. A aba Reviews também lista todas as revisões registradas da sessão, em vez de só a execução atual e a anterior de um PR, para que você possa comparar o que dois revisores diferentes disseram. Uma revisão recusada, quando o daemon reaproveita uma revisão existente em vez de rodar uma nova, não se reporta mais como sucesso. (#3477)

As Configurações abrem como modal

As configurações gerais e as do projeto abrem sobre o quadro em vez de sair dele, com uma barra lateral para General, Updates, Developer e Help. Escape ou um clique fora fecha o modal, e você volta para onde estava. (#3497)

Notificações acionáveis

Quando uma sessão precisa de você e a janela não está em foco, o ícone no dock do macOS pula, a barra de tarefas do Windows pisca até você voltar e o badge com a contagem de notificações não lidas fica sincronizado no macOS, no Windows e no Linux.

Dentro do painel, a linha inteira é clicável, e não só o texto do título, e as abas manuais Unread/All e a opção de marcar como lida foram removidas. As notificações agora acompanham duas coisas independentes: se você já a viu (marcação limpa quando você abre o painel) e se o problema subjacente continua em aberto (estado gravado só pelo ciclo de vida). Uma notificação que você já leu continua listada enquanto o que ela reportou não for resolvido, e se fecha sozinha quando a sessão sai do estado de espera por input, é encerrada ou quando o PR recebe merge ou é fechado. Transições que aconteceram enquanto o daemon estava fora do ar são verificadas de novo na inicialização. (#2534, #3296, #3495, #3558)

Ações na paleta de comandos e um ícone na barra de menus

O Cmd/Ctrl+K agora traz ações de sessão, e não só navegação, e o compositor de tarefas por trás de New Task foi extraído para que a paleta possa iniciar tarefas com a mesma UI. O macOS também ganha um ícone de atenção na barra de menus para as sessões que estão esperando por você. (#3531)

Os contêineres iniciados por uma sessão são limpos

Os contêineres Docker iniciados por uma sessão são removidos quando ela chega a um estado terminal, inclusive quando trava ou recebe SIGKILL, e não só quando você a encerra explicitamente. Marque um contêiner com ao.session=$AO_SESSION_ID para que ele seja removido, ou com ao.spare=true para infraestrutura compartilhada que deve sobreviver à sessão. As chamadas ao Docker têm timeout, e um projeto que falha ao carregar falha de forma segura, sem remover nada. (#3153)

Arquivos e diffs

O painel Files trocou o botão de busca alternável e o rótulo de contagem de arquivos por um campo de busca sempre visível, removeu o botão de atualizar (a lista já faz polling) e reconstruiu a lista como um acordeão, com a contagem de arquivos ao vivo na aba. O visualizador de diff transmite as alterações do workspace conforme elas acontecem, tem uma alternância de layout mais clara e feedback inline por arquivo, e se expande corretamente na visualização maximizada. Os diffs do workspace agora também consideram a base, então uma sessão filha compara com o branch de onde realmente veio, e não com uma base fixa. (#3466, #3503, #3492, #3369, #3214)

Confiabilidade

Uma falha isolada não apaga mais o seu quadro. Esta era a mais importante (#3475). Três bugs diferentes podiam arquivar todas as sessões de uma vez. O encerramento do preview matava o grupo de um PID sem verificar de novo se ele ainda pertencia ao processo que tinha iniciado, e um número de PID reciclado derrubava uma família de processos sem relação nenhuma; como um servidor tmux é líder do próprio grupo, um único kill de grupo desatualizado destruía todas as sessões. Uma sondagem do tmux com "no server running" era lida como morte de cada sessão, quando não diz nada sobre nenhuma sessão individual, então um soluço do servidor arquivava o quadro. E uma migração corrompida retornava erros 500 que o quadro tratava como sessões inexistentes. As sondagens de atividade agora reportam resultado inconclusivo em vez de morte, o reaper se recusa a concluir uma rodada em que a maior parte do quadro parece morta ao mesmo tempo e o registro de migrações se repara sozinho em históricos que já estavam corrompidos. (#3491, #3598)

Orquestradores. Não é mais possível criar orquestradores ativos duplicados para o mesmo projeto, o ao session ls mostra as sessões de orquestrador ocultas e conta as encerradas ocultas em vez de descartá-las silenciosamente, e as mensagens automáticas de reengajamento do orquestrador foram revertidas depois que se mostraram mais barulhentas do que úteis. (#3397, #3393, #3394)

Agentes. O Droid repassa a configuração de modelo específica de cada papel pelo seu arquivo de configurações, gravado no diretório de dados em vez de em um diretório temporário. Os prompts do Grok são entregues depois que a TUI termina de iniciar, e não em um terminal que ainda não está escutando, e o terminal dele rola com a roda do mouse. O harness falso interno de testes não aparece mais nos seletores de agentes. (#3156, #3534, #3533, #3518)

Navegador. A seleção de anotações fica travada enquanto um prompt está em andamento, para que um clique não mude o alvo no meio do envio; visualizações nativas não pintam mais por cima do app quando estão ocultas; a edição de URL funciona no navegador maximizado no macOS; o badge do seletor de elementos saiu do diálogo de anotação; e sair de uma sessão e voltar não reimpõe mais uma URL de preview da qual você já tinha saído. (#3232, #3295, #3488, #3464, #3538, #3370)

Desktop. O atualizador automático registra em log os 404 de manifestos de release ausentes, em vez de abrir um diálogo mandando você verificar um token de autenticação que você não tem. Arrastar a barra lateral e o inspetor para no limite de largura mínima, em vez de fechá-los de vez. O daemon ignora SIGPIPE em saídas fechadas. As seções PR e Completion do inspetor ficam ocultas quando não há nada nelas, e resumos de PR duplicados deixam de aparecer repetidos. Junto com isso, uma rodada de correções visuais: navegação da barra de título alinhada aos botões de janela do macOS, refinamentos na barra de abas do terminal, linhas finas nas configurações e na tela de arquivados, padding da barra superior do terminal e seleção de texto desativada na estrutura do app e nas páginas de marketing. (#3012, #3478, #3193, #3325, #3250, #3505, #3480, #3507, #3556, #3508, #3520)

Por dentro

A telemetria ganhou um kill switch em runtime: AO_TELEMETRY_DISABLED_EVENTS silencia streams pelo nome (com correspondência de prefixo usando *) sem precisar de uma release, e os streams silenciados continuam sendo gravados no SQLite local para continuar depuráveis. Os eventos do daemon recebem a versão, os eventos de atualização são registrados, os controles do PostHog foram reforçados e os testes garantem que o autocapture está desligado. A CI agora gera um .rpm para Linux junto com o .deb.

No site: a documentação é publicada também em versões Markdown, com a hierarquia completa exposta no llms.txt; foram adicionadas páginas de comparação de agentes; o quadro do hero, a demo de delegação e o mockup mobile foram reconstruídos para refletir a aparência real do app desktop; e o CTA do beta para iOS entrou no ar. Os dados estruturados duplicados de Organization foram removidos, e os content signals agora se aplicam aos crawlers permitidos. (#3401, #3388, #3406, #3395, #3363, #3438, #3344, #3430, #3496, #3428, #3429, #3500, #3521, #3522, #3144, #3367, #3365, #3389)

Como atualizar

GitHub Releases e Homebrew são os caminhos de instalação suportados. Instalações existentes são atualizadas no lugar. Se uma atualização anterior deixou o seu registro de migrações quebrado, a 0.12.0 o repara ao iniciar, em vez de travar a inicialização.

Changelog completo: https://github.com/OrchestratorInc/agent-orchestrator/compare/v0.11.2...v0.12.0