dsh-voice-ptt:在 DSH 输入框里按住单键说话,松手即写入草稿

前言

在 DeepSeek Harness(DSH)里写提示词,键盘仍是主路径;偶尔需要口述长句或不想打断思路时,若只能点按钮开录、再点结束,或要记住组合键,成本会偏高。官方快捷键服务只分发 keydown,且对无修饰键绑定有限制,「按住说话、松开结束」很难做成 Settings 里的一条快捷命令。

下面介绍社区插件 dsh-voice-ptt(维护者 eicon-xyz):在 Web 端输入框(composer)聚焦时,按住一个键说话,松开键,识别结果插入当前光标处的草稿,不自动发送。插件归类为客户端,当前 GitHub 星标为 1。

这是什么

dsh-voice-ptt 是面向 DeepSeek Harness 的 Push-to-talk 听写插件:在 composer 里按住单个键录音,松开后转写,文本落在草稿里供你审阅后再发送。

宿主侧(lib/index.js) intentionally 为空;行为都在浏览器端(lib/client.js),通过 dsh.client 挂载。许可证为 MIT,npm 包版本 0.1.0(以仓库 package.json 为准)。

核心功能

默认交互(F2)

  1. 光标在 composer 内且草稿为空时,工具栏会出现淡色提示:Hold F2 to dictate(界面语言随 DSH 的 en / zh)。
  2. 按住 F2:开始录音,提示变为 Recording — release F2 to finish。
  3. 松开 F2:音频转写后,文本插入光标位置。

无需记忆组合键;README 概括为:Hold F2, release, done.

录音过程中的取消与边界

  • 按 Esc,或在录音时按下其他键(例如本打算输入的字母),会取消并丢弃本次录音。
  • 窗口失焦或切走标签页会取消录音,避免录到无关声音。
  • 超过识别器时长上限会自动停止并转写已录部分。

更换按住键

提示文案本身是可点的按钮:点开候选键,选一项后立即生效,并写入 localStorage 记住。

内置候选包括 F2(默认)、F4、Insert、Right Ctrl、Right Shift 等;文档说明了各键的取舍(例如 Right Shift 在 Windows 上连按可能触发粘滞键)。插件能识别「按住键本身是修饰键」,不会误当成组合键把事件放行出去。

若要扩展候选,需改 lib/client.js 顶部的 KEY_OPTIONS({code, labelKey} 数组,code 为 KeyboardEvent.code,labelKey 对应同文件 zh/en 字典项)。

与官方快捷键的分工

@deepseek-ai/dsh-client-shortcuts 只处理 keydown,没有 keyup 来结束「按住」;且无修饰键绑定会被拒绝,Web 端和弦也受平台白名单约束。因此「单键按住说话」无法注册成快捷命令;本插件在 document 级监听 keydown / keyup 自行处理键盘,代价是不会出现在 Settings → Shortcuts,改键在 composer 提示里完成。

文档还说明了焦点不在 composer、终端内、对话框打开、或 Ctrl+F2 等带修饰键按下时的行为(不抢录、让行、不拦截等)。

技术要点(简述)

  • 插入草稿:通过会话级 inputActions(captureInsertion + insertText),在 conversation.input.left 注册常驻项,负责状态行、焦点提示与改键 UI。
  • 录音:MediaRecorder 经 OfflineAudioContext 重采样为 16 kHz 单声道 PCM16 WAV(与官方 voice-input 一致),再调用宿主 speech.transcribe。

安装与启用

插件声明了 dsh.bundle.patch,安装命令会把层叠写入 profile 的 bundle 并挂载,无需手改 cordis.patch.yml。

Web profile 安装:

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

若从 Git 检出并固定 revision(资料原文格式,<commit> 换实际提交):

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

依赖语音识别能力:需安装并启用 @deepseek-ai/dsh-experimental-voice-input-bundle,并一次性准备模型(约 230 MB)。识别器未就绪时,按住键会在状态行显示可见原因,而不是静默失败。

插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证,确认符合你的环境策略。

典型用法

  1. 完成上述安装与 voice-input bundle、模型准备。
  2. 在 Web DSH 中打开对话,焦点放入 composer。
  3. 看到 Hold F2 to dictate(或中文等价文案)后,按住 F2 说话,松手等待转写写入草稿。
  4. 检查文本,按需编辑,再自行发送(插件从不自动发送)。
  5. 若 F2 冲突,点工具栏提示打开候选,改用 F4、Right Ctrl 等。

草稿非空时仍可使用(测试用例 nonempty-draft.cjs 覆盖追加行为)。转写结果在松键之后才出现,无流式字幕。

适用场景与限制

适合:主要在 Web 端使用 DSH、希望口述进输入框且保留「人工确认再发送」的流程;需要单键 PTT、不想绑复杂快捷键的开发者或写提示词较多的用户。

限制(README 明确列出):

  • 仅 Web 表面;桌面原生键盘桥未接此插件。
  • 无流式字幕,松键后才出字。
  • 同时只支持一个按住键,候选列表外需改 KEY_OPTIONS。
  • Node 引擎要求 >=20(包元数据)。

社区目录页:skillhub.cn/plugins/eicon-xyz/dsh-voice-ptt。该目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是其中一条客户端扩展路径。

结尾

dsh-voice-ptt 把「按住—说话—松开—进草稿」收进 composer 一侧:默认 F2,可点提示改键,并依赖官方 experimental voice-input 做转写。若你的场景是 Web 写 agent 提示、口述长段再改字发送,可按 README 安装 bundle 与本插件后直接在输入框试用。

  • 目录页:https://www.skillhub.cn/plugins/eicon-xyz/dsh-voice-ptt
  • 源码与说明:https://github.com/eicon-xyz/dsh-voice-ptt
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye