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

按住说话 eicon-xyz/dsh-voice-ptt

DeepSeek Harness
eicon-xyz28 天前有提交已提供中文文档扫描:未发现敏感能力

按住 F2 说话,松开即把语音转成草稿文字

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add eicon-xyz/dsh-voice-ptt
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-voice-ptt(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/16 14:11:07

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

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-slots
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按住按键说话
  • 松开转文字
  • 文字落入草稿框

按住一个键说话,松开就转成文字落进草稿框:DeepSeek Harness 的按键听写功能。

README

由 DeepSeek 最新模型翻译生成
dsh-voice-ptt 给 DeepSeek Harness 用的按住听写(push-to-talk):在输入框里按住一个键说话,松开即转写,文字插入当前草稿。 不用记组合键。按住 F2,松开,完事。 怎么用 1. 把光标放进输入框。当输入框获得焦点且草稿为空时,工具栏会出现一行淡提示:按住 F2 听写。 2. 按住 F2 —— 开始录音,提示变成 正在录音,松开 F2 结束。 3. 松开 —— 音频被转写,文字落在草稿的光标处。 听写过程中: - 按 Esc,或按任何别的键(比如你本来想打的那个字母),立即取消并丢弃本次录音。 - 窗口失焦、或切走标签页,会取消录音,而不是录下无关的声音。 - 超过识别服务上限会自动停止录音,并转写已经录到的部分。 换键 那行提示本身就是按钮。点它展开候选键,点一个即生效并记住(存在 localStorage)。 | 键 | 说明 | | F2(默认) | 功能键:不产生字符,冲突最少 | | F4 | 功能键,位置更靠右 | | Insert | 全尺寸键盘上右手好按;很多笔记本没有这个键 | | 右 Ctrl | 右手小指按住最顺手 | | 右 Shift | 右手小指;在 Windows 上连按 5 次可能触发粘滞键 | 修饰键也能正常工作:插件知道按住键本身就是修饰键,因此不会把它误判成组合键而放行事件。
展开完整文档(README 剩余 1 节)
dsh-voice-ptt

给 DeepSeek Harness 用的按住听写(push-to-talk):在输入框里按住一个键说话,松开即转写,文字插入当前草稿。

不用记组合键。按住 F2,松开,完事。

怎么用

1. 把光标放进输入框。当输入框获得焦点且草稿为空时,工具栏会出现一行淡提示:按住 F2 听写。
2. 按住 F2 —— 开始录音,提示变成 正在录音,松开 F2 结束。
3. 松开 —— 音频被转写,文字落在草稿的光标处。

听写过程中:

- 按 Esc,或按任何别的键(比如你本来想打的那个字母),立即取消并丢弃本次录音。
- 窗口失焦、或切走标签页,会取消录音,而不是录下无关的声音。
- 超过识别服务上限会自动停止录音,并转写已经录到的部分。

换键

那行提示本身就是按钮。点它展开候选键,点一个即生效并记住(存在 localStorage)。

| 键 | 说明 |
| F2(默认) | 功能键:不产生字符,冲突最少 |
| F4 | 功能键,位置更靠右 |
| Insert | 全尺寸键盘上右手好按;很多笔记本没有这个键 |
| 右 Ctrl | 右手小指按住最顺手 |
| 右 Shift | 右手小指;在 Windows 上连按 5 次可能触发粘滞键 |

修饰键也能正常工作:插件知道按住键本身就是修饰键,因此不会把它误判成组合键而放行事件。

提示文字、状态条和上面这些键名都会跟随 DSH 的界面语言(en / zh)。

想提供别的键,改 lib/client.js 顶部的 KEY_OPTIONS(一个 {code, labelKey} 数组,code 按 KeyboardEvent.code 的拼写,labelKey 指向 lib/client.js 顶部 zh / en 词典里的键名)。

安装

dsh plugin --profile web add dsh-voice-ptt

包声明了 dsh.bundle.patch,所以这条命令会把它追加到 profile 的 bundle 栈并挂载 —— 不需要手工编辑 cordis.patch.yml。从 Git 仓库安装时建议锁定 revision:

dsh plugin --profile web add 'github:eicon-xyz/dsh-voice-ptt#<commit>'

需要语音识别服务:安装并启用 @deepseek-ai/dsh-experimental-voice-input-bundle,并准备一次识别模型(约 230 MB)。若识别服务未就绪,按住键会在状态条给出可见原因,而不是静默失败。

开发模式

直接挂载本地 checkout,而不是安装 ln -sfn "$PWD" "$DSH_HOME/profiles/web/node_modules/dsh-voice-ptt" 然后在 profile 自己的 cordis.patch.yml 里加:
- insert:
- id: dsh-voice-ptt
name: 'dsh-voice-ptt'

切换到 bundle 通道前,必须先删掉这段手工挂载行,否则同一行会被挂载两次。

为什么单键要自己接管键盘

官方快捷键服务(@deepseek-ai/dsh-client-shortcuts)只派发 keydown —— 没有 keyup 事件可以用来结束"按住"。它还拒绝不带修饰键的绑定(bindingIssue 返回 modifier-required),并且在 Web 端把组合限制在一份平台白名单内。

所以"按住一个键说话"无法表达成快捷键命令。本插件改为自己接管键盘:文档级 keydown 开始,keyup 结束。代价是它无法出现在设置 → 快捷键里 —— 这也是换键入口做在输入框里的原因。

不让单键变成"第二个修饰键"

| 情况 | 行为 |
| 焦点不在输入框里 | 不开始录音 |
| 录音期间按了任何别的键 | 取消本次采集;那个键照常工作(按住右 Ctrl 再按 A,Ctrl+A 依然生效) |
| 弹窗或菜单打开时 | 让出按键 |
| 带修饰键的按下(Ctrl+F2、Alt+F2 等) | 完全不拦截 |
| 焦点在终端里 | 不拦截(xterm 自己要用功能键) |

实现要点

- 插入草稿用会话作用域的 inputActions(captureInsertion + insertText)。插件在 conversation.input.left 注册一个常驻条目来登记每个会话的动作;同一个条目同时渲染状态条、焦点提示和键位选择器。
- 录音用 MediaRecorder,经 OfflineAudioContext 重采样成 16 kHz 单声道 PCM16 WAV —— 与官方语音输入插件发送的格式一致 —— 然后调用 host 的 speech.transcribe。
- host 半侧是有意为空的。 所有行为都在浏览器半侧,通过 dsh.client 触达。

文件

| 路径 | 用途 |
| lib/client.js | 浏览器半侧:按键、录音、转写、状态条、键位选择器 |
| lib/index.js | host 半侧(有意为空,只为让 bundle 行可挂载) |
| cordis.patch.yml | 安装器合并的 dsh.bundle.patch 层 |
| test/ | 无头 Chrome 端到端测试 |

测试

它们驱动真实浏览器、连接一个正在运行的 DSH web profile,并把自带的音频夹具喂给 Chrome 的假麦克风:

npm install # 提供 ws
export PTT_TOKEN=<dsh web URL 里的 token>
node test/e2e.cjs # 按住 → 松开 → 文字插入草稿
node test/picker.cjs # 选择器打开、新键生效并持久化
node test/modifier-key.cjs # 右 Ctrl 可录音;Ctrl+A 不被抢占
node test/nonempty-draft.cjs # 草稿非空时仍可用,文字追加在后面
node test/modal-yield.cjs # 弹窗打开时让键,关闭后恢复

test/make-fixture.cjs 可以从任何 Chrome 能解码的音频重新生成 test/fixtures/speech-16k.wav:

node test/make-fixture.cjs input.mp3 # 需要 Chrome;不需要 ffmpeg

已知限制

- 只在 Web 端生效(Desktop 原生键盘桥接未接线到本插件)。
- 没有流式字幕:松开后才出文字。
- 从不自动发送 —— 转写结果只进草稿,由你确认。
- 同一时刻只监听一个按住键;不改 KEY_OPTIONS 的话只能从内置候选键里选。

许可证

MIT
预览分享卡片长什么样 ↓eicon-xyz/dsh-voice-ptt
分享 · DeepSeek Harness Hub
eicon-xyz/dsh-voice-ptt

按住 F2 说话,松开即把语音转成草稿文字

这是你的仓库?认领条目

回到顶部