Preface¶
In DeepSeek Harness (DSH), the common approach for voice typing is to write recognition results directly into the session input box. Before you can spot typos, verbal tics, or logical jumps, the text is already mixed with your draft; if a proper noun is misrecognized, you have to edit it repeatedly within the input box. If you prefer to “review before sending” and want the organizing process to leave your current draft untouched, the community plugin VoxPolish (声琢) takes a different path: recognition results land in an independent panel, with “Original” and “Polished” versions listed separately, leaving the choice of which version to send up to you. Below is an introduction to what it is, what it does, and how to install and get started.
What is this¶
VoxPolish · 声琢 (Repo: molanxuan-del/DSH-VoxPolish) is released by maintainer molanxuan-del and categorized under Model Inference in the SkillHub community directory. The plugin’s positioning is to polish “spoken words” into clearer, sendable expressions—featuring an Original / Polished dual-channel workflow: speak, edit, then send. It performs no reads or writes to the session input box throughout the process. Voice recognition reuses the local SenseVoice already bundled with the official DSH Voice Input Bundle; the README states no additional recognition model download is required for this plugin. The license is MIT; the current package.json version is 1.0.0, declaring compatibility with DSH 0.2.0-rc.2 (supporting both Desktop and Web clients).
Differences from Common Voice Plugins¶
The README uses a table to compare the behavior of typical voice plugins with VoxPolish. The core differences can be summarized as follows:
| Dimension | Common Voice Plugins | VoxPolish |
|---|---|---|
| Recognition Result Location | Directly overwrites input box | “Original” and “Polished” in an independent panel |
| Send Timing | Can send immediately after recognition | Send after review and modification; two send entry points available |
| Input Box | Read and written | Does not touch the input box |
| Expression Feedback | No structured hints | One-line expression suggestion + up to 3 information gaps |
| Proper Noun Misrecognition | Manual correction every time | Vocabulary correction; auto-corrects after registration |
| Reusability | Bound to DSH UI | Also provides standalone service via CLI and local HTTP API |
Core Features¶
The following capabilities are derived from the repository README and package.json descriptions; details not appearing in the source material are not included.
Dual Channels & Polishing Tiers
The “Original” text appears within 1–2 seconds and can be sent immediately; polishing is completed asynchronously in the background without blocking. The panel offers six polishing tiers: Light, Medium (Default), Deep, More Concise, More Formal, and More Structured, which can be switched at any time.
Sending & Continuing
In addition to “Send Original” and “Send Polished,” it supports “Continue Speaking” (new content is appended to the Original, and polishing merges them), “Undo Last Segment,” “Re-polish” with the current tier, and closing the panel without sending.
Expression Coach & Read-only Analysis
The polishing result comes with a one-line “Expression Suggestion” and up to 3 suggested missing pieces of information. There is also a “Requirement Analysis + Tech Explanation” block: it summarizes the spoken intent and lists possible approaches in segments formatted as Technical Term | Effect: ... | Similar: .... This block is read-only and will not enter the sent text.
Vocabulary Correction & Model Selection
Register proper nouns or English words one per line in the vocabulary list; recognition errors are automatically corrected during polishing, while “Original” retains the recognized raw text. Data is persisted locally in ~/.dsh/voice-polish/. The model used for polishing can be selected from configured DSH models within the panel and persisted. If not fixed in the panel, it falls back based on plugin configuration and session default model priorities (see configuration below).
Interface & Host
The toolbar provides a standalone microphone button (coexisting with the official voice function); the panel displays a real-time waveform during recording. The panel is preferentially attached to the official DSH right sidebar (sidebarRightTabs); if unavailable, it falls back sequentially to dsh-better-sidebar (optional dependency) or the dock above the input box. These three paths are mutually exclusive, so two panels will not appear simultaneously.
Paste & Polish
You can read from the clipboard or paste text into the “Original” box; if the original text is no less than 30 characters, automatic polishing is triggered. If you manually edit the “Polished” text and then continue speaking, new content is only appended to the polishing result, not overwriting the edited part; use “Re-polish” for a complete rearrangement.
Standalone Service
The same polishing engine can be used outside DSH via service/cli.js and service/server.js (Node.js ≥ 20 required). The cloud ASR channel is implemented; the README notes that local sherpa-onnx offline recognition “models are ready but local inference is not yet connected,” and --asr-check local will report the status truthfully.
Implementation & Build
Pure JavaScript with no build step; recognition uses the local ctx.get('speechToText'), and polishing uses the model APIs configured in DSH. The README declares no telemetry; no additional external requests are made beyond recognition (local) and polishing (your chosen model).
Installation & Activation¶
The DSH ecosystem advocates “everything is a plugin”; the SkillHub Directory Page is a community collection site with no official affiliation with DeepSeek or High-Flyer. Before installing the plugin, it is recommended to review the repository source code and the MIT license yourself—the plugin runs with the current DSH process permissions.
CLI Version of DSH (one-line installation, README states no npm required):
dsh plugin --profile web add github:molanxuan-del/DSH-VoxPolish
DSH Desktop: Open Settings → Plugins, click Add Plugin, and fill in the source with the same string:
github:molanxuan-del/DSH-VoxPolish
Restart DSH after installation. If you modify the Host side (lib/index.js), a restart is required again; modifying the Client side (lib/client.js) only requires a page refresh. The panel bottom displays a client version stamp to confirm the loaded code version.
Voice Recognition Prerequisite: The official Voice Input Bundle must be installed and available; otherwise, the panel will clearly indicate that recognition is unavailable.
To optionally fix the polishing routing, you can write provider, model, etc., in the corresponding plugin configuration in cordis.patch.yml (example from README):
- insert:
- id: voice-polish
name: 'dsh-voice-polish'
config:
provider: deepseek-official
model: deepseek-flash
temperature: 0.2
maxTokens: 2400
The README explains that polishing is a rewriting task, and cheap, fast models are usually sufficient; by default, the model is not hardcoded in the configuration, prioritizing the panel selection, then the plugin configuration, and finally the session default model.
Typical Usage¶
30-Second Workflow in DSH (consistent with the README “Get Started in 30 Seconds”):
- Click the microphone button on the input box toolbar to start recording; the button turns red and starts timing, and the panel shows a real-time waveform.
- Click again after speaking to stop.
- Wait for “Original” to appear (about 1–2 seconds); you can send it immediately at this point. “Polished” will be automatically filled in when background processing completes.
- Modify as needed in the two text boxes and choose “Send Original” or “Send Polished”; close the panel if you do not wish to send.
Recording is held by the plugin, so switching pages will not interrupt it; the client automatically stops at 115 seconds (the recognition service has a single session limit of 2 minutes). Panel content resides in browser memory and will be cleared upon page refresh; please confirm before sending.
Standalone Service Examples (requires providing environment variables such as VP_LLM_API_KEY, see README table):
node service/cli.js --selftest
node service/cli.js "Uh, I want to make the function async..."
node service/cli.js --json "Text"
After starting the local HTTP service (default port 8787), you can send a JSON POST to http://127.0.0.1:8787/polish for polishing.
Use Cases & Notes¶
Who it is for
DSH users who frequently use voice input but want to review against the original before sending, or who need to organize colloquial speech into structured prompts; if you need to reuse the same polishing logic in local workflows or other projects, the standalone service and HTTP API are worth evaluating.
Permissions & Privacy
Recorded audio is sent to the local SenseVoice recognizer; original text is sent to the model you configured in DSH for polishing. Vocabulary, model selection, and version stamps are written to ~/.dsh/voice-polish/. The standalone service will only send audio to your configured ASR endpoint when VP_ASR is set to cloud.
Known Limitations (from README “Known Limitations”)
Modifying the Host side requires a DSH restart; recording requires microphone permissions and HTTPS or a loopback address; when reporting issues, please include the client version stamp at the bottom of the panel.
Conclusion¶
VoxPolish advances voice input in DSH from “recognize and write” to “separating original and polished, sending upon confirmation,” and includes expression suggestions, vocabulary correction, and optional requirement analysis blocks; the recognition side reuses the official Bundle without pulling additional recognition models. Community Directory: DSH-VoxPolish @ SkillHub. Source Code & Full Documentation: github.com/molanxuan-del/DSH-VoxPolish.