# ЁЯПЖ dsh-score
- **1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓**: рдПрдХ рдмрд╛рд░ `npm i -g dsh1024`, рдлрд┐рд░ `dsh1024 plugin --profile web add dsh-score` ([deepseek1024.com](https://deepseek1024.com) рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
**DeepSeek Harness рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдЖрдпрд╛рдореА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реНрдХреЛрд░рд┐рдВрдЧред**
*рдкрд╛рдБрдЪ рдЖрдпрд╛рдо, рд╡рд╛рд╕реНрддрд╡рд┐рдХ `gh`/`npm` рд╕рд╛рдХреНрд╖реНрдп, рдПрдХ рднрд╛рд░рд┐рдд рд░рд┐рд╕реНрдХ рдХрд╛рд░реНрдб рдФрд░ рд▓реАрдбрд░рдмреЛрд░реНрдбред*
[](LICENSE)
[](https://gitee.com/perrylink/dsh-score)
[](https://github.com/topics/dsh-plugin)
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-х╛╜чла)
[](#)
[](https://github.com/PerryLink/dsh-score/actions)
[](https://github.com/PerryLink/dsh-score/releases)
[](https://www.npmjs.com/package/dsh-score)
[](https://www.npmjs.com/package/dsh-score)
[English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README-zh.md) ┬╖ [Espa├▒ol](README-es.md) ┬╖ [Portugu├кs](README-pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README-hi.md)
---
## рд╕рдВрдЧрддрддрд╛
| рдШрдЯрдХ | рд╕рдВрд╕реНрдХрд░рдг |
|---|---|
| DeepSeek Harness | **`dsh-v0.1.6-alpha.2`** (GitHub tag; peer рд░реЗрдВрдЬ alpha.2 рд▓рд╛рдЗрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ: `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0`)ред dev/test рдкрд┐рди рдФрд░ `typecheck:ci` рд░реВрд▓рд░ рдЕрдм рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд `0.1.5-rc.2` рд▓рд╛рдЗрди рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ (2026-09-18 рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд: рдЯрд╛рдЗрдк рдЧреЗрдЯ, рдпреВрдирд┐рдЯ/рдЕрд╕реЗрдВрдмрд▓реА рд╕реВрдЯ, рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рдмрд┐рд▓реНрдб); alpha.2 рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВред |
| Node.js | `^22.19.0 \|\| >=24.0.0` |
| рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ | `pnpm@11.7.0` |
| рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо | Windows / macOS / Linux (рдХреЗрд╡рд▓-рд╣реЛрд╕реНрдЯ рдкреНрд▓рдЧрдЗрди) |
| рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдг | PATH рдкрд░ `gh` CLI (рдкреНрд░рдорд╛рдгрд┐рдд), PATH рдкрд░ `npm` CLI |
## рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ
- `score` рдЯреВрд▓ тАФ рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд▓рдХреНрд╖реНрдп; рд╕рдВрд░рдЪрд┐рдд рд░рд┐рд╕реНрдХ рдХрд╛рд░реНрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ `background: true` рдХреЗ рд╕рд╛рде `{ kind: 'background', jobId }`ред
- `/score` рдХрдорд╛рдВрдб тАФ `ctx.jobs` рдкрд░ `score-batch` рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкреЗрд╕/рдХреЙрдорд╛ рд╕реЗ рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рд╕реВрдЪреА рдХреА рдмреИрдЪ рд╕реНрдХреЛрд░рд┐рдВрдЧ, рд▓реАрдбрд░рдмреЛрд░реНрдб рд╕реНрдиреИрдкрд╢реЙрдЯ (JSON + Markdown) рдмрдирд╛рддрд╛ рд╣реИред
- `score_report` рдЯреВрд▓ тАФ рдХреЛрдИ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕реНрдХреЛрд░ рдХрд╛рд░реНрдб (`sc_...`), рд▓реАрдбрд░рдмреЛрд░реНрдб (`lb_...`), рдпрд╛ рдирд╡реАрдирддрдо рд▓реАрдбрд░рдмреЛрд░реНрдб рд▓рд╛рддрд╛ рд╣реИред
- `score_badge` рдЯреВрд▓ тАФ рдХрд┐рд╕реА рд▓рдХреНрд╖реНрдп рдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП README рдмреИрдЬ рдФрд░ рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА JSONред
- **рдкрд╛рдБрдЪ рдЖрдпрд╛рдо** (рднрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпреЛрдЧ 100): рдЗрдВрд╕реНрдЯреЙрд▓ `25`, рд░рдЦрд░рдЦрд╛рд╡ `20`, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг `20`, рд╕реБрд░рдХреНрд╖рд╛ `20`, рдЕрдиреБрдкрд╛рд▓рди `15`ред
- **рд╕рд╛рдХреНрд╖реНрдп рдЕрдиреБрд╢рд╛рд╕рди** тАФ рд╣рд░ рдЖрдпрд╛рдо рдЕрдкрдиреЗ рдСрдбрд┐рдЯ рд▓рд┐рдВрдХ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ; рд╕рд╛рдХреНрд╖реНрдп рдХреЗ рдмрд┐рдирд╛ рд╡рд╣ `no-evidence` рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ (рд╕реНрдХреЛрд░ 0, рдХреБрд▓ рд╕реЗ рдмрд╛рд╣рд░), рдХрднреА рдХреЛрдИ рдмрдирд╛рдпрд╛ рд╣реБрдЖ рдирдВрдмрд░ рдирд╣реАрдВред
- рд╕рдВрд░рдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо тАФ рд╣рд░ рд░рд┐рдХреЙрд░реНрдб `schema: "dsh-score/v1"` рд░рдЦрддрд╛ рд╣реИред
## рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд
### git рдЪреИрдирд▓
```sh
dsh plugin --profile web add github:PerryLink/dsh-score#
```
рдкрд╣рд▓рд╛ `add` рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ pnpm `prepare` рдмрд┐рд▓реНрдб рд░реЛрдХ рджреЗрддрд╛ рд╣реИ; pnpm рджреНрд╡рд╛рд░рд╛ рдЫрд╛рдкреА рдЧрдИ рд╕рдЯреАрдХ рдХреБрдВрдЬреА рдХреЛ profile рдХреЗ `pnpm-workspace.yaml` рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдЪрд▓рд╛рдПрдБ:
```yaml
allowBuilds:
'dsh-score': true
```
### npm рдЪреИрдирд▓
```sh
dsh plugin --profile web add dsh-score
```
## рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓
```sh
dsh plugin --profile web add dsh-score # рдЗрдВрд╕реНрдЯреЙрд▓ (npm) тАФ рдпрд╛ рдКрдкрд░ рд╡рд╛рд▓рд╛ git рд░реВрдк
dsh plugin --profile web remove dsh-score # рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓
```
## рд╡рд┐рдиреНрдпрд╛рд╕
рд╕рднреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджрд┐рдЦрд╛рдП рдЧрдП); рдЕрдорд╛рдиреНрдп рдорд╛рди рд▓реЛрдб рдкрд░ рдЬрд╝реЛрд░ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред
| рдХреБрдВрдЬреА | рдбрд┐рдлрд╝реЙрд▓реНрдЯ | рд╡рд┐рд╡рд░рдг |
|---|---|---|
| `probeTimeoutMs` | `60000` | рдПрдХ `gh`/`npm` рдкреНрд░реЛрдм рдХрдорд╛рдВрдб рдХреА рд╕рдордп-рд╕реАрдорд╛ред |
| `outputTailBytes` | `8000` | рдкреНрд░рддрд┐ рдкреНрд░реЛрдм рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрд▓ рдХреА рд╕реАрдорд╛ред |
| `cacheMaxAgeMs` | `86400000` | рдХреИрд╢ рдХрд┐рдП рдХрд╛рд░реНрдб рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рд╕рдордпред |
| `staleCommitWarnDays` | `90` | рдХрдорд┐рдЯ рдЖрдпреБ `warn` рдХреЗ рд▓рд┐рдПред |
| `staleCommitFailDays` | `365` | рдХрдорд┐рдЯ рдЖрдпреБ `fail` рдХреЗ рд▓рд┐рдПред |
| `staleIssueWarnDays` | `30` | рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рдЦреБрд▓реЗ issue рдХреА рдЖрдпреБ `warn` рдХреЗ рд▓рд┐рдПред |
| `staleIssueFailDays` | `180` | рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рдЦреБрд▓реЗ issue рдХреА рдЖрдпреБ `fail` рдХреЗ рд▓рд┐рдПред |
| `maxBatchTargets` | `20` | `/score` рдмреИрдЪ рд╕реАрдорд╛ред |
| `batchConcurrency` | `1` | рдмреИрдЪ рд╕рдорд╡рд░реНрддреАрддрд╛ред |
| `weights` | `{install:25, maintenance:20, documentation:20, security:20, compliance:15}` | рдкреНрд░рддрд┐-рдЖрдпрд╛рдо рднрд╛рд░ред |
## рдЯреВрд▓ рдФрд░ рд╕рддрд╣реЗрдВ
### `score`
```
score(target: string, refresh?: boolean, background?: boolean)
```
- `target` тАФ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА (`github:owner/repo`, `owner/repo`, git/https URL) рдпрд╛ npm рдкреИрдХреЗрдЬ рдирд╛рдоред
- `refresh: true` рдХреИрд╢ рдЫреЛрдбрд╝рдХрд░ рд╕рд╛рдХреНрд╖реНрдп рдкреБрдирдГ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред
- `background: true` рдПрдХ `score-batch` рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
### `/score `
рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдмреИрдЪ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ; рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ `score_report` рдХреЗ рд▓рд┐рдП рд▓реАрдбрд░рдмреЛрд░реНрдб id рдмрддрд╛рддреА рд╣реИред
### `score_report(id?)`
рдПрдХ рдХрд╛рд░реНрдб (`sc_...`), рд▓реАрдбрд░рдмреЛрд░реНрдб (`lb_...`), рдпрд╛ рдмрд┐рдирд╛ id рдХреЗ рдирд╡реАрдирддрдо рд▓реАрдбрд░рдмреЛрд░реНрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред
### `score_badge(target? | id?, refresh?)`
рдПрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП README рдмреИрдЬ рдФрд░ рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА JSON рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
- `target` тАФ рдХреИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдпрд╛ npm рдкреИрдХреЗрдЬ рд╕реНрдХреЛрд░ рдХрд░ рдмреИрдЬ рджреЗрддрд╛ рд╣реИ; `id` рдХреЗ рд╕рд╛рде рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдпред
- `id` тАФ рдмрд┐рдирд╛ рдкреБрдирдГ рд╕реНрдХреЛрд░ рдХрд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рд╕реНрдХреЛрд░ рдХрд╛рд░реНрдб (`sc_...`) рдХрд╛ рдмреИрдЬред
- `refresh: true` тАФ рд╕реНрдХреЛрд░ рдХреИрд╢ рдЫреЛрдбрд╝рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ `target` рдкрд░ рд▓рд╛рдЧреВ)ред
рдмреИрдЬ (SVG + endpoint + Markdown рдПрдореНрдмреЗрдб) рдФрд░ рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА JSON рд▓реМрдЯрд╛рддрд╛ рд╣реИ тАФ рдиреАрдЪреЗ ┬лрдмреИрдЬ рдФрд░ JSON API┬╗ рджреЗрдЦреЗрдВред
### Structured result sample
```json
{
"schema": "dsh-score/v1",
"scoreId": "sc_8f1c2e4a9b3d7f01",
"target": { "kind": "repo", "spec": "github:owner/dsh-click#abc123" },
"scoredAt": "2026-08-16T00:00:00.000Z",
"durationMs": 3210,
"pluginVersion": "0.1.0",
"dimensions": {
"install": { "dimension": "install", "status": "no-evidence", "score": 0, "weight": 25,
"summary": "no dsh-test-drive result recorded for this target (install success unmeasured)",
"evidence": [{ "source": "test-drive", "detail": "no test-drive record found in the test_drive domain", "observedAt": "2026-08-16T00:00:00.000Z" }] },
"maintenance": { "dimension": "maintenance", "status": "pass", "score": 100, "weight": 20,
"summary": "active (2026-08-10T00:00:00Z; 0 open issues)",
"evidence": [{ "source": "gh-api", "detail": "last activity 2026-08-10T00:00:00Z", "observedAt": "2026-08-16T00:00:00.000Z" }] }
},
"total": 88,
"grade": "B",
"verdict": "healthy (weighted total 88/100)"
}
```
рд╕реНрдХреЛрд░рд┐рдВрдЧ: рдХреБрд▓ рд╕рд╛рдХреНрд╖реНрдп рдЬреБрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрдпрд╛рдореЛрдВ рдХрд╛ рднрд╛рд░рд┐рдд рдФрд╕рдд рд╣реИ (no-evidence рдЖрдпрд╛рдо рдмрд╛рд╣рд░ рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирдГ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрддреЗ рд╣реИрдВ); `A` тЙе 90, `B` тЙе 75, `C` тЙе 60, `D` тЙе 40, рдЕрдиреНрдпрдерд╛ `F`, рдФрд░ `N/A` рдЬрдм рдХреБрдЫ рднреА рд╕рд╛рдХреНрд╖реНрдп рди рд╣реЛред
## рдмреИрдЬ рдФрд░ JSON API
`score_badge` рдПрдХ рдЕрдВрдХрд┐рдд рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП README рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмреИрдЬ рдФрд░ рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА JSON рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
### рдмреИрдЬ
рддреАрди рд░реВрдк, рд╕рднреА рдЙрд╕реА settled рд╕реНрдХреЛрд░ рдХрд╛рд░реНрдб рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди:
- **Endpoint** тАФ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд┐рдд [shields.io](https://shields.io) рд╕реНрдерд┐рд░ URL, README рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдкреЗрд╕реНрдЯ-рддреИрдпрд╛рд░ (рд╢реВрдиреНрдп self-hosting)ред
- **SVG** тАФ self-contained shields.io рдлреНрд▓реИрдЯ-рд╢реИрд▓реА SVG (`badge.svg` рдлрд╝реАрд▓реНрдб / `renderScoreBadge`) рдСрдлрд╝рд▓рд╛рдЗрди рдпрд╛ self-hosted README рдХреЗ рд▓рд┐рдПред
- **Markdown** тАФ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдореНрдмреЗрдб рд╕реНрдирд┐рдкреЗрдЯред
рдХреБрд▓ рдмреИрдЬ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ:
```markdown

```
### рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА JSON
рд╡рд╣реА рдХреЙрд▓ compact JSON API рд▓рд┐рдлрд╝рд╛рдлрд╝рд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (`schema: "dsh-score/badge/v1"`):
```json
{
"schema": "dsh-score/badge/v1",
"target": { "kind": "repo", "spec": "github:owner/dsh-click#abc123" },
"scoredAt": "2026-08-16T00:00:00.000Z",
"total": 84,
"grade": "B",
"dimensions": {
"install": { "label": "install", "status": "no-evidence", "score": 0, "weight": 25, "summary": "no dsh-test-drive result recorded" },
"maintenance": { "label": "maintenance", "status": "pass", "score": 90, "weight": 20, "summary": "active (0 open issues)" },
"documentation": { "label": "docs", "status": "pass", "score": 85, "weight": 20, "summary": "README + CHANGELOG + SECURITY" },
"security": { "label": "security", "status": "warn", "score": 60, "weight": 20, "summary": "permissive license" },
"compliance": { "label": "compliance", "status": "pass", "score": 100, "weight": 15, "summary": "dsh.bundle.patch + dsh-plugin topic" }
}
}
```
`no-evidence` рдЖрдпрд╛рдо рдЕрдкрдиреА рдИрдорд╛рдирджрд╛рд░ рд╕реНрдерд┐рддрд┐ рдФрд░ 0 рд╕реНрдХреЛрд░ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ тАФ рдмреИрдЬ рдФрд░ JSON рдХрднреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рдЧрдврд╝рддреЗред
## рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдбреЗрдЯрд╛
- рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛рдПрдБ: `ctx.subprocess`, `ctx.jobs`, `ctx.storageDomain`, `ctx.tools`, `ctx.commands`ред
- рдХрд╛рд░реНрдб рдФрд░ рд▓реАрдбрд░рдмреЛрд░реНрдб `score` рдбреЛрдореЗрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ (рдЯреЗрдмрд▓ `scores`, `leaderboards`; рдирд╡реАрдирддрдо-рд▓реАрдбрд░рдмреЛрд░реНрдб рдкреЙрдЗрдВрдЯрд░)ред рдмрд┐рдирд╛ `storageDomain` рдХреЗ рдЯреВрд▓ рдЪрд▓рддреЗ рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдХрд╛рд░рдг рд╕рд╣рд┐рдд рдЕрдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢рд┐рдд `dsh-base` рдмрдВрдбрд▓ `0.1.2-rc.1` рд╕реЗ рд╣реА storage-domain рдорд╛рдЙрдВрдЯ рдХрд░рддрд╛ рд╣реИ (`0.1.2-rc.1` рдФрд░ `0.1.5-alpha.1` tarballs рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд), рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓рд╛рдЗрди рдкрд░ рд╕реНрдерд╛рдпрд┐рддреНрд╡ рд╕рдХреНрд░рд┐рдп рд╣реИред
- рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓-рд░рд╣рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдкрд╛рддреЗ рд╣реИрдВ; `gh` рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рднрдВрдбрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рд╡рд╛рддрд╛рд╡рд░рдг рдорд╛рди рд▓реЙрдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ред
## рд╕реБрд░рдХреНрд╖рд╛ рд╕реАрдорд╛рдПрдБ
- **рдХреЛрдИ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВред** рдХреЗрд╡рд▓ `gh api` рдФрд░ `npm view` рдЪрд▓рддреЗ рд╣реИрдВред
- **рдХреЗрд╡рд▓-argv рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред** рдХрднреА рд╢реЗрд▓ рдирд╣реАрдВ; owner/repo рдЦрдВрдб рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
- **рд╕рд╛рдХреНрд╖реНрдп рдЕрдиреБрд╢рд╛рд╕рдиред** рд╡рд┐рдлрд▓ рдкреНрд░реЛрдм `no-evidence` рджреЗрддрд╛ рд╣реИ, рдХрднреА рдирдВрдмрд░ рдирд╣реАрдВред
- **рдкрд╣рдЪрд╛рди рдмрдирд╛рдо рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реЗрд╢рдиред** рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рдЪрд╛рди рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рд╣реА рд╢реБрджреНрдз regex рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИред
## рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ
- рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдкреНрд░реЛрдм рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрд┐рдд `gh` рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЪрд╛рд╣рд┐рдП; npm рдкреНрд░реЛрдм рдХреЗ рд▓рд┐рдП `npm` рдФрд░ registry рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рд┐рдПред
- рдмрд┐рдирд╛ рд╕рдорд╛рдзрд╛рди рдпреЛрдЧреНрдп GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреЗ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг/рд╕реБрд░рдХреНрд╖рд╛/рдЕрдиреБрдкрд╛рд▓рди `no-evidence` рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
- рдЗрдВрд╕реНрдЯреЙрд▓ рд╕рдлрд▓рддрд╛ рд▓рдХреНрд╖реНрдп рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП `dsh-test-drive` рдХреЗ рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
- ┬лissue рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛┬╗ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╣реИ (рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рдЦреБрд▓реЗ issue рдХреА рдЖрдпреБ)ред
- рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддрд┐ рд▓рдХреНрд╖реНрдп рдХреИрд╢ рд╣реЛрддреЗ рд╣реИрдВ; рдкреБрдирдГ рд╕реНрдХреЛрд░ рдХреЗ рд▓рд┐рдП `refresh: true` рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
## рд╡рд┐рдХрд╛рд╕
```sh
pnpm install
pnpm run typecheck && pnpm run typecheck:ci && pnpm test
pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
```
## рд╡рд┐рд╖рдп
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-scoring`, `quality-score`, `leaderboard`, `supply-chain`
## рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛
[PerryLink](https://github.com/PerryLink) тАФ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
## PerryLink DSH Plugin Family
рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░рдХреНрд╖рд┐рдд [40 DeepSeek Harness рдкреНрд▓рдЧрдЗрдиреЛрдВ](https://github.com/PerryLink) рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рднреА рдХрд░реЗрдВрдЧреЗ:
| Plugin | One-liner |
|---|---|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | рдЕрдиреБрдореЛрджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рджреНрд╡рд┐рддреАрдп-рдореЙрдбрд▓ рд╕реНрд╡рддрдГ-рд╕рдореАрдХреНрд╖рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓-рдмрдВрдж | |
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | рд╡реЗрдм UI рд╕рд╛рдЗрдбрдмрд╛рд░, рд╕рдВрджреЗрд╢ рдФрд░ рдЕрд╡рд░реЛрдзрди рдХреЗ рд╕рд╛рде рдЯрд┐рдХрд╛рдК рдкреГрд╖реНрдарднреВрдорд┐ рдЪрд╛рдЗрд▓реНрдб рдПрдЬреЗрдВрдЯ | |
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрдд рдкреНрд░рд╢рд╛рд╕рди: рдмрдЬрдЯ, рдХрд╛рд░реНрдмрди рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛ рдПрдХ рдкреИрдирд▓ рдореЗрдВред | |
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-рд╕рдорддреБрд▓реНрдп: рд╕реНрдиреИрдкрд╢реЙрдЯ, рд╕рддреНрд░ рдлрд╝реЙрд░реНрдХ, рдПрдХ-рдмрд╛рд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ | |
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Claude Code рд╕рддреНрд░, рдореЗрдореЛрд░реА, рдХреМрд╢рд▓ рдФрд░ CLAUDE.md рдХреЛ DSH рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ | |
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдиреЗрдЯрд┐рд╡ рдбреЗрд╕реНрдХрдЯреЙрдк рдирд┐рдпрдВрддреНрд░рдг тАФ Windows рдкрд╣рд▓реЗред | |
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | рд╡реЗрдм рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓-рд╢реИрд▓реА рдЗрдирдкреБрдЯ рдЗрддрд┐рд╣рд╛рд╕: рддреАрд░, Ctrl+R рдЦреЛрдЬ | |
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | рдбреЗрдЯрд╛рд╕реЗрдЯ рдЧреБрдгрд╡рддреНрддрд╛ рдЬрд╛рдБрдЪ рд╡ рдЙрджреНрдзрд░рдг рд╕рддреНрдпрд╛рдкрди (рдпрд╣рд╛рдБ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдЦреНрдпрд╛-рд╕реЗрддреБ) | |
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ-рдЗрдВрдЬреЗрдХреНрд╢рди, рдЬреЗрд▓рдмреНрд░реЗрдХ рдФрд░ рд╕реАрдХреНрд░реЗрдЯ-рд▓реАрдХ рд░рдХреНрд╖рд╛ред | |
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ-рдЕрдиреБрд╢рд╛рд╕рди рд░рдХреНрд╖рдХ: рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдкреВрдЫрддрд╛рдЫ, рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░, рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рд╕рдореАрдХреНрд╖рд╛ | |
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рд╕реНрдереИрддрд┐рдХ-рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рд░реВрдЯрд┐рдВрдЧред | |
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд░реАрдб-рдУрдирд▓реА рдкреНрд░рджрд░реНрд╢рди рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ред | |
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | рдЪреАрдиреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореНрдпреВрдЪреБрдЕрд▓ рдлрдВрдб рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рдЕрдиреБрд╕рдВрдзрд╛рди рд░рд┐рдкреЛрд░реНрдЯ | |
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | DSH рдХреЗ рд▓рд┐рдП GitHub PR/issues рдПрдХреАрдХрд░рдг, рд╣рд░ рд▓реЗрдЦрди рдЕрдиреБрдореЛрджрди-рджреНрд╡рд╛рд░рд┐рдд | |
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | рдЙрджреНрдпреЛрдЧ-рдЕрдиреБрд╕рдВрдзрд╛рди рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЬреЛ рдЗрд╕ рдкреНрд▓рдЧрд┐рди рдХреЗ `ctx.researchReport.assemble` рд╕реЗ рдбрд┐рд▓реАрд╡рд░реЗрдмрд▓ рд╕реАрд▓ рдХрд░рддрд╛ рд╣реИ | |
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреНрдЮрд╛рдирдХреЛрд╢ред | |
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп-рдореЙрдбрд▓ (Ollama) рдПрдХреАрдХрд░рдгред | |
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ LSP рдирд┐рджрд╛рди, рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдкреВрд░реНрдгрддрд╛, рдХреЛрдб рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рдирд╛рдо рдмрджрд▓рдирд╛ | |
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII рдорд╛рд╕реНрдХрд┐рдВрдЧ рдорд┐рдбрд▓рд╡реЗрдпрд░: рдореЙрдбрд▓ рд╕реАрдорд╛ рдкрд░ рдЕрдирд╛рдо рдХрд░реЗрдВ, рдбрд┐рд╕реНрдкреНрд▓реЗ рд▓реЗрдпрд░ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ | |
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ MCP рд░рдирдЯрд╛рдЗрдо рдкреИрдирд▓: /mcp рдХрдорд╛рдВрдб + рд╕реНрдерд┐рддрд┐, рдЯреВрд▓ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ Settings рдЯреИрдм | |
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | рдЕрдиреБрдореЛрджрди-рджреНрд╡рд╛рд░рд┐рдд рдХреНрд░реЙрд╕-рд╕рддреНрд░ рдореЗрдореЛрд░реА: ctx.memory рд╕реАрдо + SQLite + рдореЗрдореЛрд░реА рдЯреВрд▓ | |
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП OpenTelemetry рдФрд░ Langfuse рдЕрд╡рд▓реЛрдХрдиреАрдпрддрд╛ рдирд┐рд░реНрдпрд╛рддрдХред | |
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-рд╕рдорддреБрд▓реНрдп рд░рдирдЯрд╛рдЗрдо рд╢реИрд▓реА рдмрджрд▓рд╛рд╡ | |
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | рдСрдбрд┐рдЯ рдХреЗ рд╕рд╛рде Claude Code-рд╢реИрд▓реА рдШреЛрд╖рдгрд╛рддреНрдордХ allow/deny/ask рдЕрдиреБрдорддрд┐ рдирд┐рдпрдо | |
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | рд╢реАрд░реНрд╖-рдмрд╛рд░ рдЯреЙрдЧрд▓ рдХреЗ рд╕рд╛рде рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд┐рд░реНрджреЗрд╢ рдЗрдВрдЬреЗрдХреНрдЯрд░ (рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг) |
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | рдорд╛рдБрдЧ рдкрд░ рдПрдЬреЗрдВрдЯ рдХреМрд╢рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧрдЗрди-рд╡рд┐рдХрд╛рд╕ рдЬреНрдЮрд╛рди рдЖрдзрд╛рд░ | |
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | рдорд▓реНрдЯреА-рдЪреИрдирд▓ рдЕрдиреБрдореЛрджрди/рдкреНрд░рд╢реНрди рдмреНрд░рд┐рдЬ: WeChat/Telegram/Feishu, рд╕рддреНрд░ рдХрдВрд╕реЛрд▓ |
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | рд╕рд╛рдордЧреНрд░реА-рдкрддрд╛ рд╕рд╛рдХреНрд╖реНрдп рдФрд░ рд╕реАрд▓рдмрдВрдж рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╡рд╛рд▓рд╛ рд╕рддреНрдпрд╛рдкрди-рдпреЛрдЧреНрдп рдЕрдиреБрд╕рдВрдзрд╛рди-рд░рд┐рдкреЛрд░реНрдЯ рдЗрдВрдЬрди | |
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | рдЯрд┐рдХрд╛рдК рдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рд╕рддреНрд░ рдкрд┐рди рдХрд░реЗрдВ | |
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбрд┐рд╡рд╛рдЗрд╕ рд╕рддреНрд░ рд╕рд┐рдВрдХ тАФ рдЖрдкрдХреЗ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд git рдорд┐рд░рд░ред | |
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | рд╕реБрд░рдХреНрд╖рд╛-рдСрдбрд┐рдЯ рдХреМрд╢рд▓ рдкреИрдХ: рдЧреБрдкреНрдд рд╕реНрдХреИрди, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЖрдкреВрд░реНрддрд┐-рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдореАрдХреНрд╖рд╛ | |
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдЖрд╡рд╛рдЬрд╝-рдкреНрд░рдердо рд╕рддреНрд░ рд▓реВрдк: рдмреЛрд▓реЗрдВ рдФрд░ рдЙрддреНрддрд░ рд╕реБрдиреЗрдВред | |
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | DeepSeek Harness рдкреНрд▓рдЧрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрдердХ рдЗрдВрд╕реНрдЯреЙрд▓-рдПрдВрдб-рд╕реНрдореЛрдХ рдЯреЗрд╕реНрдЯ рдбреНрд░рд╛рдЗрд╡ред | |
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 рдХрд╛рд░реНрдп рдмреНрд░рд┐рдЬ: рд╕рддреНрд░-рд╣реЗрдбрд░ рдкреИрдирд▓ + 11 рдЯреВрд▓ |
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдирд┐рдпрддрд╛рддреНрдордХ JSON рдорд░рдореНрдорддред | |
| **[dsh-wechat](https://github.com/pan17/dsh-wechat)** | WeChat тЖФ DSH рдмреНрд░рд┐рдЬ (Tencent iLink bot): рдЯреЗрдХреНрд╕реНрдЯ/рдЗрдореЗрдЬ/рдлрд╝рд╛рдЗрд▓/рдЖрд╡рд╛рдЬрд╝, рдЪреИрдЯ рдореЗрдВ рдЕрдиреБрдореЛрджрди |
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
| **[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-kit](https://github.com/PerryLink/dsh-kit)** | One-command starter pack that installs the core family | |
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
| **[dsh-plugin-portal](https://github.com/PerryLink/dsh-plugin-portal)** | Zero-dependency static portal rendering the whole plugin family as one page | |
| **[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-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
### DSH Desktop рдорд╛рд░реНрдХреЗрдЯ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
рд╕рднреА PerryLink рдкреНрд▓рдЧрдЗрди DSH Desktop рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: **Market тЖТ Sources тЖТ add source тЖТ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **тЖТ рдЪреБрдиреЗрдВ**ред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд╛рд░реНрдХреЗрдЯ рдХреЗ npm-identity рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЖрдкрдХреА рдкреБрд╖реНрдЯрд┐ рд╕реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИред
## рд▓рд╛рдЗрд╕реЗрдВрд╕
[Apache-2.0](LICENSE)