# ЁЯФД dsh-session-sync
- **1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓**: рдПрдХ рдмрд╛рд░ `npm i -g dsh1024`, рдлрд┐рд░ `dsh1024 plugin --profile web add dsh-session-sync` ([deepseek1024.com](https://deepseek1024.com) рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
**DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбрд┐рд╡рд╛рдЗрд╕ рд╕рддреНрд░ рд╕рд┐рдВрдХ тАФ рдЖрдкрдХреЗ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд git рдорд┐рд░рд░ред**
*рдЕрдкрдиреЗ рд╕рддреНрд░реЛрдВ рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХ рдХрд░реЗрдВ, рдХрд┐рд╕реА рднреА рдЯрдХрд░рд╛рд╡ рдореЗрдВ рджреЛрдиреЛрдВ рдкрдХреНрд╖ рд░рдЦреЗрдВ, рдХрднреА рдХреЛрдИ рдЯрд░реНрди рди рдЦреЛрдПрдБред*
[](LICENSE)
[](https://gitee.com/perrylink/dsh-session-sync)
[](https://github.com/topics/dsh-plugin)
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-х╛╜чла)
[](https://dsh.market/)
[](#)
[](https://github.com/PerryLink/dsh-session-sync/actions)
[](https://github.com/PerryLink/dsh-session-sync/releases)
[](https://www.npmjs.com/package/dsh-session-sync)
[](https://www.npmjs.com/package/dsh-session-sync)
[](https://dshfind.com/hi/plugins/PerryLink/dsh-session-sync?ref=badge)
[English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README-zh.md) ┬╖ [Espa├▒ol](README-es.md) ┬╖ [Portugu├кs](README-pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README-hi.md)
```sh
dsh plugin --profile add dsh-session-sync
```
---
**ЁЯУЦ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдиреЙрд▓реЗрдЬ рдмреЗрд╕** тАФ рдорд╛рдкреЗ рдЧрдП рдЖрдБрдХрдбрд╝реЗ, рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ: [рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЧрд╛рдЗрдб ┬╖ рдЪрдпрди рдбреЗрдЯрд╛ ┬╖ рд░рдЦрд░рдЦрд╛рд╡ рдорд╛рдирджрдВрдб](https://perrylink.github.io/dsh-plugin-guide/)ред
## рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓
- **git рдЪреИрдирд▓** (рдирд╡реАрдирддрдо `main`): `dsh plugin --profile web add github:PerryLink/dsh-session-sync` (`git+https://github.com/PerryLink/dsh-session-sync.git` рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░)ред рдХреЛрдИ рдмрд┐рд▓реНрдб рдЪрд░рдг рдирд╣реАрдВ тАФ `index.mjs` рдФрд░ `lib/` рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рд╣реИрдВред
- **npm рдЪреИрдирд▓** (рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг): `dsh plugin --profile web add dsh-session-sync`ред
- **tarball рдЪреИрдирд▓**: рдЗрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ `pnpm pack` рдЪрд▓рд╛рдПрдБ, рдлрд┐рд░ `dsh plugin --profile web add ./dsh-session-sync-.tgz`ред
- **рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓**: `dsh plugin --profile web remove dsh-session-sync` (рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рд╕реЗ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рдПрдБ)ред
## тнР хжВцЮЬхоГх╕охИ░ф║Жф╜а
рдпрд╣ рдкреНрд▓рдЧрдЗрди [DSH рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░](https://github.com/PerryLink) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (95 рдкреНрд▓рдЧрдЗрди, рд╕рднреА Apache-2.0)ред рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ, рддреЛ **рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдВ** тАФ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕реБрд╡рд┐рдзрд╛ рдЕрдирд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрддреА, рдкрд░ рдЕрдЧрд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдЦреЛрдЬ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛ рд▓реЗрддрд╛ рд╣реИред
*English:* part of a 95 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-session-sync?
DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбрд┐рд╡рд╛рдЗрд╕ рд╕рддреНрд░ рд╕рд┐рдВрдХ тАФ рдЖрдкрдХреЗ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд git рдорд┐рд░рд░ред
рдЕрдкрдиреЗ рд╕рддреНрд░реЛрдВ рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХ рдХрд░реЗрдВ, рдХрд┐рд╕реА рднреА рдЯрдХрд░рд╛рд╡ рдореЗрдВ рджреЛрдиреЛрдВ рдкрдХреНрд╖ рд░рдЦреЗрдВ, рдХрднреА рдХреЛрдИ рдЯрд░реНрди рди рдЦреЛрдПрдБред

*рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣: рдЕрдиреБрд░реЛрдз тЖТ рдиреАрддрд┐/рд╕рдореАрдХреНрд╖рд╛ тЖТ рдирд┐рд░реНрдгрдпред рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рд╕рддрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред*
*рд╡рд╣реА рд░рди, рдПрдирд┐рдореЗрдЯреЗрдбред*
## рд╕рдВрдЧрддрддрд╛
| рд╕рддрд╣ | рд╕реНрдерд┐рддрд┐ |
|---|---|
| Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (GitHub рдЯреИрдЧ, 2026-09-25 рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд: рдкрд┐рди рдХрд┐рдП рдЧрдП `0.1.7-rc.2` peers рдХреЗ рд╡рд┐рд░реБрджреНрдз рдкреВрд░реНрдг рдЧреЗрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛)ред npm рдирд┐рд░реНрднрд░рддрд╛-рд▓рд╛рдЗрди `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`ред (2026-10-04 рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд): рдЯрдХрд░рд╛рд╡ рдлрд╝реЛрд░реНрдХ рд╕реВрдЪрдирд╛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЕрдкрдирд╛ producer-owned source kind рд░рдЦрддреА рд╣реИ - рд╣рд╛рд░реНрдиреЗрд╕ рдиреЗ рд╕рд╛рдЭрд╛ `plugin` kind рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдкреБрдирдГ-рдкрдарди рдкрд░ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред |
| Node | `^22.19.0 \|\| >=24.0.0` |
| рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо | рдЬрд╣рд╛рдБ рднреА `git` рдФрд░ DSH рдЪрд▓рддреЗ рд╣реИрдВ (git-рдЖрдзрд╛рд░рд┐рдд рдорд┐рд░рд░; рдХреЛрдИ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдирд╣реАрдВ) |
| рдореЙрдбрд▓ | рдХреЗрд╡рд▓-рдЯреЗрдХреНрд╕реНрдЯ рдореЙрдбрд▓ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд; рд╡рд┐рдЬрд╝рди рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ |
## рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ
`dsh-session-sync` рдЖрдкрдХреЗ DSH рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХреЛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд git рд╡рд░реНрдХрдЯреНрд░реА рдореЗрдВ рдорд┐рд░рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдПрдХ рдРрд╕реЗ рд░рд┐рдореЛрдЯ рд╕реЗ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ **рдЖрдк** рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ тАФ рдХреЛрдИ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдирд╣реАрдВ, рдХреЛрдИ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реНрдЯреЛрд░реЗрдЬ рдирд╣реАрдВ:
- **`/sync` рдХрдорд╛рдВрдб** тАФ `status` (рдмреНрд░рд╛рдВрдЪ, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░рд┐рдореЛрдЯ, рдЖрдЧреЗ/рдкреАрдЫреЗ, рдЧрдВрджреА рдлрд╝рд╛рдЗрд▓реЗрдВ, рдлрд╝реЛрд░реНрдХ), `diff`, `log`, `pull`, `push`, `help`ред
- **`sync_status` / `sync_pull` / `sync_push` рдЯреВрд▓** тАФ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рд╕рддрд╣, рдПрдХ рдЯрд░реНрди рдХреЗ рдЕрдВрджрд░ред
- **Append-only рдЯрдХрд░рд╛рд╡ рд╕рдорд╛рдзрд╛рди** тАФ рд╕рддреНрд░ рд▓реЙрдЧ append-only рд╣реЛрддреЗ рд╣реИрдВ; рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд▓рди рдкрд░ рдкреНрд▓рдЧрдЗрди **рджреЛрдиреЛрдВ** рдкрдХреНрд╖ рд░рдЦрддрд╛ рд╣реИ (рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рдореЛрдЯ рд╕рдВрд╕реНрдХрд░рдг рдлрд╝реЛрд░реНрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рд╣рддрд╛ рд╣реИ) рдФрд░ рдХрднреА рдЪреБрдкрдЪрд╛рдк рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ред рд╡рд┐рдЪрд▓рд┐рдд рд╕рддреНрд░ рд╕рддреНрд░-рд╕реНрддрд░ рдкрд░ рднреА рдлрд╝реЛрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- **рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб** тАФ рд╕реНрдЯрд╛рд░реНрдЯ рдкрд░ pull, рд╣рд░ рдмрдВрдж рдЯрд░реНрди рдХреЗ рдмрд╛рдж push, рдФрд░ рдЖрд╡рдзрд┐рдХ pull, рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдкреНрд░рддрд┐рд╡рд░реНрддреАред
- **рдкреБрд╖реНрдЯрд┐-рдЧреЗрдЯреЗрдб рд▓реЗрдЦрди** тАФ `pull`/`push` рдкрд╣рд▓реЗ рдкреВрдЫрддреЗ рд╣реИрдВ (`userQuestions` рдпрд╛ `approval` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ); рдХреЗрд╡рд▓-рдкрдарди рд╕рддрд╣реЗрдВ рдХрднреА рдирд╣реАрдВ рдкреВрдЫрддреАрдВ; рдмрд┐рдирд╛ рдЙрддреНрддрд░рджрд╛рддрд╛ рдХреЗ рдСрдкрд░реЗрд╢рди рдмрдВрдж-рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред
```text
рдбрд┐рд╡рд╛рдЗрд╕ A рд░рд┐рдореЛрдЯ (рдЖрдкрдХрд╛ git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА) рдбрд┐рд╡рд╛рдЗрд╕ B
$DSH_HOME/sessions тФАтФАрдорд┐рд░рд░тФАтФАтЦ╢ commit тФАтФАpushтФАтФАтЦ╢ [sessions] тФАтФАpullтФАтФАтЦ╢ merge (рджреЛрдиреЛрдВ рд░рдЦреЗрдВ + fork)
```
## рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд
```sh
dsh plugin --profile web add github:PerryLink/dsh-session-sync
```
```sh
# 1. рдмрдВрдбрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
dsh plugin --profile web add github:PerryLink/dsh-session-sync
# рдпрд╛ npm рд╕реЗ (рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг)
dsh plugin --profile web add dsh-session-sync
# 2. рдЗрд╕реЗ рдПрдХ рдирд┐рдЬреА git рд░рд┐рдореЛрдЯ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдФрд░ рдкрдВрдХреНрддрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
dsh --profile web --dump-config | grep -A2 'id: session-sync'
```
рдлрд┐рд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рдореЗрдВ рд░рд┐рдореЛрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ (рдПрдХ **рдирд┐рдЬреА** рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЖрдзрд╛рд░ рд╣реИ) рдФрд░ рд╕рд┐рдВрдХ рдХрд░реЗрдВ:
```yaml
- insert:
- id: session-sync
name: dsh-session-sync
config:
remote: git@github.com:you/your-dsh-sessions.git
```
```
> /sync status
> /sync pull
> /sync push
```
### рдЙрджрд╛рд╣рд░рдг
рдпреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИрдВ; рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдмрд╛рдж рдПрдХ рдЪрд▓рд╛рдПрдБред
#### рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг
**рдХрдорд╛рдВрдб**
~~~sh
/sync help
~~~
**рдЖрдЙрдЯрдкреБрдЯ**
~~~text
sync: usage тАФ /sync [status | pull | push | diff | log | help]
status show mirror state (default): branch, remote, ahead/behind, dirty, forks
pull fetch + merge remote changes (keep-both; confirms first)
push mirror + commit + push local changes (confirms first)
diff uncommitted changes + HEAD..remote stat (read-only)
log last commits in the sync repository
~~~
*рд╕реНрд░реЛрдд `index.mjs:754-765 (registered /sync handler)`*
#### рд╡рд┐рдлрд▓рддрд╛ рд╢рд╛рдЦрд╛
**рдЗрдирдкреБрдЯ**
~~~text
/sync push
~~~
**рдЖрдЙрдЯрдкреБрдЯ**
~~~text
sync: cancelled: approval requires an open turn; /sync commands run between turns тАФ mount userQuestions or set confirmVia: userQuestions
~~~
*рд╕реНрд░реЛрдд `plugins/dsh-session-sync/lib/gate.mjs:134-137; plugins/dsh-session-sync/index.mjs:792-794; plugins/dsh-session-sync/test/gate.test.mjs:80-88; plugins/dsh-session-sync/README.md:246`*
#### рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджрд╛рд╣рд░рдг
- `/sync diff`
- `/sync pull`
## рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рд╕рднреА рдЯреНрдпреВрдиреЗрдмрд▓ Schemastery `Config` рдлрд╝реАрд▓реНрдб рд╣реИрдВ (cordis.yml рд╕реЗ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред id-рд▓рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рдкреВрд░реА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ тАФ рдЬреЛ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЪрд╛рд╣рд┐рдП рдЙрдиреНрд╣реЗрдВ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦреЗрдВред `cordis.patch.yml` рд╣рд░ рдХреБрдВрдЬреА рдХреЛ рдЗрдирд▓рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИред
| рдХреБрдВрдЬреА | рдбрд┐рдлрд╝реЙрд▓реНрдЯ | рдЕрд░реНрде |
|---|---|---|
| `enabled` | `true` | рдорд╛рд╕реНрдЯрд░ рд╕реНрд╡рд┐рдЪ; `false` рдХрдорд╛рдВрдб, рдЯреВрд▓, рд▓рд┐рд╕рдирд░ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ |
| `backend` | `git` | рд╕рд┐рдВрдХ рдмреИрдХрдПрдВрдб: `git` (рд╕рд╛рджрд╛-рдкрд╛рда рдорд┐рд░рд░) рдпрд╛ `encrypted` (age-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдорд┐рд░рд░ рд╕рд╛рдордЧреНрд░реА) |
| `sessionRoot` | `''` | рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рд░реВрдЯ; рдЦрд╛рд▓реА = `$DSH_HOME/sessions` (рджреЛрдиреЛрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рд▓реЛрдб рдЕрд╕рдлрд▓) |
| `repoDir` | `''` | рд╕рд┐рдВрдХ рд╡рд░реНрдХрдЯреНрд░реА рд░реВрдЯ; рдЦрд╛рд▓реА = `$DSH_HOME/dsh-session-sync/repo` |
| `remote` | `''` | рд░рд┐рдореЛрдЯ рдкрддрд╛ (pull/push рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ; status/diff рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ) |
| `branch` | `main` | рд░рд┐рдореЛрдЯ рдмреНрд░рд╛рдВрдЪ рдХрд╛ рдирд╛рдо |
| `gitBin` | `git` | git рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯреЗрдмрд▓ рдкрде |
| `ageBin` | `age` | age рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯреЗрдмрд▓ рдкрде (`backend: encrypted` рдкрд░ рдЬрд╛рдБрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб) |
| `ageRecipient` | `''` | age рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдпрд╛ рдкрд╣рдЪрд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ); рдЦрд╛рд▓реА = рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб |
| `ageIdentity` | `''` | рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝-рд░рд╣рд┐рдд age рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХрд╛ рдкрде (рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП); рдЦрд╛рд▓реА = рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб |
| `autoPullOnStart` | `false` | рдкреНрд▓рдЧрдЗрди рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдмрд╛рд░ pull рдХрд░реЗрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╣реА рдЕрдиреБрдорддрд┐ рд╣реИ; рдкреБрдирдГ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ) |
| `autoPushOnTurnEnd` | `false` | рд╣рд░ рдмрдВрдж рдЯрд░реНрди рдХреЗ рдмрд╛рдж push рдХрд░реЗрдВ |
| `pullIntervalMinutes` | `0` | рд╣рд░ N рдорд┐рдирдЯ рдореЗрдВ рдЖрд╡рдзрд┐рдХ pull (`0` = рдмрдВрдж, рдЕрдзрд┐рдХрддрдо `10080`) |
| `confirmVia` | `auto` | рдкреБрд╖реНрдЯрд┐ рдЪреИрдирд▓: `auto` (рдкрд╣рд▓реЗ userQuestions, рдлрд┐рд░ approval), `userQuestions`, `approval` |
| `graceMs` | `10000` | git рдХреЛ рдорд╛рд░рдиреЗ рдХреА рдЕрдиреБрдЧреНрд░рд╣ рдЕрд╡рдзрд┐ (ms) |
| `commandTimeoutMs` | `120000` | рдкреНрд░рддрд┐-рдХрдорд╛рдВрдб рдЯрд╛рдЗрдордЖрдЙрдЯ (ms) |
| `maxOutputBytes` | `262144` | рдкреНрд░рддрд┐-рд╕реНрдЯреНрд░реАрдо рдПрдХрддреНрд░рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдорд╛ (рдмрд╛рдЗрдЯреНрд╕) |
| `commitName` | `dsh-session-sync` | рдХрдорд┐рдЯ рд▓реЗрдЦрдХ рдирд╛рдо |
| `commitEmail` | `dsh-session-sync@localhost` | рдХрдорд┐рдЯ рд▓реЗрдЦрдХ рдИрдореЗрд▓ |
| `registerCommand` | `true` | `/sync` рдХрдорд╛рдВрдб рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ |
| `registerTools` | `true` | tools рд╕реЗрд╡рд╛ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ `sync_*` рдЯреВрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ |
рдЖрдкрдХреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
```yaml
- insert:
- id: session-sync
name: dsh-session-sync
config:
remote: git@github.com:you/your-dsh-sessions.git
branch: main
autoPushOnTurnEnd: true
pullIntervalMinutes: 30
confirmVia: userQuestions
```
## рдЯреВрд▓ рдФрд░ рд╕рддрд╣реЗрдВ
| рд╕рддрд╣ | рдХреЗрд╡рд▓-рдкрдарди | рдкреБрд╖реНрдЯрд┐ рдЖрд╡рд╢реНрдпрдХ | рдиреЛрдЯреНрд╕ |
|---|---|---|---|
| `/sync status` | тЬЕ | тАФ | рдмреНрд░рд╛рдВрдЪ, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд░рд┐рдореЛрдЯ, рдЖрдЧреЗ/рдкреАрдЫреЗ, рдЧрдВрджреА рдлрд╝рд╛рдЗрд▓реЗрдВ, рдлрд╝реЛрд░реНрдХ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдЕрдВрддрд┐рдо pull/push |
| `/sync diff` | тЬЕ | тАФ | рдЕрдирдХрдорд┐рдЯреЗрдб рдмрджрд▓рд╛рд╡ + `HEAD..remote` рдЖрдБрдХрдбрд╝реЗ (рдХреЗрд╡рд▓-рдкрдарди) |
| `/sync log` | тЬЕ | тАФ | рд╕рд┐рдВрдХ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреЗ рдЕрдВрддрд┐рдо рдХрдорд┐рдЯ |
| `/sync pull` | | тЬЕ | Fetch + merge рджреЛрдиреЛрдВ-рд░рдЦреЗрдВ рдЕрд░реНрде рдХреЗ рд╕рд╛рде; рд╕реНрдерд╛рдиреАрдп рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рдореЛрдЯ рдлрд╝реЛрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд |
| `/sync push` | | тЬЕ | рдорд┐рд░рд░ + commit + push; рдХрднреА force-push рдирд╣реАрдВ рдХрд░рддрд╛, рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдкрд░ рдПрдХ рдмрд╛рд░ рд╕реБрд▓рд╣ рдХрд░рдХреЗ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ |
| `sync_status` | тЬЕ | тАФ | рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП `/sync status` рдЬреИрд╕реЗ рд╣реА рддрдереНрдп |
| `sync_pull` | | тЬЕ | рдореЙрдбрд▓-рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп pull |
| `sync_push` | | тЬЕ | рдореЙрдбрд▓-рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп push |
## рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдбреЗрдЯрд╛
- **рдЕрдиреБрдорддрд┐рдпрд╛рдБ**: рдкрд░рд┐рд╡рд░реНрддрдирдХрд╛рд░реА рдСрдкрд░реЗрд╢рди рдкреБрд╖реНрдЯрд┐ рджреНрд╡рд╛рд░ (`confirmVia`) рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ; рдкреНрд▓рдЧрдЗрди рдХрднреА рднреА рд╣рд╛рд░реНрдиреЗрд╕ рдХреА `userQuestions`/`approval` рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдпрд╛ рдмрд╛рдпрдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧ рдЕрдиреБрджрд╛рди рд╕реЗ рдЖрдЪреНрдЫрд╛рджрд┐рдд рд╣реИрдВ рдФрд░ рдХрднреА рдкреБрдирдГ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░рддреЗред
- **рдбреЗрдЯрд╛**: рд╕рд┐рдВрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдбрд┐рд╡рд╛рдЗрд╕ id, рдЕрдВрддрд┐рдо pull/push, рдЕрдВрддрд┐рдо push head, рдЕрдВрддрд┐рдо рддреНрд░реБрдЯрд┐) `session-sync` рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рд╕рддреНрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдкреА рд╣реЛрддреА рд╣реИрдВ тАФ рдкреНрд▓рдЧрдЗрди рдЙрдиреНрд╣реЗрдВ рдХрднреА рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ id рдХреНрд░реЙрд╕-рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╝реЛрд░реНрдХ рд╢реНрд░реЗрдп рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ `device.txt` рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
- **рд╕рддреНрд░ рд▓реЙрдЧ**: `sync/push`, `sync/pull`, рдФрд░ `sync/conflict` `types.d.ts` рдореЗрдВ рдШреЛрд╖рд┐рдд рд╣реИрдВ; рд╡реЗ рдХреЗрд╡рд▓ рддрднреА рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ (рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ рджреЗрдЦреЗрдВ)ред рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рдпрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рдЬреЛ рдПрдХрдорд╛рддреНрд░ рдЯрд┐рдХрд╛рдК рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддрд╛ рд╣реИ тАФ рдЯрдХрд░рд╛рд╡ рдлрд╝реЛрд░реНрдХ рд╕реВрдЪрдирд╛ тАФ рд╡рд╣ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЕрдкрдирд╛ producer-owned source kind (`dsh-session-sync`) рд░рдЦрддреА рд╣реИ; рд╣рд╛рд░реНрдиреЗрд╕ рдиреЗ рд╕рд╛рдЭрд╛ `plugin` kind рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рддреНрд░ рдкреБрдирдГ-рдкрдарди рдкрд░ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
## рд╕реБрд░рдХреНрд╖рд╛ рд╕реАрдорд╛рдПрдБ
- **рдХрднреА рдЪреБрдкрдЪрд╛рдк рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВред** Append-only рддреАрди-рддрд░рдлрд╝рд╛ рдорд░реНрдЬ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд▓рди рдкрд░ рджреЛрдиреЛрдВ рдкрдХреНрд╖ рд░рдЦрддрд╛ рд╣реИ; рдлрд╝реЛрд░реНрдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрднреА рдирд╣реАрдВ рд╣рдЯрддреАрдВ, рдФрд░ git рдХрднреА force-push, reset, rebase рдпрд╛ рдмреНрд░рд╛рдВрдЪ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рддрд╛ред
- **рдкрде рд╕рдВрд░реЛрдзрдиред** рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд┐рд░рд░ рд╣реЛрддреА рд╣реИрдВ, рд╕рд┐рдорд▓рд┐рдВрдХ рдЕрд╕реНрд╡реАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рд░ рдЬреЛрдбрд╝реЗ рдЧрдП рдкрде рдХреА рд╕рдВрд░реЛрдзрди рдЬрд╛рдБрдЪ рд╣реЛрддреА рд╣реИ (`PATH_UNSAFE` рддреЗрдЬрд╝реА рд╕реЗ рдЕрд╕рдлрд▓)ред
- **рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЖрдЙрдЯрдкреБрдЯред** рд░рд┐рдореЛрдЯ-URL рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓, рдЯреЛрдХрди рдФрд░ `key=value` рд░рд╣рд╕реНрдп рдореЙрдбрд▓ рдпрд╛ рд▓реЙрдЧ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдкрде рдкреНрд░рджрд░реНрд╢рди рдЕрдкрдиреА рд░реВрдЯ рдХреЗ рдмрд╛рд╣рд░ рд╕рдм рдХреБрдЫ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
- **рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдирд╣реАрдВред** рдкреНрд▓рдЧрдЗрди рд╕реНрд╡рдпрдВ рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛; git рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЖрдкрдХреЗ рд╕рд╛рдорд╛рдиреНрдп git credential helper рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред age рдкрд╣рдЪрд╛рди/рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдкрдХреЗ рдкреНрд░рдмрдВрдзрди рдХреА рд╣реИрдВ, рдФрд░ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдХрднреА рд╕рд┐рдВрдХ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреАрдВред
- **git рдХрдареЛрд░реАрдХрд░рдгред** git `GIT_TERMINAL_PROMPT=0` рдФрд░ `GIT_OPTIONAL_LOCKS=0` рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ, рд╕рдордп-рд╕реАрдорд╛ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рд╕реАрдорд┐рдд, рдкреНрд░рддрд┐-рд╕реНрдЯреНрд░реАрдо рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рдеред
- **рдмрдВрдж-рдЕрд╕рдлрд▓ред** рдкреБрд╖реНрдЯрд┐ рдЙрддреНрддрд░рджрд╛рддрд╛, рд░рд┐рдореЛрдЯ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐, рдпрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкрде рдСрдкрд░реЗрд╢рди рдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
## рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдЦрд╝рддрд░рд╛ рдореЙрдбрд▓
`backend: encrypted` рдорд┐рд░рд░ рдХреЗ рдКрдкрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ **age** рдкрд░рдд рдЬреЛрдбрд╝рддрд╛ рд╣реИ: рд╕рддреНрд░ рдмрд╛рдЗрдЯреНрд╕ рдХрдорд┐рдЯ рдФрд░ push рд╕реЗ рдкрд╣рд▓реЗ `encrypted/**/*.age` рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдорд░реНрдЬ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд╕рд╛рджреЗ-рдкрд╛рда рдорд┐рд░рд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рддреАрди-рддрд░рдлрд╝рд╛ рдорд░реНрдЬ рд╣рдореЗрд╢рд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП append-only рджреЛрдиреЛрдВ-рд░рдЦреЗрдВ рдЕрд░реНрде рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддреЗ рд╣реИрдВред
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреНрдпрд╛ **рд╕реБрд░рдХреНрд╖рд┐рдд** рдХрд░рддрд╛ рд╣реИ:
- **рд░рд┐рдореЛрдЯ рдореЗрдВ рдорд┐рд░рд░ рд╕рд╛рдордЧреНрд░реАред** рдЖрдк рдЬреЛ рд╕рддреНрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ push рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ age рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рд╣реЛрддреА рд╣реИрдВ; рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯ, рдЙрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рдХ рдФрд░ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреНрд▓реЛрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рджреЗ-рдкрд╛рда рд╕рддреНрд░ рдмрд╛рдЗрдЯреНрд╕ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред
рдХреНрдпрд╛ рдпрд╣ **рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ** рдХрд░рддрд╛ (рд╕реАрдорд╛):
- **рдХреБрдВрдЬрд┐рдпрд╛рдБ рдФрд░ age рдкрд╣рдЪрд╛рди рдЖрдкрдХреЗ рдкреНрд░рдмрдВрдзрди рдХреА рд╣реИрдВред** рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛/рдкрд╣рдЪрд╛рди рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдХрднреА рд╢рд┐рдк, рд╕реНрдЯреЛрд░ рдпрд╛ рд░реЛрдЯреЗрдЯ рдирд╣реАрдВ рд╣реЛрддреАрдВред рдХреБрдВрдЬреА рд▓реАрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрд╕рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд┐рд░рд░ рд╕рд╛рдордЧреНрд░реА рдЙрдЬрд╛рдЧрд░ рд╣реЛрддреА рд╣реИред рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝-рд░рд╣рд┐рдд рдкрд╣рдЪрд╛рди рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдВред
- **рд░рд┐рдореЛрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╣реА рд░рд╣рддрд╛ рд╣реИред** git рдореЗрдЯрд╛рдбреЗрдЯрд╛ тАФ рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢, `.gitignore`, `encrypted/` рдкрде рд╕рдВрд░рдЪрдирд╛, рдмреНрд░рд╛рдВрдЪ рдирд╛рдо рдФрд░ push/fetch рдЧрддрд┐рд╡рд┐рдзрд┐ тАФ рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯ рдХреЛ рджрд┐рдЦрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди *рд╕рд╛рдордЧреНрд░реА* рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рдпрд╣ рддрдереНрдп рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ, рди рд╣реА рдЖрдкрдХреЗ рд╕рддреНрд░ рд╡реГрдХреНрд╖ рдХрд╛ рдЖрдХрд╛рд░ред
- **рд╕рд╛рджрд╛ рдкрд╛рда рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд░рд╣рддрд╛ рд╣реИред** `/sessions/` рдХрд╛ рдорд┐рд░рд░ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╛рджрд╛ рдкрд╛рда рд╣реИ; рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░реЗрд╖рд┐рдд/рд░рд┐рдореЛрдЯ рдкреНрд░рддрд┐ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдпрд╛ рд▓рд╛рдЗрд╡ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХреА рдирд╣реАрдВред
- **graceful degradation рдХрд╛ рдЕрд░реНрде рд╕рд╛рджрд╛ рдкрд╛рда рд╣реИред** `backend: encrypted` рдХреЗ рд╕рд╛рде, рдпрджрд┐ `age` рдЧрд╛рдпрдм рд╣реИ, рдпрд╛ `ageRecipient`/`ageIdentity` рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдкреНрд▓рдЧрдЗрди рд╕рд╛рджреЗ-рдкрд╛рда git рдкрде рдкрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ **рдФрд░ рд╕реНрдерд┐рддрд┐/рд▓реЙрдЧ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ** тАФ рдпрд╣ рдХрднреА рдЪреБрдкрдЪрд╛рдк рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рд░рд┐рдореЛрдЯ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдорд╛рдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ `/sync status` рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рдБрдЪреЗрдВред
рдЖрдзрд╛рд░: `backend: git` (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХреЗ рд╕рд╛рде рд╕рддреНрд░ рдмрд╛рдЗрдЯреНрд╕ **рдЖрдкрдХреЗ** git рд░рд┐рдореЛрдЯ рдореЗрдВ рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░рд╣рддреЗ рд╣реИрдВ тАФ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
## рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ
- **рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред** `backend: encrypted` рдПрдХ age рдкрд░рдд рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдКрдкрд░ ┬лрдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдЦрд╝рддрд░рд╛ рдореЙрдбрд▓┬╗ рджреЗрдЦреЗрдВ); `age` рдпрд╛ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред `backend: git` (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХреЗ рд╕рд╛рде рд╕рддреНрд░ рдмрд╛рдЗрдЯреНрд╕ **рдЖрдкрдХреЗ** git рд░рд┐рдореЛрдЯ рдореЗрдВ рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░рд╣рддреЗ рд╣реИрдВ тАФ рдПрдХ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- **git рдЖрд╡рд╢реНрдпрдХред** рдкреНрд▓рдЧрдЗрди рдХреЛ `git` рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯреЗрдмрд▓ рдФрд░ `subprocess` рд╕реЗрд╡рд╛ рдЪрд╛рд╣рд┐рдП; рдЙрдирдХреЗ рдмрд┐рдирд╛, рд╕рд┐рдВрдХ рдСрдкрд░реЗрд╢рди рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рд╕реЗ рдЕрд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ (рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓реЗрдВ рдмреВрдЯ рд╣реЛрддреА рд░рд╣рддреА рд╣реИрдВ)ред
- **`0.1.0-rc.6`/`0.1.0-rc.8`/`0.1.1-rc.2`/`0.1.2-alpha.2`/`0.1.2-alpha.3`/`0.1.2-rc.1`/`0.1.7-alpha.2` рдкрд░ рд╕рддреНрд░ рдИрд╡реЗрдВрдЯред** рд╣рд╛рд░реНрдиреЗрд╕ рдЕрднреА `sync/*` рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рд╕рддреНрд░-рд▓реЙрдЧ рдЬреЛрдбрд╝ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рд╕рддреНрд░ рд▓реЛрдб рд╣реЛрддреЗ рд░рд╣рддреЗ рд╣реИрдВ); рдкреНрд▓рдЧрдЗрди рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдГ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ `Session.append` рдкрд░ `ignorable` рд▓рд┐рдлрд╝рд╛рдлрд╝рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
- **рдЯрд░реНрди рдХреЗ рдмреАрдЪ `approval`ред** `/sync` рдЯрд░реНрди рдХреЗ рдмреАрдЪ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ `approval` рдЪреИрдирд▓ рдХреЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЦреБрд▓рд╛ рдЯрд░реНрди рдирд╣реАрдВ рд╣реЛрддрд╛; рдХрдорд╛рдВрдб-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд┐рдВрдХ рдХреЗ рд▓рд┐рдП `confirmVia: userQuestions` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдЯрд░реНрди рдХреЗ рдЕрдВрджрд░ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдВрдХ рдЪрд▓рд╛рдПрдБред рдЦреБрд▓реЗ рдЯрд░реНрди рдХреА рдЬрд╛рдБрдЪ рд╣реЛрд╕реНрдЯ рдХреЗ `turnBoundary` рд╕рддреНрд░ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╕реЗ рд╣реЛрддреА рд╣реИ: `@deepseek-ai/dsh-session-projection` рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдпреЛрдЬрди рдЯрд░реНрди рд╕реНрдерд┐рддрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдЙрд╕реА рдХрд╛рд░рдг рдХреЗ рд╕рд╛рде рдлрд╝реЗрд▓-рдХреНрд▓реЛрдЬрд╝реНрдб рд░рд╣рддрд╛ рд╣реИред
- **рд╣реЛрд╕реНрдЯ-рдирд┐рдЬреА рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рд╕рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛрддреЗред** `session.lock` (рд╣рд╛рд░реНрдиреЗрд╕ рд╕рддреНрд░ рд▓реАрдЬрд╝) рдФрд░ `session.migration.*.tmp` рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрднреА рдорд┐рд░рд░ рдпрд╛ рд╣рдЯрд╛рдИ рдирд╣реАрдВ рдЬрд╛рддреАрдВ тАФ рдпреЗ рд░рдирдЯрд╛рдЗрдо рд╕реНрдерд┐рддрд┐ рд╣реИрдВ, рд╕рд┐рдВрдХ-рдпреЛрдЧреНрдп рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВред рд╕рддреНрд░ рд▓реЙрдЧ (`session.jsonl`, `session.v[1-9]*.jsonl[.zstd]`) рд╣реА рдорд┐рд░рд░ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреЗрд▓реЛрдб рд░рд╣рддреЗ рд╣реИрдВред
## рд╡рд┐рдХрд╛рд╕
```sh
pnpm install # node ^22.19 || >=24
pnpm run typecheck && pnpm run typecheck:ci # рдкреНрд░рдХрд╛рд╢рд┐рдд 0.1.7-alpha.2 peers рдХреЗ рд╡рд┐рд░реБрджреНрдз tsc --checkJs
pnpm test # node --test (13 рдЯреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ; git рдЗрдВрдЬрди рд╕реБрдЗрдЯ рдмрд┐рдирд╛ git рдХреЗ рдЫреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ)
pnpm run verify:self-contained # рдирд┐рд░реНрднрд░рддрд╛ spec рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рд╣рд▓ рд╣реЛрддреА рд╣реИрдВ
pnpm run verify:artifacts # рдкреНрд░рдХрд╛рд╢рд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрдкрд╕реНрдерд┐рдд + index.mjs import рдпреЛрдЧреНрдп
pnpm run check:readmes # рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ README рд╕рдВрдЧрддрддрд╛
pnpm pack # рдкреНрд░рдХрд╛рд╢рд┐рдд tarball
```
рдХреЛрдИ рдмрд┐рд▓реНрдб рдЪрд░рдг рдирд╣реАрдВ: рд╢реБрджреНрдз ESM, `index.mjs` рдФрд░ `lib/` рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рд╣реИрдВред
## Topics
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `session-sync`, `session`, `git`, `sync`, `cross-device`
## рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛
- [@PerryLink](https://github.com/PerryLink) тАФ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХ: git рдорд┐рд░рд░ рдЗрдВрдЬрди, append-only рджреЛрдиреЛрдВ-рд░рдЦреЗрдВ рдорд░реНрдЬ, `/sync` рдХрдорд╛рдВрдб рдФрд░ `sync_*` рдЯреВрд▓, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░, рдФрд░ рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред
## PerryLink DSH Plugin Family
рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рдХреЗ DeepSeek Harness рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдкреВрд░реА рд╕реВрдЪреА рдиреАрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░рдЦреА рдЧрдИ рд╣реИ рддрд╛рдХрд┐ рд╣рд░ README рдХреА рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рдЫреЛрдЯреА рд░рд╣реЗ; рд╣рд░ рдкрдВрдХреНрддрд┐ рдФрд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЦреЛрд▓реЗрдВред
рд╕рднреА рдкреНрд▓рдЧрдЗрди рдЦреЛрд▓реЗрдВ
| рдкреНрд▓рдЧрдЗрди | рд╕реНрдерд┐рддрд┐ |
|---|---|
| **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
| **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | |
| **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
| **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | |
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
| **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
| **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | |
| **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
| **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
| **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
| **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
| **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
| **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
| **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
| **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
| **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
| **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
| **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
| **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
| **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
| **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
| **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
| **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
| **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
| **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
| **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
| **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
| **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | |
| **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
| **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
| **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
| **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
| **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
| **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
| **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
| **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | |
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | |
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | |
| **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
| **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
| **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
| **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
| **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
| **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
| **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
| **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
| **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
| **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | |
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
| **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
| **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
| **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
| **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
| **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
| **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
| **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | |
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
| **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
## рд▓рд╛рдЗрд╕реЗрдВрд╕
[LICENSE](LICENSE) (Apache License 2.0) ┬й 2026 dsh-session-sync contributors