🎙️ dsh-talk

September 2, 2026 · View on GitHub

🎙️ dsh-talk

  • Canal 1024 store: npm i -g dsh1024 uma vez, depois dsh1024 plugin --profile web add dsh-talk (conta para o ranking de instalações do deepseek1024.com).

Loop de sessão voice-first para o DeepSeek Harness: fale com ele e ouça a resposta.

Pressione o microfone, fale e a resposta é lida em voz alta — falar interrompe.

License DSH plugin Node CI Version npm version npm downloads

English · 简体中文 · Español · Português · हिन्दी


Compatibilidade

SuperfícieStatus
HarnessDeepSeek Harness 0.1.2-alpha.5 (adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda.
Node^22.19.0 || >=24.0.0
NavegadorWeb Speech + MediaRecorder (melhor no Chrome/Edge); motores de transcrição/TTS do host para o resto

O que você ganha

O dsh-talk fecha o loop de voz nos dois sentidos:

  • Ferramenta speak — o agente lê suas respostas em voz alta. Motores TTS: voz do navegador, edge-tts (vozes neurais em rede) ou piper (local). O áudio toca no navegador; nos hosts que podem transportá-lo, o registro de sessão guarda a fala saneada (ver Limites de segurança).
  • Botão de microfone — pressione, fale e a transcrição cai na caixa de entrada (ou envia direto). Motores STT: Web Speech do navegador (com resultados intermediários), um servidor HTTP FunASR ou whisper.cpp local.
  • Falar interrompe — começar a falar para a reprodução (canal client→host sobre o namespace talk).
  • Anúncios de eventos — fim de turno, aprovações pendentes (seguro em cascata: nunca bloqueia o portão) e erros, com interruptor de mudo e frases configuráveis.
  • Aba de configurações — seleção de motor/idioma e interruptores de anúncios, salvos como operações append-only do patch de perfil com backups.

Início rápido

# 1. instale o bundle no seu perfil
dsh plugin --profile web add "github:PerryLink/dsh-talk#main"

# ou pelo npm (versões publicadas)
dsh plugin --profile web add dsh-talk

# 2. reinicie e verifique a linha
dsh --profile web --dump-config | grep -A2 'id: talk'

Depois pressione o microfone ao lado do compositor e fale; ou peça ao agente para falar:

> Diga "olá" com a ferramenta speak.

Instalação e desinstalação

  • Canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-talk#main" — o script prepare compila apenas com dependências de produção.
  • Canal npm (versões publicadas): dsh plugin --profile web add dsh-talk.
  • Canal tarball: pnpm pack neste repositório e então dsh plugin --profile web add ./dsh-talk-<version>.tgz.
  • Desinstalar: dsh plugin --profile web remove dsh-talk (ou remova a linha do patch do perfil).

Se o pnpm reportar ERR_PNPM_IGNORED_BUILDS para este pacote (a validação inofensiva do binário do esbuild), adicione allowBuilds: { esbuild: true } ao seu pnpm-workspace.yaml — o CLI dsh imprime o trecho exato.

Configuração

Todos os ajustes são campos Config do Schemastery (alteráveis pelo cordis.yml). O cordis.patch.yml documenta cada chave.

ChavePadrãoSignificado
record.enabledtrueMostrar o botão de microfone do compositor
record.hotkey(nenhuma)Atalho opcional, ex. "alt+r"
record.maxSeconds60Limite de gravação em segundos (1..600)
record.autoSubmitfalseEnviar a transcrição como mensagem do usuário (false = preencher o rascunho)
record.vad.enabled / silenceMs / energyThresholdtrue / 1500 / 0.01Detecção de atividade de voz: o silêncio encerra a gravação automaticamente (degrada para parada manual sem AudioContext)
stt.engineautoauto / web / funasr / whisper; auto prefere um motor local configurado, depois Web Speech
stt.languageautoIdioma BCP-47 ou auto
stt.interimtrueMostrar transcrições intermediárias (Web Speech)
stt.silenceFinaliseMs4000Parar o Web Speech contínuo após estes milissegundos sem fala (500..15000)
stt.funasr.url(nenhuma)Endpoint de inferência FunASR; obrigatório com o motor funasr
stt.whisper.modelPath(nenhuma)Modelo whisper.cpp; obrigatório com o motor whisper
tts.engineautoauto / browser / edge-tts / piper; auto prefere piper, depois edge-tts, depois a voz do navegador
tts.rate0Deslocamento de velocidade em porcentagem (-50..50) para edge-tts/piper
tts.fallbackToBrowsertrueCair para a voz do navegador quando um motor local falha
tts.browser.voiceName(nenhuma)Nome preferido da voz do navegador; se não existir, usa o padrão da plataforma
tts.browser.rate1Velocidade do SpeechSynthesis do navegador (0.1..10)
tts.browser.pitch1Tom do SpeechSynthesis do navegador (0..2)
tts.piper.modelPath(nenhuma)Modelo de voz piper; obrigatório com o motor piper
announce.enabledtrueInterruptor mestre de anúncios
announce.onTurnEnd / onApproval / onErrortrueQuais eventos são falados
announce.messages.*"Turn complete." etc.Frases faladas
interrupttrueFalar para a reprodução atual
maxSpeakChars20000Limite do texto da ferramenta speak (1..100000)
maxAudioCacheBytes8388608Limite da cache de áudio em memória (1 MiB..64 MiB)

stt.silenceFinaliseMs e record.vad.silenceMs são mecanismos distintos: o primeiro finaliza a transcrição do Web Speech quando o reconhecimento contínuo deixa de ouvir fala; o segundo é o detetor por energia do MediaRecorder que encerra a gravação (e a envia quando record.autoSubmit está ativo). Correm em pipelines diferentes e não partilham estado.

Ferramentas e superfícies

SuperfícieTipoNotas
speakferramentaLê texto em voz alta (browser/edge-tts/piper); overrides de motor/voz por chamada; resultado JSON canônico
botão de microfoneslot conversation.input.leftGravar → transcrever → preencher rascunho (ou enviar); falar interrompe ao pressionar
aba de configuraçõessettings.plugins.tab (id talk)Motores/idioma/anúncios; salvamento append-only
talk:*Typert Remotestatus, audio, transcribe, applySettings, interrupt (namespace do host)

Permissões e dados

  • Permissões: o plugin guarda apenas uma cache de áudio em memória com limite de bytes; a permissão do microfone é mediada pelo navegador. A aba de configurações apenas anexa fragmentos ao patch do perfil com backup — nunca reescreve o arquivo.
  • Dados: o áudio nunca entra no contexto do modelo nem no registro de sessão. Onde o vocabulário de sessão do host o aceita, o evento dsh-talk/speech carrega o id da fala, motor, razão, tamanho, texto saneado e, quando aplicável, voz, velocidade e tom do navegador; em hosts sem envelope o evento não é escrito. Toda superfície de exibição/registro redige credenciais, JWT, cabeçalhos bearer e caminhos temporários.
  • Rede: apenas os motores que você configurar são contatados. edge-tts faz síntese pela rede, o FunASR usa seu endpoint configurado e o webkitSpeechRecognition do Chrome envia o áudio do microfone aos servidores do Google para transcrição; a reprodução de speechSynthesis do navegador permanece local.

Limites de segurança

  • Visível para o modelo ⟺ registrado — o modelo vê apenas o valor canônico e o texto renderizado da ferramenta speak. O evento dsh-talk/speech é anexado apenas quando o host pode transportá-lo (ver Compatibilidade do host); os eventos tool/call + tool/result continuam sendo sempre o rastro reconstruível.
  • Anúncios de aprovação nunca bloqueiam — o listener de approval/request sempre chama next().
  • Saída saneada — credenciais e caminhos temporários de áudio nunca chegam a registros ou telas.
  • Compatibilidade do host — o evento dsh-talk/speech é anexado por uma comporta adaptativa. Hosts cujo vocabulário de tipos conhecidos cobre o evento o anexam diretamente; hosts com a opção ignorable o anexam com a marca; hosts sem envelope — toda linha publicada até 0.1.1-rc.2, e a linha 0.1.2-alpha, cujo Session.append não consegue estampar o marcador ignorable embora o campo do envelope seja mantido para compatibilidade de leitura — não recebem nenhum append, de modo que a fala nunca pode poluir o registro de sessão nessas linhas. Neles o histórico de reprodução ao vivo fica vazio e os resultados da ferramenta speak são o rastro reconstruível.
  • Falha ruidosa — motores inválidos, valores fora de faixa e motores sem seu modelo/endpoint obrigatório falham ao montar.

Limitações conhecidas

  • Suporte de navegador: Web Speech e MediaRecorder são detectados por capacidade; sem eles o botão desativa e os motores do host (FunASR/whisper.cpp) podem transcrever quando configurados.
  • Motores locais são instalação sua: os executáveis e modelos de edge-tts, piper e whisper.cpp devem ser instalados à parte.
  • Formato de gravação: o navegador grava com seu codec nativo do MediaRecorder; o whisper.cpp pode exigir um gravador WAV ou conversão no servidor.
  • Configurações aplicam ao recarregar: a aba anexa ao patch do perfil; um reload do perfil (ou reinício da web) ativa as mudanças.
  • O histórico de reprodução ao vivo fica vazio em hosts sem envelope: em 0.1.1-rc.2 e na linha 0.1.2-alpha o vocabulário do host não conhece dsh-talk/speech, então a comporta não escreve nada e a lista de reprodução da sessão no cliente fica vazia. A fala em si, o microfone, a aba de configurações e a ferramenta não são afetados.
  • Registros antigos escritos pelo dsh-talk ≤ 0.2.1 podem exigir reparo antes do carregamento a frio: versões até 0.2.1 anexavam eventos dsh-talk/speech sem marca. Em hosts 0.1.0-rc.7 ou mais recentes, uma sessão cujo registro já os contém falha no próximo carregamento a frio com SessionFormatUnsupportedError. Reparação: pare o host, faça cópia do registo .jsonl da sessão, acrescente "ignorable":true como membro de topo em cada linha JSON cujo "type" seja "dsh-talk/speech" (por exemplo, insira "ignorable":true, logo a seguir à { inicial) e reabra a sessão. Nada mais muda e nada se perde; novos appends desta versão nunca adicionam eventos sem marca.

Desenvolvimento

pnpm install        # node ^22.19 || >=24
pnpm run typecheck  # tsc: src + tests contra o checkout local do harness
pnpm run typecheck:ci  # tsc contra os tipos publicados 0.1.2-alpha.5 (sem paths)
pnpm test           # vitest: 77 testes, 13 suítes
pnpm run build      # declarações tsc + bundles tsdown (lib/)
pnpm run verify:self-contained  # as specs de dependências resolvem pelo registry
pnpm run verify:artifacts       # faces ESM construídas + handshake ModuleLoader do cliente
pnpm pack           # o tarball publicado

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, voice, speech, tts, stt, speech-to-text, text-to-speech, microphone

Contributors

  • @PerryLink — criador e mantenedor: pipeline de voz, motores de fala, gravador de microfone, anúncios de eventos, unidade de projeção e a documentação em cinco idiomas.

Este projeto é um dos 33 plugins de DeepSeek Harness mantidos por PerryLink. Se este ajuda você, os outros provavelmente também:

PluginOne-liner
dsh-dsh-auto-reviewAuto-revisão de segundo modelo na cadeia de aprovação, com falha fechada por padrão
dsh-dsh-background-agentsAgentes filhos em segundo plano duráveis com barra lateral de UI web, mensagens e interrupção
dsh-dsh-budgetGovernança de custos para DeepSeek Harness: orçamentos, carbono e latência em um painel.
dsh-dsh-checkpoint-rewindEquivalente ao /rewind do Claude Code: instantâneos, bifurcações de sessão, restauração de uso único
dsh-dsh-claude-moveMigre sessões, memória, habilidades e CLAUDE.md do Claude Code para o DSH
dsh-dsh-clickControle de desktop nativo multiplataforma para DeepSeek Harness — Windows primeiro.
dsh-dsh-composer-historyHistórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R
dsh-dsh-data-qualityVerificações de qualidade de datasets e verificação de citações (a ponte numérica opcional consumida aqui)
dsh-dsh-defendDefesa contra injeção de prompt, jailbreak e vazamento de segredos para DeepSeek Harness.
dsh-dsh-doublecheckGuardião de disciplina de engenharia: sabatina de requisitos, portões de teste, revisão adversária
dsh-dsh-drawRoteamento unificado de geração de imagens estáticas para DeepSeek Harness.
dsh-dsh-fastDiagnóstico de desempenho só de leitura para DeepSeek Harness.
dsh-dsh-fund-researchRelatórios de pesquisa deterministas para fundos mútuos públicos chineses
dsh-dsh-githubIntegração de PR/issues do GitHub para o DSH, cada escrita controlada por aprovação
dsh-dsh-industry-researchOrquestração de pesquisa setorial que sela as suas entregas através do ctx.researchReport.assemble deste plugin
dsh-dsh-libraryBase de conhecimento documental local para DeepSeek Harness.
dsh-dsh-local-aiIntegração de modelos locais (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actionsDiagnósticos, formatação, autocompletar, ações de código e renomeação LSP sobre servidores de linguagem
dsh-dsh-maskMiddleware de mascaramento de PII: anonimiza no limite do modelo, restaura na camada de exibição
dsh-dsh-mcp-panelPainel de tempo de execução MCP somente leitura: comando /mcp + aba Settings com status, ferramentas e erros
dsh-dsh-mementoMemória entre sessões controlada por aprovação: costura ctx.memory + SQLite + ferramenta de memória
dsh-dsh-observeExportador de observabilidade OpenTelemetry e Langfuse para DeepSeek Harness.
dsh-dsh-output-stylesTroca de estilo em tempo de execução equivalente ao outputStyles do Claude Code
dsh-dsh-permission-rulesRegras de permissão declarativas allow/deny/ask estilo Claude Code com auditoria
dsh-dsh-plugin-guideBase de conhecimento de desenvolvimento de plugins como habilidade de agente sob demanda
dsh-dsh-research-reportMotor de relatórios de pesquisa verificáveis com evidência endereçada por conteúdo
dsh-dsh-scorePontuação de qualidade multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pinFixe sessões na barra lateral web com ordenação durável
dsh-dsh-session-syncSincronização de sessões entre dispositivos para DeepSeek Harness — um espelho git dedicado do seu armazenamento de sessões.
dsh-dsh-skill-pack-securityPacote de habilidades de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos
dsh-dsh-test-driveTest drives isolados de instalação e smoke para plugins de DeepSeek Harness.
dsh-dsh-translateTradução de parâmetros entre fornecedores e reparo determinístico de JSON para DeepSeek Harness.

License

Apache License 2.0 © 2026 dsh-talk contributors