Bundle
dsh-read-aloud
A speaker button beside the Like button: read any assistant reply aloud with the browser's built-in speech engine, with speed and voice control. · 在点赞旁加一个小喇叭,朗读 DSH 的回复,支持倍速与音色。
- Source
- cccc12138
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-read-aloud English | [中文](README.zh.md) 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. ## Install ```sh dsh plugin --profile web add dsh-read-aloud ``` Or install it from **Settings → Plugin Market**. Most installs go live after a page refresh. ## Use | 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 🔈. ### Speed and voice 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. ## What gets read 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. ## Requirements - DeepSeek Harness **0.1.2-rc.1** or newer - A browser with the Web Speech API. Speech comes from your operating system's installed voices, so an OS with no voice for the reply's language will stay silent — Windows and macOS both ship usable voices, and Edge exposes additional natural voices. - If the engine is missing entirely, the button says so instead of failing silently. ## Privacy - No network requests. The plugin never contacts a server. - No API keys, no accounts, no telemetry. - No host-side code: `lib/index.js` is an empty `apply` that exists only so the plugin appears in the profile's loader. - Speed and voice live in your browser's local storage under `dsh-read-aloud/settings`. Clearing site data resets them to `1×` and **System default**; nothing else is affected. ## Compatibility 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. ## Development ```sh 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. ## License MIT
Install
dsh plugin --profile web add github:cccc12138/dsh-read-aloud
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-read-aloud from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.