← Back to home@Zhen-Bo

dsh-translate-tab

Translation plugin for DeepSeek Harness. Adds a two-pane Translate page to the sidebar with model, reasoning effort and prompt controls.

Stars
0
Language
TypeScript
Created
Oct 5, 2026
Updated
Oct 5, 2026
GitHub repo

Introduction

🌐 dsh-translate-tab

A translation plugin for DeepSeek Harness.

npm version MIT License DeepSeek Harness plugin 15 languages TypeScript Listed on dsh-plugin.org

Installation · Quick start · Usage · Troubleshooting

English | 繁體中文

The Translate page in DeepSeek Harness. English source text on the left, detected automatically and translated into Traditional Chinese on the right.

✨ Features

  • Sidebar integration: adds a Translate entry under Plugins that opens a two-pane translation view in the main area.
  • Shared model catalog: uses the same providers and models as Harness chat, with adjustable reasoning effort.
  • Low-latency default: uses the catalog's default model with reasoning effort off.
  • 15 languages: with automatic source language detection.
  • Configurable prompt: supports {{target_language}}, {{source_language}} and {{text}} variables.
  • Localized interface: follows the Harness language setting in English, Simplified Chinese and Traditional Chinese.

📋 Requirements

  • DeepSeek Harness desktop app with the dsh CLI on PATH
  • At least one model configured with a valid API key in Settings › Models

📦 Installation

From DSH Plugin Hub

  1. Install DSH Plugin Hub:

    dsh plugin --profile desktop add dsh-plugin
    
  2. Restart DeepSeek Harness.

  3. Open Settings › Plugin Market, search for dsh-translate-tab and select Install.

From npm

  1. Install the plugin from the npm registry:

    dsh plugin --profile desktop add dsh-translate-tab
    
  2. Restart DeepSeek Harness.

From GitHub

  1. Install the plugin from the repository:

    dsh plugin --profile desktop add "github:Zhen-Bo/dsh-translate-tab"
    
  2. Restart DeepSeek Harness.

🚀 Quick start

  1. Open Plugins › Translate in the sidebar.
  2. Enter the source text in the left pane.
  3. Press Ctrl + Enter, or ⌘ + Enter on macOS.

The translation streams into the right pane.

🧭 Usage

Languages

Traditional Chinese, Simplified Chinese, English, Japanese, Korean, French, German, Spanish, Portuguese, Italian, Russian, Vietnamese, Thai, Indonesian and Arabic, each available as source or target.

Automatic detection applies to the source and recognizes Japanese, Korean, Arabic, Thai, Russian, Simplified Chinese, Traditional Chinese and English.

Model and reasoning effort

The model picker is at the top right. Reasoning effort is set with the slider below the model list.

Translation prompt

The prompt editor opens from the button next to the model picker. The prompt is sent as the user message with the following variables substituted:

VariableValue
{{target_language}}Target language name in English, for example Japanese
{{source_language}}Source language name, or the detected source language
{{text}}Source text. Appended to the end when the prompt omits this variable

Storage

DataLocationLifetime
Languages, model, reasoning effort and custom promptlocalStorage key dsh-translate-tab:v1Persistent
Source text draftsessionStorage key dsh-translate-tab:draftCurrent window session

🔧 Troubleshooting

MessageResolution
This model has no API key yetAdd a key in Settings › Models, or select another model
The API key was rejectedVerify the key in Settings › Models
Too many requestsRetry after a short wait
The response stopped earlyRun the translation again
Text is too longSplit the source text into segments under 100,000 characters

If Translate is missing under Plugins, verify the install path and restart DeepSeek Harness.

🧹 Uninstall

dsh plugin --profile desktop remove dsh-translate-tab

Restart DeepSeek Harness afterwards.

🧩 Architecture

PathRuntimeRole
src/clientHarness windowTranslate page in React and TypeScript
src/serverHarness hostPOST /translate/api/stream, streams a single model call
src/sharedBothRoute, text limits and stream event types
localeHarness windowInterface text, registered with the Harness locale service
libBothBuild output loaded by Harness
Stream format

The route accepts same-origin requests from the Harness window and responds with newline-delimited JSON:

{"t":"text","v":"..."}        translated text
{"t":"done"}                  finished
{"t":"aborted"}               cancelled
{"t":"error","message":"..."} failed

💻 Development

  1. Install dependencies and link the working copy to the desktop profile:

    npm install
    dsh plugin --profile desktop add "link:D:/path/to/dsh-translate-tab"
    
  2. Run the build in watch mode, then restart DeepSeek Harness to load changes:

    npm run dev
    
CommandPurpose
npm run buildBuilds lib/client.js and lib/index.js
npm run checkRuns the type check, lint, tests and build
npm run fixFormats the code with gts

📄 License

Licensed under the MIT License.