pinkllo
dsh-reasoning-translator
DeepSeek Harness plugin: make the model write its chain-of-thought in your language
- Stars
- 2
- Language
- TypeScript
- Created
- Aug 13, 2026
- Updated
- Aug 14, 2026
Introduction
dsh-reasoning-translator
English | 中文
A DeepSeek Harness plugin that translates visible reasoning and final answers in the Web UI only. Session logs are not rewritten.
How it works
The plugin is a Host + browser pair:
- Chrome Translator / LanguageDetector (desktop Chrome 138+ or recent Edge): free, on-device, no API key. The first use of a language pair may download a pack and needs a click.
- OpenAI-compatible API: the Host process calls the endpoint you configure in Settings, so the browser does not hit CORS.
Before translating, the plugin detects the source language and skips text that is already in the target language. You can translate reasoning, the final answer, or both; run automatically or from a per-block Translate button. Preferences restore instantly from localStorage (the API key is never cached there) and sync to the Host settings.yaml translation section, debounced; when the two copies differ, the most recently edited one wins. The Web settings RPC does not expose out-of-tree namespaces, so the plugin uses its own same-origin route.
This is not Chrome’s right-click “Translate this page”. Web pages cannot invoke that menu. The plugin uses the Translator API instead.
Install
# From a local checkout
dsh plugin --profile web add /absolute/path/to/dsh-reasoning-translator
# From GitHub (source install — allow the prepare build when prompted)
dsh plugin --profile web add github:pinkllo/dsh-reasoning-translator
# From npm, once published
dsh plugin --profile web add dsh-reasoning-translator
Then start dsh web (or pnpm dsh web from a harness checkout). Open Settings → Translation.
Settings
| Option | Default | Effect |
|---|---|---|
| Target language | zh | Language of the displayed translation. |
| Translate reasoning | on | Show a control on Think blocks. |
| Translate answer | on | Show a control on the final answer. |
| Mode | On demand | always translates when a turn settles; on demand waits for the button. |
| Display | Original and translation | Translation only replaces the reasoning/answer body instead of showing both languages. |
| Backend | Chrome built-in | Or OpenAI-compatible. |
| Endpoint / model / API key | OpenAI defaults | Used only for the OpenAI backend. TRANSLATION_OPENAI_API_KEY or OPENAI_API_KEY can supply the key instead. |
Develop
pnpm install
pnpm run build
pnpm test # pure-function unit tests, needs Node 22.6+ (type stripping)
# from a deepseek-harness checkout:
pnpm dsh plugin --profile web add /absolute/path/to/dsh-reasoning-translator
pnpm dsh web
Open http://127.0.0.1:3080. After changing client sources, rebuild and restart dsh web.
Cursor’s embedded browser is Chromium without Chrome’s on-device Translator. If 'Translator' in self is false there, retest in desktop Chrome at the same URL.