dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
在每条已定稿的助手回复里、紧挨点赞按钮右侧加一个小喇叭:点击用浏览器语音引擎朗读这条回复,鼠标悬停可调倍速与音色;文本会发送到非官方的 Edge TTS 端点。
English | 中文
A speaker button beside the Like button: read any DeepSeek Harness reply aloud.
Every finalized assistant message gets one extra action in the row it already has, immediately to the right of 👍👎:
copy · 👍 👎 · 🔊 · branch
Click it and the reply is spoken by your browser's own speech engine. Nothing is uploaded, no API key is involved, and no host-side code runs.
dsh plugin --profile web add dsh-read-aloud
Or install it from Settings → Plugin Market. Most installs go live after a page refresh.
| Action | Result |
|---|---|
| Click the speaker | Starts reading this reply from the top |
| Click again while reading | Pauses; the icon becomes ▶ |
| Click again while paused | Resumes from the same sentence |
| Click another message's speaker | Stops the current one and starts that one |
Esc | Stops immediately, wherever the pointer is |
| Hover the speaker | Opens the speed and voice panel |
The button shows three states: 🔈 idle, ⏸ reading, ▶ paused. Reading ends by itself, and the icon returns to 🔈.
Hovering the button opens a small panel that stays with the message you are listening to:
Speed [0.5×] [0.75×] [1×] [1.25×] [1.5×] [1.75×] [2×]
Voice [ System default ▾ ]
Both choices take effect on the sentence being read and are remembered in the browser's local storage. Voices come from your operating system; the list is sorted with Chinese voices first, and System default picks a voice matching your interface language.
Replies are Markdown, and reading Markdown literally sounds terrible — URLs get spelled out character by character and code blocks become noise. So the text is cleaned first:
| Kept | Dropped |
|---|---|
| Prose and headings | Fenced code blocks (silently) |
| List items, with their markers removed | Table rows |
| Inline code content, without the backticks | Image syntax |
| Link labels | Link targets and bare URLs |
Emphasis text, without ** and * | HTML tags, file paths, emoji |
Long replies are read in full — nothing is truncated. The text is queued in sentence-sized pieces rather than handed to the engine in one lump, because several engines silently cut short or drop a single very long utterance.
lib/index.js is an empty apply that exists only so the
plugin appears in the profile's loader.dsh-read-aloud/settings. Clearing site data resets them to 1× and
System default; nothing else is affected.The plugin declares engines.dsh >= 0.1.2-rc.1 and registers one entry in the
conversation.chat.assistant-actions slot at order: 20, so it sits beside the
shipped feedback entry (order: 10) without replacing it. It reads the reply
text through the slot's own useChat standard prop, so it needs no host RPC and
no DOM scraping.
npm test
The bundle is hand-written in the client-module format the web shell loads, so
there is no build step and no bundler — lib/client.js is shipped as authored.
The test loads that shipped file with a stubbed module graph and exercises the
text-cleaning, chunking, message-lookup and voice-listing helpers.
MIT