When using the DeepSeek Harness (DSH) Web UI for agent development, the content produced by streaming output—especially Tool Calls—is often difficult for screen readers to capture, and users can easily miss the moment when a tool starts executing. This plugin uses an aria-live region to ensure that this content is announced immediately.
Core Features¶
This is a client-side plugin that listens for conversation changes on the Web platform and announces them through an aria-live region.
The main behaviors include:
- Tool call announcements: A tool call is announced as soon as the text stabilizes briefly (with about a 400ms debounce), rather than waiting until execution completes. This allows users to notice the moment a tool begins executing.
- Assistant message announcements: The full content is announced in the aria-live region only after the assistant message text has fully stabilized; snippets while streaming do not trigger announcements.
- Exclude internal reasoning: The plugin removes internal Think blocks, ensuring that only visible answer text is announced.
- Deduplication mechanism: Deduplication is performed using the
data-chat-anchor-keyattribute to prevent duplicate rendering from triggering repeated announcements. - State detection: The DSH
data-streamingattribute is used to detect streaming state, and announcements are triggered only when the attribute is removed (i.e., streaming is complete).
Installation and Enablement¶
Installing this plugin requires manually configuring the file dependency and bundle.
- Clone the repository into the plugin directory (for example,
/opt/dsh/plugins/dsh-a11y-announcer/). - Add this plugin as a file dependency in
/opt/dsh/package.json. - Add this plugin as a file dependency in
/mnt/ssd/dsh/profiles/web/package.json. - Add this plugin as a bundle in
dsh.profile.bundlesin/mnt/ssd/dsh/profiles/web/package.json.
After modifying the lib/client.js source, you only need to restart the dsh web service for the changes to take effect; rebuilding the bundle is not required.
Typical Usage¶
After enabling the Web UI, use it with NVDA, JAWS, or VoiceOver:
- When a tool call appears, the screen reader automatically announces the tool name and content.
- When the assistant response is complete, the screen reader announces the full final text.
- Internal reasoning is not read aloud and does not interrupt the announcement flow.
Applicable Scenarios and Notes¶
- Applicable scenarios: Visually impaired users who need to use the DSH Web UI for development, or scenarios where tool calls need to be clearly perceived.
- Notes:
- The plugin does not move the user’s mouse focus; it only announces through the accessibility region.
- When loading older sessions, existing nodes do not re-trigger announcements (there is no replay mechanism).
- This plugin is based on the Web platform and uses MutationObserver to monitor the
[data-slot="conversation.session"]container.
Summary¶
This plugin uses aria-live technology to solve accessibility issues in the DSH Web UI’s streaming output scenarios. It focuses on real-time feedback for tool calls and stable announcements of final answers, helping screen reader users use DeepSeek Harness more smoothly.