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

本地语音输入 Lanzgale/dsh-listener

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

点麦克风说话,本地转写成文字填入输入框

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令发起外部网络请求
查看扫描证据(共 12 处,展示前 10 条)
  • 执行外部命令来自配置/变量
    lib/index.js:55
    execFile(cmd, args, { timeout: opts.timeout || 120000, windowsHide: true }, (err, stdout, stderr) => {
  • 执行外部命令来自配置/变量
    lib/index.js:88
    const proc = spawn(py, ['-m', 'pip', 'install', '--user', '--break-system-packages', '-r', REQUIREMENTS], {
  • 执行外部命令来自配置/变量
    lib/index.js:130
    const proc = spawn(py, [SERVER_PY, '--port', String(port), '--token', TOKEN], {
  • 发起网络请求
    lib/index.js:167
    const res = await fetch('http://127.0.0.1:' + backend.port + path, {
  • 发起网络请求
    lib/client.js:134
    const st = await fetch(API + "/status", { signal: AbortSignal.timeout(15000) }).then((r) => r.json());
  • 发起网络请求
    lib/client.js:153
    const h = await fetch(API + "/health", { signal: AbortSignal.timeout(15000) }).then((r) => r.json());
  • 发起网络请求
    lib/client.js:179
    const h2 = await fetch(API + "/health", { signal: AbortSignal.timeout(15000) }).then((r) => r.json());
  • 发起网络请求
    lib/client.js:195
    const d = await fetch(API + "/download/status", { signal: AbortSignal.timeout(15000) }).then((r) => r.json());
  • 发起网络请求
    lib/client.js:214
    await fetch(API + "/download", { method: "POST", signal: AbortSignal.timeout(15000) }).then((r) => r.json());
  • 发起网络请求
    lib/client.js:223
    await fetch(API + "/start", { method: "POST", signal: AbortSignal.timeout(15000) }).then((r) => r.json());
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

功能亮点

  • 本地语音转写
  • 音频不出网
  • 转写文字填入输入框

安全版本地语音输入插件 for DeepSeek Harness:同源宿主代理 + 127.0.0.1 + token,SenseVoice-Small INT8 ONNX 本地转写,音频不出网。

README

由 DeepSeek 最新模型翻译生成
dsh-listener — 本地安全语音输入插件 在 DSH 对话输入框右侧添加麦克风按钮:录音 → 本地 SenseVoice-Small INT8 ONNX 转写 → 文本填入输入框。音频全程本地处理,不出网。 fork/参考:@opensquad/dsh-voice-input(MIT,已克隆 ~/file/dsh/plugin/dsh-voice-input),重写为安全架构,详见下方「与原版的差异」。 架构 浏览器(输入框 conversation.input.right) └─ 同源 POST /plugins/dsh-listener/*(宿主代理,无 CORS) └─ 宿主:生命周期管理 + 20MB 上限 + 语言头透传 └─ Python 后端(单进程,仅 127.0.0.1:7103 + 随机 token) ├─ /health /download /download/status /start └─ /v1/audio/transcriptions(SenseVoice-Small INT8 ONNX) 目录 - lib/index.js — 宿主:路由代理、后端生命周期(懒启动/崩溃重启/dispose 清理)、依赖检查与安装(钉版本)
展开完整文档(README 剩余 1 节)
dsh-listener — 本地安全语音输入插件

在 DSH 对话输入框右侧添加麦克风按钮:录音 → 本地 SenseVoice-Small INT8 ONNX 转写 → 文本填入输入框。音频全程本地处理,不出网。

fork/参考:@opensquad/dsh-voice-input(MIT,已克隆 ~/file/dsh/plugin/dsh-voice-input),重写为安全架构,详见下方「与原版的差异」。

架构

浏览器(输入框 conversation.input.right)
└─ 同源 POST /plugins/dsh-listener/*(宿主代理,无 CORS) └─ 宿主:生命周期管理 + 20MB 上限 + 语言头透传 └─ Python 后端(单进程,仅 127.0.0.1:7103 + 随机 token) ├─ /health /download /download/status /start └─ /v1/audio/transcriptions(SenseVoice-Small INT8 ONNX)

目录

- lib/index.js — 宿主:路由代理、后端生命周期(懒启动/崩溃重启/dispose 清理)、依赖检查与安装(钉版本)
- lib/client.js — 浏览器:麦克风按钮、录音(120s 上限)、进度/错误弹窗、inputActions.setDraft 追加填入
- backend/server.py — 合并后端(下载网关 + 推理服务单进程)
- backend/lib/inference.py — SenseVoice ONNX 推理(MIT 复用,未改动)
- backend/lib/model_store.py — 模型下载 + sha256 落盘校验
- backend/requirements.txt — 钉版本依赖(onnxruntime==1.29.0 等)

存储

| 数据 | 位置 |
| 模型(4 文件,~240MB) | ~/.local/share/dsh-listener/model/(环境变量 DSH_LISTENER_MODEL_DIR 可改) |
| sha256 清单 | 同目录 .sha256.json(首次下载建立信任锚点,启动时校验,损坏自动重下) |
| Python 依赖 | ~/.local/lib/python3.14/site-packages/(--user --break-system-packages,PEP 668) |
| token | 每进程随机,命令行注入,不落盘 |
| 后端日志 | backend/server.log |

与原版的差异(安全修复清单)

| 原版 | dsh-listener |
| 浏览器直连 127.0.0.1:7101/7102 + CORS 全开 | 浏览器只访问同源宿主路由;后端无 CORS |
| 后端绑 0.0.0.0、零鉴权 | 只绑 127.0.0.1 + 回环来源校验 + 随机 token |
| 网关 + 推理两进程 | 合并单进程,生命周期一条清理链 |
| /uninstall 可远程删模型 | 删除该端点 |
| 无大小/时长限制 | 20MB / 120s 上限(宿主+后端双重) |
| 自动 pip 装未钉版本 | 钉版本 + 首次安装前 UI 确认 |
| 模型无校验 | sha256 落盘 + 启动校验 + 损坏自动重下 |
| 无 dispose 清理 | 宿主 dispose / 进程退出统一 kill |

使用

1. 首次点击麦克风:确认后自动安装依赖(约 250MB)+ 下载模型(约 230MB),进度条显示
2. 就绪后:点击开始录音,再点停止 → 转写 → 填入输入框(已有内容则追加)
3. 输入框已有草稿时追加在末尾;识别失败显示角标 !

开发

- client 改动:Ctrl+Shift+R 刷新即可(curl http://127.0.0.1:3080/plugins/dsh-listener/client.js 验证服务端已更新)
- host / 后端改动:重启 DSH
- 模型重下:rm -rf ~/.local/share/dsh-listener/model 后重新走下载流程
预览分享卡片长什么样 ↓Lanzgale/dsh-listener
分享 · DeepSeek Harness Hub
Lanzgale/dsh-listener

点麦克风说话,本地转写成文字填入输入框

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