- Canal 1024 store:
npm i -g dsh1024una vez, luegodsh1024 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.
| 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 |
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) opiper(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.cpplocal. - 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.
# 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.- Canal git (último
main):dsh plugin --profile web add "github:PerryLink/dsh-talk#main"— el scriptpreparecompila solo con dependencias de producción. - Canal npm (versiones publicadas):
dsh plugin --profile web add dsh-talk. - Canal tarball:
pnpm packen este repositorio y luegodsh 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_BUILDSpara este paquete (la validación inofensiva del binario de esbuild), añadeallowBuilds: { esbuild: true }a tupnpm-workspace.yaml— el CLIdshimprime el fragmento exacto.
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.
| 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: 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/speechlleva 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-ttsrealiza síntesis de red, FunASR usa su endpoint configurado ywebkitSpeechRecognitionde Chrome envía el audio del micrófono a los servidores de Google para transcribirlo; la reproducción despeechSynthesisdel navegador permanece local.
- 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/speechse añade solo cuando el host puede transportarlo (ver Compatibilidad del host); los eventostool/call+tool/resultsiguen siendo siempre el rastro reconstruible. - Los anuncios de aprobación nunca bloquean — el listener de
approval/requestsiempre llama anext(). - Salida saneada — credenciales y rutas temporales de audio nunca llegan a registros ni pantallas.
- Compatibilidad del host — el evento
dsh-talk/speechse 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ónignorablelo añaden con la marca; los hosts sin envoltura — toda línea publicada hasta0.1.1-rc.2, y0.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.
- 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,piperywhisper.cppdeben 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.2y0.1.2-alpha.1el vocabulario del host no conocedsh-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.1añadían eventosdsh-talk/speechsin marcar. En hosts0.1.0-rc.7o posteriores, una sesión cuyo registro ya los contiene falla en su siguiente carga en frío conSessionFormatUnsupportedError. Reparación: detén el host, haz una copia del registro.jsonlde la sesión, añade"ignorable":truecomo 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.
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 publicadodsh, dsh-plugin, deepseek-harness, deepseek, cordis, voice, speech, tts, stt, speech-to-text, text-to-speech, microphone
- @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.
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. |
Apache License 2.0 © 2026 dsh-talk contributors