Sessions & Messages
dsh-vmic
Calvin451970353/dsh-vmic · ★ 1
Voice input plugin for DeepSeek Harness: a mic button in the chat composer with real-time spectrum animation, 16kHz WAV recording, ASR via pluggable providers (Xiaomi MiMo…
README body is shown in Chinese.
Manifest details
安装
dsh plugin --profile web add 'github:Calvin451970353/dsh-vmic#ccd8c74b2e41ae8490b201b8f2c96acf90c26d79'GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
DeepSeek Harness(DSH)的语音输入插件:在聊天输入框旁新增一个 🎙️ 麦克风按钮(带实时频谱动画),录制 16kHz WAV 语音并转写成文字,填入输入草稿供你审阅——真正执行请求的仍是 DSH 中当前选中的模型,语音识别只承担"听写"层,与主模型完全解耦。
界面一览
麦克风按钮位于发送按钮左侧:点击开始录音,再次点击停止并转写;右键按钮可随时打开配置面板。
特性
- 🎙️ 输入框工具栏的麦克风按钮(发送按钮左侧):点击开始录音,再次点击停止并转写。
- 📊 录制时实时频谱动画(Canvas 绘制,主题跟随 harness CSS 变量)。
- ⚡ 两种内置转写供应商,右键按钮打开配置面板即可切换:
- 小米 MiMo(
openai-compatible,input_audio方式,模型mimo-v2.5-asr) - 火山豆包(SAUC bigmodel WebSocket 二进制帧协议,模型
bigmodel,资源volc.bigasr.sauc.duration,支持流式转写)
- 小米 MiMo(
- ✨ 可选 LLM 润色(默认复用 DSH credentials 中的
DEEPSEEK_API_KEY,deepseek-chat):去除口语化、修正错别字与标点;也可在面板中配置自定义润色 Key。 - 🔒 API Key 只存在于 DSH 服务端(credentials 密封,命名
VMIC_<ID>_API_KEY),浏览器只能看到"已配置/未配置"状态,拿不到明文。 - 🧪 内置供应商连通性测试:发送 0.5s 测试音,返回延迟与识别文本,快速定位网络/鉴权问题。
- 🌐 中文 / 英文 UI 字符串。
使用流程
- 点击 🎙️ 开始录音(允许浏览器麦克风权限)。
- 再次点击(或红色方块)停止:完整音频转写一次。
- (可选)开启润色后自动调用 LLM 整理。
- 文字进入输入草稿(保留你已有的草稿),检查后回车发送——由当前选中的模型执行。
配置
右键麦克风按钮打开配置面板:
- 供应商:选择当前使用的供应商(
selectedProvider)、开关与自定义openai-compatible供应商(填baseUrl/model/ Key)。 - 语言:
language: auto或指定(如zh)。 - 润色:
polish.enabled、是否复用DEEPSEEK_API_KEY、模型与超时。
API Key
Key 存在 DSH 的 credentials 密封中(~/.dsh/.credentials.yaml),引用名(不带 VMIC_ 前缀的也兼容):
| 用途 | 引用名 |
|---|---|
| 小米 MiMo | VMIC_XIAOMI_MIMO_API_KEY |
| 火山豆包 | VMIC_VOLCENGINE_DOUBAO_API_KEY |
| 自定义润色 | VMIC_POLISH_API_KEY(或复用 DEEPSEEK_API_KEY) |
火山豆包密钥两种格式均支持:appkey:accesskey(自动走 X-Api-App-Key / X-Api-Access-Key)或单 Key(走 X-Api-Key)。
安装
版本要求:
1.1.0起适配 DeepSeek Harness 0.2.1-rc.2 及以上(package.json的engines.dsh与 peer 都指向 0.2.x)。0.2.x 移除了@deepseek-ai/dsh-settings的settingsNamespace,插件改用插件Config+.volatile()字段 +configEditor写回配置;DSH 0.1.x 请使用1.0.0。
插件自带 bundle patch(cordis.patch.yml,由 package.json 的 dsh.bundle.patch 声明):装好并启用这个 bundle 层,宿主就会自动插入 vmic 行,不需要手写 insert。
桌面端:设置 → 插件 → 添加插件 → 「安装第三方插件」,填本地目录或包名,装完点「立即启用」。桌面端的 profile(~/.dsh/profiles/desktop)由应用自己的插件管理器管理,命令行 dsh plugin --profile desktop 是被拒绝的。
本地开发(link 依赖,代码改动即时生效):
cd ~/.dsh/profiles/web
# 本地开发:用 link: 指向插件源码目录(路径按你的实际情况修改)
# Windows 示例:pnpm add link:C:/path/to/dsh-vmic
pnpm add link:/path/to/dsh-vmic
发布版(以 GitHub 仓库为例):
cd ~/.dsh/profiles/web
pnpm add github:Calvin451970353/dsh-vmic
没启用 bundle 层(例如只把包当普通依赖装)时,才需要手工在 cordis.patch.yml 追加这一行;启用了就跳过:
- insert:
- id: vmic
name: 'dsh-vmic'
config:
selectedProvider: xiaomi-mimo
providers:
- id: xiaomi-mimo
type: openai-compatible
name: 小米 MiMo
preset: true
enabled: true
live: false
- id: volcengine-doubao
type: volcengine-doubao
name: 火山豆包
preset: true
enabled: true
live: true
language: auto
timeoutMs: 30000
重启 dsh web 服务并刷新页面。
供应商预设的端点/模型已内置,用户只需填入 API Key;
providers也可留空,插件会用同样的内置预设。
配置面板保存时,插件通过
configEditor把配置写回当前 profile 的cordis.patch.yml,落点是顶层- id: vmic条目的config(不是insert里的那份)。想手工改配置,改那条即可;insert只负责声明插件行,可以不带config。
- insert:
- id: vmic
name: 'dsh-vmic'
- id: vmic
config:
selectedProvider: xiaomi-mimo
timeoutMs: 30000
展示元信息
插件页卡片和详情页标题旁的图标、标题与简介,来自包根声明:
package.json的icon→assets/icons/a-solid-gradient.svg(96×96 网格,自带圆角底板;管理器接受 SVG / PNG / JPEG / WebP,≤ 256 KiB,且文件必须位于包目录内)。locale/en.json、locale/zh.json的meta.title/meta.description→ 按界面语言显示;缺字段时回退到package.json的name/description。
{ "meta": { "title": "语音输入", "description": "DeepSeek Harness 语音输入插件:…" } }
exports 必须导出 ./locale/*.json,否则管理器解析不到词典,只会显示英文 manifest 描述。
宿主路由(host half)
| 路由 | 说明 |
|---|---|
GET/POST /vmic-config |
读取 / 保存供应商与润色配置(Key 仅存 credentials) |
GET /vmic-key?id= |
回显某个 Key(面板"眼睛"图标用,仅本机回环) |
POST /vmic-test |
用 0.5s 测试音探测某个供应商 |
POST /vmic-asr |
用当前选中的供应商转写一次(base64 data URL) |
POST /vmic-polish / POST /vmic-polish-test |
润色接口与自检 |
POST /vmic-asr-live/start | /chunk | /stop |
火山豆包流式转写(仅 volcengine-doubao 供应商) |
已知限制
- 浏览器录制编码为 16kHz 单声道 WAV;小米 MiMo 对 base64 输入有 10MB 上限(约 5 分钟,远超语音输入场景)。
- 插件配置字段都是
.volatile(),面板保存后由configEditor热应用,不需要重启;改了插件代码(lib/*.js)仍需重启dsh web。 - 若插件被判为与当前 DSH 版本不兼容,服务端会打印
disabling profile plugin row "vmic"并跳过该行:先确认版本,再按需dsh plugin --profile web allow-version dsh-vmic@<版本> --dsh-version <当前版本> --accept-risk。 - 客户端 bundle 改动仅在
pnpm run dev:web监听运行时热更新;否则需重启服务并刷新页面。
License
MIT