🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

全双工语音 PiyotaHu/muxiva-dsh-voice

DeepSeek Harness
PiyotaHu80 天前有提交已提供中文文档扫描:含敏感能力

在 Mac 本机实现可打断的实时语音对话

28.2/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add PiyotaHu/muxiva-dsh-voice
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 80 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 62 处,展示前 45 条)
  • 读取本地文件
    scripts/cli.mjs:12
    const packageMetadata = JSON.parse(await readFile(resolve(root, 'package.json'), 'utf8'))
  • 执行外部命令来自配置/变量
    scripts/cli.mjs:18
    const child = spawn(program, argv, { cwd: root, stdio: 'inherit', ...options })
  • 执行外部命令来自配置/变量
    scripts/cli.mjs:25
    return spawnSync(program, argv, { stdio: 'ignore' }).status === 0
  • 读取本地文件
    scripts/cli.mjs:30
    for await (const chunk of createReadStream(path)) hash.update(chunk)
  • 读取本地文件
    scripts/cli.mjs:36
    const ready = (model.files ?? []).every(path => existsSync(dataPath(path)))
  • 写入本地文件
    scripts/cli.mjs:39
    await mkdir(dataPath(model.extract), { recursive: true })
  • 读取本地文件
    scripts/cli.mjs:46
    if (!(model.files ?? []).every(path => existsSync(dataPath(path)))) return false
  • 读取本地文件
    scripts/cli.mjs:49
    if (!existsSync(path) || await sha256(path) !== expected) return false
  • 读取本地文件
    scripts/cli.mjs:54
    if (!existsSync(target) || await sha256(target) !== model.sha256) return false
  • 写入本地文件
    scripts/cli.mjs:64
    await mkdir(target, { recursive: true })
  • 写入本地文件
    scripts/cli.mjs:90
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    scripts/cli.mjs:96
    await rename(partial, target)
  • 执行外部命令来自配置/变量
    scripts/cli.mjs:111
    const result = spawnSync(program, ['-c', 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")'], { encoding: 'utf8' })
  • 写入本地文件
    scripts/cli.mjs:141
    await rename(venvRoot, backup)
  • 执行外部命令固定命令
    scripts/cli.mjs:157
    const muxivaResult = spawnSync('muxiva', ['--version'], { encoding: 'utf8' })
  • 执行外部命令来自配置/变量
    scripts/cli.mjs:160
    const imports = python && spawnSync(pythonPath(), ['-c', `import importlib.metadata; import muxiva,numpy,sherpa_onnx,websockets,mlx_audio,muxiva_voice
  • 写入本地文件
    scripts/cli.mjs:232
    await mkdir(dirname(logPath), { recursive: true })
  • 执行外部命令来自配置/变量
    scripts/cli.mjs:239
    const bridge = spawn(pythonPath(), ['-m', 'muxiva_voice_transport.server'], {
  • 读取本地文件
    scripts/paths.mjs:8
    const sourceCheckout = existsSync(resolve(packageRoot, '.git'))
  • 读取本地文件
    scripts/benchmark.mjs:13
    const metadata = JSON.parse(await readFile(resolve(root, 'package.json'), 'utf8'))
  • 执行外部命令来自配置/变量
    scripts/benchmark.mjs:34
    const child = spawn(process.execPath, ['scripts/cli.mjs', 'start'], {
  • 写入本地文件
    scripts/benchmark.mjs:91
    await mkdir(dirname(output), { recursive: true })
  • 执行外部命令来自配置/变量
    scripts/benchmark.mjs:104
    const runner = spawn(python, runnerArgs, { cwd: root, env: service.env, stdio: 'inherit' })
  • 读取本地文件
    scripts/check-docs.mjs:8
    const metadata = JSON.parse(await readFile(resolve(root, 'package.json'), 'utf8'))
  • 读取本地文件
    scripts/check-docs.mjs:21
    if (!existsSync(path)) throw new Error(`required public document is missing: ${relative}`)
  • 读取本地文件
    scripts/check-docs.mjs:22
    const text = await readFile(path, 'utf8')
  • 读取本地文件
    scripts/check-docs.mjs:26
    if (!existsSync(resolve(dirname(path), target))) throw new Error(`${relative} links missing local file: ${target}`)
  • 读取本地文件
    scripts/check-docs.mjs:31
    const text = await readFile(resolve(root, relative), 'utf8')
  • 读取本地文件
    scripts/check-docs.mjs:35
    const publicSurface = await Promise.all(['README.md', 'README.zh-CN.md', 'showcase/index.html', 'showcase/docs.html'].map(path => readFile(resolve(roo
  • 读取本地文件
    scripts/check-package.mjs:6
    for (const file of ['package.json', 'graph.json', 'models.lock.json', 'benchmarks/schema.json']) JSON.parse(await readFile(resolve(root, file), 'utf8'
  • 读取本地文件
    scripts/check-package.mjs:7
    const metadata = JSON.parse(await readFile(resolve(root, 'package.json'), 'utf8'))
  • 读取本地文件
    scripts/check-package.mjs:16
    const graph = JSON.parse(await readFile(resolve(root, 'graph.json'), 'utf8'))
  • 读取本地文件
    scripts/check-package.mjs:17
    const modelLock = JSON.parse(await readFile(resolve(root, 'models.lock.json'), 'utf8'))
  • 读取本地文件
    scripts/check-package.mjs:34
    const nodeDirs = await readdir(resolve(root, '.muxiva/nodes'))
  • 读取本地文件
    scripts/check-package.mjs:36
    for (const directory of nodeDirs) JSON.parse(await readFile(resolve(root, '.muxiva/nodes', directory, 'muxiva.node.json'), 'utf8'))
  • 读取本地文件
    scripts/check-performance-report.mjs:102
    const files = (await readdir(resultsDirectory)).filter(file => file.endsWith('.json')).sort()
  • 读取本地文件
    scripts/check-performance-report.mjs:103
    for (const file of files) validate(JSON.parse(await readFile(resolve(resultsDirectory, file), 'utf8')), file)
  • 读取本地文件
    scripts/check-performance-report.mjs:108
    const performanceDocument = await readFile(resolve(root, 'docs/guide/performance.md'), 'utf8')
  • 执行外部命令来自配置/变量
    scripts/e2e-smoke.mjs:24
    const service = spawn(process.execPath, ['scripts/cli.mjs', 'start'], {
  • 执行外部命令来自配置/变量
    scripts/e2e-smoke.mjs:59
    const test = spawn(resolve(root, '.muxiva/venv/bin/python'), ['test/e2e_smoke.py'], {
  • 执行外部命令固定命令
    scripts/pack-smoke.mjs:7
    const packed = spawnSync('npm', ['pack', '--json', '--pack-destination', cache], {
  • 执行外部命令固定命令
    scripts/pack-smoke.mjs:23
    const installed = spawnSync('npm', [
  • 读取本地文件
    scripts/pack-smoke.mjs:32
    if (!existsSync(executable)) throw new Error('installed tarball is missing the muxiva-dsh-voice executable')
  • 执行外部命令来自配置/变量
    scripts/pack-smoke.mjs:33
    const help = spawnSync(executable, ['--help'], { cwd: installRoot, encoding: 'utf8' })
  • 执行外部命令来自配置/变量
    scripts/pack-smoke.mjs:38
    const home = spawnSync(executable, ['home'], {
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 可打断实时语音对话
  • 本地优先全双工语音

为 DeepSeek Harness 提供本地优先的全双工语音,由 Muxiva 编排

README

由 DeepSeek 最新模型翻译生成
Muxiva Voice for DeepSeek Harness 这是一个面向官方 DeepSeek Harness 的本地优先、可打断、全双工语音插件,底层实时 Pipeline 由 Muxiva 编排。 麦克风、VAD、ASR、分句、TTS、播放和打断链路都留在 Mac 本机;DSH 继续负责有状态 Agent、工具、权限、会话和 Web 聊天记录。 当前是 Alpha:公开 npm 安装、源码联调路径与 M1 Pro 无人值守认证已经完成。兼容 DSH rc.5 / rc.6,本轮 alpha.2 以 rc.6 认证;Muxiva 0.1.1 已发布 CPython 3.8–3.14 Wheel(包括 macOS universal2)。 一键安装(Apple Silicon) 前置要求:Node.js 22.19+、Python 3.11–3.13、Muxiva 0.1.1 CLI 与官方 DSH CLI。 dsh plugin --profile web add @muxiva/dsh-voice@alpha npx @muxiva/dsh-voice@alpha setup npx @muxiva/dsh-voice@alpha start 另开一个终端运行 dsh --profile web。
展开完整文档(README 剩余 1 节)
Muxiva Voice for DeepSeek Harness

这是一个面向官方 DeepSeek Harness 的本地优先、可打断、全双工语音插件,底层实时 Pipeline 由 Muxiva 编排。

麦克风、VAD、ASR、分句、TTS、播放和打断链路都留在 Mac 本机;DSH 继续负责有状态 Agent、工具、权限、会话和 Web 聊天记录。

当前是 Alpha:公开 npm 安装、源码联调路径与 M1 Pro 无人值守认证已经完成。兼容 DSH rc.5 / rc.6,本轮 alpha.2 以 rc.6 认证;Muxiva 0.1.1 已发布 CPython 3.8–3.14 Wheel(包括 macOS universal2)。

一键安装(Apple Silicon)

前置要求:Node.js 22.19+、Python 3.11–3.13、Muxiva 0.1.1 CLI 与官方 DSH CLI。

dsh plugin --profile web add @muxiva/dsh-voice@alpha
npx @muxiva/dsh-voice@alpha setup
npx @muxiva/dsh-voice@alpha start

另开一个终端运行 dsh --profile web。公开 npm/npx 安装会把约 2.5 GB 模型、隔离 Python 环境和日志保存在稳定的系统用户数据目录,不会随着 npm 缓存清理而丢失。运行 npx @muxiva/dsh-voice@alpha home 可查看目录,也可用 MUXIVA_DSH_VOICE_HOME 覆盖。

源码开发

前置要求:Apple Silicon Mac、Node.js 22.19+、Python 3.11–3.13、Rust、相邻目录 ../muxiva 中的 Muxiva 源码、已安装的 muxiva CLI 和官方 DSH CLI。

cd muxiva-dsh-voice
npm run doctor -- --fix
npm run models
dsh plugin --profile web add .

然后分别启动:

终端 A:Muxiva 本地语音 Graph
npm start

终端 B:DSH Web
dsh --profile web

npm start 默认是低开销的无界面产品模式,也可以显式运行 npm run start:headless。
排障或调优时,把终端 A 换成 npm run observe:它会在继续托管认证语音桥的同时打开同一个 graph.json 的 Muxiva Studio。点击 Run,再打开 ◎ Observe,即可查看各 Node 的延迟/吞吐、各 Edge 的速率/队列年龄、Node 内部缓冲、Trace 和热点判断。
两种模式都会把桥与 Runtime 输出追加到 .muxiva/runtime.log,无界面运行时可直接 tail -f .muxiva/runtime.log 追踪启动失败、ASR/TTS 事件和 Node Host 错误。

进入 DSH 会话后点击输入框上方的大型语音 Orb。光环会跟随输入能量,状态会依次显示“聆听 / 识别 / 思考 / 回答”。再次点击大按钮只会静音/恢复麦克风,WebSocket、AudioWorklet 和 Graph 保持常驻;浏览器不再注入 PCM,Muxiva Audio Source 进入 paused,并在恢复前重置 VAD/ASR 流。右侧小“结束”按钮才会关闭链路。VAD 起点只用于提示;只有非空 ASR Partial 或通过质量门禁的多语 Final 才确认打断、清掉旧播放/TTS 并取消旧 DSH Turn。被拒绝的杂音会回到聆听,不会提示 DSH。

可靠性优先的默认端点等待 2 秒连续静音后产生 ASR Final,使用 0.75 VAD 阈值与 350 ms 最短语音门控,并在 Silero 切段起点前补回 500 ms 音频,避免 SenseVoice 丢失较轻的开头音节。SenseVoice Final 只允许有有效文字的中英文语音进入 DSH,非语音事件以及杂音产生的日文、韩文和单字符幻觉会被拒绝。展示用 emoji、括号等字符会变成韵律停顿,而不是在删除后把前后文字粘连。TTS 默认使用 Qwen3-TTS 的 Serena,固定平静温柔的语速、音区和情绪采样参数。两阶段上下文策略先用一个 48–96 字的自然语义段尽早开口,再把 Agent Final 的全部剩余内容作为一个上下文生成;短回答调用一次,长回答最多两次,同时避免等待完整长回答和逐句反复起调。有界实时 PCM 调度仍会限制浏览器播放队列的提前量。

边界

- Muxiva 管实时系统:Frame、Graph、有界队列、背压、Signal、取消和可观测性。
- DSH 管 Agent:模型、Session、Tools、Permissions 和 Web UI。
- 本仓库只管桥:DSH Bundle、Web 控件、版本化本地协议和项目 Node Pack。
- 当前没有修改 Muxiva 或 DSH 上游仓库。

模型下载采用固定 revision,并对 Qwen3-TTS 主权重和语音 tokenizer 执行 SHA-256 校验;npm 包本身不重新分发模型。完整说明见 DSH 兼容矩阵、模型和许可证、协议和安全模型。

模型安装完成后,可以运行 npm run test:e2e。它会启动真实的 8-Node Muxiva Graph,认证“中文文本 → normalizer → Qwen3-TTS 24 kHz PCM → 模拟麦克风 → Silero VAD → SenseVoice Final”的闭环,并另外验证英文识别。默认 TTS 是在 Apple Silicon 上通过 MLX 运行的 Qwen3-TTS 0.6B CustomVoice 8-bit,不包含云端 fallback。

第一台性能认证机器是 16 GB MacBook Pro M1 Pro:130/130 回合、30/30 次打断全部完成, TTS underrun 为零。完整延迟分布、资源用量、CER/WER 适用范围、复现命令和每个 Release 必须提交的版本化实测报告见性能与验收。缺少对应性能报告及文档链接时,npm Release Workflow 会直接失败。
预览分享卡片长什么样 ↓PiyotaHu/muxiva-dsh-voice
分享 · DeepSeek Harness Hub
PiyotaHu/muxiva-dsh-voice

在 Mac 本机实现可打断的实时语音对话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部