HN Show: Haystack – IDE para explorar e editar código em uma tela infinita
(haystackeditor.com)- O Haystack é apresentado como uma ferramenta de code review que lê tanto o histórico de conversas quanto as alterações de um PR, encaminhando aos revisores apenas as mudanças que realmente exigem julgamento humano
- PRs limpos são mesclados automaticamente, enquanto PRs arriscados são classificados como candidatos à triagem, com o objetivo de chegar perto de um fluxo com “human code review time to zero”
- O PR de exemplo paralelizou
tenancyInit()ecacheWarmup()comPromise.all(), reduzindo o cold start de cerca de 4 segundos para 2,4 segundos, mas revertendo uma decisão anterior sobre a ordem de execução - O Haystack encontra no histórico de conversas a justificativa de que
cacheWarmupdeve ser executado depois detenancyInite confirma, em um sandbox, 31 crashes em 50 inicializações - O PR problemático é encaminhado para
@maya, que definiu a ordem original, e a decisão de projeto quebrada junto com os resultados de falha são anexados ao PR para reduzir o tempo de julgamento na revisão
Fluxo para fazer triagem automática de reviews de PR
- O Haystack lê o histórico de conversas e as alterações de todos os PRs para avaliar o risco
- PRs arriscados são executados e validados de ponta a ponta, envolvendo revisores apenas quando o julgamento humano é necessário
- A tela mostra o Haystack fazendo a triagem de 16 PRs
- São listados PRs em várias linguagens, como TypeScript, JavaScript, C, Python, Ruby, Go e C++
- Cada PR aparece com o status
analyzing
Exemplo de alteração arriscada: paralelização do bootstrap do serviço
- O PR de exemplo
platform#3120 feat: parallelize service bootstrapé uma alteração que paraleliza as etapas de bootstrap do serviço - O código anterior executava
tenancyInit()e, em seguida,cacheWarmup()de forma sequencial - O código alterado executa as duas tarefas ao mesmo tempo com
Promise.all([tenancyInit(), cacheWarmup()]) - Segundo a descrição do PR, o cold start havia aumentado para cerca de 4 segundos e, após a paralelização, caiu para cerca de 2,4 segundos
- Como todos os testes existentes passam, à primeira vista parece uma melhoria de desempenho fácil de aprovar
Decisão de projeto revelada pelo histórico de conversas
- O Haystack lê o histórico por trás do PR e descobre que a alteração reverte uma decisão de projeto anterior
@mayahavia exigido quetenancyInitterminasse primeiro para evitar quecacheWarmuplesse uma configuração vazia- A suíte de testes não tinha nenhum item que verificasse essa ordem de execução, então a regressão passou nos testes
- O Haystack review anexa as seguintes informações ao PR
- A decisão registrada no histórico de conversas
- O comportamento que o PR atual realmente altera
- O motivo pelo qual os testes passaram
Validação em execução e resultados de falha
- O Haystack não para na leitura do código: ele executa a alteração diretamente
- Quando o histórico de conversas aponta para uma condição de corrida de timing ausente nos testes, ele inicializa o serviço 50 vezes em um sandbox
- Em 31 das 50 execuções,
cacheWarmupleu uma configuração vazia antes da conclusão detenancyInit - Como resultado, o serviço lançou uma exceção na primeira requisição e travou
- O Haystack QA mostra no PR o motivo da execução, os testes realizados e o ponto quebrado
Onde a revisão humana é necessária
- O Haystack não mescla automaticamente esse PR e recomenda envolver
@maya, que definiu a ordem original de execução - O PR exibe a decisão de projeto quebrada junto com os resultados de inicialização com falha
- A tela de revisão oferece opções como “Request review”, “Chat with @maya” e “Doesn’t need review”
- O fluxo do Haystack se concentra em mesclar automaticamente a maioria dos PRs e encaminhar apenas alterações arriscadas, como a do exemplo, para a pessoa adequada
1 comentários
Comentários do Hacker News
Não sei bem sobre os recursos de IA, mas a ideia de trabalhar com código em um canvas e usar junto uma UI de fluxograma é algo que eu queria havia muito tempo
Trabalho principalmente com processamento de dados e desenho muitos fluxogramas para explicar pipelines ou para eu mesmo entendê-los
Uma UI de desenvolvimento nessa linha parece útil para lidar com codebases difíceis de manejar feitas por pessoas sem formação em CS
https://www.ni.com/en/shop/labview.html
Acho que isso tornaria a documentação visual muito mais fácil
Muito legal. Quando se vai para um método ou declaração, gostei do fato de mostrar só os trechos de código relevantes, em vez de abrir a aba auxiliar com o arquivo inteiro rolado até a definição
Eu frequentemente perco o método que estava lendo porque preciso comparar onde o método é chamado com a definição, e isso é bem frustrante
É bom poder “fixar” um método ao lado e examiná-lo sem acabar rolando o arquivo inteiro por engano nessa visão fixada
Depois de testar um pouco, infelizmente achei a experiência muito centrada no mouse e, ao seguir métodos dentro de outros métodos, acabei com janelas flutuantes demais para gerenciar
Se houvesse setas ou linhas para rastrear qual janela é a janela “pai”, ficaria mais fácil montar uma espécie de fluxograma
Tenho minhas ressalvas pessoais, mas é bom ver uma forma diferente de pensar nessa área, e espero que tenha sucesso
Acho útil ter ao menos alguma noção de onde as coisas ficam no código
Será que não dá para passar anos em um projeto trabalhando só com pequenos fragmentos e acabar sem saber o que os arquivos realmente fazem?
Há o código-fonte original, misturado com comentários e texto, e há um código bem diagramado, com texto formatado e hyperlinks para navegação
http://literateprogramming.com/
Fico curioso sobre o que você imagina como ponto de referência para a “janela pai”
Você quer poder designar uma janela específica como âncora, ou prefere que alguma heurística encontre essa âncora?
Parabéns pelo lançamento. Hoje em dia estou indo totalmente na direção oposta, porque isso me ajuda a reduzir a sensação de sobrecarga de ficar pulando de um lado para outro por causa de foco e tendências de ADHD
Uma janela, minimizar tudo e, mais importante, eliminar a navegação em árvore
Se preciso ir até um arquivo, uso o menu de itens recentes do Intellij ou salto com marcadores de arquivo
Isso significa que preciso lembrar dos marcadores de arquivo e ter a intenção de ir até lá. Uso o plugin IdeaVim pelos atalhos do vim
Para mim, esse jeito torna programar muito mais focado e prazeroso
Faz parte da mudança de ter saído de múltiplas telas para widescreen e depois voltado para uma única tela
Em codebases grandes e maduras como as que você mencionou, uso LLMs como guia
Na minha experiência, LLMs cometem bastante erros e suposições mesmo olhando apenas um único arquivo
Pela minha experiência, quando pergunto a um LLM onde está o fluxo de uma funcionalidade, ele costuma apontar bem o ponto de entrada, mas os detalhes eu frequentemente preciso descobrir por conta própria, e às vezes ele aponta para algo relacionado, mas diferente do que eu estava procurando
Interessante. Tenho algumas observações
O Obsidian tem um recurso parecido chamado “Canvas”, então pode valer a pena olhar esse fluxo de trabalho como referência
Para mim, como ferramenta independente, não tem utilidade; eu preciso disso como plugin do Idea
A parte que eu mais odeio é montar o layout. Seria ótimo se houvesse uma IA que recebesse um patch do Git ou uma correção de bug e montasse um layout correspondente
Compartilhar layouts deveria ser algo muito fácil
Seria bom integrar o histórico do Git como outra dimensão. Seria ótimo ter diff e marcações de blame dentro do editor
Existe dado que pode ser usado no treinamento da IA, ou seja, commits do Git
Também seria bom integrar debugging como outra dimensão, além de dados de profiler
Nesse caso, você obtém o que é oferecido ali
Se você usa ferramentas da linha Idea, por enquanto não parece haver um jeito
Faz tempo que eu queria experimentar algo assim. Existe alguma forma de receber atualizações?
Especialmente no início, eu estava esperando por uma opção para desativar os recursos de IA
Gostei especialmente da função de ampliar para dentro de uma função e ocultar o restante do arquivo. Já me peguei querendo isso um número surpreendente de vezes
Também parece que daria para usar isso como uma forma de reorganizar virtualmente um único arquivo, puxando facilmente para o lado as funções em que você está trabalhando naquele momento
Além da interface de edição, acho que há muitas oportunidades de visualização dentro do editor
A interação entre meu código e dependências de terceiros, o grafo de dependências/chamadas do meu código ou partes dele, o grafo de dependências em nível de classe ou módulo, e grafos de chamadas aninhados com drill-down até chamadas internas de objetos seriam possíveis
Em todos esses casos, o grande diferencial parece ser conseguir transitar sem atrito entre visualização e edição, que é o que essa ferramenta parece buscar
Só de colocar gráficos no editor já abre espaço para visualizações ainda mais interessantes, como mapas de calor da frequência de mudanças no código, mapas de calor de desempenho do código, rastreamento de uso de variáveis etc.
https://adamtornhill.com/articles/crimescene/codeascrimescen...
Por fim, se você ainda não leu The Programmer's Brain, vale ao menos ouvir este podcast
https://se-radio.net/2021/06/episode-462-felienne-on-the-pro...
Há muitas ideias de edição relacionadas à forma como nosso cérebro funciona, e ainda não vi isso ser bem apoiado nos editores
Como vocês já deram um passo nessa direção, talvez existam ainda mais oportunidades
Vou pensar na melhor maneira de fazer isso e, no fim, vamos enviar atualizações diretamente dentro do produto
Estou adicionando agora mesmo o opt-out do copilot
As ideias aqui são boas, e eu gostaria de discutir algumas delas com você. Se não houver problema, vou mandar um email/DM
No geral, quero conversar com mais pessoas, e vocês podem enviar feedback para feedback@haystackeditor.com
Gosto muito do jeito de navegar de função para função, de arquivo para arquivo, e depois voltar
Para ficar ainda mais útil, seria bom ter uma janela de histórico de navegação, como o histórico de visitas de um navegador
Seria ótimo ver uma lista dos deslocamentos entre arquivos e funções, e poder ir para frente e para trás ou saltar direto para qualquer ponto do histórico sem ter que revirar as janelas abertas
O histórico de navegação de que estou falando é completamente separado do histórico de edição
Desfazer/refazer edições não deve mover o histórico de navegação para frente ou para trás, e o contrário também vale
Claro, pode haver atalhos de teclado para percorrer o histórico de navegação
Muito legal. Tem relação com Code Bubbles: https://dl.acm.org/doi/abs/10.1145/1753326.1753706
“Não salvamos nem registramos seu código. Enviamos trechos de código para a Open AI como entrada do copilot de navegação. Em breve adicionaremos uma opção para desativar isso.”
Quando essa opção existir, quero testar
Basta abrir a paleta de comandos (CMD+SHIFT+P) e usar o comando “Opt out of navigational copilot”
Windows/Linux também serão suportados em breve
Também vale observar que os dados só são enviados para a Open AI quando há um diagnóstico indicando que uma função inexistente está sendo chamada
Publiquei um artigo comparando o tempo de navegação entre um editor baseado em canvas (Code Bubbles), um editor tradicional baseado em abas (Eclipse) e um editor baseado em carrossel que eu projetei (Patchworks)
O resultado foi que o canvas tem liberdade demais
https://austinhenley.com/pubs/Henley2014CHI_Patchworks.pdf
Olhando para trás, percebo que nem no VS Code eu uso mais abas. Porque mantenho arquivos demais abertos
Acabo vendo só um arquivo por vez e, quando preciso trocar, procuro com Cmd-P ou navego entre arquivos recentes
Funciona bem, mas exige que eu mantenha sempre os nomes de arquivos/diretórios na cabeça
Encontrar métodos provavelmente teria sido muito menos problemático com uma visualização de estrutura em ordem alfabética
Se tudo bem, gostaria de conversar e vou mandar um email
Mantenho de 4 a 6 painéis de código espalhados por vários workspaces e alterno entre eles com SPC TAB número
Na prática, também é necessário ter uma tela widescreen razoável para usar a ferramenta direito
O principal é se acostumar a lidar com arquivos na horizontal, e não na vertical
Essa forma vertical de pensar está bem enraizada na maneira como escrevíamos nosso primeiro Hello World
Parabéns pelo lançamento. Parece uma ferramenta excelente e bem implementada, e estou animado para experimentar.
Isso me lembra um recurso que eu queria havia muito tempo e até tentei criar manualmente algumas vezes, mas nunca consegui transformar em algo compartilhável: desenrolar um caminho de código em um único script ou arquivo-fonte.
Seria ótimo poder definir algo como um breakpoint e apertar um botão “unravel” para gerar um único arquivo mostrando tudo o que acontece até aquele ponto.
Idealmente, seria ainda melhor se esse arquivo pudesse ser executado como um script único.
Essencialmente, é a mesma visão que um depurador passo a passo oferece, mas em vez de ficar referenciando vários arquivos e várias camadas, eu gostaria de ver tudo em um único arquivo, do começo ao fim.
Acho que, quando as pessoas se concentram em detalhes específicos de implementação em vez de requisitos, parâmetros e resultados, muita coisa se perde na comunicação.
Fico curioso para saber por que você quer essa implementação e que função ou objetivo ela precisa cumprir.