前言¶
DSH 的理念是「一切皆插件」。在终端智能体里,有两种操作成本常被低估:人离开键盘时,想把一句指令变成消息;任务运行时,不想逐字读大段输出。dsh-voice 是面向 DSH 的语音 bundle,覆盖语音转文字、文字转语音和离开式朗读。它默认本地优先,音频文件落在本机,不自动录音、不自动播放。
这是什么¶
Jesse-njx/dsh-voice 由 Jesse-njx 维护,许可证为 MIT,已核实版本为 0.1.0,要求 Node.js >=20。它是 DSH bundle,提供 transcribe、speak、/voice 相关能力,并在 Web 客户端渲染 voice-note 卡片。
核心功能¶
语音转文字¶
transcribe 支持两类来源:
{ file: <path> }:转写既有音频文件。{ record: { seconds? } }:从麦克风录制后转写。
转写结果被插入为用户消息,Web 客户端以 voice-note 卡片展示。
文字转语音¶
speak 接收文本,在后台任务中合成并播放,并立即返回 { jobId, audioRef }。它适合用于长构建与 headless runs 的 walk-away narration,例如把结果合成成一句状态播报。
自动朗读回复¶
readReplies 与 /voice 提供会话级自动朗读回复开关,默认关闭。可以用 /voice 实时切换。
本地优先¶
音频是 ~/.dsh/voice/ 下的普通文件,会话日志只保存引用与转录。默认值如下:
stt.backend自动离线选择whisper-local到macostts.backend为sayreadReplies为falseaudioDir为~/.dsh/voice
后端¶
STT 后端支持 whisper-local、openai、macos、fake。
TTS 后端支持 say、piper、edge-tts、fake。
云端后端仅在显式配置时可用,不会被自动选择。
配合 dsh-crosstalk¶
在 dsh-crosstalk installed 时,transcribe({ source, to: <peer> }) 可将 transcribe 结果作为 peer message 发送到另一本地会话。
安装与启用¶
先确认本机满足 Node.js >=20,然后执行安装命令:
dsh plugin --profile web add @dsh-voice/bundle
安装后,transcribe、speak、/voice 由该 bundle 提供。
典型用法¶
使用 /voice¶
下面命令用于查看状态、切换自动朗读,或直接朗读一行文本:
/voice status
/voice on
/voice off
/voice speak build finished, 0 failures
调用 transcribe¶
下面调用分别演示文件转写和麦克风录音转写:
transcribe({ source: { file: "/path/to/note.m4a" } })
transcribe({ source: { record: { seconds: 5 } } })
source 二选一:已有音频文件路径,或麦克风录制参数。
调用 speak¶
下面调用演示朗读一段文本:
speak({ text: "build finished, 0 failures" })
返回 { jobId, audioRef }。
发送到另一本地会话¶
在 dsh-crosstalk installed 时,可以这样调用:
transcribe({ source: { file: "/path/to/note.m4a" }, to: "<peer>" })
适用场景与注意¶
适合需要在 DSH 会话里用语音留下指令、希望回复可朗读,或在长任务后收到状态播报的使用者。
注意以下边界:
- 插件以当前
dsh进程权限运行,安装前应检查源码与许可证。 - 音频默认不离开本机;只有显式设置以下云端后端时,才可能发送到云端:
stt.backend: openai
tts.backend: edge-tts
openai后端通过OPENAI_API_KEY凭证读取。- 录制与播放只在显式工具调用时发生;
readReplies默认关闭。 v0.1非目标包括实时流式对话、外呼合成语音、群组微信上下文音频、说话人分离、音乐/特效、原始音频入会话日志、唤醒词/持续监听。
结尾¶
经过上面步骤,dsh-voice 可以把语音输入变成用户消息,把回复变成可播放的本地音频,并默认保持本地存储。
GitHub:https://github.com/Jesse-njx/dsh-voice
社区目录页:已核实资料中未提供具体 URL。