Qwen Code Semanal: Custo de Tokens em um Olhar, Entrada por Voz, Workflows Salvos e Reutilizáveis
O Qwen Code lançou cinco versões esta semana — de v0.18.4 a v0.19.2 (atualização major para v0.19.0) — com mais de 140 PRs mesclados em três direções:
Entrada por voz — apenas fale, sem digitar. Todas as entradas precisavam ser digitadas — comandos longos, parâmetros complexos, mistura de chinês-inglês. Lento e propenso a erros de digitação. Esta semana /voice permite que você fale no microfone; ao terminar, o modelo rápido limpa automaticamente palavras de preenchimento e erros de digitação para exibir uma transcrição limpa.
Workflows agora são salváveis e reutilizáveis. Anteriormente, um workflow desaparecia após a execução. Na próxima vez, era necessário reescrever o prompt do zero, sem possibilidade de retomar uma execução interrompida na mesma sessão. Esta semana Dynamic Workflows preenche essa lacuna: após uma execução, pressione s para salvar o script como comando slash — na próxima vez basta digitar /<nome> para invocá-lo. Você também pode retomar uma execução anteriormente interrompida na mesma sessão.
Interface simplificada em toda parte. As caixas de chamada de ferramentas do terminal empilhavam-se em uma parede de bordas arredondadas, blocos thinking não tinham tecla dedicada para expandir, e gerenciamento de extensões/servidores MCP exigia edição manual de arquivos de configuração. Esta semana: bordas removidas, ferramentas concluídas recolhidas em uma linha, Alt+T gerencia especificamente thinking, /extensions torna-se um gerenciador interativo, e Recursos MCP podem ser navegados e completados via @.
Entrada por Voz: Apenas Fale no Microfone
Todas as entradas precisavam ser digitadas. Comandos longos, parâmetros complexos, mistura de chinês-inglês — lento e fácil de errar na digitação.
Esta semana adiciona /voice para entrada por voz. Dois modos: modo hold — mantenha Espaço pressionado para falar, solte para parar; modo tap — clique uma vez para iniciar, clique novamente ou silêncio para e envia automaticamente. O áudio é capturado via backend nativo de microfone (@qwen-code/audio-capture addon N-API). No Linux faz fallback automático para arecord/SoX; no macOS solicita permissão do microfone.
Transcrição tem dois caminhos: modo batch (qwen3-asr-flash) usa API chat/completions compatível com OpenAI + input_audio; modo tempo real (qwen3-asr-flash-realtime, fun-asr-realtime) transmite PCM via WebSocket com exibição parcial ao vivo. Ao terminar, o modelo rápido limpa palavras de preenchimento (“um”, “嗯”) e erros de digitação preservando sua formulação original — sem reescrita. Em caso de timeout ou falha, a transcrição bruta é usada diretamente. Entrada por voz sempre produz texto.
/model --voice seleciona o modelo de transcrição; general.voice.{enabled,mode,language} configura o comportamento.
O que você pode fazer com isso:
/voice hold— mantenha Espaço pressionado para falar, solte para parar a transcrição/voice tap— clique uma vez para iniciar, fale uma frase ou silêncio para parar/model --voice qwen3-asr-flash-realtime— escolha um modelo de transcrição em streaming tempo real/voice status— verifique a configuração de voz atual- Web Shell: clique no botão microfone para entrada por voz (gravação navegador, transcrição lado daemon)
Dynamic Workflows: Salve Após Executar, Invoque Diretamente na Próxima Vez
Um workflow costumava desaparecer assim que terminava. Quer executar a mesma tarefa novamente? Reescreva o prompt do zero. Interrompido no meio da sessão? Sem maneira de retomar de onde parou.
Esta semana Dynamic Workflows preenche essa lacuna. Após um workflow terminar, pressione s para salvar o script em .qwen/workflows/<nome>.js. Uma vez salvo, torna-se um comando slash — na próxima vez basta digitar /<nome> para executá-lo sem reescrever o prompt. Você pode escolher nível projeto (disponível apenas no projeto atual) ou nível usuário (disponível em todos os projetos) ao salvar. Scripts existentes com o mesmo nome solicitarão confirmação de sobrescrita.
Na mesma sessão, você também pode retomar um workflow executado anteriormente: resumeFromRunId reproduz a partir dos logs JSONL, retoma no prefixo inalterado mais longo do cache, depois continua no primeiro ponto de divergência. Cada execução terminal concluída salva automaticamente em <projectDir>/workflows/<runId>.json; o painel /workflows mostra histórico (persiste após reinicializações; entradas mais antigas são limpas automaticamente).
Capacidades adicionais: watchdog agent stall (timeouts de sub-agent tentam automaticamente 3 vezes), chamadas aninhadas (workflow('<nome>') dentro de outro workflow), redirecionamento suave da palavra-chave “workflow” para a ferramenta workflow (desativável com ui.disableWorkflowKeywordTrigger), e notificação sonora terminal na conclusão/falha.
O que você pode fazer com isso:
- Após um workflow terminar, pressione
spara salvar como comando slash/<nome> - Painel
/workflowsmostra histórico, persiste após reinicializações - Retome um workflow interrompido na mesma sessão
- Salve em nível projeto ou usuário, escolha escopo de visibilidade conforme necessário
Veja PR #5600
Experiência UI Otimizada em Toda Parte
Esta semana tanto o terminal quanto o Web Shell receberam uma simplificação concentrada — redução de ruído visual, eficiência de interação e capacidades de gerenciamento todas melhoradas de uma vez.
Remoção de bordas TUI + recolhimento de ferramentas concluídas. Cada chamada de ferramenta costumava ser envolvida em bordas arredondadas; chamadas paralelas empilhavam-se em uma parede de caixas. Esta semana bordas foram completamente removidas. No modo compacto, ferramentas concluídas recolhem-se em uma linha (ícone de status + nome da ferramenta + duração); apenas chamadas ativas e com erro permanecem expandidas. Modo não compacto não é afetado.
Thinking Alt+T + visualizador tela cheia. Semana passada Thinking era recolhível mas não tinha tecla dedicada para expandir — você precisava compartilhar Ctrl+O para alternar compactMode. Esta semana Alt+T gerencia especificamente expandir/recolher todos os blocos thinking. Clicar em uma linha thinking recolhida abre um visualizador tela cheia AlternateScreen com navegação teclado (↑↓, PgUp/PgDn) + scroll mouse.
/extensions torna-se um gerenciador interativo. Anteriormente /extensions era uma lista plana somente leitura; instalar ou configurar significava editar configurações manualmente. Esta semana torna-se um gerenciador interativo multi-tab: tab Installed agrupado por nível + menu de ações por extensão (habilitar/desabilitar/favorito/alterar escopo/atualizar/desinstalar); tab Discover pesquisa e instala extensões marketplace com um clique; tab Sources adiciona novos marketplaces (suporta repo GitHub, marketplace Claude, pacote npm, caminho local). CLI também tem grupo de comandos qwen extensions sources add/list/update/remove.
Recursos MCP navegáveis e completáveis via @. Recursos de servidores MCP não tinham mecanismo de descoberta — usuários não sabiam quais dados estavam disponíveis. Esta semana diálogo /mcp adiciona ação View resources, abrindo lista de URIs de recursos com detalhes; digitar @server: completa automaticamente URIs de recursos daquele servidor; digitar @ pesquisa recursos em todos os servidores. Prompts não são mais sobre-filtrados por gating de capacidades excessivamente rigoroso.
O que você pode fazer com isso:
- No modo compacto, ferramentas concluídas recolhem-se em uma linha; Alt+T gerencia thinking
/extensionsabre o gerenciador — pesquisar, instalar, configurar, desinstalar extensões/mcp→ View resources para navegar dados do servidor MCP,@server:para completar recursos- Tab Sources de
/extensionspara adicionar marketplace Claude ou repo GitHub
Veja PR #5003 , #5627 , #4850 , #5398 , #5544 , #5635 , #5733 , #5774

Artifact: O Modelo Te Dá uma Página Web Interativa
Anteriormente quando você pedia ao modelo para desenhar um diagrama de arquitetura ou criar um dashboard interativo, ele só podia outputar texto e tabelas no terminal — você via saída formatada, não gráficos reais clicáveis ou arrastáveis.
Esta semana adiciona a ferramenta Artifact (experimental, opt-in). Quando habilitado, o modelo pode empacotar conteúdo gerado como página web e abri-la diretamente — diagramas de arquitetura onde você clica em nós para expandir detalhes, tabelas de dados ordenáveis e filtráveis, walkthroughs de código com links clicáveis. Como obter um protótipo de um designer que abre no navegador.
Todo conteúdo é escrito em arquivos locais (~/.qwen/artifacts/), aberto via URLs file:// — sem acesso rede. Re-executar o mesmo arquivo sobrescreve a versão antiga; arquivo diferente cria nova página. Conteúdo gerado deve ser totalmente autocontido — sem referências CSS ou JS externas, evitando recursos externos incontroláveis. Limite tamanho página única: 16 MB.
Habilitação via configurações: defina experimental.artifact, ou defina variável ambiente QWEN_CODE_ENABLE_ARTIFACT=1. Não disponível em modos não-interativo e SDK por padrão.
O que você pode fazer com isso:
- Peça ao modelo para gerar um diagrama de arquitetura interativo — clique em nós para detalhes
- Gere um dashboard de dados com ordenação e filtro
- Gere uma página walkthrough de código com navegação clicável
- Habilite
experimental.artifactnas configurações, ou definaQWEN_CODE_ENABLE_ARTIFACT=1
Veja PR #5557
Vision Bridge: Modelos Text-Only Agora Podem Ver Imagens
Anteriormente ao usar um modelo text-only (como DeepSeek V4), imagens referenciadas via @ eram substituídas por indicador “unsupported-image” — o modelo não conseguia ver nenhum conteúdo de imagem.
Esta semana adiciona compatibilidade automática Vision Bridge. Quando um usuário referencia uma imagem via @, o modelo primary é conhecido como text-only, e o mesmo provider tem um modelo capaz de imagens, Qwen Code empresta automaticamente um modelo vision para transcrever conteúdo da imagem em texto, depois envia esse texto ao modelo primary. Nenhuma configuração usuário necessária — dispara automaticamente quando todas condições são atendidas: primary é text-only + mesmo provider tem modelo vision + turno usuário contém partes imagem. Se primary já suporta entrada imagem, imagens são enviadas diretamente sem bridge; se modalities do primary são desconhecidas ou nenhum modelo vision está disponível do mesmo provider, bridge não dispara e comportamento original é preservado.
Bridge apenas empresta modelos dentro do mesmo provider — sem roteamento cross-provider, credenciais não vazam para terceiros.
O que você pode fazer com isso:
- Use modelos text-only como DeepSeek V4 e referencie screenshots via
@— automaticamente transcritos em descrições textuais - Nenhuma configuração necessária; dispara automaticamente quando condições são atendidas
- Empresta modelo vision dentro do mesmo provider, sem roteamento cross-provider
Veja PR #5126
/stats: Custo de Tokens em um Olhar
Anteriormente você só podia adivinhar quantos tokens havia usado ou quanto havia gasto. Executar uma tarefa longa poderia queimar dezenas de milhares de tokens despercebidamente, mas /stats mostrava apenas totais nível sessão — sem detalhamentos por dia, mês ou modelo.
Esta semana /stats adiciona contabilidade persistente de tokens. /stats daily mostra total tokens do dia, contagem requisições, e detalhamento input/output/cached/thought agrupado por modelo e tipo auth; /stats monthly mostra resumo mês inteiro; /stats export daily YYYY-MM-DD --format csv ou /stats export monthly YYYY-MM --format json --output <caminho> exporta arquivo contendo apenas dados agregados — sem texto prompt/resposta ou caminhos projeto. Caminhos exportação restritos ao diretório trabalho projeto; path traversal, symlinks e caminhos Windows alternate-data-stream são rejeitados.
Dados persistem em ~/.qwen/stats/ e sobrevivem reinicializações.
O que você pode fazer com isso:
/stats daily— veja gasto tokens do dia agrupado por modelo/stats monthly— veja resumo consumo mensal/stats export— exporte CSV/JSON com apenas dados agregados, sem conteúdo privado- Dados persistem após reinicialização
Veja PR #4564

Mais Novos Recursos
| Recurso | PR | Impacto |
|---|---|---|
| Subagent revivível + TTL transcript | #5556 | Agents background concluídos podem ser reativados na mesma sessão sem reconstruir contexto; transcripts antigos expiram automaticamente por cleanupPeriodDays |
| Painel lateral preview arquivo Desktop | #5730 | Preview arquivo app Desktop não cobre mais tela inteira; painel docked direita redimensionável, conversa e árvore arquivos coexistem; corrige caminhos CJK e identificação errônea domínio .md |
| Skill desktop-pet | #4808 | Digite /desktop-pet + nome personagem para gerar automaticamente spritesheet pixel pet e ativar |
| Ícone Liquid Glass macOS 26+ | #5284 | brand-create compila automaticamente Assets.car; renderização ícone Liquid Glass macOS 26+ |
| Bloqueio duro comandos destrutivos modo Auto | #5754 | git reset --hard, git clean -fd, terraform destroy etc. têm pré-filtro regex determinístico em modo AUTO, não dependem mais classificadores LLM |
| /history collapse-on-resume | #4085 | Histórico recolhe por padrão ao retomar sessões longas; /history collapse-on-resume salva preferência; /history expand-now expande temporariamente |
| Timestamps resposta [HH:MM:SS] | #5001 | Configuração output.showTimestamps mostra timestamp antes cada resposta assistant; opt-in, desativado padrão |
| Web Shell desde qwen serve | #5392 | qwen serve serve diretamente UI Web Shell, sem configuração extra necessária |
| Canal QQ Bot | #5202 | Novo adaptador canal QQ Bot; Qwen Code pode conectar grupos QQ |
| Motor wake segundo Loop | #5182 | Precisão timing /loop melhorada minutos para segundos; faixa delay [60, 3600]s; wakeup self-paced não conta limite MAX_JOBS |
| Ciclo self-paced Loop | #5197 | /loop <prompt> (sem interval) torna-se ciclo self-paced — modelo decide quando re-verificar, sem cron fixo 10 minutos; intervalos curtos polling rápido, estende automaticamente estável, para quando concluído |
| API regras permissões workspace | #5743 | Daemon e clientes ACP podem ler/escrever regras allow/ask/deny workspace via API REST |
| Provider Requesty | #5478 | Novo suporte provider modelo Requesty |
| Orçamento token workflow P5 + UI por execução | #5231 | Workflows adicionam controle orçamento token e display UI por execução |
| DashScope preserve_thinking ativado padrão | #5637 | Provider DashScope envia por padrão tokens thinking; processo raciocínio modelo mais completo |
| Tags modelo fastOnly/voiceOnly | #5632 | Modelos podem ser taggeados fastOnly ou voiceOnly, ocultos lista principal modelos |
| Detecção mudança arquivo settings | #4933 | Watcher chokidar detecta mudanças arquivo settings e atualiza automaticamente config |
| Fonte instalação archive /extensions | #4909 | Suporta instalação extensões desde arquivos archive |
| Ferramenta leitura recurso MCP | #5781 | Modelo obtém ferramenta read_mcp_resource para ler autonomamente URIs recursos servidor MCP — sem necessidade injeção manual @ |
| Branching sessão Web Shell | #5613 | Web Shell suporta branching sessão |
| Detecção inatividade daemon | #4934 | GET /health?deep=true detecta estado inatividade daemon |
| Arquivos ignorados agent configuráveis | #4653 | Agents podem configurar listas arquivos ignorados |
| Display taxa token resposta | #5401 | Barra status opcionalmente mostra taxa token resposta |
| toolCallId sistema hook | #4918 | Sistema hook recebe ID chamada API bruto |
| Nomes display ferramentas i18n | #5220 | Nomes ferramentas TUI e web-shell localizados |
| Lint nome arquivo kebab-case | #4797 | ESLint impõe nomes arquivo kebab-case |
| Timeout permissão ACP configurável | #5260 | Duração timeout permissão ACP daemon configurável |
| Rota status LSP remoto | #5741 | qwen serve adiciona endpoint consulta status LSP remoto |
| Polling operação extensão | #5753 | Operações extensão suportam polling espera conclusão |
🔧 Correções Importantes
| Correção | PR | Impacto |
|---|---|---|
| Cancelamento permissão para execução imediatamente | #5258 | Quando usuário nega permissão, agent para imediatamente — não pula gate |
| Disjuntor chamada ferramenta por turno | #5279 | Teto duro por turno + detecção loop opcional previne loops infinitos chamada ferramenta |
| Guarda sempre ativa chamadas ferramenta consecutivas idênticas | #5573 | Chamadas ferramenta idênticas repetidas bloqueadas automaticamente, sem opt-in necessário |
| Gate plan tem rota escape quando indisponível | #5430 | Falha agent gate plan não bloqueia mais turno inteiro; usuário pode continuar |
| Entrada manual modo plan requer confirmação | #5595 | Previne alternância acidental modo plan |
| Proteção path-traversal workflow | #5740 | Valida runId para prevenir path-traversal causando exclusão errônea diretório |
| Teto turno fork + escalonamento permissão | #5737 | Sub-agents fork têm tetos turno; requisições permissão escalam para agent principal confirmação |
| Desktop corrige dois bugs link markdown | #5730 | readme.md identificado erroneamente como domínio redirecionando para página parked; caminhos CJK /Users/me/项目/笔记.md não linkificados devido regex ASCII-only |
| Posicionamento cursor IME restaurado | #4993 | Regressão offset cursor entrada composição IME de #4779 corrigida |
| systemd-inhibit não poppa mais caixa senha quebrando TUI | #5318 | Parâmetro --no-ask-password previne systemd solicitar senha corrompendo interface terminal |
| auto-memory /quit não causa mais OOM | #5181 | Extração memória auto na saída não trava mais em conversas grandes |
| Preservação mensagens imagem mid-turn | #5183 | Imagens coladas mid-model-reply não são mais perdidas |
| Desambiguação nome modelo duplicado | #5769 | Mesmo nome modelo across providers não é mais confundido; mostra identificador provider |
| Addon voice empacotado em archive standalone | #5628 | Addon N-API @qwen-code/audio-capture incluído em tar.gz standalone; entrada voz não falta mais binários prebuilt |
| Rejeição cliente prompt stale | #5784 | Daemon rejeita clientes prompt expirados, previne sessões fantasma |
| Mapeamento tipo transport servidor MCP Claude | #5812 | Tipos transport sse/stdio/streamable-http servidor MCP Claude mapeados corretamente em import e .mcp.json |
| Caminho imagem colado promovido automaticamente anexo | #5803 | Caminhos arquivos imagem colados terminal reconhecidos automaticamente como anexos, sem @ manual necessário |
| Modelo lembra provider selecionado | #5179 | Quando múltiplos providers compartilham mesmo ID modelo, seleção não perde mais provider |
| Emoji thinking → símbolo Unicode | #5788 | Ícones thinking e resumo mudam de emoji para símbolos texto Unicode (💡→⟡) para evitar inconsistências renderização terminal |
🎉 Contribuidores
Obrigado aos seguintes novos contribuidores que submeteram seu primeiro PR esta semana:
- @shiloong — toolCallId sistema hook passa ID chamada API bruto (#4918 )
- @Eric-GoodBoy-Tech — adaptador canal QQ Bot (#5202 )
- @aspnmy — config servidor MCP (#5311 )
- @xxlaura — skill pixel-art desktop-pet (#4808 )
- @mvanhorn — expansão caminho home Windows e correção entrada fantasma sessão desktop (#5253 )
- @CubeLander — isolamento AbortSignal gate plan (#5185 )
- @water-in-stone — detecção mudança arquivo settings (#4933 )
- @OrbitZore — systemd-inhibit —no-ask-password (#5318 )
- @Gove2004 — /history collapse-on-resume (#4085 )
- @Zoean-z — comentários trustedFolders preservados (#4746 )
- @ken-jo — limpeza campo morto hooks (#5423 )
- @Thibaultjaigu — provider Requesty (#5478 )
- @interconnectedMe — melhorias MCP (#5488 )
- @lcheng321 — correção preenchimento fundo caixa entrada (#5568 )
- @russeell — correção limite arquivo log OpenAI (#5569 ) e validação índice resposta ask_user_question (#5622 )
Obrigado aos seguintes contribuidores principais por sua iteração contínua esta semana:
- @he-yufeng — correção formato imagem BMP/WebP/AVI, tag text-only modelo, renderização duração, escape caminho emacs ediff, parsing estrito var env (10+ PRs)
- @wenshao — disjuntor, guarda chamada consecutiva, eventos daemon mid-turn, idempotência migração settings v5, correção tema background, interceptação triage cross-repo, orçamento bundle SDK (8+ PRs)
- @doudouOUC — histórico arquivo sed, preservação imagem mid-turn, memória provider modelo, parada cancelamento permissão, atualização provider workspace daemon, desambiguação modelo duplicado, rejeição cliente stale, docs OAuth MCP (7+ PRs)
- @yiliang114 — espaçamento lista extensão, auth modelo fast nu, migração settings, vista chat sidebar VSCode (4+ PRs)
- @qqqys — confirmação + cancelamento artifact, empacotamento standalone addon voice, teto turno fork + escalonamento permissão, correção fonte token /context (4+ PRs)
- @huww98 — McpServer por sessão VSCode, conclusão modelo Token Plan, correção contagem dupla stats
- @ZijianZhang989 — título janela mostra nome sessão, correção OOM auto-memory /quit
- @kkhomej33-netizen — limite buffer thought streaming, redução memória output ferramenta interativa
- @Alex-ai-future — fechamento Enter dropdown @path, rota escape gate plan, ranking completion slash
- @LaZzyMan — confirmação manual modo plan, proteção path-traversal workflow
- @DragonnZhang — proteção crash telemetria, fallback secrets extensão
- @pomelo-nwu — emoji thinking→Unicode, salvar/restaurar ID modelo personalizado
- @chiga0 — preenchimento background tema removido caixa entrada e mensagens usuário
- @ZevGit — estabilização interação mouse VP
- @BZ-D — correção mapeamento tipo transport MCP Claude
- @cyphercodes — renderização histórico preview resume, falha detecção loop não-interativo
- @BenGuanRan — restauração posicionamento cursor IME
- @Jerry2003826 — língua saída efetiva em queries side
- @tanzhenxin — GLM no DashScope não perde mais conteúdo web_fetch
Como atualizar:
- CLI: execute
npm i @qwen-code/qwen-code@latest -gpara atualizar para a versão mais recente. - Desktop: baixe o instalador para sua plataforma em GitHub Releases .
Dúvidas ou sugestões? Abra uma issue em GitHub Issues !