# ЁЯФБ dsh-translate
- **1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓**: рдПрдХ рдмрд╛рд░ `npm i -g dsh1024`, рдлрд┐рд░ `dsh1024 plugin --profile web add dsh-translate` ([deepseek1024.com](https://deepseek1024.com) рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
**DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдирд┐рд░реНрдзрд╛рд░рдХ JSON рдорд░рдореНрдорддред**
*рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз, рд╣рд░ рд╡реЗрдВрдбрд░ рдкрд░ред рдЯреВрдЯрд╛ JSON, рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдЧрдврд╝реЗ рдареАрдХред*
**рдпрд╣ рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдореИрдкрд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдорд╢реАрдиреА рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВред**
[](LICENSE)
[](https://gitee.com/perrylink/dsh-translate)
[](https://github.com/topics/dsh-plugin)
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-х╛╜чла)
[](https://dsh.market/)
[](#)
[](https://github.com/PerryLink/dsh-translate/actions)
[](https://github.com/PerryLink/dsh-translate/releases)
[](https://www.npmjs.com/package/dsh-translate)
[](https://www.npmjs.com/package/dsh-translate)
[](https://dshfind.com/hi/plugins/PerryLink/dsh-translate?ref=badge)
[English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README-zh.md) ┬╖ [Espa├▒ol](README-es.md) ┬╖ [Portugu├кs](README-pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README-hi.md)
---
**ЁЯУЦ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдиреЙрд▓реЗрдЬ рдмреЗрд╕** тАФ рдорд╛рдкреЗ рдЧрдП рдЖрдБрдХрдбрд╝реЗ, рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ: [рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЧрд╛рдЗрдб ┬╖ рдЪрдпрди рдбреЗрдЯрд╛ ┬╖ рд░рдЦрд░рдЦрд╛рд╡ рдорд╛рдирджрдВрдб](https://perrylink.github.io/dsh-plugin-guide/)ред
## тнР хжВцЮЬхоГх╕охИ░ф║Жф╜а
рдпрд╣ рдкреНрд▓рдЧрдЗрди [DSH рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░](https://github.com/PerryLink) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (40+ рдкреНрд▓рдЧрдЗрди, рд╕рднреА Apache-2.0)ред рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ, рддреЛ **рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдВ** тАФ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕реБрд╡рд┐рдзрд╛ рдЕрдирд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрддреА, рдкрд░ рдЕрдЧрд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдЦреЛрдЬ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛ рд▓реЗрддрд╛ рд╣реИред
*English:* part of a 40+ plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** тАФ nothing is gated behind it.
## What is dsh-translate?
DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдирд┐рд░реНрдзрд╛рд░рдХ JSON рдорд░рдореНрдорддред
рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз, рд╣рд░ рд╡реЗрдВрдбрд░ рдкрд░ред рдЯреВрдЯрд╛ JSON, рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдЧрдврд╝реЗ рдареАрдХред


*рд╡рд╣реА рд░рди, рдПрдирд┐рдореЗрдЯреЗрдбред*
## рд╕рдВрдЧрддрддрд╛
| рд╕рддрд╣ | рд╕реНрдерд┐рддрд┐ |
|---|---|
| Harness | рдореБрдЦреНрдп рд╕рдВрд╕реНрдХрд░рдг **`dsh-v0.2.1-alpha.1`** (2026-09-25 рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд: рджреЛрд╣рд░рд╛ typecheck + `node --test` 80/80 + self-contained/artifacts рдЧреЗрдЯ)ред npm dev/test рдкрд┐рди рдЕрдм `0.1.7-rc.2` рд╣реИрдВ; peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0 \|\| >=0.1.7-0 <0.2.0`ред |
| Node | `^22.19.0 \|\| >=24.0.0` |
| рд░реВрдк | рд╢реБрджреНрдз-host JS рдкреНрд▓рдЧрдЗрди (рдХреЛрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ) |
| рдореЙрдбрд▓ | рдХреЛрдИ рднреА рдореЙрдбрд▓ тАФ рдорд░рдореНрдордд рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИ, рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбрд▓ рдХреЙрд▓ рдирд╣реАрдВ |
## рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ
рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рд╕рддрд╣реЗрдВ:
- **`/translate`** тАФ рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛: `temperature`, `top_p`, `max_tokens`, `stop`, `system` рдФрд░ 8 рдЕрдиреНрдп рдХреИрдирдирд┐рдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░, **11 рд╡реЗрдВрдбрд░реЛрдВ** рдкрд░ рдореИрдк рдХрд┐рдП рдЧрдП (OpenAI, ERNIE, Qwen, Anthropic, Google, DeepSeek, Mistral, Cohere, xAI, Groq, Azure)ред рджреЛ рд╡реЗрдВрдбрд░реЛрдВ рдХреЗ рдмреАрдЪ рдореИрдкрд┐рдВрдЧ рдкреВрдЫреЗрдВ, рд╡реЗрдВрдбрд░/рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рджреЗрдЦреЗрдВ, рдпрд╛ `lib/rosetta.mjs` рдХреЗ `transformRequest` рд╕реЗ рдкреВрд░рд╛ рдорд╛рдирдХ рдЕрдиреБрд░реЛрдз рдмрджрд▓реЗрдВред
- **рдорд░рдореНрдордд рдкрд░рдд** тАФ `tools/post-execute` рд╢реНрд░реЛрддрд╛ + `fix_json` рдЙрдкрдХрд░рдгред рдЬрдм рдХреЛрдИ рд╕рдлрд▓ рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреВрдЯрд╛ JSON рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ (string-рд░реВрдЯ рдпрд╛ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд `json`-рд░реВрдЯ рд╕реНрдХреАрдорд╛, рдпрд╛ рдирд╛рдо рд╕реЗ рдСрдкреНрдЯ-рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЯреВрд▓), рддреЛ рдкрд░рдд рдЙрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рдХ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░рддреА рд╣реИ: markdown рдлрд╝реЗрдВрд╕ рдирд┐рдХрд╛рд▓рдирд╛, рдПрд╕реНрдХреЗрдк рдорд░рдореНрдордд, рдЕрдВрддрд┐рдо рдХреЙрдорд╛ рд╣рдЯрд╛рдирд╛, рдЯреНрд░рдВрдХреЗрд╢рди рдмрдВрдж рдХрд░рдирд╛, рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ `null` рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕реЗ рднрд░рдирд╛ред **рдХреЛрдИ рдорд╛рди рдХрднреА рдЧрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛** тАФ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рдгрд╛рдо fail-closed рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХрднреА рд╕рдлрд▓рддрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛рддреЗред
```text
рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо (рд╕рдлрд▓, JSON рдЯреЗрдХреНрд╕реНрдЯ) тФАтФАтЦ╢ рдлрд╝реЗрдВрд╕ рдирд┐рдХрд╛рд▓реЗрдВ тФАтФАтЦ╢ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
тФВ рдареАрдХ? тФАтФАтЦ╢ рд╕реНрдХреАрдорд╛-рд╕рддреНрдпрд╛рдкрди тФАтФАтЦ╢ accept { kind: 'accept', value } (рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкреБрдирдГ рд╕рддреНрдпрд╛рдкрд┐рдд + рдкреБрдирдГ рд░реЗрдВрдбрд░ рдХрд░рддреА рд╣реИ)
тФВ рдЯреВрдЯрд╛ тФАтФАтЦ╢ рдПрд╕реНрдХреЗрдк / рдХреЙрдорд╛ / рдмрдВрдж / null тФАтФАтЦ╢ рд╕рддреНрдпрд╛рдкрди
тФВ рдЕрдорд░рдореНрдордд рдпреЛрдЧреНрдп тФАтФАтЦ╢ next() (рдореВрд▓ рдорд╛рди рд╕реБрд░рдХреНрд╖рд┐рдд) + translate/fix рдСрдбрд┐рдЯ (рдХреЗрд╡рд▓ рдЧрд┐рдирддреА)
```
## рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд
```sh
dsh plugin --profile web add github:PerryLink/dsh-translate
```
```sh
# 1. рдмрдВрдбрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
dsh plugin --profile web add github:PerryLink/dsh-translate
# рдпрд╛ npm рд╕реЗ (рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд▓реАрдЬрд╝)
dsh plugin --profile web add dsh-translate
# 2. рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдкрдВрдХреНрддрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
dsh --profile web --dump-config | grep -A2 'id: dsh-translate'
```
рдлрд┐рд░ рдПрдЬреЗрдВрдЯ рд╕реЗ рдореИрдкрд┐рдВрдЧ рдпрд╛ рдорд░рдореНрдордд рдХрд░рд╡рд╛рдПрдБ:
```
> /translate openai ernie max_tokens
> fix_json рд╕реЗ рдорд░рдореНрдордд рдХрд░реЗрдВ: {"a": 1,} рд╕реНрдХреАрдорд╛ {"type":"object","properties":{"a":{"type":"integer"}},"required":["a"]} рдХреЗ рд╡рд┐рд░реБрджреНрдз
```
## рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓
- **git рдЪреИрдирд▓** (рдирд╡реАрдирддрдо `main`): `dsh plugin --profile web add github:PerryLink/dsh-translate` тАФ рд╢реБрджреНрдз JS, рдХреЛрдИ рдмрд┐рд▓реНрдб рдЪрд░рдг рдирд╣реАрдВред
- **npm рдЪреИрдирд▓** (рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд▓реАрдЬрд╝): `dsh plugin --profile web add dsh-translate`ред
- **tarball рдЪреИрдирд▓**: рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ `pnpm pack`, рдлрд┐рд░ `dsh plugin --profile web add ./dsh-translate-.tgz`ред
- **рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓**: `dsh plugin --profile web remove dsh-translate` (рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рд╕реЗ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рдПрдБ)ред
## рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рд╕рднреА рд╕рдорд╛рдпреЛрдЬрди Schemastery `Config` рдлрд╝реАрд▓реНрдб рд╣реИрдВ (cordis.yml рд╕реЗ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред id-рд▓рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рдкреВрд░реА рдкрдВрдХреНрддрд┐ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ тАФ рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдХреБрдВрдЬреА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред `cordis.patch.yml` рд╣рд░ рдХреБрдВрдЬреА рдХреЛ рдЗрдирд▓рд╛рдЗрди рд╕рдордЭрд╛рддрд╛ рд╣реИред
| рдХреБрдВрдЬреА | рдбрд┐рдлрд╝реЙрд▓реНрдЯ | рдЕрд░реНрде |
|---|---|---|
| `enabled` | `true` | рдорд╛рд╕реНрдЯрд░ рд╕реНрд╡рд┐рдЪ; `false` рдХреБрдЫ рднреА рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛ |
| `repair.enabled` | `true` | post-execute рдорд░рдореНрдордд рдкрд░рдд рдХрд╛ рд╕реНрд╡рд┐рдЪ |
| `repair.toolNames` | `[]` | рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреВрд▓ рдирд╛рдо рдЬрд┐рдирдХреЗ JSON-рдЯреЗрдХреНрд╕реНрдЯ рдкрд░рд┐рдгрд╛рдо рдорд░рдореНрдордд рдпреЛрдЧреНрдп рд╣реИрдВ (string/`json` рд░реВрдЯ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд) |
| `repair.strategies.escapeRepair` | `true` | рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдХрдЪреНрдЪреЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрд╕реНрдХреЗрдк рдХрд░реЗрдВ |
| `repair.strategies.trailingComma` | `true` | рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХреЗ рдХреЙрдорд╛ рд╣рдЯрд╛рдПрдБ |
| `repair.strategies.truncationClosure` | `true` | рдЯреНрд░рдВрдХреЗрд╢рди рд╕реЗ рдХрдЯреА рдЦреБрд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ/рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ |
| `repair.strategies.fieldCompletion` | `true` | рдЕрдиреБрдкрд╕реНрдерд┐рдд рдЕрдирд┐рд╡рд╛рд░реНрдп рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ `null` рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕реЗ рднрд░реЗрдВ |
| `repair.maxSteps` | `8` | рд░рдгрдиреАрддрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдЬрдЯ (рдорд░рдореНрдордд-рд▓реВрдк рдкрд╛рд╕, 1..64) |
| `diffMaxChars` | `200` | рд▓реЙрдЧ рдХрд┐рдП рдЧрдП рдПрдХ diff рдЦрдВрдб рдХреА рд╡рд░реНрдг рд╕реАрдорд╛ |
| `diffMaxEntries` | `50` | рд▓реЙрдЧ рдХреА рдЧрдИ diff рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕реАрдорд╛ |
| `registerCommand` | `true` | `/translate` рдХрдорд╛рдВрдб рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ |
| `registerTool` | `true` | `fix_json` рдЯреВрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ |
| `rosettaDataPath` | *(none)* | рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрд╛рд╣рд░реА rosetta рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ (рдмрдВрдбрд▓ рдХрд┐рдП рдЧрдП `lib/rosetta-data.json` рдЬреИрд╕рд╛ рдЖрдХрд╛рд░); рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореИрдкрд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреА рд╣реИ |
рдЖрдкрдХреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдЙрджрд╛рд╣рд░рдг:
```yaml
- insert:
- id: dsh-translate
name: dsh-translate
config:
enabled: true
repair:
enabled: true
toolNames: ['emit-json']
strategies:
escapeRepair: true
trailingComma: true
truncationClosure: true
fieldCompletion: true
maxSteps: 8
diffMaxChars: 200
diffMaxEntries: 50
registerCommand: true
registerTool: true
```
## рдЯреВрд▓ рдФрд░ рд╕рддрд╣реЗрдВ
| рд╕рддрд╣ | рдкреНрд░рдХрд╛рд░ | рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ |
|---|---|---|
| `/translate` | рдХрдорд╛рдВрдб | `vendors`, `params`, рдпрд╛ ` [param]` рдЬреЛрдбрд╝реАрд╡рд╛рд░ рдореИрдкрд┐рдВрдЧ |
| `fix_json` | рдЯреВрд▓ | `{ text, schema?, strategies? }` тЖТ `{ ok, repaired?, diff?, strategies, truncated, validated, error? }`; diff рдЦрдВрдб рд╕реАрдорд┐рдд рдФрд░ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб |
| post-execute рдорд░рдореНрдордд | рд╢реНрд░реЛрддрд╛ | string/`json` рд░реВрдЯ (рдФрд░ `repair.toolNames`) рд╡рд╛рд▓реЗ рд╕рдлрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд; рдЬрдм рддрдХ рдХреЙрд▓ рди рд▓реЗ, рд╣рдореЗрд╢рд╛ `next()` |
## рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдбреЗрдЯрд╛
- **рдЕрдиреБрдорддрд┐рдпрд╛рдБ**: рдХреЛрдИ рдиреЗрдЯрд╡рд░реНрдХ, рдХреЛрдИ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕, рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдирд╣реАрдВ тАФ рдкреНрд▓рдЧрдЗрди рдХреЗрд╡рд▓ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ `commands` рд╡ `tools` рд╕реЗрд╡рд╛рдПрдБ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рддреНрд░ рд▓реЙрдЧ рд▓рд┐рдЦрддрд╛ рд╣реИред
- **рдбреЗрдЯрд╛**: рдорд░рдореНрдордд рдХрднреА рдорд╛рди рдирд╣реАрдВ рдЧрдврд╝рддреА; рдореЙрдбрд▓-рджреГрд╢реНрдп рдЬреЛрдбрд╝ рдХреЗрд╡рд▓ рдорд░рдореНрдордд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреИрдирдирд┐рдХрд▓ рдорд╛рди рдФрд░ `fix_json` рдХрд╛ diff рд╣реИрдВред рд╕рддреНрд░ рдСрдбрд┐рдЯ рдЗрд╡реЗрдВрдЯ (`translate/fix`) рдореЗрдВ рдХреЗрд╡рд▓ рдЯреВрд▓ рдирд╛рдо, call id, рд░рдгрдиреАрддрд┐ рдирд╛рдо, рд╕рдВрдкрд╛рджрди рдЧрд┐рдирддреА рдФрд░ рдЯреНрд░рдВрдХреЗрд╢рди рдзреНрд╡рдЬ рд╣реЛрддреЗ рд╣реИрдВ тАФ рдХрднреА payload рдирд╣реАрдВред рдСрдбрд┐рдЯ рд▓реЗрдЦрди рд╣реЛрд╕реНрдЯ рдХреА рд╕рддреНрд░-рдЗрд╡реЗрдВрдЯ рд╢рдмреНрджрд╛рд╡рд▓реА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ: рдЬреЛ рд╣реЛрд╕реНрдЯ `translate/fix` рдЬрд╛рдирддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рджрд╛ рджреЛ-рддрд░реНрдХ append рдорд┐рд▓рддрд╛ рд╣реИ, `ignorable` envelope рд╡рд╛рд▓реЗ рд╣реЛрд╕реНрдЯ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд append рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдирд╛ envelope рд╡рд╛рд▓реЗ рд╣реЛрд╕реНрдЯ (`0.1.0-rc.6`тАУ`0.1.1-rc.2`, `0.1.2-rc.1`) рдХреЛ рдХреЛрдИ рдСрдбрд┐рдЯ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ тАФ рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рд╣реА рдореЙрдбрд▓-рджреГрд╢реНрдп рд▓реЙрдЧ рд░рд╣рддрд╛ рд╣реИред
0.1.2-rc.1 (2026-09-04 рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд): рд╕рддреНрд░ рд▓рд┐рдлрд╝рд╛рдлрд╝рд╛ рдЕрдкрдирд╛ ignorable рдлрд╝реАрд▓реНрдб рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣реАрдд-рд▓реЙрдЧ рдкрдарди рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рд░рдЦрддрд╛ рд╣реИ - Session.append рдЕрднреА рднреА рдЗрд╕реЗ рд╕реНрдЯреИрдореНрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдЧреЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред
## рд╕реБрд░рдХреНрд╖рд╛ рд╕реАрдорд╛рдПрдБ
- **рдХреЗрд╡рд▓ рдирд┐рд░реНрдзрд╛рд░рдХред** рдорд░рдореНрдордд рд╕реАрдорд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рд╕рд░реНрдЬрд░реА рд╣реИ; upstream JSON-Schema-Enforcer-Proxy рдХреА LLM-рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ рд╢рд╛рдЦрд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХреА рдЧрдИ тАФ post-execute рд╢реНрд░реЛрддрд╛ рдХрднреА рдореЙрдбрд▓ рдирд╣реАрдВ рдмреБрд▓рд╛рддрд╛ред
- **Fail closedред** рдЕрдорд░рдореНрдордд рдпреЛрдЧреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╕реНрдХреАрдорд╛ рдЙрд▓реНрд▓рдВрдШрди рдореВрд▓ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдпрдерд╛рд╡рдд рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ (рдпрд╛ `fix_json` рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ); `null` рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рддрднреА рд▓рдЧрддреЗ рд╣реИрдВ рдЬрдм рд╕реНрдХреАрдорд╛ `null` рд╕реНрд╡реАрдХрд╛рд░реЗред
- **рд╢рддреНрд░реБ рдЗрдирдкреБрдЯ рд╕реАрдорд┐рддред** рдЕрд╕рдорд░реНрдерд┐рдд рд╕реНрдХреАрдорд╛ рдХреАрд╡рд░реНрдб рдФрд░ рд╡реГрддреНрддрд╛рдХрд╛рд░ рд╕реНрдХреАрдорд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ; `oneOf` рд╕рддреНрдпрд╛рдкрди рдЧрд╣рд░рд╛рдИ (`MAX_ONE_OF_DEPTH`) рдФрд░ рд╢рд╛рдЦрд╛ рдмрдЬрдЯ (`MAX_ONE_OF_BUDGET`) рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдШрд╛рддреАрдп рд╕реНрдХреАрдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╣реАрдВ рдердХрд╛ рд╕рдХрддреАред
- **Payload рд░рд┐рд╕рд╛рд╡ рд╢реВрдиреНрдпред** рд▓реЙрдЧ рдФрд░ рдСрдбрд┐рдЯ рдЗрд╡реЗрдВрдЯ рдореЗрдВ рдХрднреА рдорд░рдореНрдордд рдХрд┐рдпрд╛ рдЧрдпрд╛ payload рдирд╣реАрдВ рд╣реЛрддрд╛; diff рджрд┐рдЦрд╛рдиреЗ рдпрд╛ рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдЯреЗ рдФрд░ рд╕реАрдорд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
## рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ
- рд╕рдорд░реНрдерд┐рдд JSON Schema рдЙрдкрд╕рдореБрдЪреНрдЪрдп рд╣рд╛рд░реНрдиреЗрд╕ рдЯреВрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЬреИрд╕рд╛ рд╣реИ (`type`/`oneOf`/`properties`/`required`/`additionalProperties`/`items`/`enum`/`const`); рдЕрдиреНрдп рдХреАрд╡рд░реНрдб рдЕрд╕рдорд░реНрдерд┐рдд рдХрд╣рдХрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЪреБрдкрдЪрд╛рдк рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдирд╣реАрдВред
- рдорд░рдореНрдордд рдХреЗрд╡рд▓ рдЙрди рд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХрд╛ рдХреИрдирдирд┐рдХрд▓ рдорд╛рди JSON-рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ; рд╕реНрдХреАрдорд╛ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рдлрд▓ рдорд╛рди рд╡рд┐рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдХрднреА рдкрд▓рдЯрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ред
- рддрд╛рд▓рд┐рдХрд╛ 11 рд╡реЗрдВрдбрд░ ├Ч 13 рдХреИрдирдирд┐рдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╡рд░ рдХрд░рддреА рд╣реИ; `extended` рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреА рд╣реИрдВ (upstream рддреНрд░рдпреА рдирд╣реАрдВ) рдФрд░ `lib/rosetta.mjs` рдореЗрдВ рд╡реИрд╕реЗ рд╣реА рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВред
- рдЬреЛ рд╣реЛрд╕реНрдЯ рди `translate/fix` рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рди рд╣реА `session.append` рдореЗрдВ `ignorable` envelope рд░рдЦрддреЗ рд╣реИрдВ (рдкреНрд░рдХрд╛рд╢рд┐рдд `0.1.0-rc.6`тАУ`0.1.1-rc.2` рд▓рд╛рдЗрди рдФрд░ `0.1.2-rc.1`, рдЬреЛ рдкрдврд╝рддреЗ рд╕рдордп рдЕрдЬреНрдЮрд╛рдд рдЗрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ fail closed рд╣реЛрддрд╛ рд╣реИ), рд╡рд╣рд╛рдБ рдЕрдиреБрдХреВрд▓реА рджреНрд╡рд╛рд░ рдСрдбрд┐рдЯ append рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рддреНрд░ рд▓реЙрдЧ рдХрднреА рджреВрд╖рд┐рдд рди рд╣реЛ; рдЗрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рддрдХ рдЙрди рд╣реЛрд╕реНрдЯ рдкрд░ in-log рдСрдбрд┐рдЯ рджрд░реНрдкрдг рдирд╣реАрдВ рдорд┐рд▓рддрд╛ред
## рд╡рд┐рдХрд╛рд╕
```sh
pnpm install # node ^22.19 || >=24
pnpm test # node --test: 57 рдЯреЗрд╕реНрдЯ (рд╢реБрджреНрдз рд╕реБрдЗрдЯ + рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕реЗрд╡рд╛ рдЕрд╕реЗрдВрдмрд▓реА рд╕реБрдЗрдЯ)
pnpm run check # tsc checkJs types.d.ts рдХреЗ рд╡рд┐рд░реБрджреНрдз
pnpm run verify:self-contained # рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдкреЗрдХ registry рд╕реЗ рд╣рд▓ рд╣реЛрддреА рд╣реИрдВ
pnpm run verify:artifacts # рд╕рд╛рджреЗ Node рдореЗрдВ ESM рдлрд╝реЗрд╕ import рд╣реЛрддрд╛ рд╣реИ + lib рдирд┐рд░реНрдпрд╛рдд рдореМрдЬреВрдж
node scripts/check-readme-sync.mjs # рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ README рд╕рд┐рдВрдХ рджреНрд╡рд╛рд░ (CI рдореЗрдВ рднреА)
pnpm pack # рдкреНрд░рдХрд╛рд╢рд┐рдд tarball
```
## рдЕрдиреНрдп DSH рдкреНрд▓рдЧрдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░-рд╕рдВрдЪрд╛рд▓рдиреАрдпрддрд╛
**DSH `0.2.0-rc.2`** (рд╡рд╣ рд░рдирдЯрд╛рдЗрдо рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ README рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реИ) рдФрд░ 2026-10-05 рдХреЛ рд╕рд░реНрд╡реЗ рдХрд┐рдП рдЧрдП рдЙрдЪреНрдЪ-рд╕реНрдЯрд╛рд░ рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рддред
рдпрд╣ рдкреНрд▓рдЧрдЗрди рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрдиреЛрдВ рдореЗрдВ **рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛**, рдЙрди рдЙрдЪреНрдЪ-рд╕реНрдЯрд╛рд░ рдкреНрд▓рдЧрдЗрдиреЛрдВ рд╕рд╣рд┐рдд рдЬреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВ:
- **рдХреЛрдИ рдЯреВрд▓-рдирд╛рдо рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВред** рд╕рднреА рдЯреВрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдпреБрдХреНрдд рд╣реИрдВ; рдХреЛрдИ рднреА рдРрд╕рд╛ рдирдВрдЧрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓реЗрддрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рд╕реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреВрд▓ рдпрд╛ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╣реЛред
- **рдХреЛрдИ рд╕рд░реНрд╡рд┐рд╕-рдХреА рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВред** рдпрд╣ рдХреЛрдИ рд╕рд░реНрд╡рд┐рд╕ key рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рдЯрдХрд░рд╛рд╡ рд╕рдВрднрд╡ рдирд╣реАрдВред
- **рдХреЛрдИ рд╕реНрд▓реЙрдЯ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВред** рдпрд╣ рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ slot key рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП `shadows-shipped-ui` рд╕реАрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред
- **рдХреЛрдИ HTTP рд░реВрдЯ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВред** рдпрд╣ рдХреЛрдИ `webServer` рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛ред
- **рдХреЛрдИ patch-рд▓реЗрдпрд░ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВред** рдмрдВрдбрд▓ patch рдХреЗрд╡рд▓ рдЕрдкрдиреА рдкрдВрдХреНрддрд┐ `insert` рдХрд░рддрд╛ рд╣реИ; рдХрднреА рдХрд┐рд╕реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрдВрдХреНрддрд┐ рдХрд╛ `config` рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ред
- **рдХреЛрдИ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВред** рдпрд╣ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдирд╣реАрдВ рдмрджрд▓рддрд╛, `process.env` рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛, рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ fetch dispatcher рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред
**рд╕рд╛рдЭрд╛ рдИрд╡реЗрдВрдЯ рд▓рд┐рд╕рдирд░ рд░рдЪрдирд╛ рд╕реЗ рд╣реА рдЕрд╣рд╕реНрддрдХреНрд╖реЗрдкреА рд╣реИрдВред** рдпрд╣ рдХреНрд░рдо-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдИрд╡реЗрдВрдЯ `tools/post-execute` рдХреЛ `ctx.on()` рд╕реЗ рджреЗрдЦрддрд╛ рд╣реИ тАФ Cordis рдХрд╛ **рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ** рдкрдВрдЬреАрдХрд░рдг, рдЬрд╣рд╛рдБ рд╣рд░ рд▓рд┐рд╕рдирд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдХреЛ рд╡рдВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред **рдпрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рд╕рдирд░ `next()` рд╕реЗ рдбреЗрд▓рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ**, рдЗрд╕рд▓рд┐рдП рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрднреА рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА:
- `tools/post-execute` тАФ also used by `cc-safety-net` (1576тШЕ).
рд╕реНрдереИрддрд┐рдХ рдкреНрд░рдорд╛рдг: рдЗрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдкрд░ `dsh-plugin-doctor` рдХреЗ K10тАУK13 рд╕рднреА `pass` рд╣реИрдВред
## Topics
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `json-repair`, `schema-validation`, `parameter-mapping`, `llm-api`, `tooling`
## Contributors
- [@PerryLink](https://github.com/PerryLink) тАФ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдореЗрдВрдЯреЗрдирд░: рдЕрдиреБрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рд╡ рдорд░рдореНрдордд рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдкреЛрд░реНрдЯ, рдкреНрд▓рдЧрдЗрди рд╕рддрд╣реЗрдВ, рдЯреЗрд╕реНрдЯ рдФрд░ рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред
## PerryLink DSH Plugin Family
рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рдХреЗ DeepSeek Harness рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ тАФ **34 рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдиреБрд░рдХреНрд╖рд┐рдд**, рдХреБрд▓ рд╕реВрдЪреА **42** рд╣реИ рдЬрд┐рд╕рдореЗрдВ **5 рдлрд╝реНрд░реЛрдЬрд╝рди** рдФрд░ **3 рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** рд╣реИрдВ; рд╣рд░ рдПрдХ рдХреА рдкрдВрдХреНрддрд┐ рдиреАрдЪреЗ рдмрдиреА рд░рд╣рддреА рд╣реИ, рдХрд╛рд░рдг тАЬрд╕реНрдерд┐рддрд┐тАЭ рдХреЙрд▓рдо рдореЗрдВ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ, рддреЛ рдЕрдиреНрдп рднреА рдорджрджрдЧрд╛рд░ рд╣реЛрдВрдЧреЗ:
| Plugin | рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ | рд╕реНрдерд┐рддрд┐ |
|---|---|---|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | ЁЯЪл **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** тАФ рдКрдкрд░ рджреЗрдЦреЗрдВ |
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness тАФ Windows first. | |
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
| **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` тЖТ `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рдХреЙрд░рд┐рдбреЛрд░ рдЕрдм `dsh-plugin-upgrade` рджреНрд╡рд╛рд░рд╛ |
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | ЁЯЪл **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** тАФ рдКрдкрд░ рджреЗрдЦреЗрдВ |
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness тАФ a dedicated git mirror of your session store. | |
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | ЁЯЪл **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** тАФ рдКрдкрд░ рджреЗрдЦреЗрдВ |
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
## License
[Apache License 2.0](LICENSE) ┬й 2026 dsh-translate contributors
### DSH Desktop рдорд╛рд░реНрдХреЗрдЯ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
рд╕рднреА PerryLink рдкреНрд▓рдЧрдЗрди DSH Desktop рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: **Market тЖТ Sources тЖТ add source тЖТ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **тЖТ рдЪреБрдиреЗрдВ**ред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд╛рд░реНрдХреЗрдЯ рдХреЗ npm-identity рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЖрдкрдХреА рдкреБрд╖реНрдЯрд┐ рд╕реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИред