Skip to content

Latest commit

 

History

History
197 lines (153 loc) · 18.1 KB

File metadata and controls

197 lines (153 loc) · 18.1 KB

🎙️ dsh-talk

  • Canal 1024 store: npm i -g dsh1024 una vez, luego dsh1024 plugin --profile web add dsh-talk (cuenta para el ranking de instalaciones de deepseek1024.com).

Bucle de sesión con voz primero para DeepSeek Harness: háblale y escucha su respuesta.

Pulsa el micrófono, habla y la respuesta se lee en voz alta — hablar interrumpe.

License DSH plugin Node CI Version npm version npm downloads

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


Compatibilidad

Superficie Estado
Harness DeepSeek Harness 0.1.1-rc.2 (objetivo principal); 0.1.2-alpha.1 funciona con la compuerta del registro de voz activa (ver Limitaciones conocidas)
Node ^22.19.0 || >=24.0.0
Navegador Web Speech + MediaRecorder (mejor en Chrome/Edge); motores de transcripción/TTS del host para el resto

Qué obtienes

dsh-talk cierra el bucle de voz en ambos sentidos:

  • Herramienta speak — el agente lee sus respuestas en voz alta. Motores TTS: voz del navegador, edge-tts (voces neuronales en red) o piper (local). El audio se reproduce en el navegador; en los hosts que pueden transportarlo, el registro de sesión guarda la locución saneada (ver Límites de seguridad).
  • Botón de micrófono — pulsa, habla y la transcripción aterriza en la caja de entrada (o se envía directamente). Motores STT: Web Speech del navegador (con resultados intermedios), un servidor HTTP FunASR o whisper.cpp local.
  • Hablar interrumpe — empezar a hablar detiene la reproducción (canal client→host sobre el espacio talk).
  • Anuncios de eventos — fin de turno, aprobaciones pendientes (seguro en cascada: nunca bloquea la puerta) y errores, con interruptor de silencio y frases configurables.
  • Pestaña de ajustes — selección de motor/idioma e interruptores de anuncios, guardados como operaciones append-only del parche de perfil con copias de seguridad.

Inicio rápido

# 1. instala el bundle en tu perfil
dsh plugin --profile web add "github:PerryLink/dsh-talk#main"

# o desde npm (versiones publicadas)
dsh plugin --profile web add dsh-talk

# 2. reinicia y verifica la fila
dsh --profile web --dump-config | grep -A2 'id: talk'

Luego pulsa el micrófono junto al compositor y habla; o pide al agente que hable:

> Di "hola" con la herramienta speak.

Instalación y desinstalación

  • Canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-talk#main" — el script prepare compila solo con dependencias de producción.
  • Canal npm (versiones publicadas): dsh plugin --profile web add dsh-talk.
  • Canal tarball: pnpm pack en este repositorio y luego dsh plugin --profile web add ./dsh-talk-<version>.tgz.
  • Desinstalar: dsh plugin --profile web remove dsh-talk (o elimina la fila del parche del perfil).

Si pnpm informa ERR_PNPM_IGNORED_BUILDS para este paquete (la validación inofensiva del binario de esbuild), añade allowBuilds: { esbuild: true } a tu pnpm-workspace.yaml — el CLI dsh imprime el fragmento exacto.

Configuración

Todos los ajustes son campos Config de Schemastery (modificables desde cordis.yml). cordis.patch.yml documenta cada clave.

Clave Por defecto Significado
record.enabled true Mostrar el botón de micrófono del compositor
record.hotkey (ninguna) Atajo opcional, p. ej. "alt+r"
record.maxSeconds 60 Límite de grabación en segundos (1..600)
record.autoSubmit false Enviar la transcripción como mensaje del usuario (false = rellenar el borrador)
record.vad.enabled / silenceMs / energyThreshold true / 1500 / 0.01 Detección de actividad de voz: el silencio termina la grabación automáticamente (degrada a parada manual sin AudioContext)
stt.engine auto auto / web / funasr / whisper; auto prefiere un motor local configurado, luego Web Speech
stt.language auto Idioma BCP-47 o auto
stt.interim true Mostrar transcripciones intermedias (Web Speech)
stt.silenceFinaliseMs 4000 Detener Web Speech continuo tras estos milisegundos sin voz (500..15000)
stt.funasr.url (ninguna) Endpoint de inferencia FunASR; obligatorio con el motor funasr
stt.whisper.modelPath (ninguna) Modelo whisper.cpp; obligatorio con el motor whisper
tts.engine auto auto / browser / edge-tts / piper; auto prefiere piper, luego edge-tts, luego la voz del navegador
tts.rate 0 Desplazamiento de velocidad en porcentaje (-50..50) para edge-tts/piper
tts.fallbackToBrowser true Caer a la voz del navegador cuando falla un motor local
tts.browser.voiceName (ninguna) Nombre de voz preferido del navegador; si no existe se usa la voz predeterminada
tts.browser.rate 1 Velocidad de SpeechSynthesis del navegador (0.1..10)
tts.browser.pitch 1 Tono de SpeechSynthesis del navegador (0..2)
tts.piper.modelPath (ninguna) Modelo de voz piper; obligatorio con el motor piper
announce.enabled true Interruptor maestro de anuncios
announce.onTurnEnd / onApproval / onError true Qué eventos se anuncian
announce.messages.* "Turn complete." etc. Frases habladas
interrupt true Hablar detiene la reproducción actual
maxSpeakChars 20000 Límite del texto de la herramienta speak (1..100000)
maxAudioCacheBytes 8388608 Límite de la caché de audio en memoria (1 MiB..64 MiB)

stt.silenceFinaliseMs y record.vad.silenceMs son mecanismos distintos: el primero finaliza la transcripción de Web Speech cuando el reconocimiento continuo deja de oír voz; el segundo es el detector por energía de MediaRecorder que termina la grabación (y la envía cuando record.autoSubmit está activo). Funcionan en canalizaciones diferentes y no comparten estado.

Herramientas y superficies

Superficie Tipo Notas
speak herramienta Lee texto en voz alta (browser/edge-tts/piper); overrides de motor/voz por llamada; resultado JSON canónico
botón de micrófono slot conversation.input.left Grabar → transcribir → rellenar borrador (o enviar); hablar interrumpe al pulsar
pestaña de ajustes settings.plugins.tab (id talk) Motores/idioma/anuncios; guardado append-only
talk:* Typert Remote status, audio, transcribe, applySettings, interrupt (espacio del host)

Permisos y datos

  • Permisos: el plugin solo guarda una caché de audio en memoria con límite de bytes; el permiso de micrófono lo gestiona el navegador. La pestaña de ajustes solo añade fragmentos al parche del perfil con copia de seguridad — nunca reescribe el archivo.
  • Datos: el audio nunca entra en el contexto del modelo ni en el registro de sesión. Donde el vocabulario de sesión del host lo acepta, el evento dsh-talk/speech lleva el id de locución, motor, razón, tamaño, texto saneado y, cuando corresponde, voz, velocidad y tono del navegador; en hosts sin envoltura el evento no se escribe en absoluto. Toda superficie de visualización/registro redacta credenciales, JWT, cabeceras bearer y rutas temporales.
  • Red: solo se contactan los motores que configures. edge-tts realiza síntesis de red, FunASR usa su endpoint configurado y webkitSpeechRecognition de Chrome envía el audio del micrófono a los servidores de Google para transcribirlo; la reproducción de speechSynthesis del navegador permanece local.

Límites de seguridad

  • Visible para el modelo ⟺ registrado — el modelo solo ve el valor canónico y el texto renderizado de la herramienta speak. El evento dsh-talk/speech se añade solo cuando el host puede transportarlo (ver Compatibilidad del host); los eventos tool/call + tool/result siguen siendo siempre el rastro reconstruible.
  • Los anuncios de aprobación nunca bloquean — el listener de approval/request siempre llama a next().
  • Salida saneada — credenciales y rutas temporales de audio nunca llegan a registros ni pantallas.
  • Compatibilidad del host — el evento dsh-talk/speech se añade a través de una compuerta adaptativa. Los hosts cuyo vocabulario de tipos conocidos cubre el evento lo añaden directamente; los hosts con la opción ignorable lo añaden con la marca; los hosts sin envoltura — toda línea publicada hasta 0.1.1-rc.2, y 0.1.2-alpha.1, que eliminó la envoltura y falla cerrado ante tipos desconocidos — no reciben ningún append, de modo que la voz nunca puede contaminar el registro de sesión en esas líneas. Ahí el historial de reproducción en vivo queda vacío y los resultados de la herramienta speak son el rastro reconstruible.
  • Fallo ruidoso — motores inválidos, valores fuera de rango y motores sin su modelo/endpoint requerido fallan al montar.

Limitaciones conocidas

  • Soporte de navegador: Web Speech y MediaRecorder se detectan por capacidades; sin ellos el botón se desactiva y los motores del host (FunASR/whisper.cpp) pueden transcribir si están configurados.
  • Los motores locales se instalan aparte: los ejecutables y modelos de edge-tts, piper y whisper.cpp deben instalarse por separado.
  • Formato de grabación: el navegador graba con su códec nativo de MediaRecorder; whisper.cpp puede requerir una grabadora WAV o una conversión en el servidor.
  • Los ajustes aplican al recargar: la pestaña añade al parche del perfil; una recarga del perfil (o reinicio de la web) activa los cambios.
  • El historial de reproducción en vivo queda vacío en hosts sin envoltura: en 0.1.1-rc.2 y 0.1.2-alpha.1 el vocabulario del host no conoce dsh-talk/speech, así que la compuerta no escribe nada y la lista de reproducción de la sesión en el cliente queda vacía. La voz en sí, el micrófono, la pestaña de ajustes y la herramienta no se ven afectados.
  • Los registros antiguos escritos por dsh-talk ≤ 0.2.1 pueden requerir reparación antes de cargar en frío: las versiones hasta 0.2.1 añadían eventos dsh-talk/speech sin marcar. En hosts 0.1.0-rc.7 o posteriores, una sesión cuyo registro ya los contiene falla en su siguiente carga en frío con SessionFormatUnsupportedError. Reparación: detén el host, haz una copia del registro .jsonl de la sesión, añade "ignorable":true como miembro de primer nivel en cada línea JSON cuyo "type" sea "dsh-talk/speech" (por ejemplo, inserta "ignorable":true, justo después de la { inicial) y vuelve a abrir la sesión. Nada más cambia y no se pierde nada; los appends nuevos de esta versión nunca añaden eventos sin marcar.

Desarrollo

pnpm install        # node ^22.19 || >=24
pnpm run typecheck  # tsc: src + tests contra el checkout local del harness
pnpm run typecheck:ci  # tsc contra los tipos publicados 0.1.1-rc.2 (sin paths)
pnpm test           # vitest: 77 tests, 13 suites
pnpm run build      # declaraciones tsc + bundles tsdown (lib/)
pnpm run verify:self-contained  # las specs de dependencias resuelven desde el registry
pnpm run verify:artifacts       # caras ESM construidas + handshake ModuleLoader del cliente
pnpm pack           # el tarball publicado

Topics

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

Contributors

  • @PerryLink — creador y mantenedor: pipeline de voz, motores de habla, grabadora de micrófono, anuncios de eventos, unidad de proyección y la documentación en cinco idiomas.

PerryLink DSH Plugin Family

Este proyecto es uno de los 33 complementos de DeepSeek Harness mantenidos por PerryLink. Si este te ayuda, probablemente los demás también:

Plugin One-liner
dsh-dsh-auto-review Auto-revisión de segundo modelo en la cadena de aprobación, con cierre en fallo por defecto
dsh-dsh-background-agents Agentes hijos en segundo plano durables con barra lateral de UI web, mensajería e interrupción
dsh-dsh-budget Gobernanza de costes para DeepSeek Harness: presupuestos, carbono y latencia en un panel.
dsh-dsh-checkpoint-rewind Equivalente a /rewind de Claude Code: instantáneas, bifurcaciones de sesión, restauración de un solo uso
dsh-dsh-claude-move Migra sesiones, memoria, habilidades y CLAUDE.md de Claude Code a DSH
dsh-dsh-click Control de escritorio nativo multiplataforma para DeepSeek Harness — Windows primero.
dsh-dsh-composer-history Historial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R
dsh-dsh-data-quality Comprobaciones de calidad de datasets y verificación de citas (el puente numérico opcional consumido aquí)
dsh-dsh-defend Defensa contra inyección de prompts, jailbreak y fuga de secretos para DeepSeek Harness.
dsh-dsh-doublecheck Guardián de disciplina de ingeniería: interrogatorio de requisitos, puertas de pruebas, revisión adversaria
dsh-dsh-draw Enrutamiento unificado de generación de imágenes estáticas para DeepSeek Harness.
dsh-dsh-fast Diagnóstico de rendimiento de solo lectura para DeepSeek Harness.
dsh-dsh-fund-research Informes de investigación deterministas para fondos mutuos públicos chinos
dsh-dsh-github Integración de PR/issues de GitHub para DSH, cada escritura controlada por aprobación
dsh-dsh-industry-research Orquestación de investigación sectorial que sella sus entregables mediante el ctx.researchReport.assemble de este plugin
dsh-dsh-library Base de conocimiento documental local para DeepSeek Harness.
dsh-dsh-local-ai Integración de modelos locales (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actions Diagnósticos, formato, autocompletado, acciones de código y renombrado LSP sobre servidores de lenguaje
dsh-dsh-mask Middleware de enmascaramiento de PII: anonimiza en el límite del modelo, restaura en la capa de visualización
dsh-dsh-mcp-panel Panel de tiempo de ejecución MCP de solo lectura: comando /mcp + pestaña Settings con estado, herramientas y errores
dsh-dsh-memento Memoria entre sesiones controlada por aprobación: costura ctx.memory + SQLite + herramienta de memoria
dsh-dsh-observe Exportador de observabilidad OpenTelemetry y Langfuse para DeepSeek Harness.
dsh-dsh-output-styles Cambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code
dsh-dsh-permission-rules Reglas de permisos declarativas allow/deny/ask estilo Claude Code con auditoría
dsh-dsh-plugin-guide Base de conocimiento de desarrollo de plugins como habilidad de agente bajo demanda
dsh-dsh-research-report Motor de informes de investigación verificables con evidencia direccionada por contenido
dsh-dsh-score Puntuación de calidad multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pin Fija sesiones en la barra lateral web con orden durable
dsh-dsh-session-sync Sincronización de sesiones entre dispositivos para DeepSeek Harness — un espejo git dedicado de tu almacén de sesiones.
dsh-dsh-skill-pack-security Paquete de habilidades de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro
dsh-dsh-test-drive Pruebas de instalación y humo aisladas para plugins de DeepSeek Harness.
dsh-dsh-translate Traducción de parámetros entre proveedores y reparación determinista de JSON para DeepSeek Harness.

License

Apache License 2.0 © 2026 dsh-talk contributors