Skip to content

Releases: Dspofu/Pofu-Code-Studio

v1.5.2

Choose a tag to compare

@github-actions github-actions released this 26 Sep 08:10

v1.5.2 - Update

Suporte a MCP, um agente bem mais rápido em projetos grandes e a correção do ícone em branco na barra de tarefas.

Novidades

  • Servidores MCP: conecte ferramentas de qualquer servidor MCP em Ajustes → Ferramentas, colando o mesmo JSON usado no Claude Desktop, Cursor e Cline. Funciona com servidores locais e remotos, mostra o estado e quanto cada servidor custa em tokens por mensagem, e pede confirmação no modo manual.
  • Estrutura do código (list_definitions): o agente vê funções, classes e métodos de um arquivo ou pasta, com a linha de cada um, sem precisar ler tudo.
  • Arquivo grande não é mais despejado inteiro: ao abrir um arquivo de código grande sem pedir um trecho, o agente recebe a estrutura e lê só a parte que precisa.
  • Acerto de cache na tela: com llama.cpp, abaixo de cada resposta aparece quanto do contexto foi reaproveitado e a velocidade de leitura.

Desempenho

  • Achar uma função num arquivo de 230 mil caracteres caiu de 182 s para 12 s, com 89% menos tokens.
  • Trava contra o agente preso repetindo a mesma chamada com o mesmo resultado.
  • Quando o servidor recusa por excesso de contexto, o app compacta mais e tenta de novo, em vez de encerrar a resposta.
  • Estimativa de tokens calibrada pelo que o servidor informa, e reserva de contexto mais precisa: um limite de resposta muito alto não espreme mais o histórico.

Correções

  • Agente usando o terminal para ler arquivos grandes: a v1.5.1 removeu instruções que pareciam repetidas, e o modelo voltou a usar ls, wc e grep. As instruções voltaram.
  • Ícone branco na barra de tarefas do Windows: depois de mover a pasta do app, o atalho continuava apontando o ícone para a pasta antiga, e reinstalar não resolvia. O app agora repara o atalho sozinho ao abrir.

Validação

63 testes unitários e 51 de integração, mais testes com um modelo real (Qwen 27B local): leitura de arquivos de 5 MiB e 20 MiB, edição em lote, ferramenta MCP e busca em arquivo grande, todos sem uso do terminal.

Full Changelog: v1.5.1...v1.5.2

v1.5.1

Choose a tag to compare

@github-actions github-actions released this 18 Sep 03:52

v1.5.1 - Update

Um agente que gasta menos tokens, erra menos ao editar arquivos e não se perde mais em conversas reeditadas.

Novidades

  • Várias edições de uma vez: o agente altera vários trechos de um arquivo numa única chamada. Se uma das trocas falhar, nenhuma é aplicada.
  • Edição tolerante a espaços: diferenças só de indentação ou de espaço em branco não travam mais a edição, e o texto novo segue a indentação do arquivo. Trechos apenas parecidos nunca são alterados.
  • Suas alterações protegidas: se o arquivo mudou depois que o agente o leu (você editou, um formatador rodou), ele relê antes de sobrescrever.
  • Caminho sugerido: quando um arquivo não é encontrado, o agente recebe o caminho provável em vez de sair procurando.
  • Busca mais enxuta: a busca pode devolver só os arquivos que contêm o termo, ou só a contagem.
  • Comandos com aspas e scripts: os argumentos vão direto para o programa, sem interpretação do shell e sem arquivos temporários.

Menos tokens por requisição

  • Definições das ferramentas e instruções do agente 19% menores, em toda requisição.
  • Resultados de busca 51% a 61% menores; só a lista de arquivos, 99%.
  • Reler um arquivo que não mudou não reenvia o conteúdo (97% a menos).
  • Saída do terminal sem cores, barras de progresso e linhas repetidas.

Correções

  • Agente lendo arquivos pelo terminal: depois de editar ou regenerar uma mensagem antiga, todo resultado de ferramenta chegava ao modelo como "compactado", e ele passava a ler arquivos pelo terminal. Conversas afetadas se corrigem sozinhas ao atualizar.
  • Ícone em branco no atalho do Windows: a descrição do app era longa demais para o atalho e corrompia o caminho do ícone. Instalar esta versão recria o atalho corretamente.

Validação

50 testes unitários e 46 de integração, cobrindo edição em lote, arquivo alterado em disco, releitura sem mudanças, os novos formatos de busca e listagem, a compactação após editar mensagens e o ícone do atalho.

Full Changelog: v1.5.0...v1.5.1

v1.5.0

Choose a tag to compare

@Dspofu Dspofu released this 08 Sep 06:06
894acfc

v1.5.0 - Update

Mais controle sobre sua IA, ferramentas aprimoradas e uma interface renovada com a identidade Pofu.

Novidades

  • Vários provedores: salve diferentes conexões e alterne entre elas, mantendo modelo e nível de raciocínio por provedor.
  • Novo seletor de thinking: barra horizontal com três efeitos visuais, navegação por teclado e suporte a Muito alto (xhigh), separado de Máximo (max).
  • Comandos /: acesse ações do Studio diretamente pelo compositor.
  • Menções @arquivo em azul: identifique visualmente os arquivos mencionados na mensagem.
  • Avisos de atualização: ao iniciar, o app notifica apenas quando existe uma versão estável mais recente. As dicas aleatórias foram removidas.

Melhorias nas ferramentas

  • Leitura de arquivos grandes com menos chamadas e continuação sem perda de conteúdo.
  • Recuperação de resultados extensos sem repetir a operação original.
  • Busca direta em trechos distantes, inclusive em arquivos com uma única linha.
  • Melhor tratamento de níveis de raciocínio recusados pelo servidor.

Validação

Testes com arquivos de 12 mil linhas, 5 MiB e 20 MiB, verificando a integridade do conteúdo. Também foram validados provedores, comandos, ferramentas, notificações e acessibilidade das animações.

What's Changed

  • feat: aprimora o Studio, provedores, ferramentas e avisos de atualização by @Dspofu in #9

Full Changelog: v1.4.2...v1.5.0

v1.4.2

Choose a tag to compare

@Dspofu Dspofu released this 05 Sep 03:25

Leitura que não empurra o agente para o terminal

O agente largava a ferramenta de leitura e passava a ler arquivo por comando de
shell. Não era manha do modelo — a própria ferramenta mandava.

Quando uma linha era longa demais para caber na janela de leitura (bundle
minificado, JSON numa linha só), o read_file avisava que o resto tinha sido
cortado e sugeria buscar o que faltou com cut/sed no terminal, porque não
havia como pedir aquele pedaço à ferramenta. Medido com modelo real num arquivo
de uma linha de 90 mil caracteres: duas leituras e ele migrou para
execute_command, errando o comando no caminho e gastando um turno com a exceção.

O que mudou

  • read_file pagina dentro da linha, com char_offset, e o resultado entrega
    o número exato para continuar. Não há mais trecho de arquivo fora do alcance da
    ferramenta.
  • search_files devolve a coluna do casamento — que é o char_offset para
    pular direto ao trecho — e o recorte mostrado passou a ser centrado no que você
    procurou. Antes era cortado a partir do começo da linha, então numa linha longa
    o "resultado" podia não conter nem o termo buscado.
  • Caminho absoluto funciona. O agente recebe o caminho do projeto no prompt e
    costuma repeti-lo; antes isso virava um caminho duplicado e a leitura respondia
    "arquivo não encontrado".
  • Acabou o bloqueio falso na escrita. Ler ./arquivo.ts e depois escrever
    arquivo.ts eram tratados como arquivos diferentes, e a trava acusava "arquivo
    não lido" logo depois da leitura.
  • Resultados grandes encolhem descartando itens inteiros, em vez de cortar o
    texto no meio. O corte antigo partia o JSON dentro de um objeto: com 60 achados
    de busca, 44 se perdiam e o que sobrava nem era analisável.
  • list_files ganhou teto. Era o único resultado de ferramenta sem limite:
    294 entradas de um node_modules custavam ~3,5 mil tokens numa chamada só.

Custo

Mesma tarefa, mesmo modelo, contexto de 8k:

Antes Depois
Requisições 7 3
Tokens 39.264 10.696
Leituras pelo terminal 2 0

Leitura de arquivo comum não mudou — mesma janela, mesmo custo. O ganho está nos
casos que antes viravam vaivém.

Sem mudança de configuração: quem atualiza não precisa mexer em nada.

Full Changelog: v1.4.1...v1.4.2

v1.4.1

Choose a tag to compare

@Dspofu Dspofu released this 31 Aug 06:40
86f9c04

v1.4.1 - Fix

Alterações

  • Visão em anexo do usuário — imagem colada (Ctrl+V) ou arrastada agora chega ao modelo:
    o anexo segue o mesmo caminho do print do capture_page (bytes em userData, data URL no
    shotCache) e vira bloco image_url quando o modelo é multimodal.
    • Medido com proxy registrando o payload, mesma pergunta sobre a mesma imagem:
      antes → 32 requisições (sem os pixels, o modelo instalou Pillow, escreveu scripts de
      recorte/cor e improvisou um OCR); depois → 1 requisição (olhou a imagem).
    • A imagem continua visível após fechar e reabrir o app (hydrateShots relê do disco).
    • Quando o modelo não é multimodal — ou "Enviar prints para o modelo" está desligado —
      o chip avisa e o texto do anexo informa ao modelo que ele não recebe imagens,
      em vez de deixá-lo procurando um jeito.
  • Colar imagem (Ctrl+V) vira anexo — handler paste no compositor, mesmo fluxo do
    drag-and-drop e do botão 📎; colar texto segue o comportamento padrão.
  • Miniatura da imagem anexada — makeThumb() reduz a 140px via canvas e mostra a
    thumbnail no chip de input (34px) e na bolha da mensagem (46px).
  • Nível de raciocínio recusado é adaptado automaticamente — se o servidor rejeita
    max e lista os aceitos ("Supported types are xhigh, medium, low"), o app reenvia com o
    mais próximo na escala low < medium < high < xhigh < max e o menu passa a refletir os
    níveis aceitos.
  • Versão 1.4.0 → 1.4.1 em package.json, package-lock.json e README.md.
  • Removido TASKS.md — todas as pendências listadas nele foram concluídas.

What's Changed

Full Changelog: v1.4.0...v1.4.1

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 18:42
0f64759

V1.4.0 - Feat & Rename

O app agora se chama Pofu Code Studio

Antes era Pofuserver Coder Studio. O nome mudou em toda a interface, nos instaladores, nos metadados e nas URLs do repositório (que agora é Dspofu/Pofu-Code-Studio). O package-lock.json entrou no controle de versão junto, para o build de quem clona ser reproduzível.

O agente pergunta quando trava de verdade

Quando o pedido tem duas leituras que levam a trabalhos diferentes, o agente para e pergunta em vez de escolher no escuro e refazer depois. A ferramenta é ask_user: o card mostra as opções que o modelo propôs (dá para marcar uma, ou várias quando ele pede), você escreve uma resposta própria no campo de texto, ou Pula.

Pular é uma resposta válida: o agente segue com o que já sabe e declara qual suposição adotou, em vez de ficar preso. O turno fica parado até você responder, e o Parar fecha o card junto com o resto.

As instruções pedem que ela seja usada com parcimônia — só quando a resposta muda o trabalho, nunca para o que dá para descobrir lendo o projeto, e sempre depois de já ter feito tudo que não dependia da resposta.

Skills e instruções suas

Em Ajustes → Instruções do agente há um campo de system prompt: o que você escrever entra no prompt a cada mensagem. Por padrão é somado às instruções de fábrica; o interruptor Substituir o prompt padrão descarta as de fábrica e deixa só o seu — inclusive as regras de ler antes de sobrescrever e de validar antes de dizer que terminou, então é escolha para quem vai reescrever esse comportamento.

Logo abaixo ficam as skills: arquivos de instrução (o SKILL.md do Claude Code e parecidos) que você importa e liga por chave. O name e o description saem do frontmatter YAML quando existe; sem ele, o app usa o título # e a primeira linha de texto. Reimportar o mesmo arquivo atualiza a skill em vez de duplicar, que é o fluxo de quem está escrevendo uma.

Cada linha mostra o custo em tokens por mensagem, porque é isso que uma skill ativa é: conteúdo somado ao prompt em toda requisição — não um anexo que se lê uma vez. Skill desligada não entra no prompt.

O nível de raciocínio sai do servidor, não de um palpite

Ao escolher o modelo, o app pergunta ao endpoint o que ele aceita — as capabilities do /v1/models, o chat_template do /props (llama.cpp) e o /api/show (Ollama) — e só mostra os níveis confirmados; o rodapé do menu diz de onde veio a informação.

  • Modelo com raciocínio → os níveis que o servidor anuncia
  • Modelo sem modo de pensar → só Padrão
  • Endpoint que não responde nada disso (vLLM, OpenAI, gateways) → todos os níveis, porque silêncio não é prova de que não suporta

Um nível salvo que o servidor novo não aceita volta para Padrão sozinho, em vez de derrubar a primeira mensagem com um HTTP 400.

O agente fala a sua língua

As instruções de fábrica, as descrições das ferramentas e as mensagens de erro que voltam das tool calls passaram a ser escritas em inglês — é a língua em que os modelos foram treinados a seguir instrução e a chamar ferramenta. A interface continua em português, e o agente responde na língua em que você escrever, em vez de ficar preso ao pt-BR.

Edições de arquivo mais seguras

Três correções no edit_file, o jeito padrão de mexer num arquivo existente:

  • CRLF: a busca é refeita na quebra de linha do arquivo quando o trecho veio sem o \r — antes, num arquivo Windows a edição exata nunca casava e o modelo ficava num vaivém de reler.
  • $$ e afins: a substituição usa split/join em vez de replace, que expandia $&, $$, $1 dentro do texto — um new_text com $$var (PHP, sed, LaTeX) era gravado corrompido e ainda voltava sucesso.
  • Arquivo travado: erro de escrita (somente-leitura, aberto em outro programa) volta com uma dica, em vez da exceção crua.

Instalação — baixe o instalador da sua plataforma abaixo:

Sistema Arquivo
Windows .exe (NSIS)
Debian / Ubuntu .deb
Fedora .rpm

Full Changelog: v1.3.1...v1.4.0

v1.3.1

Choose a tag to compare

@Dspofu Dspofu released this 27 Aug 13:56

V1.3.1 - Fix & Feat

Fale com o agente no meio da resposta

O campo de texto não trava mais enquanto o agente trabalha. O que você escrever entra numa fila, aparece como chip acima do compositor e é entregue ao modelo na próxima virada de turno — assim que a ferramenta em execução terminar, sem abortar nada e sem perder o que já foi feito.

Serve para corrigir o rumo no meio do caminho ("na verdade mexe na outra pasta") em vez de esperar o fim ou parar tudo e recomeçar.

  • Campo vazio, o botão volta a ser parar; com algo escrito, ele manda para a fila
  • Um chip pode ser retirado da fila enquanto não foi entregue
  • Mensagem sua reinicia a trava de iterações — o limite existe para barrar o agente em looping sozinho, não a conversa que você está conduzindo

A mensagem não é injetada na hora de propósito: ela cairia no meio de um par tool_call/tool e o servidor recusaria a requisição inteira por causa da chamada órfã.

O agente escrevendo um arquivo deixa de parecer travado

Escrever um arquivo grande é a parte mais demorada de um turno, e era exatamente quando nada chegava à tela: o texto da resposta já tinha acabado, o resultado da ferramenta ainda não existia. Dezenas de segundos parados, indistinguíveis de um travamento.

Agora o card aparece assim que o modelo começa a ditar a chamada e mostra o andamento ao vivo:

  • arquivo de destino
  • linhas e bytes já recebidos
  • as últimas linhas do que está sendo escrito
  • título da janela acompanhando ("escrever arquivo: src/x.ts")

O mesmo card vira o card definitivo quando a chamada fecha, sem piscar.

Ícone certo na barra de tarefas e nas notificações (Windows)

O app instalado mostrava o ícone do Electron na barra de tarefas e nas notificações, mas o ícone certo na janela. Não era defeito do .ico: no Windows a janela lê o ícone embutido no .exe, enquanto a barra de tarefas e os toasts resolvem por AppUserModelID → atalho do Menu Iniciar.

Como o app usava o mesmo AUMID em desenvolvimento, e o toast do Windows exige um atalho carregando esse ID, o Electron criava um atalho apontando para o electron.exe do node_modules. Ele vencia a resolução contra o atalho do instalador (por ser mais antigo) e levava o ícone junto. Em desenvolvimento o AUMID agora é outro, e as duas coisas param de se atropelar.

Junto: o caminho do ícone da janela estava quebrado desde a mudança do build para out/ (opção ignorada em silêncio), e a notificação de abertura passou a levar o ícone próprio em vez de depender do atalho.

Se a barra de tarefas ainda insistir no ícone antigo depois de atualizar, é só o cache de ícones do Windows — reiniciar o explorer resolve. Validado e testado, a versão anterior tambem precisou de um restart para ficar o icone certo


Instalação — baixe o instalador da sua plataforma abaixo:

Sistema Arquivo
Windows .exe (NSIS)
Debian / Ubuntu .deb
Fedora .rpm

Full Changelog: v1.3.0...v1.3.1

v1.3.0

Choose a tag to compare

@Dspofu Dspofu released this 26 Aug 16:39
415304c

v1.3.0

A versão mais completa até agora: o app agora checa sua própria atualização (aba Visão geral → "Verificar"), o build foi reorganizado, as ferramentas do agente ficaram mais confiáveis e o instalador para Fedora chegou.

✨ Novidades

Verificação de atualização no app
Um novo card "Atualização" na aba Visão geral consulta o último release publicado neste repositório e avisa se há versão mais nova, com link direto para a página do release. A checagem é manual (botão "Verificar") de propósito — para não consumir o rate limit da API anônima do GitHub toda vez que você abre o app.

"Informação do produto" expandida
A aba Visão geral agora mostra Autor, Licença, Repositório (clicável) e o card de atualização, além da versão e do nome.

Raciocínio: novo nível "Máximo"
O menu de raciocínio ganhou o nível max (o mais alto aceito pela API do OpenAI), e as dicas agora mostram exatamente o que cada nível envia ao servidor (reasoning_effort: low/medium/high/max).

🔧 Ferramentas do agente

  • execute_command: comando rápido e silencioso (ex.: git status num disco lento) agora devolve o resultado direto — antes era promovido a "servidor ocioso" à toa e exigia uma leitura extra. O detector de servidor só considera um processo ocioso após ele já ter impresso algo.
  • search_files: agora informa o total de ocorrências (totalFound) mesmo quando a lista de resultados é limitada — dá para saber se a busca precisa ser refinada.
  • read_file: a descrição do limit deixa claro que a janela é limitada por um orçamento de caracteres derivado do contexto do modelo.

🐧 Fedora

Novo instalador .rpm para Fedora, gerado automaticamente pelo CI junto com o .deb e o .exe. As dependências declaradas são as do Fedora (gtk3, libnotify, nss, libXtst, libXScrnSaver, at-spi2-core, libuuid, xdg-utils) — sem o at-spi2-core e o libuuid o app não abre em instalações enxutas do Fedora.

Instalar:

dnf install pofuserver-coder-studio-1.3.0-1.x86_64.rpm

📦 Instaladores

  • Windows: .exe (instalador NSIS)
  • Ubuntu/Debian: .deb
  • Fedora: .rpm

🏗️ Por baixo dos panos

  • Build reorganizado: fonte em src/, saída em out/ (o .js gerado não polui mais a pasta de código-fonte).
  • Notificação de dica de vibe coding agora aparece em todas as plataformas (antes só no macOS).
  • O "pingo" da sidebar exibe a versão no tooltip, e a lixeira dos recentes finalmente funciona.

What's Changed

  • feat: build separado (out/), ferramentas do agente, UI expandida e release para Fedora by @Dspofu in #6

Full Changelog: v1.2.0...v1.3.0

v1.2.0

Choose a tag to compare

@Dspofu Dspofu released this 21 Aug 00:16

v1.2.0 — Raciocínio longo sem travar, e mais controle

Corrigido

Pico de memória durante raciocínio longo. O bloco de raciocínio era reescrito
por inteiro a cada token que chegava. Como innerText recria os nós de texto e o
scroll logo em seguida força um reflow síncrono, o custo crescia com o quadrado do
tamanho do texto — num raciocínio realmente longo o app inchava e a interface
parava de responder até o fim da geração.

Agora só o trecho novo é anexado, uma vez por quadro, e o bloco exibido tem um teto
de 200 mil caracteres. De quebra, o título da janela deixou de ser reenviado ao
processo principal a cada token.

Medido com o app real, mesmo fluxo de 15 mil tokens: antes a interface congelava e
não voltava; agora termina normalmente com cerca de 5 MB de variação de memória.

Novo

Nível de raciocínio ajustável (Configurações → Ajustes). Dá para pedir que o
modelo pense mais, menos ou nada:

Nível O que é enviado ao servidor
Padrão do modelo nada — funciona em qualquer servidor
Desligado enable_thinking: false + /no_think no prompt
Baixo / Médio / Alto reasoning_effort: low | medium | high

O padrão não acrescenta campo nenhum à requisição de propósito: reasoning_effort
é extensão recente e servidor antigo recusa o que não conhece. Se um nível der erro
de requisição, volte para o padrão. Quem já usava a opção "desativar raciocínio" é
migrado automaticamente para Desligado.

Troca rápida da pasta segura. O botão de pasta no cabeçalho agora abre um menu
com a pasta atual, as usadas recentemente e a opção de escolher outra. Alternar
entre projetos virou um clique, sem passar pelo diálogo do sistema toda vez. Quem
já tem chats abertos encontra as pastas deles já listadas.

Atualizando

Basta instalar por cima. Suas conversas, configurações e histórico são preservados.

Full Changelog: v1.1.0...v1.2.0

v1.1.0

Choose a tag to compare

@Dspofu Dspofu released this 01 Aug 19:34
fea9bfc

What's Changed

  • fix: leitura paginada de arquivos grandes (read_file em janelas de linhas) by @Dspofu in #1
  • Claude/compact button readme release 80ls86 by @Dspofu in #2

New Contributors

  • @Dspofu made their first contribution in #1

Full Changelog: v1.0.0...v1.1.0