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

声琢 molanxuan-del/DSH-VoxPolish

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

「声琢」VoxPolish —— 把说出来的话打磨成清晰表达:原话/整理后双通道,先说、先改、再发送,全程不碰输入框。本地 SenseVoice 识别,无需额外下载模型。

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

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

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

状态速览

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

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

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

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

展开查看检查明细 ↓

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

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

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

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

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

读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 19 处,展示前 18 条)
  • 读取本地文件
    lib/index.js:62
    if (!existsSync(file)) return ''
  • 读取本地文件
    lib/index.js:63
    return readFileSync(file, 'utf8')
  • 写入本地文件
    lib/index.js:77
    mkdirSync(path.dirname(file), { recursive: true })
  • 写入本地文件
    lib/index.js:78
    writeFileSync(file, clean, 'utf8')
  • 读取本地文件
    lib/index.js:95
    if (!existsSync(file)) return undefined
  • 读取本地文件
    lib/index.js:96
    const parsed = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    lib/index.js:109
    mkdirSync(path.dirname(file), { recursive: true })
  • 写入本地文件
    lib/index.js:110
    writeFileSync(file, JSON.stringify(override, null, 2), 'utf8')
  • 读取本地文件
    lib/index.js:117
    if (existsSync(file)) unlinkSync(file)
  • 删除本地文件
    lib/index.js:117
    if (existsSync(file)) unlinkSync(file)
  • 发起网络请求
    lib/client.js:628
    const response = await fetch(TRANSCRIBE_URL, {
  • 发起网络请求
    lib/client.js:653
    const response = await fetch(POLISH_URL, {
  • 读取剪贴板
    lib/client.js:805
    text = String((await navigator.clipboard.readText()) ?? '').trim()
  • 发起网络请求
    lib/client.js:1577
    fetch('/dsh-voice-polish/config')
  • 发起网络请求
    lib/client.js:1593
    fetch('/dsh-voice-polish/models')
  • 发起网络请求
    lib/client.js:1613
    fetch('/dsh-voice-polish/config', {
  • 发起网络请求
    lib/client.js:1636
    fetch(VOCAB_URL)
  • 写入剪贴板
    lib/client.js:1741
    navigator.clipboard.writeText(text).then(
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
声琢 · VoxPolish 把「说出来的话」打磨成清晰表达。 说 → 原话 1 秒出 → 后台整理 → 你改、你确认、你再发。 English — Voice input with an expression coach for DeepSeek Harness. Your raw transcript lands in about a second and is sendable immediately, while a fast model rewrites it into a clear, well-structured prompt in the background. Two send buttons (raw / polished), a custom vocabulary that fixes misrecognised words, a live waveform, a model picker — and it never reads or writes the composer draft. Recognition runs on the local SenseVoice model shipped with the official voice-input bundle, so there is no extra model download.
展开完整文档(README 剩余 1 节)
声琢 · VoxPolish

把「说出来的话」打磨成清晰表达。
说 → 原话 1 秒出 → 后台整理 → 你改、你确认、你再发。

English — Voice input with an expression coach for DeepSeek Harness. Your raw transcript lands in about a second and is sendable immediately, while a fast model rewrites it into a clear, well-structured prompt in the background. Two send
buttons (raw / polished), a custom vocabulary that fixes misrecognised words, a
live waveform, a model picker — and it never reads or writes the composer draft. Recognition runs on the local SenseVoice model shipped with the official voice-input bundle, so there is no extra model download.

为什么不是又一个语音输入插件

多数语音插件做同一件事:识别完写进输入框。声琢做的是下一步——识别完先给你审。

| | 常见语音插件 | 声琢 |
| 识别结果落在哪 | 直接改写输入框 | 独立面板里的「原话 / 整理后」两块 |
| 什么时候发 | 识别完就发 | 你看过、改过再发,两个发送键任选 |
| 输入框 | 被读写 | 全程不碰——插件出问题也丢不了你的草稿 |
| 说得好不好 | 自己体会 | 每次给一行表达建议 + 最多 3 条信息缺口 |
| 专有名词/英文总识别错 | 每次手改 | 词表纠错:登记一次,以后自动纠正 |
| 给别的项目复用 | 不行 | 独立服务:命令行 + 本地 HTTP API |

安装

一行装(CLI 版 DSH) —— 直接从 GitHub 拉,不需要 npm:

dsh plugin --profile web add github:molanxuan-del/DSH-VoxPolish

DSH 桌面端:应用内打开 设置 → 插件,点 「添加插件」,填入同一个来源 github:molanxuan-del/DSH-VoxPolish。
(桌面端的 profile 由应用自己管理,公开 CLI 改不了它。)

本地开发装法(改了代码要立刻生效时用这个):

git clone https://github.com/molanxuan-del/DSH-VoxPolish.git

把 <绝对路径> 换成克隆出来的 DSH-VoxPolish 目录,例如: Linux/macOS : link:/home/me/DSH-VoxPolish Windows : link:G:/path/to/DSH-VoxPolish
dsh plugin --profile web add link:<绝对路径>

安装后重启 DSH。之后:改 Host 半(lib/index.js)要重启;改客户端半 (lib/client.js)刷新页面即可(面板底部会显示当前客户端版本戳,便于确认加载的是哪份代码)。

30 秒上手

1. 点输入框工具栏上的 🎤(自己一个按钮,与官方语音功能互不干扰)→ 按钮变红并显示计时,面板里出现实时声波,一眼确认麦克风真在收音。
2. 说完再点一次停止。
3. 1~2 秒「原话」出来,此刻就能发;「整理后」在后台整理,好了自动填上。
4. 两个框都能直接改。改完点发送:

| 按钮 | 什么时候用 |
| 🚀 发原话 | 说得没问题,不想等整理 |
| 🚀 发整理后 | 说得长、理不清,要规整过的版本 |
| 🎤 继续说 | 再录一段,接到原话后面,整理会把新内容合进去 |
| ↩ 撤销上一段 | 丢掉最后一段语音,整段重来 |
| 🔁 重新整理 | 按当前档位重排一遍 |
| ✕ | 关掉面板,不发送任何内容 |

📋 粘贴整理:别处复制来的文字也能整理——点工具栏 📋 自动读剪贴板;或者直接把文字 Ctrl+V 进「原话」框(≥30 字自动整理)。

手改过「整理后」再继续说话:新内容只整理后追加,绝不覆盖你改过的部分。
想整体重排就点「🔁 重新整理」,它会明确覆盖。

录音不怕切走:录音归插件所有,切页面、点别的文件都不会断;工具栏 🎤 一直显示计时。
115 秒自动停止兜底(识别服务单次上限 2 分钟)。

功能

- 原话 / 整理后 双通道:原话先到(可立刻发),整理在后台跑,互不阻塞。
- 六档整理方式:轻度 / 中度(默认) / 深度 / 更简洁 / 更正式 / 更结构化,面板上随时切。
- 表达教练:一行「表达建议」指出这次最该改的点 + 最多 3 条建议补充的缺失信息。
- 🔎 需求分析 + 技术科普:把模糊口述归纳成「你真正想要的是……」,并按 技术名词|效果:…|类似:… 三段列出这件事有哪几种做法、各自什么效果、像什么(三段分行显示)。
只读内容,帮你下一次说得更准——不进发送的文本。
- 📚 词表纠错:一行一词登记专有名词/英文词,整理时自动把识别错误纠正为正确写法;「原话」仍保留识别原样作对照。本机持久化,下一轮立即生效。
- ⚙ 模型选择:面板里枚举 DSH 已配置的全部模型,任选一个来整理并持久保存。
- 实时声波:canvas 逐帧绘制,颜色跟随主题。
- 右侧栏面板:不占对话空间(见下方「面板住哪」)。
- 零构建、零额外下载:纯 JavaScript,识别复用官方语音 Bundle 已装好的本机模型。

面板住哪(三条路径自动降级)

| 优先级 | 宿主 | 说明 |
| 1 | DSH 官方右侧栏 | sidebarRightTabs + sidebar.right.pane.tab(DSH 自带,官方插件同款接口)。切到右侧栏引导页就能看到「语音整理」入口 |
| 2 | dsh-better-sidebar | 仅在官方接口不可用时使用 |
| 3 | 输入框上方 dock | 前两者都不可用时的兜底 |

三条路径互斥,渲染时判定,任何注册顺序都不会同时出现两个面板。

独立服务(给其他项目用)

同一套整理内核也能脱离 DSH 单独跑:命令行 + 本地 HTTP API。

cd DSH-VoxPolish

离线自检(不联网、不需要任何 key)
node service/cli.js --selftest

整理文本
export VP_LLM_API_KEY=<你的模型 API key> # Windows: $env:VP_LLM_API_KEY="..."
node service/cli.js "呃那个我想把函数改成异步的……不对,还是保持同步加个缓存"
node service/cli.js --json "文本" # 输出 {"polished","tip","gaps"}
echo "口语文本" | node service/cli.js -

音频:转写后再整理
node service/cli.js recording.wav
node service/cli.js --transcript recording.wav # 只要转写原文,不需要 LLM key

起本地 HTTP 服务(默认 8787)
node service/server.js
curl -s -X POST http://127.0.0.1:8787/polish \
-H "content-type: application/json" -d ""

| 环境变量 | 用途 | 默认 |
| VP_LLM_API_KEY | 整理用的模型 key | 必填 |
| VP_LLM_BASE_URL | OpenAI 兼容端点 | https://api.deepseek.com |
| VP_LLM_MODEL | 模型名 | deepseek-flash |
| VP_ASR | local / cloud | — |
| VP_ASR_BASE_URL / VP_ASR_API_KEY | 云端识别(OpenAI 兼容 /audio/transcriptions) | — |

--asr-check local|cloud 会如实报告识别能力是否就绪(不撒谎:缺模型就报缺)。

⚠️ 语音识别的本地离线通道(sherpa-onnx)尚未接入,--asr-check local 目前会返回「模型文件齐备,但本地推理尚未接入」。云端通道已实现。

隐私与权限

| 数据 | 去哪 |
| 录音音频 | 送到本机的官方 SenseVoice 识别器(ctx.get('speechToText'))——音频不出本机 |
| 原话文字 | 送到你在 DSH 里配置的那个模型做整理(通常是你自己的云端 API) |
| 词表 / 模型选择 / 版本戳配置 | 只写本机 ~/.dsh/voice-polish/ |
| 会话输入框 | 从不读写 |
| 遥测 | 没有。除上面两条外不发起任何外部请求 |

独立服务模式:只有把 VP_ASR 设为 cloud 时音频才会发给你自己填的端点;默认不启用。

配置

默认不写死模型,整理用哪条路由按优先级决定:

| 优先级 | 来源 | 说明 |
| 1 | 面板里选的(⚙ 整理模型) | 存 ~/.dsh/voice-polish/config.json,可随时切回「跟随会话默认」 |
| 2 | 插件配置 provider / model | 想固定一条便宜路由(不占主力模型额度)时写在这里 |
| 3 | 会话默认模型 | 兜底,跟随你在 DSH 里的设置 |

- insert:
- id: voice-polish
name: 'dsh-voice-polish'
config:
provider: deepseek-official
model: deepseek-flash
temperature: 0.2
maxTokens: 2400

整理是改写任务不是推理任务,便宜快的模型就够。

兼容性

- DSH 0.2.0-rc.2(桌面端 / Web 端均可)。
- 语音识别需要官方 「语音输入 Bundle」 已安装并可用(复用它的本机 SenseVoice)。
识别服务不可用时面板会明确提示,而不是静默失败。
- 右侧栏优先使用 DSH 官方接口;dsh-better-sidebar 只是次级回退,不是必需依赖。
- Node.js ≥ 20(仅「独立服务」需要)。

实现要点

纯 JavaScript,无构建步骤。客户端半用 DSH 的懒加载 CJS 契约
(window.__ModuleLoader__.load({ id, factory })),Host 半是普通 ESM,零 @deepseek-ai/
运行时 import*。

dsh-voice-polish/
package.json dsh.bundle.patch + dsh.client{platform:"web"}
cordis.patch.yml 插件行(默认不写死模型) lib/index.js Host 半:/polish /transcribe /vocab /models /config lib/core.js 共享内核:提示词、解析器、词表(插件与服务同源) lib/client.js 客户端半:🎤/📋 按钮 + 面板 + 录音管线 + 三种宿主 service/ 独立服务:cli.js / server.js / llm.js / asr/ test/ 离线测试(安装时不会下载)

- 录音:getUserMedia → AudioContext({sampleRate:16000}) → ScriptProcessorNode 取原始 PCM(经 0 增益节点接输出,避免回声)→ 编码成 16 kHz 单声道 PCM16 WAV。
浏览器拒绝 16 kHz 时用线性插值重采样。
- 上传走原始二进制(application/octet-stream)不做 base64:16 kHz PCM 一分钟 base64 要多膨胀三分之一。
- 实时声波:同一路 source 接 AnalyserNode,每帧 RMS 写进 56 格环形缓冲,canvas 按帧绘制;刻意不经过 React state,否则 60fps 会把整个面板每帧重渲染一次。
- 模型输出容错:整理结果要求是 {"polished","tip","gaps","analysis","terms"} 的 JSON,但模型偶尔会在字符串值里留下未转义的英文双引号让 JSON 非法。parseAnswer 因此是两级的:先严格 JSON.parse,失败则按键边界切片救回(salvageAnswer)——绝不把原始 JSON 倒给用户。
analysis / terms 缺失或类型不对时降级为 '' / [],绝不因此让整次解析失败。
- sessionId 必须透传:只有在请求带 sessionId 时,部分路由才会注入所需的会话路由头。

已知限制

- 改 Host 半必须重启 DSH(客户端半刷新页面即可)。
- 录音需要麦克风权限,要求 HTTPS 或环回地址。
- 面板内容存在浏览器内存里,刷新页面即清空;发送前确认。
- 识别服务单次最长 2 分钟;客户端 115 秒自动停止。
- 面板底部的 客户端 <版本戳> 是判断「当前跑的是哪份客户端代码」的唯一可信依据——报问题请带上它。

开发与测试 bash
node --check lib/client.js # 语法
node --test test/parse.test.mjs test/service.test.mjs # 解析器 + 服务(67 例)
node --test test/client-contract.test.mjs # 客户端契约(18 例)
node service/cli.js --selftest # 离线自检(28 项)
npm test # 上面三项的集合

test/client-contract.test.mjs 是源码级契约检查,钉住三类真实踩过的坑:裸注册(注册生命周期必须挂在 ctx.effect 上)、组件副本漂移(三个宿主必须用同一个组件)、以及渲染可见性依赖某个宿主专属 prop(会导致白屏)。

路线图

- [x] v1.0.0 插件本体:原话/整理后双通道、词表纠错、模型选择、表达教练、实时声波
- [x] 官方右侧栏适配:迁移到 sidebarRightTabs,dsh-better-sidebar 降为可选回退
- [x] 独立服务(VoxPolish Service):CLI + HTTP API,--selftest 全绿
- [x] 需求分析 + 技术科普:面板里只读的「🔎 需求分析」块——归纳真实意图 + 按
技术名词|效果:…|类似:… 三段科普可选技术(大众多熟悉的类比),让用户自己重新说一遍,形成「说 → 学 → 再说准」的闭环(发送内容不受影响,仍是原话/整理后;独立服务 --json 与 /polish、/process 同样透传这两个字段)
- [x] 一行安装:dsh plugin --profile web add github:molanxuan-del/DSH-VoxPolish(无需 npm)
- [ ] 语音识别可插拔:本地离线(sherpa-onnx + SenseVoice,免费、不出本机)与用户自带 API
- [ ] 提交到社区插件市场
- [~] 发布到 npm —— 暂缓:npm 现已强制要求发布者开启二次验证,
而 GitHub 直装已经能让任何人一条命令装上,所以不为此增加一个账号安全负担

欢迎提 Issue / PR。合并前会逐行审查(公开仓库的 PR 一律按不可信代码审)。

许可证

MIT © molanxuan-del
预览分享卡片长什么样 ↓molanxuan-del/DSH-VoxPolish
分享 · DeepSeek Harness Hub
molanxuan-del/DSH-VoxPolish

「声琢」VoxPolish —— 把说出来的话打磨成清晰表达:原话/整理后双通道,先说、先改、再发送,全程不碰输入框。本地 SenseVoice 识别,无需额外下载模型。

回到顶部