ЁЯФД dsh-session-sync

August 30, 2026 ┬╖ View on GitHub

ЁЯФД dsh-session-sync

  • 1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓: рдПрдХ рдмрд╛рд░ npm i -g dsh1024, рдлрд┐рд░ dsh1024 plugin --profile web add dsh-session-sync (deepseek1024.com рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбрд┐рд╡рд╛рдЗрд╕ рд╕рддреНрд░ рд╕рд┐рдВрдХ тАФ рдЖрдкрдХреЗ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд git рдорд┐рд░рд░ред

рдЕрдкрдиреЗ рд╕рддреНрд░реЛрдВ рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХ рдХрд░реЗрдВ, рдХрд┐рд╕реА рднреА рдЯрдХрд░рд╛рд╡ рдореЗрдВ рджреЛрдиреЛрдВ рдкрдХреНрд╖ рд░рдЦреЗрдВ, рдХрднреА рдХреЛрдИ рдЯрд░реНрди рди рдЦреЛрдПрдБред

License DSH plugin Node CI Version npm version npm downloads

English ┬╖ чоАф╜Уф╕нцЦЗ ┬╖ Espa├▒ol ┬╖ Portugu├кs ┬╖ рд╣рд┐рдиреНрджреА


рд╕рдВрдЧрддрддрд╛

рд╕рддрд╣рд╕реНрдерд┐рддрд┐
HarnessDeepSeek Harness 0.1.1-rc.2
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 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ); рдХреЗрд╡рд▓-рдкрдарди рд╕рддрд╣реЗрдВ рдХрднреА рдирд╣реАрдВ рдкреВрдЫрддреАрдВ; рдмрд┐рдирд╛ рдЙрддреНрддрд░рджрд╛рддрд╛ рдХреЗ рдСрдкрд░реЗрд╢рди рдмрдВрдж-рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред
рдбрд┐рд╡рд╛рдЗрд╕ A                               рд░рд┐рдореЛрдЯ (рдЖрдкрдХрд╛ git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА)                рдбрд┐рд╡рд╛рдЗрд╕ B
$DSH_HOME/sessions тФАтФАрдорд┐рд░рд░тФАтФАтЦ╢ commit тФАтФАpushтФАтФАтЦ╢ [sessions] тФАтФАpullтФАтФАтЦ╢ merge (рджреЛрдиреЛрдВ рд░рдЦреЗрдВ + fork)

рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд

# 1. рдмрдВрдбрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main"

# рдпрд╛ npm рд╕реЗ (рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг)
dsh plugin --profile web add dsh-session-sync

# 2. рдЗрд╕реЗ рдПрдХ рдирд┐рдЬреА git рд░рд┐рдореЛрдЯ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдФрд░ рдкрдВрдХреНрддрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
dsh --profile web --dump-config | grep -A2 'id: session-sync'

рдлрд┐рд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рдореЗрдВ рд░рд┐рдореЛрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ (рдПрдХ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЖрдзрд╛рд░ рд╣реИ) рдФрд░ рд╕рд┐рдВрдХ рдХрд░реЗрдВ:

- insert:
    - id: session-sync
      name: dsh-session-sync
      config:
        remote: git@github.com:you/your-dsh-sessions.git
> /sync status
> /sync pull
> /sync push

рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓

  • git рдЪреИрдирд▓ (рдирд╡реАрдирддрдо main): dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main" (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-<version>.tgzред
  • рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓: dsh plugin --profile web remove dsh-session-sync (рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рд╕реЗ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рдПрдБ)ред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рд╕рднреА рдЯреНрдпреВрдиреЗрдмрд▓ Schemastery Config рдлрд╝реАрд▓реНрдб рд╣реИрдВ (cordis.yml рд╕реЗ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред id-рд▓рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рдкреВрд░реА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ тАФ рдЬреЛ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЪрд╛рд╣рд┐рдП рдЙрдиреНрд╣реЗрдВ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦреЗрдВред cordis.patch.yml рд╣рд░ рдХреБрдВрдЬреА рдХреЛ рдЗрдирд▓рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХреБрдВрдЬреАрдбрд┐рдлрд╝реЙрд▓реНрдЯрдЕрд░реНрде
enabledtrueрдорд╛рд╕реНрдЯрд░ рд╕реНрд╡рд┐рдЪ; false рдХрдорд╛рдВрдб, рдЯреВрд▓, рд▓рд┐рд╕рдирд░ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ
backendgitрд╕рд┐рдВрдХ рдмреИрдХрдПрдВрдб: git (рд╕рд╛рджрд╛-рдкрд╛рда рдорд┐рд░рд░) рдпрд╛ encrypted (age-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдорд┐рд░рд░ рд╕рд╛рдордЧреНрд░реА)
sessionRoot''рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рд░реВрдЯ; рдЦрд╛рд▓реА = $DSH_HOME/sessions (рджреЛрдиреЛрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рд▓реЛрдб рдЕрд╕рдлрд▓)
repoDir''рд╕рд┐рдВрдХ рд╡рд░реНрдХрдЯреНрд░реА рд░реВрдЯ; рдЦрд╛рд▓реА = $DSH_HOME/dsh-session-sync/repo
remote''рд░рд┐рдореЛрдЯ рдкрддрд╛ (pull/push рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ; status/diff рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ)
branchmainрд░рд┐рдореЛрдЯ рдмреНрд░рд╛рдВрдЪ рдХрд╛ рдирд╛рдо
gitBingitgit рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯреЗрдмрд▓ рдкрде
ageBinageage рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯреЗрдмрд▓ рдкрде (backend: encrypted рдкрд░ рдЬрд╛рдБрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб)
ageRecipient''age рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдпрд╛ рдкрд╣рдЪрд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ); рдЦрд╛рд▓реА = рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб
ageIdentity''рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝-рд░рд╣рд┐рдд age рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХрд╛ рдкрде (рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП); рдЦрд╛рд▓реА = рд╕рд╛рджреЗ-рдкрд╛рда рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб
autoPullOnStartfalseрдкреНрд▓рдЧрдЗрди рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдмрд╛рд░ pull рдХрд░реЗрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╣реА рдЕрдиреБрдорддрд┐ рд╣реИ; рдкреБрдирдГ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ)
autoPushOnTurnEndfalseрд╣рд░ рдмрдВрдж рдЯрд░реНрди рдХреЗ рдмрд╛рдж push рдХрд░реЗрдВ
pullIntervalMinutes0рд╣рд░ N рдорд┐рдирдЯ рдореЗрдВ рдЖрд╡рдзрд┐рдХ pull (0 = рдмрдВрдж, рдЕрдзрд┐рдХрддрдо 10080)
confirmViaautoрдкреБрд╖реНрдЯрд┐ рдЪреИрдирд▓: auto (рдкрд╣рд▓реЗ userQuestions, рдлрд┐рд░ approval), userQuestions, approval
graceMs10000git рдХреЛ рдорд╛рд░рдиреЗ рдХреА рдЕрдиреБрдЧреНрд░рд╣ рдЕрд╡рдзрд┐ (ms)
commandTimeoutMs120000рдкреНрд░рддрд┐-рдХрдорд╛рдВрдб рдЯрд╛рдЗрдордЖрдЙрдЯ (ms)
maxOutputBytes262144рдкреНрд░рддрд┐-рд╕реНрдЯреНрд░реАрдо рдПрдХрддреНрд░рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдорд╛ (рдмрд╛рдЗрдЯреНрд╕)
commitNamedsh-session-syncрдХрдорд┐рдЯ рд▓реЗрдЦрдХ рдирд╛рдо
commitEmaildsh-session-sync@localhostрдХрдорд┐рдЯ рд▓реЗрдЦрдХ рдИрдореЗрд▓
registerCommandtrue/sync рдХрдорд╛рдВрдб рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ
registerToolstruetools рд╕реЗрд╡рд╛ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ sync_* рдЯреВрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

рдЖрдкрдХреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

- 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 рдореЗрдВ рдШреЛрд╖рд┐рдд рд╣реИрдВ; рд╡реЗ рдХреЗрд╡рд▓ рддрднреА рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ (рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ рджреЗрдЦреЗрдВ)ред рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рдпрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реБрд░рдХреНрд╖рд╛ рд╕реАрдорд╛рдПрдБ

  • рдХрднреА рдЪреБрдкрдЪрд╛рдк рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВред 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 рдЧрддрд┐рд╡рд┐рдзрд┐ тАФ рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯ рдХреЛ рджрд┐рдЦрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рд╛рдордЧреНрд░реА рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рдпрд╣ рддрдереНрдп рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ, рди рд╣реА рдЖрдкрдХреЗ рд╕рддреНрд░ рд╡реГрдХреНрд╖ рдХрд╛ рдЖрдХрд╛рд░ред
  • рд╕рд╛рджрд╛ рдкрд╛рда рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд░рд╣рддрд╛ рд╣реИред <repoDir>/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 рдкрд░ рд╕рддреНрд░ рдИрд╡реЗрдВрдЯред рд╣рд╛рд░реНрдиреЗрд╕ рдЕрднреА sync/* рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рд╕рддреНрд░-рд▓реЙрдЧ рдЬреЛрдбрд╝ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рд╕рддреНрд░ рд▓реЛрдб рд╣реЛрддреЗ рд░рд╣рддреЗ рд╣реИрдВ); рдкреНрд▓рдЧрдЗрди рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдГ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ Session.append рдкрд░ ignorable рд▓рд┐рдлрд╝рд╛рдлрд╝рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
  • рдЯрд░реНрди рдХреЗ рдмреАрдЪ approvalред /sync рдЯрд░реНрди рдХреЗ рдмреАрдЪ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ approval рдЪреИрдирд▓ рдХреЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЦреБрд▓рд╛ рдЯрд░реНрди рдирд╣реАрдВ рд╣реЛрддрд╛; рдХрдорд╛рдВрдб-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд┐рдВрдХ рдХреЗ рд▓рд┐рдП confirmVia: userQuestions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдЯрд░реНрди рдХреЗ рдЕрдВрджрд░ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдВрдХ рдЪрд▓рд╛рдПрдБред

рд╡рд┐рдХрд╛рд╕

pnpm install                                       # node ^22.19 || >=24
pnpm run typecheck && pnpm run typecheck:ci        # рдкреНрд░рдХрд╛рд╢рд┐рдд 0.1.1-rc.2 peers рдХреЗ рд╡рд┐рд░реБрджреНрдз tsc --checkJs
pnpm test                                          # node --test (12 рдЯреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ; 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 тАФ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХ: git рдорд┐рд░рд░ рдЗрдВрдЬрди, append-only рджреЛрдиреЛрдВ-рд░рдЦреЗрдВ рдорд░реНрдЬ, /sync рдХрдорд╛рдВрдб рдФрд░ sync_* рдЯреВрд▓, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░, рдФрд░ рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ PerryLink рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░рдХреНрд╖рд┐рдд 33 DeepSeek Harness рдкреНрд▓рдЧрдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рднреА рдХрд░реЗрдВрдЧреЗ:

PluginOne-liner
dsh-dsh-auto-reviewрдЕрдиреБрдореЛрджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рджреНрд╡рд┐рддреАрдп-рдореЙрдбрд▓ рд╕реНрд╡рддрдГ-рд╕рдореАрдХреНрд╖рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓-рдмрдВрдж
dsh-dsh-background-agentsрд╡реЗрдм UI рд╕рд╛рдЗрдбрдмрд╛рд░, рд╕рдВрджреЗрд╢ рдФрд░ рдЕрд╡рд░реЛрдзрди рдХреЗ рд╕рд╛рде рдЯрд┐рдХрд╛рдК рдкреГрд╖реНрдарднреВрдорд┐ рдЪрд╛рдЗрд▓реНрдб рдПрдЬреЗрдВрдЯ
dsh-dsh-budgetDeepSeek Harness рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрдд рдкреНрд░рд╢рд╛рд╕рди: рдмрдЬрдЯ, рдХрд╛рд░реНрдмрди рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛ рдПрдХ рдкреИрдирд▓ рдореЗрдВред
dsh-dsh-checkpoint-rewindClaude Code /rewind-рд╕рдорддреБрд▓реНрдп: рд╕реНрдиреИрдкрд╢реЙрдЯ, рд╕рддреНрд░ рдлрд╝реЙрд░реНрдХ, рдПрдХ-рдмрд╛рд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛
dsh-dsh-claude-moveClaude Code рд╕рддреНрд░, рдореЗрдореЛрд░реА, рдХреМрд╢рд▓ рдФрд░ CLAUDE.md рдХреЛ DSH рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
dsh-dsh-clickDeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдиреЗрдЯрд┐рд╡ рдбреЗрд╕реНрдХрдЯреЙрдк рдирд┐рдпрдВрддреНрд░рдг тАФ Windows рдкрд╣рд▓реЗред
dsh-dsh-composer-historyрд╡реЗрдм рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓-рд╢реИрд▓реА рдЗрдирдкреБрдЯ рдЗрддрд┐рд╣рд╛рд╕: рддреАрд░, Ctrl+R рдЦреЛрдЬ
dsh-dsh-data-qualityрдбреЗрдЯрд╛рд╕реЗрдЯ рдЧреБрдгрд╡рддреНрддрд╛ рдЬрд╛рдБрдЪ рд╡ рдЙрджреНрдзрд░рдг рд╕рддреНрдпрд╛рдкрди (рдпрд╣рд╛рдБ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдЦреНрдпрд╛-рд╕реЗрддреБ)
dsh-dsh-defendDeepSeek Harness рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ-рдЗрдВрдЬреЗрдХреНрд╢рди, рдЬреЗрд▓рдмреНрд░реЗрдХ рдФрд░ рд╕реАрдХреНрд░реЗрдЯ-рд▓реАрдХ рд░рдХреНрд╖рд╛ред
dsh-dsh-doublecheckрдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ-рдЕрдиреБрд╢рд╛рд╕рди рд░рдХреНрд╖рдХ: рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдкреВрдЫрддрд╛рдЫ, рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░, рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рд╕рдореАрдХреНрд╖рд╛
dsh-dsh-drawDeepSeek Harness рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рд╕реНрдереИрддрд┐рдХ-рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рд░реВрдЯрд┐рдВрдЧред
dsh-dsh-fastDeepSeek Harness рдХреЗ рд▓рд┐рдП рд░реАрдб-рдУрдирд▓реА рдкреНрд░рджрд░реНрд╢рди рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ред
dsh-dsh-fund-researchрдЪреАрдиреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореНрдпреВрдЪреБрдЕрд▓ рдлрдВрдб рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рдЕрдиреБрд╕рдВрдзрд╛рди рд░рд┐рдкреЛрд░реНрдЯ
dsh-dsh-githubDSH рдХреЗ рд▓рд┐рдП GitHub PR/issues рдПрдХреАрдХрд░рдг, рд╣рд░ рд▓реЗрдЦрди рдЕрдиреБрдореЛрджрди-рджреНрд╡рд╛рд░рд┐рдд
dsh-dsh-industry-researchрдЙрджреНрдпреЛрдЧ-рдЕрдиреБрд╕рдВрдзрд╛рди рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЬреЛ рдЗрд╕ рдкреНрд▓рдЧрд┐рди рдХреЗ ctx.researchReport.assemble рд╕реЗ рдбрд┐рд▓реАрд╡рд░реЗрдмрд▓ рд╕реАрд▓ рдХрд░рддрд╛ рд╣реИ
dsh-dsh-libraryDeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреНрдЮрд╛рдирдХреЛрд╢ред
dsh-dsh-local-aiDeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп-рдореЙрдбрд▓ (Ollama) рдПрдХреАрдХрд░рдгред
dsh-dsh-lsp-actionsрднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ LSP рдирд┐рджрд╛рди, рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдкреВрд░реНрдгрддрд╛, рдХреЛрдб рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рдирд╛рдо рдмрджрд▓рдирд╛
dsh-dsh-maskPII рдорд╛рд╕реНрдХрд┐рдВрдЧ рдорд┐рдбрд▓рд╡реЗрдпрд░: рдореЙрдбрд▓ рд╕реАрдорд╛ рдкрд░ рдЕрдирд╛рдо рдХрд░реЗрдВ, рдбрд┐рд╕реНрдкреНрд▓реЗ рд▓реЗрдпрд░ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
dsh-dsh-mcp-panelрдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ MCP рд░рдирдЯрд╛рдЗрдо рдкреИрдирд▓: /mcp рдХрдорд╛рдВрдб + рд╕реНрдерд┐рддрд┐, рдЯреВрд▓ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ Settings рдЯреИрдм
dsh-dsh-mementoрдЕрдиреБрдореЛрджрди-рджреНрд╡рд╛рд░рд┐рдд рдХреНрд░реЙрд╕-рд╕рддреНрд░ рдореЗрдореЛрд░реА: ctx.memory рд╕реАрдо + SQLite + рдореЗрдореЛрд░реА рдЯреВрд▓
dsh-dsh-observeDeepSeek Harness рдХреЗ рд▓рд┐рдП OpenTelemetry рдФрд░ Langfuse рдЕрд╡рд▓реЛрдХрдиреАрдпрддрд╛ рдирд┐рд░реНрдпрд╛рддрдХред
dsh-dsh-output-stylesClaude Code outputStyles-рд╕рдорддреБрд▓реНрдп рд░рдирдЯрд╛рдЗрдо рд╢реИрд▓реА рдмрджрд▓рд╛рд╡
dsh-dsh-permission-rulesрдСрдбрд┐рдЯ рдХреЗ рд╕рд╛рде Claude Code-рд╢реИрд▓реА рдШреЛрд╖рдгрд╛рддреНрдордХ allow/deny/ask рдЕрдиреБрдорддрд┐ рдирд┐рдпрдо
dsh-dsh-plugin-guideрдорд╛рдБрдЧ рдкрд░ рдПрдЬреЗрдВрдЯ рдХреМрд╢рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧрдЗрди-рд╡рд┐рдХрд╛рд╕ рдЬреНрдЮрд╛рди рдЖрдзрд╛рд░
dsh-dsh-research-reportрд╕рд╛рдордЧреНрд░реА-рдкрддрд╛ рд╕рд╛рдХреНрд╖реНрдп рдФрд░ рд╕реАрд▓рдмрдВрдж рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╡рд╛рд▓рд╛ рд╕рддреНрдпрд╛рдкрди-рдпреЛрдЧреНрдп рдЕрдиреБрд╕рдВрдзрд╛рди-рд░рд┐рдкреЛрд░реНрдЯ рдЗрдВрдЬрди
dsh-dsh-scoreDeepSeek Harness рдкреНрд▓рдЧрд┐рдиреЛрдВ рдХреА рдмрд╣реБ-рдЖрдпрд╛рдореА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реНрдХреЛрд░рд┐рдВрдЧред
dsh-dsh-session-pinрдЯрд┐рдХрд╛рдК рдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рд╕рддреНрд░ рдкрд┐рди рдХрд░реЗрдВ
dsh-dsh-skill-pack-securityрд╕реБрд░рдХреНрд╖рд╛-рдСрдбрд┐рдЯ рдХреМрд╢рд▓ рдкреИрдХ: рдЧреБрдкреНрдд рд╕реНрдХреИрди, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЖрдкреВрд░реНрддрд┐-рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдореАрдХреНрд╖рд╛
dsh-dsh-talkDeepSeek Harness рдХреЗ рд▓рд┐рдП рдЖрд╡рд╛рдЬрд╝-рдкреНрд░рдердо рд╕рддреНрд░ рд▓реВрдк: рдмреЛрд▓реЗрдВ рдФрд░ рдЙрддреНрддрд░ рд╕реБрдиреЗрдВред
dsh-dsh-test-driveDeepSeek Harness рдкреНрд▓рдЧрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрдердХ рдЗрдВрд╕реНрдЯреЙрд▓-рдПрдВрдб-рд╕реНрдореЛрдХ рдЯреЗрд╕реНрдЯ рдбреНрд░рд╛рдЗрд╡ред
dsh-dsh-translateDeepSeek Harness рдХреЗ рд▓рд┐рдП рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдирд┐рдпрддрд╛рддреНрдордХ JSON рдорд░рдореНрдорддред

рд▓рд╛рдЗрд╕реЗрдВрд╕

LICENSE (Apache License 2.0) ┬й 2026 dsh-session-sync contributors