# πŸ“¦ @goodandready/dsh-goal

Π”Π²ΠΈΠΆΠΎΠΊ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ выполнСния Ρ†Π΅Π»Π΅ΠΉ ΠΈ многошагового Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π° Π·Π°Π΄Π°Ρ‡ для DeepSeek Harness

npm version license DSH Plugin Node version

ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΡ€Π°

πŸ‡¬πŸ‡§ English β€’ πŸ‡·πŸ‡Ί Русский β€’ πŸ‡¨πŸ‡³ δΈ­ζ–‡θ―΄ζ˜Ž

⭐ Если Π²Π°ΠΌ нравится этот ΠΏΠ»Π°Π³ΠΈΠ½, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅ΠΌΡƒ Π·Π²Π΅Π·Π΄Ρƒ Π½Π° GitHub β€” это ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСня Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ дальшС.

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создайтС issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ## ⚑ ΠžΠ±Π·ΠΎΡ€ ΠΈ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° РСшСниС комплСксных ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ многошагового выполнСния: Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ†Π΅Π»Π΅ΠΉ Π½Π° майлстоуны, Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ выполнСния ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ подталкивания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ наглядного отслСТивания прогрСсса. **`@goodandready/dsh-goal`** внСдряСт Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ достиТСния Ρ†Π΅Π»Π΅ΠΉ Π² DeepSeek Harness Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ `/goal`: * πŸ’‘ **Живая ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ†Π΅Π»ΠΈ / НаправлСниС Π°Π³Π΅Π½Ρ‚Π° (*v0.2.0*)**: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ уточнСния Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ†Π΅Π»ΡŒ Π½Π° Π»Π΅Ρ‚Ρƒ Π±Π΅Π· прСрывания сСссии. * πŸ”” **Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ увСдомлСния (*v0.2.0*)**: НативныС ΠΏΡƒΡˆ-увСдомлСния Ρ‡Π΅Ρ€Π΅Π· HTML5 `Notification API` ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ сбоС Ρ†Π΅Π»ΠΈ. * πŸ“‘ **10 ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… прСсСтов (*v0.2.0*)**: Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π·Π°Π΄Π°Ρ‡ (Fix Bug, Refactor YAGNI, Tests, Code Review, Security, Docs, Upgrade Deps, Cleanup, Performance) Π² ΠΎΠΊΠ½Π΅ запуска. * πŸ›‘οΈ **Tool-Failure Breaker (*v0.2.0*)**: НастраиваСмый ΠΏΠΎΡ€ΠΎΠ³ ошибок инструмСнтов (`consecutiveToolFailureLimit`, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 3) для прСдотвращСния бСсконСчных сбойных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². * πŸ“Œ **Git Checkpoint (*v0.2.0*)**: Ѐиксация ΠΊΠΎΠΌΠΌΠΈΡ‚Π° старта (`git rev-parse --short HEAD`) ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `git diff` Π² 1 ΠΊΠ»ΠΈΠΊ. * πŸ™ **Экспорт ΠΎΡ‚Ρ‡Π΅Ρ‚Π° для GitHub / Gitea PR (*v0.2.0*)**: ГСнСрация ΠΎΡ‚Ρ‡Π΅Ρ‚Π° со сворачиваСмыми спойлСрами `
` для PR ΠΈ Π·Π°Π΄Π°Ρ‡. * 🎯 **ΠŸΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ Π±Π°Π½Π½Π΅Ρ€ Π² шапкС**: зафиксированный статус-Π±Π°Ρ€ Π½Π°Π΄ Ρ‡Π°Ρ‚ΠΎΠΌ с Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ выполнСния (`β€’ 2s`, `β€’ 1m 45s`), Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Ρ†Π΅Π»ΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ управлСния. * ⏸️ **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠΌ (Play / Pause / Cancel)**: мгновСнная приостановка Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π°Π³Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚. * πŸ“‹ **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ панСль майлстоунов**: модальноС ΠΎΠΊΠ½ΠΎ со списком ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡, прогрСсс-Π±Π°Ρ€ΠΎΠΌ ΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ выполнСния. * πŸ€– **Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π°Π³Π΅Π½Ρ‚Π°**: `goal_set_milestones`, `goal_update_progress` ΠΈ `goal_finish` для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ИИ. * πŸ”„ **ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ инструмСнтов ядра DSH (*Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.1.10*)**: Π‘Π΅ΡΡˆΠΎΠ²Π½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… стандартныС инструмСнты DSH (`update_goal`, `get_goal`, `create_goal`). ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ дСйствия (`complete`, `pause`, `resume`, `edit`, `blocked`), устраняСт падСния ядра (`complete and blocked require a direct human turn`) ΠΈ синхронизируСт состояниС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с GoalEngine. * πŸ›‘οΈ **Π—Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ Π»ΠΈΠΌΠΈΡ‚Ρ‹**: настраиваСмоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ `maxIterations` для прСдотвращСния бСсконСчных Ρ†ΠΈΠΊΠ»ΠΎΠ². * πŸ›‘οΈ **Π”Π²ΡƒΡ…Ρ„Π°Π·Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Β«Plan Mode ⇄ Act ModeΒ» (*#162*)**: Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Ρ†Π΅Π»ΠΈ Π½Π° Ρ„Π°Π·Ρƒ проСктирования ΠΈ планирования (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этапов Ρ‡Π΅Ρ€Π΅Π· `goal_milestones`, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записи Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄) ΠΈ Ρ„Π°Π·Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (`Act Mode`), Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Β«Π£Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ» (Approve & Execute). * πŸ›‘οΈ **АвтоматичСский ΠΏΡ€ΠΈΡ‘ΠΌΠΎΡ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΡ‚ этапа (Critic Verification) (*#163*)**: ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ `verificationCommand` Π½Π° этапС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `npm test`, `pytest`). ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ этап ΠΊΠΎΠΌΠ°Π½Π΄Π° автоматичСски запускаСтся Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ `safeCwd`. Π’ случаС сбоя (`exitCode != 0`) этап остаётся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, Π° диагностичСский Π²Ρ‹Π²ΠΎΠ΄ возвращаСтся ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² качСствС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи. Git-снимки ΠΈ синхронизация Π·Π°Π΄Π°Ρ‡ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΊΠΎΠ΄Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° 0. --- ## πŸ›οΈ АрхитСктура ```mermaid graph TD subgraph Input ["ВзаимодСйствиС"] Cmd["БлСш-ΠΊΠΎΠΌΠ°Π½Π΄Π°: /goal <Ρ†Π΅Π»ΡŒ>"] API["REST API: POST /dsh-goal/action"] end subgraph GoalEngine ["Π”Π²ΠΈΠΆΠΎΠΊ Ρ†Π΅Π»Π΅ΠΉ (lib/index.js)"] State["ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ состояний (IDLE, RUNNING, PAUSED, COMPLETED)"] Milestones["Π’Ρ€Π΅ΠΊΠ΅Ρ€ ΠΈ дСкомпозиция майлстоунов"] Disk["Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ состояний (~/.dsh/goal-state.json)"] end subgraph AgentLoop ["Автономный Ρ†ΠΈΠΊΠ» Π°Π³Π΅Π½Ρ‚Π°"] ToolSet["goal_set_milestones"] ToolProgress["goal_update_progress"] ToolFinish["goal_finish"] LimitGuard{"ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ maxIterations"} end subgraph UI ["Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DSH"] Banner["Π‘Π°Π½Π½Π΅Ρ€ Ρ†Π΅Π»ΠΈ Π½Π°Π΄ Ρ‡Π°Ρ‚ΠΎΠΌ"] Timer["Π’Π°ΠΉΠΌΠ΅Ρ€ выполнСния"] Drawer["МодальноС ΠΎΠΊΠ½ΠΎ Π·Π°Π΄Π°Ρ‡"] Settings["ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° настроСк (Schemastery)"] end Cmd --> GoalEngine API --> GoalEngine GoalEngine --> State State --> Disk State --> Banner State --> Drawer GoalEngine --> AgentLoop AgentLoop --> LimitGuard ToolSet --> GoalEngine ToolProgress --> GoalEngine ToolFinish --> GoalEngine ``` --- ## πŸ“¦ Установка ```bash dsh plugin --profile web add @goodandready/dsh-goal ``` ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ экзСмпляр DeepSeek Harness ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. --- ## πŸ’¬ Быстрый старт ЗапуститС Ρ†Π΅Π»ΡŒ прямо Π² Ρ‡Π°Ρ‚Π΅: ```text /goal ΠŸΡ€ΠΎΠ²Π΅ΡΡ‚ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ middleware Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты ``` Или Ρ‡Π΅Ρ€Π΅Π· REST API: ```bash curl -X POST http://localhost:3080/dsh-goal/action \ -H "Content-Type: application/json" \ -d '{"action":"start","title":"ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ SQL-запросов"}' ``` --- ## βš™οΈ Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (`settings.yaml`) ```yaml dsh-goal: maxIterations: 25 autoDrive: true enableSound: true ``` | ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС | |:---|:---|:---|:---| | `maxIterations` | `number` | `25` | Π—Π°Ρ‰ΠΈΡ‚Π½Ρ‹ΠΉ Π»ΠΈΠΌΠΈΡ‚: максимум Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° Ρ†Π΅Π»ΡŒ | | `autoDrive` | `boolean` | `true` | АвтоматичСски ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°ΠΊΡ‚Π°ΠΌΠΈ | | `enableSound` | `boolean` | `true` | Π—Π²ΡƒΠΊΠΎΠ²ΠΎΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ†Π΅Π»ΠΈ | --- ## πŸ§ͺ ВСстированиС Запуск Π½Π°Π±ΠΎΡ€Π° ΡŽΠ½ΠΈΡ‚-тСстов: ```bash npm test ``` --- --- ## πŸ“¦ Π˜ΡΡ‚ΠΎΡ€ΠΈΡ вСрсий (Release Notes) ### v0.2.6 - **Token Budget Guard**: Π—Π°Ρ‰ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ расхода Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° 80% ΠΈ мягкой ΠΏΠ°ΡƒΠ·ΠΎΠΉ (`PAUSED_BUDGET_EXCEEDED`) с ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ΠΌ +50k Π² 1 ΠΊΠ»ΠΈΠΊ. - **ΠŸΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ‡Π΅ΠΊ-листы (Sub-milestones)**: Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ чСкбоксы ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ этапа (`checklist: [{ text, done }]`) с синхронизациСй с модСлью. - **АвтоматичСскиС Git-Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Ρ‹**: ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ созданиС снимков рСпозитория ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ этапа с ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠΌ Π² 1 ΠΊΠ»ΠΈΠΊ. - **Экспорт Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² выполнСния**: Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° Π² `.dsh/goals/-.md` (ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `.dsh/` Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² `.gitignore`). - **ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠ°Π½Π΅Π»ΠΈ (Compact Dock Mode)**: Π‘Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ Ρ†Π΅Π»ΠΈ Π² Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΡƒΡŽ капсулу с Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ Π² `localStorage`. ### v0.2.3 - **АвтообновлСниС**: ВстроСн эндпоинт API автообновлСния Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ ΠΏΠΎ адрСсу `/api/dsh-goal/update` с fail-closed ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ источника. - **ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°**: БСрвСрная ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° спСциализированныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (<600 строк ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ): ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹, инструмСнты, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ обновлСния. - **ЧистоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ**: Из `lib/*.js` ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ всС Π·Π°ΡˆΠΈΡ‚Ρ‹Π΅ русскиС строки ΠΈ вСтвлСния; ядро ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ `en` ΠΈ `zh`, Π° русская локализация поставляСтся ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ `@goodandready/dsh-russian-lang`. - **ΠΠ°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ**: УстранСны всС пустыС Π±Π»ΠΎΠΊΠΈ `catch`, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ контСкстноС Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†Π΅Π»Π΅ΠΉ ΠΈ автоматичСская очистка ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΡ…ΡΡ SSE-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². - **Π”ΠΈΠ·Π°ΠΉΠ½-систСма**: Π§ΡƒΠΆΠ΅Ρ€ΠΎΠ΄Π½Ρ‹Π΅ CSS-классы ΠΈ явныС Ρ†Π²Π΅Ρ‚Π° RGBA Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° стандартныС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π΄ΠΈΠ·Π°ΠΉΠ½-систСмы DSH (`--dsw-alias-*`). - **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк**: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° снимка настроСк ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ»ΠΈ отсутствии сСрвиса, ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Π»ΠΎΠΆΠ½Ρ‹ΠΉ статус `ready`. ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY)