dsh-composer-plus 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +39 -11
- package/README.es.md +39 -11
- package/README.fr.md +39 -11
- package/README.hi.md +39 -11
- package/README.id.md +39 -11
- package/README.ja.md +39 -11
- package/README.ko.md +39 -11
- package/README.md +39 -11
- package/README.pt-BR.md +39 -11
- package/README.ru.md +39 -11
- package/README.tr.md +39 -11
- package/README.vi.md +39 -11
- package/README.zh.md +39 -11
- package/assets/features/featureFilter.webp +0 -0
- package/assets/features/issueReport.webp +0 -0
- package/assets/features/previewQuote.webp +0 -0
- package/assets/features/remoteComputers.webp +0 -0
- package/assets/features/turkishSkill.webp +0 -0
- package/assets/features/untangleCodebase.webp +0 -0
- package/assets/features/windowSize.webp +0 -0
- package/assets/skills/untangle-codebase/LICENSE +21 -0
- package/assets/skills/untangle-codebase/SKILL.md +142 -0
- package/client.js +941 -161
- package/index.js +467 -39
- package/package.json +4 -3
- package/release-notes.json +14 -14
- package/tether/gateway/server.mjs +24 -5
package/README.pt-BR.md
CHANGED
|
@@ -14,7 +14,7 @@ Recursos práticos no estilo do Codex para a interface desktop e web do [DeepSee
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness com o Composer Plus: o projeto em execução mostra um indicador de carregamento na barra lateral e o painel de alterações mostra um diff do git"></p>
|
|
16
16
|
|
|
17
|
-
Plugin não oficial da comunidade.
|
|
17
|
+
Plugin não oficial da comunidade. A verificação de atualizações faz chamadas de rede (releases do GitHub e registro do npm); desative **Atualizações automáticas** para que elas não aconteçam ao iniciar. **Pacote de skill em turco** (ligado por padrão) baixa o turkish-anti-ai-skill do GitHub e procura uma versão nova uma vez por dia, somente enquanto **Idioma do aplicativo** for Türkçe; desligue-o em **Configurações → Composer Plus** para parar essas chamadas. **Ideias de recursos** chama o próprio modelo do seu chat só quando você clica em **Sugerir recursos**. **Previsão da próxima mensagem** (ativada por padrão) chama o modelo escolhido nas Configurações (o padrão do dsh, a menos que você escolha outro) uma vez após cada turno concluído, sem nenhum clique. Desative-a em **Configurações → Composer Plus** para parar essas chamadas. **Completar ao digitar** (desativado por padrão) chama o modelo escolhido para ele (por padrão, o da previsão) a cada pausa enquanto você digita, depois que você o ativa. **Melhorar prompt** só chama um modelo quando você clica na varinha mágica dele. **Quadro de tarefas** chama o modelo do novo chat uma vez para as etiquetas de cada tarefa que você inicia no quadro. Com a configuração **Resumo com IA** (o padrão é **Rápido (sem IA)**), ele também chama o modelo de um chat em andamento para uma nota curta de progresso enquanto você olha o progresso dessa tarefa no quadro ou no Tether. **Verificação da meta** (ativada por padrão) chama um modelo uma vez cada vez que o agente marca uma `/goal` como concluída em uma rodada automática. **Conexão móvel** (desativada por padrão) só aceita conexões do iPhone vindas da sua rede local ou da sua tailnet depois que você a ativa.
|
|
18
18
|
|
|
19
19
|
## Instalação
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem gerencia esse perfil é o app.)
|
|
31
31
|
|
|
32
|
-
> O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.
|
|
32
|
+
> O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.23.0`.
|
|
33
33
|
|
|
34
34
|
## Recursos
|
|
35
35
|
|
|
@@ -48,6 +48,7 @@ Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem ge
|
|
|
48
48
|
| **Manter o foco no editor** | <a id="feature-keepfocus"></a>Depois que você envia um comando `/` ou uma skill, o cursor continua no editor de mensagens e você pode digitar de novo na hora. Isso também funciona com macros de teclado que digitam um comando e pressionam `Enter`. O dsh deixa o editor de mensagens somente leitura enquanto resolve o comando, e o navegador então tira o foco dele. Este recurso devolve o foco, a menos que um menu, uma caixa de diálogo ou outro campo esteja com ele. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Captura de tela: Manter o foco no editor"></a> |
|
|
49
49
|
| **Ajustar o cartão de pergunta à janela** | <a id="feature-questionfit"></a>Quando o agente faz uma pergunta, a pergunta e as respostas rolam juntas no cartão, e **Pular** e **Enviar** continuam visíveis embaixo. O cartão usa a altura da janela (menos 200 px para o cabeçalho do chat e uma faixa do chat), então cresce e diminui com a janela. Sem este recurso, o dsh limita o cartão a 60% da janela (no máximo 520 px) e só as respostas rolam: uma pergunta longa pode empurrar o próprio final, as respostas e os botões para fora do cartão. | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="Captura de tela: Ajustar o cartão de pergunta à janela"></a> |
|
|
50
50
|
| **Ajustar o cabeçalho do chat à janela** | <a id="feature-headerfit"></a>Em uma janela estreita, os botões do cabeçalho do chat do dsh (o modo, os subagentes, as tarefas em segundo plano, Abrir em, a etiqueta do branch e a etiqueta de permissões) não se cobrem mais. O título do chat mantém pelo menos 120 px; os botões que não cabem vão para uma segunda linha à direita, e cada um continua clicável. Quando tudo cabe em uma linha (janela larga), o cabeçalho é exatamente o do dsh. Sem este recurso, o dsh só encolhe o título: com um subagente e tarefas em segundo plano, os botões se sobrepõem em uma coluna de chat estreita. A etiqueta do branch (**Um branch por chat**) e a de permissões (**Permitir neste chat**) também cabem no cabeçalho com esta chave desligada. | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="Captura de tela: Ajustar o cabeçalho do chat à janela"></a> |
|
|
51
|
+
| **Lembrar o tamanho da janela** | <a id="feature-windowsize"></a>O app para desktop do dsh abre a janela em 1280 × 820 a cada início. Com este recurso, ela abre com o tamanho e a posição que a janela tinha na última vez. O tamanho é salvo cada vez que você redimensiona ou move a janela, e volta quando o plugin carrega no próximo início. Uma janela em tela cheia ou minimizada não é salva; uma posição em uma tela que não está mais conectada volta na tela principal. Só no app para desktop: uma aba do navegador não pode mudar o tamanho da sua janela. | <a href="assets/features/windowSize.webp"><img src="assets/features/windowSize.webp" width="160" alt="Captura de tela: Lembrar o tamanho da janela"></a> |
|
|
51
52
|
| **Continuar com um clique** | <a id="feature-continuebutton"></a>Depois de um turno interrompido, com falha ou cortado, o editor de mensagens vazio mostra **▶**. Um clique retoma a partir da conversa existente, sem escrever no campo de entrada e sem adicionar uma mensagem visível ao chat (o modelo recebe uma breve nota oculta “continue de onde parou”, porque alguns provedores, como o Claude, rejeitam uma solicitação que termina com uma resposta do assistente). As mensagens da fila continuam nela: ▶ retoma só a tarefa interrompida e depois a fila é executada. Um turno concluído mantém o botão de enviar normal. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Captura de tela: Continuar com um clique"></a> |
|
|
52
53
|
| **Retomar após reiniciar** | <a id="feature-resumeafterrestart"></a>Desativado por padrão: ative em **Configurações → Composer Plus**. Se você sair do dsh (ou ele fechar) enquanto um chat está trabalhando, esse chat continua sozinho quando você abre o dsh de novo, com a mesma nota oculta do Continuar com um clique. Se uma rodada de meta (`/goal`) estava em execução, a meta segue com a próxima rodada (o dsh pausa as metas a cada inicialização até você retomá-las). Chats que você interrompeu, que terminaram ou que falharam não continuam. O próprio dsh não tem uma configuração para isso: ele só marca esse turno como interrompido. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Captura de tela: Retomar após reiniciar"></a> |
|
|
53
54
|
| **Arrastar e soltar na fila** | <a id="feature-queuereorder"></a>As mensagens na fila ganham uma alça (⠿). Arraste para reordenar, ou coloque o foco na alça e pressione `↑` / `↓`. `Esc` cancela. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Captura de tela: Arrastar e soltar na fila"></a> |
|
|
@@ -69,6 +70,8 @@ Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem ge
|
|
|
69
70
|
| **Continuar em um novo chat** | <a id="feature-handoffchat"></a>Clique com o botão direito em um chat na barra lateral (ou abra o menu **…** dele) → **Continuar em um novo chat…**. Uma chamada ao próprio modelo do chat escreve uma nota de passagem com o que o chat mostra: Tarefa, Entregas, Concluído, Decisões, Pendências e Próxima ação (as chamadas de ferramentas e os resultados delas são a evidência; os passos que você reverteu ficam de fora). A nota abre em uma caixa de diálogo: leia e edite. **Escrever de novo** escreve uma nova nota. **Iniciar novo chat** (ou `Cmd/Ctrl+Enter`) abre um novo chat no mesmo projeto com a nota e um link para o chat antigo como primeira mensagem; o chat antigo fica como está. Use quando um chat longo estiver cheio ou lento, ou para continuar amanhã. Nada é gravado no projeto. | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="Captura de tela: Continuar em um novo chat"></a> |
|
|
70
71
|
| **Detalhamento do contexto** | <a id="feature-contextbreakdown"></a>Barra lateral direita → `+` → **Contexto**. A página mostra o que preenche agora o contexto do modelo do chat aberto e quanto da janela de contexto ele usa: o prompt do sistema, as instruções do projeto (AGENTS.md), as skills, suas mensagens, as respostas do agente e as chamadas de ferramentas, os resultados de ferramentas (por ferramenta), os resultados de MCP (por servidor), as definições de ferramentas, o resumo da compactação e outras notas de contexto, cada um com os tokens e a sua parte. Clique em uma parte para ver as ferramentas ou os servidores dela. Lê só o log do chat, depois do `/compact` e das reversões, e não chama nenhum modelo; lê de novo depois de cada turno e com **Atualizar**. Use para ver por que um chat está lento ou cheio, por exemplo um resultado grande de uma ferramenta MCP ou muitas definições de ferramentas. | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="Captura de tela: Detalhamento do contexto"></a> |
|
|
71
72
|
| **Etapas planejadas** | <a id="feature-plannedsteps"></a>Desativado por padrão: ative em **Configurações → Composer Plus**. O agente recebe a ferramenta `plan_next_steps`: na mesma mensagem de um comando, ele pode planejar os próximos comandos com os argumentos exatos e uma condição, por exemplo “rode `npm test` quando o build passar”. Quando o resultado atende à condição, o Composer Plus executa a próxima etapa sozinho, sem uma nova chamada ao modelo, e um chat longo usa menos tokens. A etapa aparece no chat como uma linha curta, “Composer Plus · Planned steps: ran `test` … without a model call”, seguida da chamada da ferramenta e do resultado. Somente etapas de `bash`, `read`, `grep` e `glob`; aprovações, sandbox e Arquivos protegidos valem para cada etapa como sempre. O modelo responde de novo quando uma condição falha, quando duas etapas ficam prontas ao mesmo tempo, depois da última etapa e quando você envia uma mensagem. A ideia vem do HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Captura de tela: Etapas planejadas"></a> |
|
|
73
|
+
| **Pacote de skill em turco** | <a id="feature-turkishskill"></a>Somente enquanto **Idioma do aplicativo** for Türkçe (ligado por padrão; desligue em **Configurações → Composer Plus**). O Composer Plus baixa do GitHub o skill de código aberto [turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) (MIT, de Yüce Zerey) e o adiciona aos skills do dsh. Peça ao agente para humanizar, reescrever ou escrever um texto em turco: o dsh carrega o skill, e suas regras ajudam o agente a escrever turco natural, sem padrões de IA. Só os arquivos Markdown do pacote ficam; cada arquivo deve bater com a lista de arquivos do GitHub, e nenhum script do pacote é executado. Uma vez por dia o plugin pergunta ao GitHub por uma versão nova e a instala. A linha mostra a versão instalada ou por que ela não está instalada. Em outro idioma o skill não é instalado; volte para Türkçe e ele volta. | <a href="assets/features/turkishSkill.webp"><img src="assets/features/turkishSkill.webp" width="160" alt="Captura de tela: Pacote de skill em turco"></a> |
|
|
74
|
+
| **Desembaraçar o código** | <a id="feature-untanglecodebase"></a>Ativado por padrão; desative em **Configurações → Composer Plus**. Adiciona a skill `/untangle-codebase` de [caldoai/skills](https://github.com/caldoai/skills) (MIT, © 2026 Maze) à lista de skills do dsh. Em um chat, digite `/untangle-codebase` (ela aparece no menu `/`), se quiser seguido de uma área para focar, por exemplo `/untangle-codebase src/api`, e envie. Primeiro o agente pergunta se também deve remover comentários que só repetem o código e testes que não conseguem pegar um bug real. Depois ele lista cada cópia, vínculo oculto, vínculo desnecessário, wrapper que só repassa a chamada, código morto e caso especial pontual, planeja as correções a partir dos princípios básicos, faz as correções como uma meta e verifica de novo com subagentes até não sobrar nada que valha a pena corrigir. Só você pode iniciá-la: o modelo não a vê na lista de skills, então ela não gasta tokens em outros chats. Uma skill com o mesmo nome no projeto ou em `~/.dsh/skills` tem prioridade. Inicie-a em um chat de **Um branch por chat** e revise o resultado em **Painel de alterações**. No Tether: digite `/untangle-codebase` no campo de mensagem. | <a href="assets/features/untangleCodebase.webp"><img src="assets/features/untangleCodebase.webp" width="160" alt="Captura de tela: Desembaraçar o código"></a> |
|
|
72
75
|
| **Arquivos protegidos** | <a id="feature-protectedfiles"></a>Ativado por padrão. As ferramentas de arquivo do próprio agente não podem ler nem alterar arquivos que correspondem aos seus padrões: `read`, `read_image` e `grep` em um arquivo são recusados para padrões de **leitura e gravação**, e `write`, `edit` e `str_replace_editor` para os dois tipos. O agente lê o motivo e é orientado a perguntar a você. Os padrões iniciais são `.env*`, `*.pem` e `*.key`. Configurações → Composer Plus → **Arquivos protegidos**: adicione um padrão (por exemplo `published/**` ou `config/*.yml`), clique no tipo dele para alternar entre **leitura e gravação** e **somente gravação**, remova-o com ✕ ou clique em **Usar os valores padrão**. Um padrão sem `/` corresponde a um nome de arquivo em qualquer pasta. Isto é uma barreira de proteção, não um sandbox: um comando de shell (`cat .env`), um script ou uma ferramenta MCP ainda podem acessar o arquivo (veja Limites). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Captura de tela: Arquivos protegidos"></a> |
|
|
73
76
|
| **Comandos bloqueados** | <a id="feature-blockedcommands"></a>Ativado por padrão, com a lista vazia. Os comandos de shell do agente (`bash`, `pwsh`) não podem executar um comando que corresponda às suas regras: uma regra **bloquear** recusa a chamada (o agente lê o motivo e é orientado a perguntar a você), uma regra **perguntar antes** mostra o cartão de aprovação do dsh, e o comando só é executado quando você permite. Configurações → Composer Plus → **Comandos bloqueados**: digite uma regra (por exemplo `npm publish`, `git push --force` ou `ssh *192.168.2.19`), clique no tipo para alternar entre **bloquear** e **perguntar antes** e depois clique em **Adicionar**; clique no tipo de uma regra para mudá-lo e remova-a com ✕. Uma regra é um nome de comando e palavras que precisam vir depois dele nesta ordem; `*` corresponde a qualquer texto. A verificação também encontra o comando depois de `&&`, `;`, `\|`, dentro de `$(…)`, `bash -c "…"` ou `eval`, e depois de `sudo` ou `env`. Isto é uma barreira de proteção, não um sandbox: uma variável (`$CMD`), um arquivo de script ou outro programa ainda podem executar o comando (veja Limites). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Captura de tela: Comandos bloqueados"></a> |
|
|
74
77
|
| **Quadro de tarefas** | <a id="feature-taskboard"></a>Barra lateral esquerda → **Quadro de tarefas**, ou pressione `Cmd+Shift+K` (`Ctrl+Shift+K` no Windows e no Linux) em qualquer lugar do dsh. Um quadro kanban dos seus chats do dsh com o estado ao vivo que a barra lateral mostra: um chat que espera sua aprovação, sua resposta ou a revisão de um plano fica em **Em revisão** com um ponto laranja, um chat em execução fica em **Fazendo** e um chat concluído que você ainda não abriu fica em **Concluído** (verde). Quando você abre um chat, o cartão dele sai de **Concluído** sozinho; clique em **Concluídos recentemente (N)**, abaixo dos cartões verdes, para ver os chats concluídos que você já leu (os 10 mais recentes e depois **Mostrar N mais antigas**; aberto ou fechado fica salvo neste dispositivo). Um chat que termina enquanto está aberto atrás do quadro (uma **Nova tarefa**) fica verde até você abri-lo. Clique no nome do projeto, no topo do quadro, para abrir a lista de projetos e escolha um projeto ou **Todos os projetos**; uma pasta de “Um branch por chat” conta como o projeto dela. A lista fecha após a escolha, com `Esc` ou com um clique fora dela. Digite em **Buscar projetos**, no topo da lista, para encontrar um projeto pelo nome (maiúsculas e acentos não importam; `Esc` limpa a caixa), pressione `Enter` para escolher a primeira correspondência e clique em **Ativos nas últimas 2 horas** para mostrar só os projetos com um chat que espera, está em execução, terminou sem ser visto ou mudou nas últimas 2 horas (fica salvo neste dispositivo). **Nova tarefa** (ou `n`) abre o próprio novo chat do dsh no projeto que o quadro mostra (com **Todos os projetos**, o projeto que a Nova sessão do dsh escolhe), então você pode adicionar arquivos, usar comandos e escolher o modelo como em qualquer chat. Quando a sua primeira mensagem é enviada, o quadro volta sozinho. Até lá, o chat espera no topo de **Fazendo** como **Nova tarefa**: clique nele para escrever a primeira mensagem. Um projeto com um chat que espera por você tem um ponto laranja na lista de projetos (o nome do projeto no topo também tem, enquanto algum chat espera). O dsh dá nome ao chat e o modelo do chat escreve até 3 etiquetas a partir dessa mensagem. Clique em um cartão para abrir o chat dele. Clique em um cartão laranja (ou em **Responder**) para responder no quadro; o painel tem **Abrir chat** para ver o chat inteiro: **Rejeitar** ou **Permitir uma vez**, **Aprovar** ou **Solicitar alterações** para um plano, ou as opções e o seu próprio texto para uma pergunta. Clique em **×** em um cartão concluído para tirá-lo do quadro, ou abra **Concluídos recentemente** e clique em **Limpar tudo**, no topo de **Concluído**, para tirar esses cartões do quadro: primeiro ele mostra quantos cartões de qual projeto saem, e os cartões não lidos (verdes) ficam. Nos 8 segundos seguintes, **Desfazer** devolve os cartões; **Retirados (N)**, abaixo de **Concluído**, lista os cartões que estão fora do quadro, e **Devolver** mostra um deles de novo em **Concluído**. Nenhum chat é apagado: os chats continuam na barra lateral do dsh, o quadro se lembra disso depois de reiniciar (o Tether mostra o mesmo quadro) e um chat que é executado de novo volta ao quadro. Aponte para um cartão em **Fazendo** (ou mova o foco do teclado até ele) para ver o progresso: há quanto tempo ele está em execução, a etapa da sua lista de tarefas pendentes, a ferramenta que está em execução agora e a última linha do agente. Em Configurações → Composer Plus → Quadro de tarefas, **Progresso ao passar o cursor** escolhe **Rápido (sem IA)** (o padrão: só lê o chat) ou **Resumo com IA** (uma chamada curta ao modelo do chat também escreve uma ou duas frases). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Captura de tela: Quadro de tarefas"></a> |
|
|
@@ -84,6 +87,7 @@ Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem ge
|
|
|
84
87
|
| **Rejeitar com nota** | <a id="feature-rejectnote"></a>O cartão de aprovação mostra **Rejeitar com nota…** ao lado de **Rejeitar**. Clique, escreva o motivo ou o que fazer no lugar e clique em **Rejeitar** (ou pressione `Enter`; `Shift+Enter` adiciona uma linha, `Esc` fecha o campo). A nota vai primeiro para o agente, como uma mensagem no turno que espera, e depois a solicitação é rejeitada: o modelo lê a rejeição e a sua nota no mesmo turno, sem outra mensagem sua. Se a nota não puder ser enviada, nada é rejeitado e o campo continua aberto. No Tether: folha de aprovação → Reject with note. | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="Captura de tela: Rejeitar com nota"></a> |
|
|
85
88
|
| **Entrada secreta** | <a id="feature-secretinput"></a>O agente recebe a ferramenta `request_secret`. Quando precisa de uma senha, um token ou uma chave de API, ele pede com ela em vez de pedir no chat: um cartão aparece na linha da ferramenta com o nome, por que ele precisa do valor, um campo de senha, **Salvar** e **Recusar**. **Salvar** grava o valor em um arquivo deste Mac que só você pode ler, e o agente recebe só o caminho do arquivo, que usa como entrada em um comando (por exemplo `"$(cat <path>)"`). Se um resultado de ferramenta posterior mostrar o valor, `[secret]` o substitui antes que o modelo o veja. O arquivo é apagado quando o turno termina. **Recusar** diz ao agente que você não o deu. Desative em **Configurações → Composer Plus** para remover a ferramenta. No Tether: a barra "Secret: …" acima do campo de texto → Enter. | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="Captura de tela: Entrada secreta"></a> |
|
|
86
89
|
| **Citar na resposta** | <a id="feature-quotereply"></a>Selecione uma parte de uma resposta: um botão **Citar** aparece acima da seleção. Clique nele: essa parte vai para o campo de texto, na posição do cursor, como citação em Markdown (`> …`), com uma linha vazia depois, e o campo de texto recebe o foco para você escrever a resposta abaixo. Só conta o texto da resposta, não o raciocínio, as linhas de ferramenta ou suas próprias mensagens. Uma citação tem no máximo 2.000 caracteres. `Cmd+Z` (`Ctrl+Z`) a remove. No Tether: toque e segure uma resposta → Quote (a resposta inteira). | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="Captura de tela: Citar na resposta"></a> |
|
|
90
|
+
| **Citar da prévia do arquivo** | <a id="feature-previewquote"></a>Abra um arquivo na barra lateral direita (**Arquivos do workspace**, ou um arquivo que o chat abriu) e selecione linhas nele: um botão **Citar** aparece acima da seleção. Clique nele: o caminho do arquivo, os números de linha e as linhas vão para o campo de texto, na posição do cursor, e o campo de texto recebe o foco, para que o agente saiba de qual parte você está falando. Arquivos de código e de texto dão `src/login.js:2-3` e as linhas como bloco de código; arquivos Markdown e PDF dão o caminho (um PDF também a página, `docs/spec.pdf#page=3`) e uma citação `> …`. Um caminho dentro da pasta do chat é relativo. No máximo 2.000 caracteres. `Cmd+Z` (`Ctrl+Z`) remove o texto inserido. Não está no Tether. | <a href="assets/features/previewQuote.webp"><img src="assets/features/previewQuote.webp" width="160" alt="Captura de tela: Citar da prévia do arquivo"></a> |
|
|
87
91
|
| **Chat paralelo** | <a id="feature-sidechat"></a>Digite uma pergunta paralela no campo de texto e clique no botão de balões (**Perguntar em um chat paralelo**): uma cópia do chat abre e responde no modo somente leitura do dsh, enquanto o chat continua trabalhando. A cópia conhece o chat até agora, exceto as mensagens que ainda esperam na fila, e usa o modelo dele. Uma barra acima do campo de texto dela tem **Trazer de volta**: o chat abre e o campo de texto dele recebe suas perguntas (como citações `> `) e as respostas. **Voltar ao chat** só abre o chat. O chat paralelo fica na barra lateral como "↳ <pergunta>"; arquive-o lá. No Tether: menu do título do chat → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="Captura de tela: Chat paralelo"></a> |
|
|
88
92
|
| **Notas no diff** | <a id="feature-diffcomments"></a>No **Painel de alterações**, abra o diff de um arquivo e clique em **+** em uma linha (Shift+clique em uma segunda linha do mesmo bloco para um intervalo), escreva uma nota e clique em **Salvar nota**. As notas do chat esperam em uma barra no topo do painel; **Enviar ao campo de texto** as coloca na posição do cursor como Markdown: `path:12-14`, as linhas como bloco `diff` e sua nota. **Limpar** as descarta. As notas ficam neste navegador até você enviá-las ou limpá-las. Precisa do **Painel de alterações**. No Tether: o diff de um arquivo → toque e segure uma linha → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="Captura de tela: Notas no diff"></a> |
|
|
89
93
|
| **Status do projeto** | <a id="feature-projectstatus"></a>A linha de um projeto na barra lateral mostra o mesmo indicador de em execução / aguardando / concluído dos chats dele, então um projeto recolhido ainda avisa que um chat dentro dele está trabalhando ou precisa de você. Primeiro aparece um chat que está esperando você, depois um chat concluído que você ainda não abriu (o ponto verde, mesmo enquanto outro chat ainda está em execução) e depois o indicador de em execução. Passe o mouse sobre ele para ver os detalhes. Em **Árvore de workspaces**, a linha de uma pasta pai também mostra os chats de cada projeto dentro dela (por exemplo, cada pasta de branch em `.worktrees/`), mesmo quando ela está recolhida. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura de tela: Status do projeto"></a> |
|
|
@@ -95,12 +99,14 @@ Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem ge
|
|
|
95
99
|
| **Ordenar por status** | <a id="feature-statusorder"></a>Barra lateral → opções de exibição → **Ordenar por** → **Por status** (com **Em uma única lista**). Os chats concluídos vêm primeiro (o ponto de “concluído” do dsh, que um turno que terminou com erro também recebe), depois os chats em execução ou aguardando, depois os chats com uma automação ativa (Tarefas de automação) e, por fim, os demais na ordem do dsh. Abrir um chat concluído o move para baixo. Só a exibição muda: selecione **Manual** ou **Última atualização** para voltar. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Captura de tela: Ordenar por status"></a> |
|
|
96
100
|
| **Notificações em segundo plano** | <a id="feature-notifications"></a>Enquanto o dsh está em segundo plano, você recebe uma notificação quando um turno termina (a primeira linha da resposta) ou quando um chat realmente espera por você: uma aprovação (o nome da ferramenta), uma resposta (a pergunta) ou uma revisão de plano. Um pedido precisa continuar aberto 1,5 s depois, então as aprovações respondidas automaticamente (autorizações da Revisão automática, outros plugins) não geram aviso, e uma notificação é retirada assim que o pedido dela é respondido. O indicador no Dock/barra de tarefas conta os chats que estão aguardando. Clicar na notificação abre esse chat. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Captura de tela: Notificações em segundo plano"></a> |
|
|
97
101
|
| **Abrir o chat em espera quando ocioso** | <a id="feature-idleswitch"></a>Quando um chat faz uma pergunta, aguarda uma aprovação ou uma revisão do plano (o ponto laranja) ou termina um turno que você ainda não leu (o ponto verde), e você não usa o dsh por 30 segundos, o dsh abre esse chat. Os chats laranja abrem antes dos verdes. Em cada grupo, o que espera há mais tempo abre primeiro; o próximo abre depois de mais 30 segundos sem uso. Uma tecla, um clique, um movimento do mouse, a roda de rolagem ou um toque reiniciam os 30 segundos. Texto no campo com o foco, texto selecionado ou um menu ou caixa de diálogo aberta também impedem a troca. Enquanto um chat em espera está na tela, nada muda. Se você sair de um chat em espera sem responder, ele pode abrir de novo depois dos próximos 30 segundos sem uso. Quando um chat verde abre, o ponto dele some; o próximo chat verde só abre depois que você usar o dsh de novo e então ficar 30 segundos sem usá-lo. Também funciona com o dsh em segundo plano, mas o dsh não vem para a frente. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Captura de tela: Abrir o chat em espera quando ocioso"></a> |
|
|
98
|
-
| **Próximo chat em espera** | <a id="feature-nextwaiting"></a>Um botão no cabeçalho da barra lateral mostra quantos outros chats estão esperando por você, com um ponto na cor do próximo: laranja quando ele faz uma pergunta ou aguarda uma aprovação ou uma revisão do plano, verde quando terminou um turno que você ainda não leu. Clique nele, ou pressione Cmd+Shift+E (Ctrl+Shift+E no Windows e no Linux), para abrir esse chat. Os chats laranja vêm antes dos verdes; em cada grupo, o chat que espera há mais tempo vem primeiro. O chat na tela não conta. Quando nenhum outro chat espera, o botão não aparece e a tecla não faz nada. Você pode mudar a tecla na página de atalhos de teclado do dsh (Próximo chat em espera). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Captura de tela: Próximo chat em espera"></a> |
|
|
102
|
+
| **Próximo chat em espera** | <a id="feature-nextwaiting"></a>Um botão no cabeçalho da barra lateral mostra quantos outros chats estão esperando por você, com um ponto na cor do próximo: laranja quando ele faz uma pergunta ou aguarda uma aprovação ou uma revisão do plano, verde quando terminou um turno que você ainda não leu. Clique nele, ou pressione Cmd+Shift+E (Ctrl+Shift+E no Windows e no Linux), para abrir esse chat. Um clique no botão também encontra o chat na barra lateral: um projeto recolhido se abre, a lista rola até o chat e o chat pisca por 5 segundos. Os chats laranja vêm antes dos verdes; em cada grupo, o chat que espera há mais tempo vem primeiro. O chat na tela não conta. Quando nenhum outro chat espera, o botão não aparece e a tecla não faz nada. Você pode mudar a tecla na página de atalhos de teclado do dsh (Próximo chat em espera). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Captura de tela: Próximo chat em espera"></a> |
|
|
99
103
|
| **Botões de opções** | <a id="feature-optionpicks"></a>Quando uma resposta termina com uma lista de opções (uma lista numerada de 1 a 9 itens sob um título "Opções" ou uma linha em negrito "Opções", também "Próximos passos" e as mesmas palavras nos idiomas do aplicativo), aparece um botão para cada opção abaixo da resposta. Um clique envia "Option N: …" com a opção inteira como sua mensagem, como se você a tivesse digitado. A opção marcada "(recomendada)" fica destacada. Os botões só aparecem abaixo da resposta mais recente, enquanto o chat está ocioso e a caixa de mensagem está vazia; uma resposta já escolhida e uma resposta retirada por uma reversão não mostram botões. Enquanto eles aparecem, a previsão da próxima mensagem não sugere nada. Em um cartão de pergunta do agente, as teclas 1–9 escolhem essa opção, como um clique (não no campo de resposta, nem nos primeiros 0,8 segundo depois que a pergunta aparece). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Captura de tela: Botões de opções"></a> |
|
|
100
104
|
| **Idioma do aplicativo** | <a id="feature-language"></a>Configurações → Composer Plus → **Idioma do aplicativo** muda toda a interface do dsh para Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt ou हिन्दी (veja abaixo). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Captura de tela: Idioma do aplicativo"></a> |
|
|
101
105
|
| **Conexão móvel (iPhone)** | <a id="feature-mobileconnect"></a>Use o dsh no seu iPhone com o app [Tether](tether/), na mesma rede Wi-Fi ou pelo [Tailscale](https://tailscale.com). Ative em **Configurações → Composer Plus** (o recurso vem desativado por padrão, porque abre uma porta de rede neste Mac). Depois, clique em **Conexão móvel** no canto inferior esquerdo da barra lateral: leia o código QR com a Câmera do iPhone (toque em **Open in Tether**) ou com **Scan code** no Tether, toque em **Connect** e clique em **Approve**. Instale o Tether antes: sem ele, a Câmera não consegue abrir o código. O celular mostra seus chats, envia mensagens (com fotos: o **+** do editor de mensagens → Camera, Photos ou Paste image), responde a aprovações e perguntas, e troca de modelo e de agente. Pareie quantos Macs quiser: o nome do Mac no canto superior esquerdo do app alterna entre eles. O painel **Conexão móvel** lista os iPhones pareados com a última conexão de cada um: **Remove** desconecta um deles na hora. “Tailscale only” recusa a rede local (para um Wi-Fi compartilhado), e o registro de acesso mostra quem tentou se conectar. No Tether, “Settings → Privacy” bloqueia o app com o Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura de tela: Conexão móvel (iPhone)"></a> |
|
|
102
|
-
| **Computadores remotos** | <a id="feature-remotecomputers"></a>Abra o dsh dos seus outros Macs pelo [Tailscale](https://tailscale.com) e
|
|
103
|
-
| **Atualizações automáticas** | <a id="feature-autoupdate"></a>Quando o dsh inicia, o plugin verifica a [versão mais recente no GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Se ela for mais nova e já estiver no npm, o plugin instala exatamente essa versão pelo próprio gerenciador de plugins do dsh (o mesmo caminho de Configurações → Plugins) e avisa você. Reinicie o dsh para carregá-la. **Configurações → Composer Plus → Atualizações do Composer Plus** mostra a versão e tem **Verificar atualizações** / **Atualizar agora**. Na primeira vez que o dsh abre com a nova versão, uma janela **Novidades do Composer Plus N** mostra uma vez as notas dessa versão no idioma de **Idioma do aplicativo** (elas vêm com a nova versão, sem outra chamada de rede; um idioma sem notas mostra as notas em inglês); **Fechar** ou `Esc` a fecha. A janela também aparece após uma atualização por Configurações → Plugins ou por uma pasta copiada, uma vez por versão nova; não na primeira instalação. **Novidades desta versão** na linha de atualizações a abre de novo. Se houver no disco uma versão mais nova que a que está em execução, a linha pede para reiniciar o dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura de tela: Atualizações automáticas"></a> |
|
|
106
|
+
| **Computadores remotos** | <a id="feature-remotecomputers"></a>Abra o dsh dos seus outros Macs pelo [Tailscale](https://tailscale.com) e use-os nesta janela do dsh. Ative em **Configurações → Composer Plus** em cada Mac (o recurso vem desativado por padrão, porque abre portas de rede). No Mac que você quer abrir, ative **Permitir que outros computadores abram este Mac**, clique em **Criar link de pareamento** e copie o link. Neste Mac, escolha **Adicionar um computador…** no seletor de computadores da barra lateral esquerda (à direita do nome da marca, acima de **Nova sessão**), cole o link, digite um **Nome** (diferente do nome deste Mac e dos outros computadores) e clique em **Conectar**. Depois, clique em **Aprovar** no outro Mac. A partir daí, o seletor lista **Este Mac** e os seus computadores: escolha um, e o dsh dele ocupa esta janela, com os próprios chats, barra lateral, ferramentas e arquivos, enquanto este Mac continua em execução por trás. O outro Mac mostra o mesmo seletor no mesmo lugar: escolha **Este Mac** ali para voltar. O painel de Configurações renomeia e remove computadores, e lista os computadores que podem abrir este Mac (**Remover** desconecta um deles na hora). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Captura de tela: Computadores remotos"></a> |
|
|
107
|
+
| **Atualizações automáticas** | <a id="feature-autoupdate"></a>Quando o dsh inicia, o plugin verifica a [versão mais recente no GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Se ela for mais nova e já estiver no npm, o plugin instala exatamente essa versão pelo próprio gerenciador de plugins do dsh (o mesmo caminho de Configurações → Plugins) e avisa você. Reinicie o dsh para carregá-la. **Configurações → Composer Plus → Atualizações do Composer Plus** mostra a versão e tem **Verificar atualizações** / **Atualizar agora**. Na primeira vez que o dsh abre com a nova versão, uma janela **Novidades do Composer Plus N** mostra uma vez as notas dessa versão no idioma de **Idioma do aplicativo** (elas vêm com a nova versão, sem outra chamada de rede; um idioma sem notas mostra as notas em inglês); **Fechar** ou `Esc` a fecha. Abaixo das notas, uma linha pede uma estrela no GitHub, no máximo uma vez a cada 30 dias (sem chamada de rede); depois de **Dar uma estrela no GitHub** ou **Não perguntar de novo**, ela não aparece mais. A janela também aparece após uma atualização por Configurações → Plugins ou por uma pasta copiada, uma vez por versão nova; não na primeira instalação. **Novidades desta versão** na linha de atualizações a abre de novo. Se houver no disco uma versão mais nova que a que está em execução, a linha pede para reiniciar o dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura de tela: Atualizações automáticas"></a> |
|
|
108
|
+
| **Filtro ativados/desativados** | <a id="feature-featurefilter"></a>Ao lado de **Pesquisar recursos** em **Configurações → Composer Plus**: **Todos** mostra todos os recursos, **Ativados** só os que estão com a chave ativada e **Desativados** só os que estão com ela desativada. Quem decide é a chave de cada linha, também uma chave que o Host do dsh guarda (por exemplo **Conexão móvel**). Funciona junto com a pesquisa: digite uma palavra e escolha **Desativados** para achar um recurso que você desativou. Uma linha que você alterna com **Ativados** ou **Desativados** escolhido fica até você escolher um filtro de novo, assim o foco continua na chave dela. **Ativados** e **Desativados** ocultam as linhas **Idioma do aplicativo** e **Atualizações do Composer Plus** (elas não têm chave). Configurações sempre abre com **Todos**. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Captura de tela: Filtro ativados/desativados"></a> |
|
|
109
|
+
| **Relatar uma issue** | <a id="feature-issuereport"></a>Configurações → Composer Plus → **Relatar uma issue…** (abaixo da introdução), ou clique com o botão direito em um chat na barra lateral (ou abra o menu **…** dele) → **Relatar uma issue do Composer Plus…**. Escolha um tipo: **Bug**, **Pedido de recurso**, **Melhoria**, **Tradução** ou **Pergunta**. Descreva-o com suas próprias palavras e no seu idioma e depois clique em **Escrever rascunho** (ou `Cmd/Ctrl+Enter`). Uma chamada ao modelo padrão do dsh escreve uma issue em inglês: um título com o prefixo do tipo (por exemplo `[Bug]`) e as seções desse tipo (para um bug: What happened, Steps to reproduce, Expected, Actual), mais uma linha com as versões do Composer Plus, do dsh e do sistema. Leia e edite o título e a descrição; **Escrever de novo** escreve um novo rascunho. **Abrir issue** a abre no repositório do GitHub do Composer Plus com o seu login do GitHub CLI (`gh`) e mostra o link dela. A issue é pública: um texto que parece uma chave ou uma senha é recusado. Quando o `gh` não consegue abri-la, **Abrir no GitHub em vez disso** abre a própria página do GitHub com o rascunho preenchido. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Captura de tela: Relatar uma issue"></a> |
|
|
104
110
|
| **Backup** | <a id="feature-backup"></a>Configurações → Composer Plus → **Backup** → **Fazer backup agora** grava toda a sua pasta home do dsh (chats, configurações, plugins, MCP, skills) em um único arquivo compactado em `~/Desktop/dsh-backups`, com checksum. Os segredos ficam mascarados no arquivo compactado: arquivos de credenciais, arquivos de chave (`.pem`, `.key`) e os valores token, secret e password das configurações yml ficam só neste computador, no `vault` da pasta. `cache/`, `dsh-runtimes/` e `node_modules` não entram no arquivo compactado (o dsh os cria de novo). Cada backup da lista tem **Verificar** (lê o backup inteiro), **Para outro computador** (uma pasta para copiar para o novo computador, com o console de resgate) e **Excluir**. Os arquivos compactados do dsh-backup na mesma pasta também aparecem e funcionam. Para restaurar, saia do dsh e use o console de resgate. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Captura de tela: Backup"></a> |
|
|
105
111
|
| **Backup automático** | <a id="feature-autobackup"></a>Ative **Backup automático** (desativado por padrão: cada cópia tem mais ou menos o tamanho da sua pasta home do dsh sem o cache). Escolha a frequência (**A cada**: de 6 horas a 7 dias, 24 horas por padrão) e quantos backups ficam guardados (**Manter**: de 3 a 14, 7 por padrão). O horário do próximo backup aparece abaixo da chave; um backup que falhou também aparece ali e é tentado de novo 30 minutos depois. Quando o dsh ou o Composer Plus inicia com uma nova versão, um snapshot é feito logo após o início, antes que a nova versão use seus dados por muito tempo (os dois mais recentes ficam guardados, marcados como **Antes de uma atualização**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Captura de tela: Backup automático"></a> |
|
|
106
112
|
| **Verificação de logs de sessão** | <a id="feature-sessiondoctor"></a>**Verificar logs de sessão** lê o log de cada chat e lista os que o dsh não consegue abrir (um frame quebrado, um registro cortado, um número de sequência errado). Um final incompleto não entra na lista: o próprio dsh o repara. **Reparar a partir dos backups** coloca de volta a cópia do backup mais recente que tenha uma cópia íntegra e mantém o arquivo danificado ao lado dela (`.corrupt-<hora>`). As mensagens escritas depois desse backup não estão na cópia. Um chat aberto neste dsh não é reparado aqui: saia do dsh e repare-o no console de resgate. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Captura de tela: Verificação de logs de sessão"></a> |
|
|
@@ -112,7 +118,7 @@ Botões, dicas, avisos e notificações seguem o idioma selecionado no dsh (veja
|
|
|
112
118
|
|
|
113
119
|
## Configurações
|
|
114
120
|
|
|
115
|
-
Cada recurso pode ser ativado ou desativado separadamente em **Configurações → Composer Plus** do dsh. Cada linha tem uma pequena captura de tela: passe o mouse sobre ela para ver uma prévia maior e clique para abri-la em tamanho real (`Esc` fecha). A caixa **Pesquisar recursos** no topo filtra a página por nome ou descrição (em qualquer idioma, sem diferenciar maiúsculas, minúsculas e acentos); `Esc` limpa a caixa. Cada linha tem uma chave e uma breve descrição; as alterações valem na hora, sem reiniciar, e ficam salvas naquele dispositivo. O pequeno **?** ao lado do nome de uma linha abre a parte deste README que descreve esse recurso, no README do idioma da interface do dsh. Tudo vem ativado por padrão, exceto **Conexão móvel**, **Retomar após reiniciar** e **Completar ao digitar**. O Host do dsh guarda as chaves desses três recursos e também de **Pesquisa no conteúdo**, **Reverter turno**, **Previsão da próxima mensagem** e **Verificação da meta**, então elas valem para todas as janelas e continuam depois de reiniciar. O Host também guarda o **Modelo** escolhido para a **Previsão da próxima mensagem**, o de **Completar ao digitar** (por padrão **Igual à previsão da próxima mensagem**), o de **Melhorar prompt**, o de **Verificação da meta** (ambos por padrão **Igual ao modelo do chat**) e o **Limite de tempo** de **Permitir neste chat** (1 hora por padrão). **Pesquisa no conteúdo** só muda depois de reiniciar o dsh (o dsh lê essa chave ao iniciar); até lá, a linha dela diz **Reinicie o dsh para aplicar esta alteração.**
|
|
121
|
+
Cada recurso pode ser ativado ou desativado separadamente em **Configurações → Composer Plus** do dsh. Cada linha tem uma pequena captura de tela: passe o mouse sobre ela para ver uma prévia maior e clique para abri-la em tamanho real (`Esc` fecha). A caixa **Pesquisar recursos** no topo filtra a página por nome ou descrição (em qualquer idioma, sem diferenciar maiúsculas, minúsculas e acentos); `Esc` limpa a caixa. Ao lado, **Todos**, **Ativados** e **Desativados** mostram todos os recursos, só os ativados ou só os desativados (desative **Filtro ativados/desativados** para ocultá-los). Cada linha tem uma chave e uma breve descrição; as alterações valem na hora, sem reiniciar, e ficam salvas naquele dispositivo. O pequeno **?** ao lado do nome de uma linha abre a parte deste README que descreve esse recurso, no README do idioma da interface do dsh. Tudo vem ativado por padrão, exceto **Conexão móvel**, **Retomar após reiniciar** e **Completar ao digitar**. O Host do dsh guarda as chaves desses três recursos e também de **Pesquisa no conteúdo**, **Reverter turno**, **Previsão da próxima mensagem** e **Verificação da meta**, então elas valem para todas as janelas e continuam depois de reiniciar. O Host também guarda o **Modelo** escolhido para a **Previsão da próxima mensagem**, o de **Completar ao digitar** (por padrão **Igual à previsão da próxima mensagem**), o de **Melhorar prompt**, o de **Verificação da meta** (ambos por padrão **Igual ao modelo do chat**) e o **Limite de tempo** de **Permitir neste chat** (1 hora por padrão). **Pesquisa no conteúdo** só muda depois de reiniciar o dsh (o dsh lê essa chave ao iniciar); até lá, a linha dela diz **Reinicie o dsh para aplicar esta alteração.**
|
|
116
122
|
|
|
117
123
|
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Configurações → Composer Plus: pesquisa de recursos, seletor de idioma, linha de atualização e uma chave para cada recurso, com prévia da captura de tela ao passar o mouse"></p>
|
|
118
124
|
|
|
@@ -172,6 +178,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
172
178
|
- **Pesquisa no conteúdo:** nenhum código novo pesquisa seus chats: o plugin só ativa o índice de mensagens do próprio dsh (SQLite FTS5, `dsh-session-query-sqlite`) e dá a ele um arquivo, `$DSH_HOME/cache/composer-plus/session-search.db` (arquivo e pasta só para o dono). O arquivo guarda o texto das suas mensagens e das mensagens do assistente, então é tão privado quanto os logs de chat em `$DSH_HOME/sessions`. Nada sai do seu computador. Ele é uma cópia que o dsh consegue refazer: você pode excluí-lo enquanto o dsh estiver fechado. A chave fica em `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
173
179
|
- **Reverter turno:** antes de cada mensagem sua, o Host tira um snapshot git da pasta do chat em um armazenamento próprio, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (pasta só para o dono). Ele guarda cópias dos arquivos dessa pasta que o git enxerga (não os arquivos ignorados), então é tão privado quanto o projeto. Ele lê os objetos do seu repositório (sem copiar o que o git já tem) e nunca grava no index, no `HEAD`, nos branches, nas tags, no stash ou na configuração do seu repositório; a única mudança que o git faz ali é atualizar a data e hora dos arquivos de objeto que ele reaproveita (isso adia a limpeza deles pelo `git gc`). Uma reversão com arquivos só grava arquivos comuns dentro da pasta do chat; ela ignora symlinks, pipes e qualquer coisa fora da pasta. Nada sai do seu computador. Você pode excluir o armazenamento enquanto o dsh estiver fechado (aí a reversão só funciona para o chat, até haver novas mensagens). **Excluir chat** também exclui o armazenamento de um chat. A chave fica em `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Uma reversão com arquivos também guarda os arquivos como estavam logo antes dela (`refs/r/…` no mesmo armazenamento), para **Refazer**; as reversões refeitas ficam listadas em `$DSH_HOME/storages/dsh-composer-plus/redone.json` (acesso só para o dono).
|
|
174
180
|
- **Abrir issue no GitHub** (Ideias de recursos → lista **Depois**): só é executado quando você clica. A parte Host executa o seu próprio GitHub CLI (`gh issue create`) na pasta do chat, com o título e o resumo salvos da ideia (e por que ela importa); o `gh` usa o próprio login e o remoto do GitHub da pasta, então a issue vai para esse repositório com a sua conta, e o GitHub a mostra para todos que podem ver esse repositório. O dsh remove dos comandos que inicia as variáveis com nome de token; se você deu um token ao `gh` por `GH_TOKEN` ou `GITHUB_TOKEN`, o plugin passa só essas variáveis ao `gh`. O link da issue fica guardado com a ideia em `later.json`.
|
|
181
|
+
- **Relatar uma issue** (Configurações → Composer Plus → **Relatar uma issue…**, ou o menu **…** de um chat → **Relatar uma issue do Composer Plus…**): nada é executado até você clicar. **Escrever rascunho** envia só o tipo e o texto que você digitou (não o chat, não o projeto) para o modelo padrão do dsh, como uma única solicitação. A parte Host adiciona uma linha com as versões do Composer Plus, do dsh e do sistema operacional e troca o caminho da sua pasta home por `~`. **Abrir issue** executa o seu próprio GitHub CLI (`gh issue create --repo furkancak1r/dsh-composer-plus`) com o seu login do `gh`, então a issue é pública e mostra a sua conta do GitHub. Um texto que parece uma chave, um token ou uma senha é recusado e não sai do seu Mac.
|
|
175
182
|
- **Chats que alteraram este arquivo** (Alterações, menu "…" de um arquivo): a parte Host lê os registros dos chats cuja pasta está no mesmo repositório, do jeito que o dsh os guarda, e responde com o título de cada chat, o horário e a primeira linha do pedido; ela nunca abre o arquivo em si.
|
|
176
183
|
- **Branch do Git nas linhas de chat:** a parte Host executa `git branch --show-current` (somente leitura) na pasta do chat quando um turno começa e quando termina, e guarda só o ID do chat, o nome do branch e o horário em `$DSH_HOME/storages/dsh-composer-plus/session-branches.json` (arquivo só para o dono, os 2000 chats mais recentes). A chave fica em `branches.json`, ao lado dele.
|
|
177
184
|
- **Buscar no chat** roda só na página: ele lê o texto que a página mostra e não envia nada.
|
|
@@ -180,9 +187,10 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
180
187
|
- **Permitir neste chat:** as autorizações ficam guardadas, com o horário em que foram dadas, em `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (acesso só para o dono). Uma autorização cobre uma ferramenta exata em um chat, até o fim do limite de tempo (1 hora por padrão). Se essa ferramenta pode gravar, a autorização também cobre qualquer gravação. Revogue-a pelo chip no cabeçalho.
|
|
181
188
|
- A Revisão automática continua sendo executada em toda chamada; falhas de revisão nunca são permitidas automaticamente.
|
|
182
189
|
- **Conexão móvel:** fica desativada até você ativar. Enquanto está ativada, a parte Host executa o gateway do Tether: HTTPS na porta 19390, que só aceita a sua sub-rede Wi-Fi e a sua tailnet (100.64.0.0/10), e uma página de pareamento em `127.0.0.1:19391` (só neste Mac). Um celular precisa de um código de uso único do código QR (válido por 5 minutos) e de você clicar em **Approve** no Mac. O celular fixa o certificado do gateway. O Mac guarda só um hash do token de cada celular (30 dias, renovado enquanto estiver em uso); **Remove** fecha na hora as conexões daquele celular. Os celulares só podem chamar uma lista permitida de métodos do dsh (chats, prompts, anexos, comandos de barra, aprovações, perguntas, modelos, agentes, metas), não configurações, credenciais, o navegador de arquivos ou o terminal. "Tailscale only" recusa toda conexão vinda da rede local, inclusive as que já estão abertas. O registro de acesso guarda as 200 tentativas de conexão mais recentes (horário, endereço IP, nome do aparelho, permitida ou recusada, e o motivo) em `access.json`; ele nunca guarda um token nem um código de pareamento. Dados: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (arquivos só para o dono). Detalhes: [tether/README.md](tether/README.md).
|
|
183
|
-
- **Computadores remotos:** o recurso fica desativado até você ativá-lo em cada Mac. **Permitir que outros computadores abram este Mac** abre uma segunda porta HTTPS (19392) só no endereço do Tailscale deste Mac (não no Wi-Fi, e sem anúncio pelo Bonjour). Outro Mac precisa de um link de pareamento de uso único (válido por 5 minutos), do certificado correspondente (fixado) e de você clicar em **Aprovar**. Este Mac guarda só um hash do token dele. Um computador pareado ganha controle total do dsh neste Mac, como se você o usasse aqui: chats, modelos, ferramentas, arquivos e terminal. Remova-o no painel de Configurações, e as conexões dele fecham na hora. O Mac que abre outro guarda o token desse computador em `$DSH_HOME/storages/dsh-composer-plus/computers.json` (só para o dono). Ele abre um relay em `127.0.0.1` para cada computador que você escolhe. A página recebe um link de uso único (válido por 60 segundos), e o relay só aceita a própria página (o endereço dela, nenhum outro site).
|
|
190
|
+
- **Computadores remotos:** o recurso fica desativado até você ativá-lo em cada Mac. **Permitir que outros computadores abram este Mac** abre uma segunda porta HTTPS (19392) só no endereço do Tailscale deste Mac (não no Wi-Fi, e sem anúncio pelo Bonjour). Outro Mac precisa de um link de pareamento de uso único (válido por 5 minutos), do certificado correspondente (fixado) e de você clicar em **Aprovar**. Este Mac guarda só um hash do token dele. Um computador pareado ganha controle total do dsh neste Mac, como se você o usasse aqui: chats, modelos, ferramentas, arquivos e terminal. Remova-o no painel de Configurações, e as conexões dele fecham na hora. O Mac que abre outro guarda o token desse computador em `$DSH_HOME/storages/dsh-composer-plus/computers.json` (só para o dono). Ele abre um relay em `127.0.0.1` para cada computador que você escolhe. A página recebe um link de uso único (válido por 60 segundos), e o relay só aceita a própria página (o endereço dela, nenhum outro site). A página do outro Mac nesta janela pode ler os nomes e os estados dos computadores deste Mac (sem endereço e sem token) e pode trocar esta janela entre eles. Ela não pode adicionar, renomear nem remover um computador, nem mudar as configurações deste Mac.
|
|
184
191
|
- **Atualizações:** a parte Host pede a `api.github.com` a versão mais recente e a `registry.npmjs.org` exatamente essa versão; nada sobre você ou seus chats é enviado. A instalação usa o gerenciador de plugins do dsh (`pnpm add dsh-composer-plus@<version>`; quando o dsh 0.2.1 recusa isso para um plugin já instalado, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, e o perfil passa a listar essa URL como a origem do plugin), então valem as verificações de registro, de scripts e de compatibilidade de versão do próprio dsh. Tags de pré-lançamento e versões mais antigas nunca são instaladas.
|
|
185
|
-
- **
|
|
192
|
+
- **Pacote de skill em turco:** ligado por padrão, e só funciona enquanto o idioma do app for Türkçe: o navegador informa à parte Host o idioma da interface do dsh. Então, no máximo uma vez por dia, a parte Host pede a `api.github.com` o commit mais recente de `yucezerey/turkish-anti-ai-skill` e sua lista de arquivos, e baixa de `raw.githubusercontent.com` os arquivos Markdown que mudaram. O GitHub vê seu endereço IP, como em cada verificação de atualizações; nada sobre você ou suas conversas é enviado. Só os arquivos `.md` comuns da pasta `skills/turkish-anti-ai-skill/` ficam (no máximo 20 arquivos e 1 MB), e cada arquivo deve bater com seu id na lista de arquivos do GitHub. A cópia fica em `$DSH_HOME/cache/composer-plus/turkish-skill/<commit>` (só o dono acessa) e entra na lista de skills do dsh; nenhum script do pacote é executado. A chave e o último idioma informado ficam em `$DSH_HOME/storages/dsh-composer-plus/turkish-skill.json`. Desligar remove o skill e apaga a cópia.
|
|
193
|
+
- **Contagem de uso:** a parte Host pede ao GitHub dois pequenos arquivos da versão publicada que você tem instalada (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/<file>`): `active.txt` uma vez por dia e `installed.txt` só uma vez para cada dsh home. O GitHub conta esses pedidos por arquivo, então o autor só vê quantas cópias de cada versão pediram `active.txt` naquele dia e quantas cópias pediram `installed.txt` no total (o número de cópias). O pedido não tem id, cookie nem dados sobre você ou seus chats; o GitHub vê seu endereço IP, como em cada verificação de atualização. O dia do último pedido de `active.txt` fica em `$DSH_HOME/storages/dsh-composer-plus/active.json`, e a marca de que `installed.txt` já foi contado fica em `$DSH_HOME/storages/dsh-composer-plus/installed.json`. Uma cópia git deste repositório e uma cópia renomeada não enviam nada. Não há chave para isso.
|
|
186
194
|
- **Previsão da próxima mensagem:** vem ativada por padrão; desative-a em **Configurações → Composer Plus** para parar essas chamadas ao modelo. Após cada turno concluído, a parte Host envia as suas próprias mensagens do chat e as respostas em texto do agente (sem saída de ferramentas, sem contexto oculto e sem raciocínio), no máximo cerca de 6.000 caracteres (a parte mais recente), para o modelo escolhido (o padrão do dsh, a menos que você escolha outro). O envio usa as próprias configurações de provedor do dsh, como uma única solicitação. Nada é salvo no chat: o palpite não entra no histórico do chat. A chave e o modelo escolhido ficam em `$DSH_HOME/storages/dsh-composer-plus/predict.json` (arquivo só para o dono).
|
|
187
195
|
- **Completar ao digitar:** fica desativado até você ativar. Enquanto está ativado, a cada pausa enquanto você digita, a parte Host envia o texto que você digitou até ali e as suas próprias mensagens do chat e as respostas em texto do agente (sem saída de ferramentas, sem contexto oculto e sem raciocínio), no máximo cerca de 3.000 caracteres do chat, para o modelo escolhido em **Completar ao digitar** (por padrão, o modelo da **Previsão da próxima mensagem**). Uma pausa mais nova interrompe a solicitação anterior. Nada é salvo no chat. A chave fica em `$DSH_HOME/storages/dsh-composer-plus/complete.json` (arquivo só para o dono).
|
|
188
196
|
- **Melhorar prompt:** nada é executado até você clicar na varinha mágica. Então a parte Host envia o seu rascunho, as suas próprias mensagens do chat e as respostas em texto do agente (sem saída de ferramentas, sem contexto oculto, sem raciocínio e sem mensagens revertidas; no máximo cerca de 6.000 caracteres, a parte mais recente), o mesmo resumo do projeto usado em **Ideias de recursos** (com as mesmas regras de arquivos: sem `.env*` nem arquivos de chave, sem symlink para fora da pasta, sem FIFO), os caminhos que o `git status` lista como alterados e até 30 caminhos rastreados ou não rastreados (não ignorados) cujos nomes têm palavras em comum com o seu rascunho, para o modelo escolhido em **Melhorar prompt** (por padrão, o próprio modelo do chat), como uma única solicitação. Nenhum outro conteúdo de arquivo além desse resumo é enviado. Nada é gravado no chat nem no projeto: a resposta só substitui o seu rascunho no editor de mensagens, e você decide se vai enviá-lo. O modelo escolhido fica em `$DSH_HOME/storages/dsh-composer-plus/improve.json` (arquivo só para o dono).
|
|
@@ -212,10 +220,11 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
212
220
|
- **Um chat não continuou depois de reiniciar:** Retomar após reiniciar estava desativado quando o dsh fechou, você mesmo interrompeu aquele turno, o turno já tinha terminado (concluído ou com falha), o chat foi arquivado, ou mais de 20 chats estavam em execução (os 20 mais novos continuam).
|
|
213
221
|
- **A fila está vazia depois de reiniciar:** o próprio dsh esvazia a fila quando fecha. Retomar após reiniciar só a devolve em um chat que continua; nos outros chats, envie as mensagens de novo. Uma mensagem que você removeu logo antes do fechamento pode voltar: remova-a de novo.
|
|
214
222
|
- **Abrir issue no GitHub diz "gh could not open the issue":** a mensagem é a primeira linha do próprio `gh`. Execute `gh auth status` em um terminal e faça login com `gh auth login`; a pasta do chat precisa ter um remoto do GitHub (`git remote -v`). "not installed or not on the PATH of dsh" significa que o dsh não encontrou o `gh`: instale-o ou inicie o dsh a partir de um terminal em que o `gh` funcione.
|
|
223
|
+
- **Relatar uma issue diz "gh could not open the issue":** a mensagem é a primeira linha do próprio `gh`. Execute `gh auth status` em um terminal e faça login com `gh auth login`. Ou clique em **Abrir no GitHub em vez disso**: a própria página de nova issue do GitHub abre com o rascunho preenchido, e você a envia lá.
|
|
215
224
|
- **Nenhuma etiqueta de branch em uma linha de chat:** a barra lateral não está em “Em uma única lista” (em “Workspace” e “Árvore de workspaces”, nenhuma linha de chat mostra uma etiqueta), o chat não teve nenhum turno desde que você instalou esta versão, a pasta dele não é um repositório git, ou **Branch do Git nas linhas de chat** está desativado. Depois de uma atualização, reinicie o dsh (a parte Host registra o branch).
|
|
216
225
|
- **Verificação da meta diz que o teste saiu com o código 127 ou "not found":** o dsh iniciado pelo Finder ou pelo Dock pode ter um PATH mais curto que o do seu terminal, então ele não encontra `npm`, `pnpm` ou `cargo`. Inicie o dsh a partir de um terminal ou defina o seu próprio comando de teste com o caminho completo em **Verificação da meta** → **Editar**. **Executar agora** mostra o resultado na hora.
|
|
217
226
|
- **A meta não fecha e o agente continua trabalhando:** **Verificação da meta** encontrou um teste com falha ou trabalho faltando; a linha abaixo da meta mostra o motivo (passe o mouse sobre o resultado para ver os detalhes). Corrija a causa ou o comando de teste, ou conclua a meta você mesmo com `/goal` ou com a barra da meta (isso não é verificado).
|
|
218
|
-
- **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.
|
|
227
|
+
- **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.23.0`); veja a nota de instalação acima.
|
|
219
228
|
- **Fazer backup agora diz "Outra ação de backup está em andamento":** uma ação está em execução em outra janela do dsh ou no console de resgate (eles compartilham um arquivo de bloqueio, `.composer-plus.lock`, na pasta de backups). Aguarde até ela terminar. Se nenhuma ação estiver em execução, o próximo clique assume o bloqueio de um processo encerrado.
|
|
220
229
|
- **O console de resgate diz "dsh is running":** feche o dsh primeiro. Se o dsh estiver mesmo fechado, o arquivo citado na mensagem sobrou de uma falha: remova-o e tente de novo.
|
|
221
230
|
- **Depois de uma restauração, o dsh não inicia ou falta um plugin:** os pacotes de plugin de um perfil precisam ser instalados de novo. O console de resgate oferece isso depois de uma restauração; ou execute `pnpm install` em cada pasta de `$DSH_HOME/profiles/` que ele listar. Os segredos que não estavam no vault (outro computador) precisam ser informados de novo: o console os lista.
|
|
@@ -237,9 +246,11 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
237
246
|
- O dsh 0.2.1 carrega uma atualização imediatamente quando a nova versão não muda nenhuma configuração do dsh; caso contrário, e no dsh 0.2.0, reinicie o dsh para carregá-la. O plugin nunca reinicia o dsh por você. Perfis web/CLI sem o gerenciador de plugins do dsh só avisam que há uma nova versão.
|
|
238
247
|
- **Novidades do Composer Plus N** mostra as notas no idioma de **Idioma do aplicativo**. Um idioma da interface com outra região recebe as notas do seu idioma base (`en-GB` recebe as notas em inglês, e `zh-TW`, as notas em chinês de `zh`). Um idioma sem notas (um que outro pacote de idioma adiciona, ou `pt-PT`, que não é `pt-BR`) mostra as notas em inglês. As notas vêm com a nova versão. Se a cópia em execução não tiver um arquivo de notas legível (`release-notes.json`), a janela mostra as notas em inglês do GitHub.
|
|
239
248
|
- Uma versão instalada enquanto o dsh está em execução (uma atualização por Configurações → Plugins ou por uma pasta copiada) só carrega depois de reiniciar o dsh: até lá, **Atualizações do Composer Plus** mostra a versão em execução e pede para reiniciar. A janela **Novidades do Composer Plus N** dessa versão aparece uma vez na primeira inicialização dela. A primeira inicialização depois de instalar este plugin não mostra janela; **Novidades desta versão** abre as notas da versão em execução.
|
|
249
|
+
- A linha da estrela do GitHub abaixo das notas não sabe se você já deu uma estrela ao repositório: o plugin não faz nenhuma chamada de rede para isso. Cada navegador (e o app para desktop) guarda seu próprio registro, então a linha pode aparecer mais uma vez em outro.
|
|
240
250
|
- **Rejeitar com nota** envia a nota como uma mensagem no turno que espera e depois rejeita a solicitação; o dsh mostra a nota no chat como uma mensagem sua. Enquanto o campo da nota está aberto, o cartão mostra só **Cancelar** e **Rejeitar**, então um clique não pode permitir a solicitação por engano; `Esc` ou **Cancelar** traz de volta os botões do dsh. Uma nota vazia não envia nada (use o próprio **Rejeitar** do dsh). Se a rejeição falhar depois que a nota foi enviada (por exemplo, a solicitação foi respondida em outro lugar nesse meio-tempo), a nota fica no chat e o modelo a lê no próximo passo dele. O botão fica na marcação do cartão de aprovação do dsh (`data-approval-key`), porque o dsh não tem um espaço para ações do cartão; se uma atualização do dsh mudar essa marcação, o botão não aparece e o próprio **Rejeitar** do dsh funciona como antes. Uma nota pode ter no máximo 4.000 caracteres.
|
|
241
251
|
- **Entrada secreta** esconde só o texto exato de um valor: `[secret]` o substitui nos resultados de ferramenta posteriores do mesmo chat. O agente ainda pode ler o arquivo com um comando de shell e imprimir o valor de outra forma (base64, uma parte, com espaços), e essa forma chega ao modelo. As ferramentas de arquivo do próprio agente (read, grep, write, edit) não conseguem abrir a pasta de segredos. Se o valor também for uma palavra comum, outros resultados desse chat também mostram `[secret]`. O arquivo fica até o turno terminar; se o dsh fechar durante o turno, a próxima inicialização o apaga. Um chat pode ter um só pedido aberto por vez. A ferramenta adiciona cerca de 870 caracteres (cerca de 220 tokens, estimado) a cada solicitação ao modelo: desative-a quando não a usar.
|
|
242
252
|
- **Citar na resposta** cita o texto como a página o mostra: um bloco de código, uma tabela ou uma lista vêm como linhas simples, sem as marcas de Markdown. Uma seleção que começa em uma resposta e termina em outra, ou que toca o raciocínio, uma linha de ferramenta ou sua própria mensagem, não mostra o botão: selecione dentro de uma só resposta. O botão encontra a resposta pela estrutura do chat do dsh, porque o dsh não tem um slot para seleção de texto; se uma atualização do dsh mudar essa estrutura, o botão não aparece. Quando a citação fica no fim do campo, mais uma linha vazia entra depois dela para que a próxima linha digitada comece abaixo; o dsh remove as linhas vazias do fim ao enviar.
|
|
253
|
+
- **Citar da prévia do arquivo** lê a própria prévia de arquivos do dsh: os números de linha vêm das linhas da prévia, então estão certos para arquivos de código e de texto. Um arquivo Markdown aparece como uma página formatada, então a citação dele tem o texto sem as marcas de Markdown e sem números de linha; uma citação de PDF tem a página, não uma linha. Uma seleção no cabeçalho do caminho, em outro visualizador (uma planilha, um arquivo do Office, uma imagem) ou sobre dois arquivos abertos não mostra o botão, e a barra lateral direita em tela cheia também não (nesse caso o campo de texto não está na tela). O botão encontra a prévia pela estrutura da página do dsh, porque o dsh não tem um slot para uma seleção ali; se uma atualização do dsh mudar essa estrutura, o botão não aparece. Só o texto selecionado vai para o campo de texto: se o arquivo mudar depois, a citação não muda.
|
|
243
254
|
- **Chat paralelo** é somente leitura pelo próprio modo somente leitura do dsh: as ferramentas de arquivo não podem escrever e os comandos de shell rodam no sandbox do dsh sem escrita (ou não rodam quando o sandbox não consegue iniciar). O agente ainda pode pedir mais acesso com o cartão de aprovação do dsh, e uma chamada de rede (por exemplo, uma requisição a uma API) ainda pode mudar algo fora do computador. A cópia é feita no momento mais recente em que nenhuma mensagem esperava na fila, então uma pergunta feita enquanto há mensagens na fila não vê o que aconteceu depois delas. Uma etapa do chat em andamento é fechada na cópia, então o chat paralelo conhece o início dessa etapa, mas não o resultado. O chat paralelo é um chat comum: fica na barra lateral e conta no seu uso do modelo; arquive-o lá. Trazer de volta pega só as mensagens do próprio chat paralelo (no máximo 12.000 caracteres) e só a última resposta de cada pergunta; as notas do agente entre as chamadas de ferramenta ficam de fora. O dsh não oferece aos plugins um espaço para um chat dentro da barra lateral direita, então o chat paralelo abre na visão principal.
|
|
244
255
|
- **Notas no diff** funciona só no painel de alterações, não na visão Último turno do dsh. Um intervalo deve ficar em um só bloco do diff (uma parte `@@`). As notas ficam no armazenamento deste navegador, então outro navegador ou o dsh em outro computador não as vê; o Tether guarda as próprias notas na memória. Uma nota guarda as linhas como estavam no clique: se o agente mudar o arquivo depois, a nota ainda mostra as linhas e os números antigos. No máximo 50 notas por chat, 2.000 caracteres por nota e 40 linhas por nota (depois uma linha `…`).
|
|
245
256
|
- **Permitir neste chat** conta o limite de tempo a partir do momento da autorização. Um novo limite de tempo vale na hora para as autorizações em vigor, então um limite menor pode encerrá-las na hora. As autorizações da versão 1.12 e anteriores não têm horário: depois da atualização, o agente pergunta mais uma vez sobre essas ferramentas.
|
|
@@ -247,7 +258,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
247
258
|
- **Ajustar o cartão de pergunta à janela** muda só o cartão de pergunta do dsh, não o cartão de revisão do plano. Ele encontra o cartão pela marcação do dsh (`data-question-key`, `data-question-scroll`); se uma atualização do dsh mudar essa marcação, o cartão aparece como o dsh o desenha. A altura do cartão segue a janela, não o chat: em um chat dentro de um painel lateral estreito, um cartão alto ainda pode passar do topo do chat.
|
|
248
259
|
- **Ajustar o cabeçalho do chat à janela** encontra o cabeçalho do chat do dsh pelos nomes de classe gerados (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), porque o dsh não oferece um ponto de extensão para o layout dele. Se uma atualização do dsh mudar esses nomes, o cabeçalho aparece como o dsh o desenha. Em uma coluna de chat muito estreita o cabeçalho pode ocupar duas ou três linhas, então sobra menos espaço acima das mensagens.
|
|
249
260
|
- **Conexão móvel** só funciona no macOS (ela usa `en0`, `openssl`, `swift` e `dns-sd`). Ela usa as portas fixas 19390 e 19391, então só um dsh em cada Mac pode executá-la por vez (cada Mac é uma entrada na lista de Macs do celular). Com uma chave APNs em `apns.json` (veja `tether/README.md`), o Mac envia as notificações pelo serviço de push da Apple, então elas chegam também com o Tether fechado; o Mac precisa estar ativo e com o dsh aberto. Sem a chave, o celular só as recebe enquanto o Tether está aberto ou acabou de ir para segundo plano. O Tether só as envia depois que você ativa "Settings → Notifications → Send notifications" no Tether. O Tether guarda essa opção e o horário dela separadamente para cada Mac pareado. Ela vem desativada por padrão em cada Mac, e o iOS pede a permissão quando você a ativa. O app iOS ainda não está na App Store: compile-o a partir de `tether/ios` com o Xcode. "Tailscale only" ainda precisa de um endereço de Wi-Fi ou Ethernet no Mac (o gateway só inicia com um). O registro de acesso é de cada Mac e guarda só as 200 tentativas mais recentes; uma tentativa repetida em até um minuto soma um na mesma linha. Cada notificação mostra o Mac e o projeto do chat (`Studio Mac · recipe-box`), o título do chat e o texto: Turn finished mostra a última resposta do agente. Com a chave do APNs, esse texto passa pelo serviço de push da Apple. O bloqueio do app Tether não oculta as prévias das notificações na Tela Bloqueada do iPhone: desative-as nos Ajustes do iOS. Os pontos verdes do Tether seguem o Mac: um chat que você abre no dsh também perde o ponto no celular. Um chat que você abre no Tether perde o ponto só nos celulares. O ponto do próprio dsh no Mac fica até você abrir o chat no Mac.
|
|
250
|
-
- **Computadores remotos** precisa do Tailscale nos dois Macs, e do Composer Plus com este recurso ativado no Mac que você abre. Esse Mac não pode estar em repouso, e o dsh precisa estar em execução nele. O
|
|
261
|
+
- **Computadores remotos** precisa do Tailscale nos dois Macs, e do Composer Plus com este recurso ativado no Mac que você abre. Esse Mac não pode estar em repouso, e o dsh precisa estar em execução nele. O seletor só aparece quando a barra lateral esquerda está aberta (não quando ela mostra só ícones). A página do outro Mac só mostra o seletor quando esse Mac tem esta versão do Composer Plus ou uma mais recente. Com uma versão mais antiga, um botão **Voltar para este Mac** aparece no topo depois de alguns segundos. Cada computador que você abriu mantém a página dele na memória até você desativar o recurso ou reiniciar o dsh. No app para desktop, a página do outro Mac é uma página incorporada: os atalhos de teclado do próprio dsh (por exemplo, um novo chat) não funcionam nela, e downloads de arquivos, microfone e notificações também não funcionam ali. Ele usa a porta 19392 (só um dsh em cada Mac pode deixar outros computadores entrarem). Na página de outro Mac, o seletor só troca entre os computadores deste Mac: você não pode abrir um terceiro Mac por meio do outro Mac.
|
|
251
262
|
- Um link de sessão funciona dentro dos chats; clicar nele não abre o chat. Um link criado com **Copiar link da mensagem** só abre a mensagem no dsh 0.2.1 ou mais recente, e só a partir de uma mensagem em um chat (o dsh 0.2.0 não tem regras de texto do usuário, então ali o link é copiado, mas aparece como texto simples). Uma mensagem que uma reversão removeu, ou que a compactação tirou do histórico que o dsh carrega, não pode ser mostrada: o link avisa isso. Os botões 🔗 se prendem às linhas de mensagem do dsh; se uma atualização do dsh mudar essa marcação, eles não aparecem.
|
|
252
263
|
- **Marcar tudo como lido** muda os pontos de não lido do próprio dsh por uma parte do dsh que não é uma API pública (a lista `completionUnread` do status de sessão do dsh). Se uma atualização do dsh mudar esse nome, o item não aparece. O item fica no menu "…" do projeto no dsh, que não tem espaço para plugins; se o dsh mudar esse menu, o item também não aparece.
|
|
253
264
|
- **Editar mensagem na fila no lugar** não altera uma mensagem que começou a ser enviada nesse meio-tempo nem sobrescreve uma mensagem que mudou nesse meio-tempo (por exemplo, no Tether do iPhone): um aviso informa isso. Uma imagem nova precisa de um modelo que aceite imagens (valem os limites de imagem do próprio dsh), e um arquivo novo precisa terminar o upload antes que você possa salvar. Só as suas próprias mensagens na fila podem ser editadas: uma rodada de meta ou uma resposta a uma pergunta na fila, não. Depois de uma atualização do plugin, só as edições de texto funcionam na hora: reinicie o dsh antes de salvar uma mensagem com imagens ou arquivos (a parte Host carrega na inicialização).
|
|
@@ -255,6 +266,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
255
266
|
- O mapa de branches de **Árvore** adivinha para onde vai cada seta, porque o git não guarda em qual branch um branch é mesclado. Um branch mesclado aponta para o branch cujo commit de mesclagem o recebeu primeiro. Um branch que aguarda aponta para o branch mais próximo de onde ele partiu (o branch principal primeiro); quando dois branches partiram do mesmo commit, o mapa pode escolher o errado. Um branch que avançou com um fast-forward não tem commit de mesclagem, então o rótulo **Mesclado** dele não abre nada. O branch principal é o branch padrão de `origin`; se não houver, `main` ou `master`; se também não houver, o branch aberto. O mapa lê os 20.000 commits mais recentes e mostra no máximo 60 branches; em um histórico mais longo, ele avisa que algumas setas podem estar erradas. Um branch mesclado com squash ou rebase (por exemplo, no GitHub) aparece como **Aguardando**: o git não guarda nenhum vínculo com os commits dele.
|
|
256
267
|
- **Este chat** conta só os arquivos que as ferramentas de arquivo do dsh (`write`, `edit`, `str_replace_editor`) gravaram. Arquivos que um comando (`bash`) alterou não estão nesta visão; eles aparecem em **Não confirmadas**. Sem um snapshot de Reverter turno do chat (Reverter turno desativado, dsh-rewind-plugin instalado ou um chat mais antigo que o plugin), a visão compara com o último commit e avisa isso. Reverter turno guarda os 50 snapshots mais recentes de um chat: num chat mais longo, a visão compara com o mais antigo guardado, informa a partir de qual mensagem e não conta as alterações anteriores. **Ocultar alterações de espaço em branco** é `git diff -w`: uma linha que mudou só nos espaços dentro dela também fica oculta.
|
|
257
268
|
- **Abrir issue no GitHub** precisa do GitHub CLI (`gh`) no PATH do dsh e de um remoto do GitHub na pasta do chat. Ele roda no máximo 60 s; se o `gh` demorar mais, a issue pode existir no GitHub sem o link dela na lista (antes de clicar de novo, olhe no GitHub: a lista só lê o link de uma execução concluída, então um novo clique pode abrir uma segunda issue). Uma pasta com mais de um remoto do GitHub usa o padrão do próprio `gh` (`gh repo set-default`).
|
|
269
|
+
- **Relatar uma issue** abre issues só no repositório do Composer Plus (`furkancak1r/dsh-composer-plus`), não no seu projeto (para isso, use **Abrir issue no GitHub** na lista **Depois** de Ideias de recursos). Precisa de um modelo padrão no dsh para o rascunho e do GitHub CLI (`gh`) com login para abrir a issue. O rascunho é sempre em inglês. O modelo pode errar um detalhe: leia o rascunho antes de clicar em **Abrir issue**. Abrir a issue leva no máximo 60 s; o mesmo título e o mesmo texto de novo dentro de uma hora mostram a issue anterior em vez de uma cópia. **Abrir no GitHub em vez disso** corta uma descrição muito longa para manter o link curto.
|
|
258
270
|
- **Chats que alteraram este arquivo** só conhece as ferramentas de arquivo do dsh (`write`, `edit`, `str_replace_editor`), como **Este chat**: uma alteração feita por um comando (`bash`) não aparece na lista. Ele lê os 300 chats mais recentes do repositório (pela data de criação) e avisa quando há mais; mostra no máximo 100 linhas. Um arquivo renomeado aparece com o nome que a ferramenta escreveu. Um chat cuja pasta fica fora do repositório (também por outro caminho para os mesmos arquivos) não é contado. A primeira abertura depois de iniciar o dsh lê todos os registros de chat do repositório (cerca de 4 s para 275 chats); as aberturas seguintes leem só os chats que mudaram desde então.
|
|
259
271
|
- **Branch do Git nas linhas de chat** mostra o branch da pasta do chat quando o último turno dele começou ou terminou, não o branch atual: uma troca de branch fora de um turno aparece depois do próximo turno. Chats de antes desta versão não mostram etiqueta até o próximo turno. A etiqueta fica na marcação das linhas de chat do dsh (o dsh não tem um espaço ali); se uma atualização do dsh mudar essa marcação, nenhuma etiqueta aparece. A etiqueta só aparece em “Em uma única lista”.
|
|
260
272
|
- **Um branch por chat** no modo de plano: o dsh envia `/plan <mensagem>` como comando, não como mensagem, então o Composer Plus intercepta o envio do comando no editor de mensagens do dsh (não é uma API pública). Se uma atualização do dsh mudar isso, `/plan <mensagem>` com **Novo branch** escolhido roda no Novo chat aberto como comando do próprio dsh. Quando o Host não consegue ativar o modo de plano no novo chat, a pasta do branch fica e a mensagem não é enviada, então o novo chat não altera arquivos no modo padrão.
|
|
@@ -279,6 +291,8 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
279
291
|
- **Continuar em um novo chat** envia o chat (mensagens, chamadas de ferramentas e o fim de cada resultado de ferramenta, no máximo cerca de 60.000 caracteres, a parte mais recente) para o próprio modelo do chat. A nota de passagem pode deixar de fora uma decisão ou um arquivo: leia-a antes de iniciar. O novo chat conhece só a nota e o chat vinculado (o dsh anexa o chat antigo como contexto somente leitura); o contexto do modelo dele começa pequeno, e o chat antigo fica como está. Só uma nota ou um início por chat de cada vez.
|
|
280
292
|
- **Detalhamento do contexto** mostra estimativas com a regra do próprio dsh (cerca de 4 caracteres por token), a mesma regra do anel de contexto do dsh; a contagem do próprio modelo pode ser diferente. As definições de ferramentas são as da solicitação mais recente. Ele mostra o contexto como o log do chat o tem; um turno em execução aparece depois do próximo passo dele.
|
|
281
293
|
- **Etapas planejadas** economiza tokens só quando o modelo planeja: enquanto está ativado, cada requisição leva a ferramenta `plan_next_steps` e uma instrução curta (cerca de 500 tokens), também em chats em que o modelo nunca planeja. Uma condição prova só o que diz (por exemplo: o código de saída do build foi 0), não que o trabalho está certo. `ok` lê as marcas de resultado do próprio dsh (`[exit code: N]`, tempo esgotado, recusas do sandbox); um comando que falha sem um código de saída diferente de zero passa. As etapas rodam uma de cada vez; duas etapas prontas ao mesmo tempo voltam para o modelo. A mensagem da etapa fica salva como mensagem de assistente do modelo do chat (o dsh não tem uma marca para mensagem escrita por plugin), por isso o texto diz que o Composer Plus a executou. Não está no Tether.
|
|
294
|
+
- **Pacote de skill em turco** instala um skill de terceiros: as regras vêm do repositório do autor no GitHub, não do Composer Plus, e uma versão nova é usada a partir da próxima verificação diária sem uma revisão nossa. A verificação prova que os arquivos são os que o GitHub lista para aquele commit, não que as regras sejam boas. O modelo decide quando carregar o skill (você também pode chamá-lo pelo nome); as regras valem só para textos em turco. A parte Host usa o idioma que um navegador informou por último: quando dois navegadores usam idiomas diferentes, vale o mais recente. O GitHub permite 60 chamadas de API por hora sem login; uma verificação recusada mantém a cópia instalada e mostra o motivo nas Configurações.
|
|
295
|
+
- **Desembaraçar o código** traz uma cópia fixa da skill (caldoai/skills, commit f3cf477): uma mudança no original só chega com uma nova versão do Composer Plus. A skill executa uma meta longa que pode alterar muitos arquivos, e seus subagentes e verificações gastam muitos tokens. Onde o projeto não tem testes, ela pode mudar o comportamento sem aviso: inicie-a em um branch e leia o diff antes de fazer o merge. Uma skill com o mesmo nome no projeto, em uma pasta de skills personalizada ou em `~/.dsh/skills` a substitui. Com o interruptor desligado, `/untangle-codebase` vai para o modelo como texto comum.
|
|
282
296
|
- **Quadro de tarefas** mostra os chats que o dsh lista nesta janela: um chat fora de um projeto aparece só em **Todos os projetos**, e uma pasta de “Um branch por chat” (`<project>/.worktrees/<name>`) conta como o projeto dela. A coluna de um cartão é o estado ao vivo do chat, então os cartões não podem ser arrastados: um chat vai para **Concluído** quando o turno dele termina, também depois de um erro ou de uma parada, e volta para **Fazendo** quando é executado de novo. O ponto verde é o próprio ponto de concluído do dsh, que o dsh mantém só nesta janela: depois de recarregar, os chats concluídos aparecem sem ele. **Concluído** mostra os 50 chats mais recentes (**Mostrar N mais antigas** mostra o resto). **Buscar projetos** encontra um projeto só pelo nome, não pelo caminho da pasta. **Ativos nas últimas 2 horas** oculta um projeto quando todos os chats dele têm mais de 2 horas, estão ociosos e lidos; o quadro continua mostrando o projeto que você escolheu. **Nova tarefa** lembra só o novo chat mais recente desta janela: quando você abre outro chat antes da primeira mensagem, esse chat fica no topo de **Fazendo** como **Nova tarefa** até você escrever nele, mas o quadro volta sozinho só para o mais recente. Depois de recarregar, um novo chat sem mensagem não aparece no quadro (o dsh o mantém como a Nova sessão vazia dele). As etiquetas vêm de uma chamada ao modelo por tarefa, a partir da primeira mensagem dela: elas podem estar erradas, e um chat que você não iniciou no quadro não tem nenhuma. O título é o próprio título do chat no dsh (o serviço de títulos do dsh, com o modelo do chat); até ele chegar, o cartão mostra a primeira linha da primeira mensagem. **×** e **Limpar tudo** só tiram cartões do quadro: nenhum chat é apagado. **Desfazer** aparece só por 8 segundos, nesta janela; depois, **Retirados (N)** → **Devolver** traz um cartão de volta, e um chat que é executado de novo volta sozinho. **Limpar tudo** pergunta antes e tira os cartões concluídos e lidos do projeto mostrado (de todos os projetos com **Todos os projetos**), também os que estão atrás de **Mostrar N mais antigas**; um cartão não lido (verde) fica. O dsh mantém o ponto verde só nesta janela, então, depois de recarregar, o Limpar tudo pode tirar um cartão cuja resposta você não leu. A lista fica neste Mac para todas as janelas e para o Tether; quando ela chega a 5.000 chats, os mais antigos voltam. **Responder** responde só à solicitação mais recente do chat: quando o chat a respondeu em outro lugar (outra janela, Tether, Revisão automática) ou pergunta algo novo, o painel avisa e não envia nada. As versões anteriores tinham uma lista de tarefas com comentários e ferramentas para agentes; elas não existem mais, e o `board.json` antigo não é mostrado. A ideia e a aparência vêm do [Kanzo](https://github.com/emanuele-em/kanzo), de emanuele-em (AGPL-3.0); o Composer Plus não usa código dele. `Cmd+Shift+K` é um atalho do dsh: em um navegador no Linux, ele não tem tecla padrão (defina uma na página de atalhos de teclado do dsh), e uma extensão do navegador ou outro aplicativo pode usá-la antes. Um cartão sai de **Concluído** quando o ponto verde do dsh some (você abriu o chat) ou, para um chat que terminou atrás do quadro enquanto era o chat aberto, quando esse chat aparece sem um painel por cima. Esse estado de lido fica só nesta janela do dsh, como os pontos do dsh: depois de recarregar ou em outra janela, todo chat concluído conta como lido, então fica em **Concluídos recentemente**.
|
|
283
297
|
- **Prioridade à mensagem enviada após Parar** só age depois que você interrompe o chat (ou depois de um turno que falhou, ou ao abrir um chat que ainda tem fila): uma mensagem enviada enquanto um turno é executado continua esperando no fim da fila. Ela só passa à frente das suas próprias mensagens na fila: se uma rodada de meta ou uma resposta a uma pergunta espera na fila, a ordem do dsh fica. Ela lê uma parte do dsh que não é uma API pública (se o turno interrompido ainda está terminando); se uma atualização do dsh mudar esse nome, a mensagem só passa à frente depois que esse turno terminar. Chats de subagentes mantêm a ordem do dsh.
|
|
284
298
|
- **Memória do projeto** pertence à primeira pasta do chat (a pasta de projeto do dsh): um chat que muda de pasta com `cd` continua com a memória do primeiro projeto, e a mesma pasta aberta por outro caminho para os mesmos arquivos a compartilha. Um chat congela sua seção de memória quando começa, então uma nota salva depois aparece a partir do chat seguinte (`memory_recall` a encontra na hora). A revisão guarda só o que o modelo decide guardar: pode deixar passar um fato ou guardar um errado; confira em **Abrir memória** e mude lá, ou edite os arquivos à mão com o dsh fechado. **Abrir memória** envia as notas do projeto selecionado e as notas globais (todos os projetos quando você seleciona Todas as notas; no máximo cerca de 60.000 caracteres, o resto só é contado e não pode mudar nesse pedido) e o seu texto ao modelo padrão do dsh, não ao modelo do chat. Uma prévia fica no Mac por 30 minutos e até o dsh reiniciar; se uma revisão ou o agente mudar as notas nesse meio-tempo, **Aplicar** recusa e você pede a prévia de novo. **Aplicar** grava todas as mudanças de uma prévia ou nenhuma: se uma mudança não puder ser gravada (por exemplo, MEMORY.md está cheio), as notas ficam como estavam e o motivo aparece. Cada turno concluído com uma mensagem sua custa uma chamada ao modelo; uma chamada com falha lê as mesmas mensagens de novo depois do turno seguinte. Chats de subagentes não são revisados. A ideia e o formato de arquivo vêm do [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); o Composer Plus não usa o código dele e nunca lê nem escreve a memória do próprio DS Bot.
|
|
@@ -293,6 +307,8 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
293
307
|
- **Restaurar** só funciona no console de resgate, com o dsh fechado: substitui todo o dsh home. O antigo fica ao lado como `.dsh.pre-restore-<time>` até você removê-lo, então o disco precisa de espaço para os dois. Os chats mantêm os caminhos dos projetos: em outro computador, um projeto em outro caminho aparece como ausente até você adicioná-lo de novo. Symlinks que apontam para fora do dsh home (por exemplo, skills vinculadas de outra pasta) voltam como links; os destinos deles precisam existir nesse computador.
|
|
294
308
|
- **Verificação de logs de sessão** lê o log mais recente de cada chat com as próprias regras do dsh sobre o que abre: uma linha que não é JSON ou que está fora de ordem só conta como dano quando um fim de turno vem depois dela (senão o dsh abre o chat sem as linhas a partir dali, então ele não aparece na lista). Ela não confere os eventos de um log com as regras de eventos do próprio dsh, então um log que ela considera íntegro ainda pode não abrir depois de uma atualização do dsh. Um reparo pega a cópia de um backup: as mensagens depois desse backup se perdem nesse chat (o arquivo danificado fica ao lado). Um chat aberto neste dsh não é reparado em Configurações: o dsh o mantém em uso.
|
|
295
309
|
- **Backup automático** só é executado enquanto o dsh está em execução: um backup que venceu com o dsh fechado é executado cerca de 45 s depois da próxima inicialização. O snapshot de uma nova versão é feito depois dessa inicialização, não antes da atualização.
|
|
310
|
+
- **Lembrar o tamanho da janela** funciona só no app para desktop. A cada início, o dsh mostra primeiro a janela em 1280 × 820; a janela passa ao tamanho salvo quando o plugin carrega. Uma página não tem evento para o movimento da janela, então o plugin lê a janela uma vez por segundo: uma mudança nos últimos 2 segundos antes de o dsh fechar não é salva. O tamanho fica salvo por computador, no armazenamento do próprio app.
|
|
311
|
+
- **Contagem de uso:** conta cópias, não pessoas: cada dsh home é uma cópia. A contagem de cópias únicas (`installed.txt`) só inclui cópias que atualizam para a primeira versão com esse arquivo ou para uma mais nova; uma cópia que fica numa versão mais antiga não é contada. Uma cópia cuja pasta `storages` é apagada é contada de novo. O GitHub pode contar como um só os pedidos que vêm do mesmo endereço IP (por exemplo, vários computadores atrás do mesmo roteador NAT) em cerca de 10 minutos.
|
|
296
312
|
- O suporte nativo foi pedido no projeto original: `move` na fila em [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), um estado de Continuar em [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
297
313
|
|
|
298
314
|
## Perguntas frequentes
|
|
@@ -363,6 +379,8 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
363
379
|
|
|
364
380
|
**Como respondo só a uma parte de uma resposta longa?** Selecione essa parte e clique em **Citar** acima da seleção (**Citar na resposta**, ativado por padrão). A parte vai para o campo de texto como citação `> …`, e você escreve sua resposta abaixo.
|
|
365
381
|
|
|
382
|
+
**Como mostro ao agente as linhas exatas de um arquivo?** Abra o arquivo na barra lateral direita (**Arquivos do workspace**), selecione as linhas e clique em **Citar** acima da seleção (**Citar da prévia do arquivo**, ativado por padrão). O campo de texto recebe o caminho e os números de linha (por exemplo `src/login.js:2-3`) e as linhas como bloco de código; escreva sua pergunta abaixo delas.
|
|
383
|
+
|
|
366
384
|
**Posso perguntar algo enquanto o agente trabalha, sem pará-lo?** Digite a pergunta e clique em **Perguntar em um chat paralelo** no campo de texto (**Chat paralelo**, ativado por padrão). Uma cópia somente leitura do chat responde enquanto o chat continua. No chat paralelo, **Trazer de volta** coloca a resposta no campo de texto do chat.
|
|
367
385
|
|
|
368
386
|
**Como digo ao agente o que mudar no diff dele?** No **Painel de alterações**, abra o diff do arquivo, clique em **+** em uma linha e escreva uma nota (**Notas no diff**, ativado por padrão). Depois clique em **Enviar ao campo de texto**: as notas vão para o campo de texto com o arquivo, os números de linha e as linhas.
|
|
@@ -371,7 +389,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
371
389
|
|
|
372
390
|
**Perdi meu iPhone. Como impeço que ele acesse meu Mac?** Clique em **Conexão móvel** no canto inferior esquerdo da barra lateral e clique em **Remove** ao lado desse iPhone. A chave dele para de funcionar na hora; ele só volta com um novo pareamento que você aprove no Mac.
|
|
373
391
|
|
|
374
|
-
**Como continuo um chat do meu outro Mac a partir deste?** No outro Mac, ative **Configurações → Composer Plus → Computadores remotos** e **Permitir que outros computadores abram este Mac**, clique em **Criar link de pareamento** e copie o link (envie o link para você mesmo, por exemplo pelo AirDrop ou pelo Notas). Neste Mac, ative também **Computadores remotos**, escolha **Adicionar um computador…**
|
|
392
|
+
**Como continuo um chat do meu outro Mac a partir deste?** No outro Mac, ative **Configurações → Composer Plus → Computadores remotos** e **Permitir que outros computadores abram este Mac**, clique em **Criar link de pareamento** e copie o link (envie o link para você mesmo, por exemplo pelo AirDrop ou pelo Notas). Neste Mac, ative também **Computadores remotos**, escolha **Adicionar um computador…** no seletor da barra lateral esquerda (à direita do nome da marca, acima de **Nova sessão**), cole o link, digite um **Nome** e clique em **Conectar**. Depois, clique em **Aprovar** no outro Mac. A partir daí, escolha esse computador no mesmo menu: ele ocupa esta janela. Escolha **Este Mac** no mesmo lugar para voltar. Enquanto isso, os chats deste Mac continuam em execução.
|
|
375
393
|
|
|
376
394
|
**Posso bloquear o Tether com o Face ID?** Sim: no Tether, ative "Settings → Privacy → Lock with Face ID". Depois disso, o Tether pede o Face ID (ou o código) quando abre e quando você volta para ele.
|
|
377
395
|
|
|
@@ -403,6 +421,12 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
|
|
|
403
421
|
|
|
404
422
|
**O dsh pode rodar o próximo comando sem perguntar de novo ao modelo?** Sim, com **Etapas planejadas** (desativado por padrão): ative em Configurações → Composer Plus. O modelo pode então planejar os próximos comandos com uma condição, por exemplo “rode os testes quando o build passar”, e o Composer Plus executa uma etapa sem nova chamada ao modelo quando o resultado atende à condição. Aprovações e sandbox continuam iguais.
|
|
405
423
|
|
|
424
|
+
**De onde vem o skill em turco e posso removê-lo?** De [yucezerey/turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) no GitHub (MIT). O Composer Plus o instala só enquanto **Idioma do aplicativo** for Türkçe, guarda só os arquivos Markdown e não executa nenhum script dele. Para removê-lo, desligue **Pacote de skill em turco** em Configurações → Composer Plus: o skill e a cópia baixada são apagados na hora.
|
|
425
|
+
|
|
426
|
+
**Como relato um bug ou peço um recurso no Composer Plus?** Configurações → Composer Plus → **Relatar uma issue…** (ou o menu **…** de um chat → **Relatar uma issue do Composer Plus…**). Escolha um tipo, descreva-o no seu idioma e clique em **Escrever rascunho**. Confira o rascunho em inglês e depois clique em **Abrir issue**.
|
|
427
|
+
|
|
428
|
+
**Como o agente pode organizar um código bagunçado?** Digite `/untangle-codebase` em um chat (**Desembaraçar o código**, ativado por padrão), se quiser com uma área, por exemplo `/untangle-codebase src/api`. Primeiro o agente lista as cópias, os vínculos ocultos, os wrappers desnecessários, o código morto e os casos especiais; depois corrige tudo como uma meta e verifica de novo com subagentes. Inicie-a em um chat de **Um branch por chat** para que o trabalho fique no próprio branch.
|
|
429
|
+
|
|
406
430
|
**Funciona com o app desktop?** Sim: Configurações → Plugins → **Adicionar plugin** → `dsh-composer-plus`. Testado no dsh 0.2.0-rc.2 (desktop e web) e 0.2.1-rc.2 (web).
|
|
407
431
|
|
|
408
432
|
## Desenvolvimento
|
|
@@ -422,6 +446,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/t
|
|
|
422
446
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
|
|
423
447
|
# Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
|
|
424
448
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
|
|
449
|
+
# Quote from file preview (fake model): lines of a code, text, Markdown and PDF file in the right sidebar → Quote → the path, the line numbers and the lines in the sent message; no button for the path header; switch off + its thumbnail
|
|
450
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-preview-quote.mjs /path/to/dsh/lib/bin.js
|
|
425
451
|
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
426
452
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
427
453
|
# What's new after an update: the release notes show once (also after an install through another path), Esc and Close close them; Settings → What’s new in this version opens them again
|
|
@@ -494,3 +520,5 @@ PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/b
|
|
|
494
520
|
## License
|
|
495
521
|
|
|
496
522
|
MIT
|
|
523
|
+
|
|
524
|
+
`assets/skills/untangle-codebase/SKILL.md` é a skill `untangle-codebase` de [caldoai/skills](https://github.com/caldoai/skills), © 2026 Maze, sob a licença MIT ([sua licença](assets/skills/untangle-codebase/LICENSE)).
|