Back to home@LamplitIsles

kepos-tts

Qwen/Volcengine TTS for dsh

Stars
0
Language
TypeScript
Created
Aug 29, 2026
Updated
Aug 30, 2026
GitHub repo

Introduction

kepos-tts

Dual-provider Chinese tagged text-to-speech for DeepSeek Harness Web. The bundle adds one optional audio-only [[tts:text]]...[[/tts:text]] block to a finalized assistant reply. When that message completes, it immediately prepares its MP3 and replaces the block with the browser's native audio player. Normal replies, malformed tags, and fenced examples remain ordinary visible text.

Build and verify

bun install
bun run typecheck
bun run test
bun run build
bun run pack-smoke

The resulting package contains a host ESM entry, a browser loader entry, and cordis.patch.yml. It is pinned to the DSH 0.1.1-rc.2 contract family.

Settings

Open the native Plugin Settings card from a local loopback DSH Web session and choose Alibaba or ByteDance. The editable Voice ID defaults are Maia and zh_female_sajiaoxuemei_uranus_bigtts; any provider-supported ID up to 128 characters can be entered. Store the selected provider's key using the card's write-only password field. DSH credentials hold Alibaba under KEPOS_TTS_DASHSCOPE_API_KEY and ByteDance under KEPOS_TTS_VOLCENGINE_API_KEY; this plugin never reads or displays saved values. There is no agenix or remote configuration path. In remote DSH Web, an unavailable or memory-backed Settings scope does not render this card; only a ready non-writable Host scope shows it read-only.

Alibaba uses Qwen3-TTS Flash with Chinese MP3 output. ByteDance uses the domestic Volcengine V3 seed-tts-2.0 one-shot SSE endpoint with MP3 at 24 kHz. The host accepts only the finalized passage and framework session identity sent by the browser's trusted Connection RPC; provider and voice are never message overrides.

Audio cache

Each prepared passage is keyed by its normalized text, selected provider profile (provider, model/resource, and Voice ID), and cache format, then written atomically as .dsh/kepos-tts/audio/<sha256>.mp3 below the active session workspace. A refresh or remount resolves the session again and reuses that bounded artifact; the browser only receives a same-origin /kepos-tts/audio/... URL. The cache has no browsing, eviction, migration, or clear UI, and sessions without an absolute workspace are intentionally unavailable.