ppy-web/dsh-plugin-xiaomi-mimo-tts
ppy-web/dsh-plugin-xiaomi-mimo-tts为 DSH 提供小米 MiMo、豆包和浏览器本地语音朗读,支持自动播报、自定义音色与可选 UI 音效。
Web UI 语音输入:输入框麦克风按钮驱动本地 VocoType 离线识别,识别结果自动插入输入框(自动部署/防重复/持续输入)。
DeepSeek Harness(dsh web)持久语音输入插件:在聊天输入框旁提供麦克风按钮,弹出录音面板,把本地语音识别软件 VocoType 的识别结果自动插入输入框。
基于 VocoType(开源离线语音输入,Paraformer 中文识别 + FSMN-VAD + CT-Transformer 标点),本插件负责「检测/启动/自动部署 VocoType → 读取识别日志 → 去重 → 自动插入输入框」的完整闭环。
%LOCALAPPDATA%\Programs\VocoType)%LOCALAPPDATA%,exe 探测 5 个常见安装位置,换机器可用packages/ 目录(例如 C:\Users\.dsh\profiles\web\packages\voco-input-sh)cd <你的 profile 目录> # 例如 C:\Users\<你>\.dsh\profiles\web
pnpm add "file:./packages/voco-input-sh"cordis.patch.yml 添加挂载行:- insert:
- id: voco-input-sh
name: 'voco-input-sh'依赖项:需要 pnpm。VocoType 会自动部署,无需预装(首次会自动下载约 25MB 安装包并静默安装,模型约 1.6GB 由 VocoType 首次启动时下载)。
AltRight 说话,松开┌─────────────┐ 识别完成 ┌──────────────────┐ 写日志 ┌────────────────────────┐
│ VocoType │ ──────────► │ 剪贴板 + Ctrl+V │ ────────► │ %LOCALAPPDATA%\VocoType\│
│ (AltRight) │ │ (粘贴到焦点窗口) │ │ logs\VocoType.log │
└─────────────┘ └──────────────────┘ └───────────┬────────────┘
│ 轮询(600ms, mtime优化)
┌─────────────────────────┐ setDraft(草稿拼接) ┌────────────────────▼─────────┐
│ 输入框(React 受控) │ ◄──────────────────────│ 插件 Client(slot 面板) │
└─────────────────────────┘ │ 草稿包含→跳过(去重) │
│ 未包含→拼接插入 │
└─────────────┬───────────────┘
fetch /dsh-voco-*
┌─────────────▼───────────────┐
│ 插件 Host(webServer 路由) │
│ ensure / baseline / poll │
└────────────────────────────┘lib/index.js):Node ESM,webServer 注册三条 HTTP 路由(/dsh-voco-ensure、/dsh-voco-baseline、/dsh-voco-poll),node:fs 直读日志、child_process 调 PowerShell 检查/启动/部署 VocoTypelib/client.js):__ModuleLoader__ bundle,slots 注册按钮(conversation.input.right)与面板(conversation.input.dock),fetch 轮询路由,inputActions.setDraft() 写入输入框源码与运行副本(node_modules/voco-input-sh)需保持一致。修改 packages/voco-input-sh/ 下的 package.json、lib/index.js、lib/client.js 后,在包目录执行:
powershell -ExecutionPolicy Bypass -File sync.ps1然后重启 dsh web 生效。
voco-input-sh/
├── package.json # 包定义(dsh.client 声明)
├── lib/
│ ├── index.js # Host:HTTP 路由(ensure/baseline/poll)
│ └── client.js # Client:按钮 + 录音面板(slots)
├── sync.ps1 # 一键同步到 node_modules
├── CHANGELOG.md # 版本变更记录
└── README.md已验证宿主版本:dsh 0.1.5-rc.2。
本插件依赖的宿主契约及核对结果:
依赖面 · 契约 · 0.1.5-rc.2 清单 · dsh.client.platform = "web" + exports["./client"] · 未变 客户端 bundle · window.__ModuleLoader__.load({ id, factory }) · 未变 插槽 · conversation.input.right、conversation.input.dock · 仍存在 插槽 props · InputZone = { session, input }、InputState.draft、inputActions.setDraft(text) · 未变 Host 路由 · webServer.register({ kind: 'exact', path, handler }) · 未变 客户端 `inject` · 插件对象必须声明 inject: ['slots', 'timer'] · v0.2.2 修复
⚠️ 客户端必须声明 `inject`。若只导出 apply,cordis 不会等待服务就绪就调用它,ctx.get('slots')会拿到undefined,插件便静默注册不出任何 UI(按钮消失,控制台也没有报错)。
v0.2.1 及更早版本正是踩了这个坑,v0.2.2 已修复。同机对照:dsh-prompt-enhancer 声明了inject: ['timer'],所以不受影响。已知行为边界:
@文件 引用渲染成 chip,而本插件通过inputActions.setDraft() 整体替换草稿——这是当前唯一的公开写入路径,因此草稿里已有的 chip 会被写回成 它的文本形式。文字内容不会丢失,只失去 chip 外观。
session_id=… text=… 替换次数=N)。VocoType 升级若改动日志格式,需要同步更新 lib/index.js 的 parseEntries。
本版本根据三模型安全评估修订:
/dsh-voco-ensure 从 GET 改为 POST,必须携带 /dsh-voco-token 下发的每进程令牌,封堵跨站 `` 触发「下载+静默安装」。--ssl-no-revoke;安装包固定 SHA-256(5629de8a…02c5c2),下载后先校验、不匹配即删除并中止,杜绝篡改/替换安装包。%LOCALAPPDATA%(回退 homedir/AppData/Local),换机器可用,不再泄漏主机用户名。sync.ps1 后完全重启 dsh web。见 CHANGELOG.md。当前版本 v0.2.2 —— 修复客户端漏声明 inject 导致的「麦克风按钮不显示」。
MIT