# πŸ“¦ @goodandready/dsh-clinebot

НативноС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ClineBot / ClinePass для DeepSeek Harness

0.6.15 ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… запросов, добавляСт Π·Π°ΠΌΠ΅Ρ€ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ автосинхронизации Ρ†Π΅Π½ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π½Π°Ρ…ΠΎΠ΄ΠΊΠΈ Π°ΡƒΠ΄ΠΈΡ‚Π°. Π§Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ctx.llm, трСбуСтся DSH 0.2.1-rc.2; старыС llm-pi-ai, loopback-прокси ΠΈ llm/stream ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

npm version license DSH Plugin Node version

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

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

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

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создайтС issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ## ⚑ ΠžΠ±Π·ΠΎΡ€ ΠΈ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° **ClinePass** (`https://cline.bot`) β€” сСрвис Π΅Π΄ΠΈΠ½ΠΎΠΉ фиксированной подписки, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Π΅ Π»ΠΈΠΌΠΈΡ‚Ρ‹ (Π² 2–5 Ρ€Π°Π· Π²Ρ‹ΡˆΠ΅ стандартных) Π½Π° ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ open-weights ΠΌΠΎΠ΄Π΅Π»ΠΈ программирования ΠΈ рассуТдСний Ρ‡Π΅Ρ€Π΅Π· Π΅Π΄ΠΈΠ½Ρ‹ΠΉ OpenAI-совмСстимый интСрфСйс (`https://api.cline.bot/api/v1`). Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ClinePass Π² DeepSeek Harness (DSH) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ сопряТСна со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ слоТностями: 1. **ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ эндпоинта `/v1/models`**: запрос `GET /v1/models` ΠΊ `api.cline.bot` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `404 Not Found`, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ динамичСский поиск ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² DSH ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΈΠ»ΠΈ оставляСт список пустым. 2. **БпСцифичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²**: модСлям трСбуСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прСфикс `cline-pass/` (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `cline-pass/deepseek-v4.1-flash`, `cline-pass/kimi-k3`). 3. **ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΠΌΠΈΡ‚ΠΎΠ²**: 5-часовыС ΠΈ Π½Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠ΅ ΠΎΠΊΠ½Π° расхода Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² интСрфСйсС. 4. **Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ**: Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ API-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… конфигурациях нСбСзопасно. Плагин **`@goodandready/dsh-clinebot`** Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эти Π·Π°Π΄Π°Ρ‡ΠΈ Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ»: * πŸš€ **ОбновлСниС Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ**: ОбновлСниС ΠΏΠ»Π°Π³ΠΈΠ½Π° прямо ΠΈΠ· интСрфСйса DSH ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ loopback-эндпоинт `/dsh-clinebot/update`. * ⚑ **SWR-ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ²ΠΎΡ‚ ΠΈ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ**: ΠœΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ (<2 мс) Π½Π° запросы статуса с Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ UI. * πŸ”€ **Smart Quota-Aware Failover**: АвтоматичСская ротация Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π² ΠΏΡƒΠ»Π΅ ΠΏΡ€ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… 429 ΠΈ исчСрпании ΠΊΠ²ΠΎΡ‚Ρ‹ Π² стримС (с 30-сСкундной Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ ΡˆΡ‚ΠΎΡ€ΠΌΠ°; Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ запрос Π½Π΅ повторяСтся, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы сразу ΠΈΠ΄ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚). * πŸ–₯️ **Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°**: ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ установлСнный ClineBot ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² настройки ΠΏΠ»Π°Π³ΠΈΠ½Π°. Π’Π°ΠΌ имя ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠ²ΠΎΡ‚Π° ΠΈ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° Π±ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ мСню Π½Π΅Ρ‚. * πŸ”„ **ДинамичСская синхронизация ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ подписки**: автоматичСскоС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ списка ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΠ· `GET /api/v1/users/me/plan` ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° DSH Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ. Π’ DSH Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ строго ΠΌΠΎΠ΄Π΅Π»ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚Π°Ρ€ΠΈΡ„Π°, Π° встроСнный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ слуТит справочником характСристик ΠΈ запасным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈ нСдоступности API. * ⚠️ **ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ± исчСрпании ΠΊΠ²ΠΎΡ‚Ρ‹**: Π±Π°Π½Π½Π΅Ρ€Ρ‹ прСдупрСТдСния ΠΏΡ€ΠΈ достиТСнии 80% (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅) ΠΈ 95% (исчСрпано) 5-часового Π»ΠΈΠΌΠΈΡ‚Π° с Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ сброса. * πŸ“ˆ **ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ сСссии**: Π£Ρ‡Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° DSH-Ρ‡Π°Ρ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ClineBot с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуска (ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅, ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ запросы, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ prompt/completion, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° стрима). * πŸ“Š **Π”Π°ΡˆΠ±ΠΎΡ€Π΄ Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² подписки (Usage)**: наглядныС прогрСсс-Π±Π°Ρ€Ρ‹ расхода 5-часового ΠΈ нСдСльного ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ API `GET /users/me/plan/usage-limits`. * πŸ”‘ **Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° прямо ΠΈΠ· UI**: ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΊΠ»ΡŽΡ‡Π° с маскировкой; сохранСниС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² систСмный сСрвис `credentials` (`~/.dsh/.credentials.yaml`) Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСрС. * 🎯 **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ модСлями Π² ΠΏΠΈΠΊΠ΅Ρ€Π΅**: Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ отобраТСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π°Ρ… Ρ‡Π°Ρ‚Π°. * πŸ’¬ **Блэш-ΠΊΠΎΠΌΠ°Π½Π΄Π° `/cline` Π² Ρ‡Π°Ρ‚Π΅**: просмотр остатка ΠΊΠ²ΠΎΡ‚, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, статистики сСссии, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ прямо ΠΈΠ· Ρ‡Π°Ρ‚Π°. --- ## πŸ›οΈ АрхитСктура ```mermaid graph LR subgraph UI [Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DSH] Page["ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ страница (Настройки -> ClineBot)"] QuotaBar["ΠŸΡ€ΠΎΠ³Ρ€Π΅ΡΡ-Π±Π°Ρ€Ρ‹ 5h ΠΈ нСдСльного Π»ΠΈΠΌΠΈΡ‚Π° + Π‘Π°Π½Π½Π΅Ρ€ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ"] KeyInput["Π’Π²ΠΎΠ΄ ΠΈ сохранСниС API-ΠΊΠ»ΡŽΡ‡Π°"] ModelPick["ДинамичСская синхронизация ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠΈΠΊΠ΅Ρ€"] StatsCard["ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ статистика Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сСссии"] end subgraph PluginHost [Π₯ост-Ρ‡Π°ΡΡ‚ΡŒ dsh-clinebot] HttpEndpoints["API: /dsh-clinebot/*"] ClientCore["lib/cline-client.js"] ModelCatalog["lib/models.js (ВстроСнныС + ДинамичСскиС ΠΈΠ· ΠΏΠ»Π°Π½Π°)"] SlashCmd["Блэш-ΠΊΠΎΠΌΠ°Π½Π΄Π°: /cline"] end subgraph DSHCore [БСрвисы DSH] Credentials["БСрвис credentials (~/.dsh/.credentials.yaml)"] end subgraph Upstream [Π‘Π΅Ρ€Π²Π΅Ρ€ Cline] ClinePass["api.cline.bot/api/v1/chat/completions"] ClineQuota["api.cline.bot/api/v1/users/me/plan/usage-limits"] ClinePlan["api.cline.bot/api/v1/users/me/plan"] end Page -->|GET /status & /usage| HttpEndpoints KeyInput -->|POST /save-key| HttpEndpoints ModelPick -->|POST /models/sync| HttpEndpoints HttpEndpoints --> Credentials HttpEndpoints --> ClientCore ClientCore --> ModelCatalog ClientCore -->|Π§Π°Ρ‚| ClinePass ClientCore -->|ΠšΠ²ΠΎΡ‚Ρ‹| ClineQuota ClientCore -->|Π’Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½| ClinePlan ``` --- ## ✨ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ возмоТности * **`lib/models.js`**: динамичСский ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ подписки ΠΈ встроСнных шаблонов с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ рассуТдСния (`Off` / `Low` / `Medium` / `High` / `Max`), контСкстных Π»ΠΈΠΌΠΈΡ‚ΠΎΠ², ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (`customModels`) ΠΈ парсинга Ρ‚Π°Ρ€ΠΈΡ„Π° (`parsePlanIncludedModels`, `getAllModels`, `getDynamicModels`). * **Π¦Π΅Π½Ρ‹ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ**: ΠΊΠ½ΠΎΠΏΠΊΠ° **Ping** Ρƒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ `POST /models/probe` ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ TTFT; ΠΊΠ½ΠΎΠΏΠΊΠ° **ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ** сохраняСт Π²Ρ‹Π±ΠΎΡ€ Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Ρ‚Π°Ρ€ΠΈΡ„Π° Ρ‡Π΅Ρ€Π΅Π· `POST /models/visible`. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ†Π΅Π½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΈΠ· models.dev для Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ; это ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ `priceAutoSync` (ΠΈΠ»ΠΈ `priceAutoSync: false`), ручная синхронизация остаётся доступной. * **`lib/cline-client.js`**: * `fetchUsageLimits`: ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ опрос `GET /users/me/plan/usage-limits`, `GET /users/me/plan` ΠΈ `GET /users/me` с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² памяти. * `sessionStats` / `recordSessionRequest`: счСтчики сСссии (запросы, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, врСмя). * `saveCredentialKey`: атомарная запись ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² `~/.dsh/.credentials.yaml`. * `smokeChat`: Π·Π°ΠΌΠ΅Ρ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ тСстовый ΠΏΠΈΠ½Π³ с фиксациСй статистики. * **`lib/index.js`**: сСрвис Cordis, рСгистрация систСмных ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ `/dsh-clinebot/models/sync`), расчСт ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ² прСдупрСТдСния ΠΊΠ²ΠΎΡ‚Ρ‹ ΠΈ слэш-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `/cline`. * **`lib/client.js`**: страница ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ строки ΠΏΠ»Π°Π³ΠΈΠ½Π° (`plugins.row.config`) с прСдупрСТдСниями, статистикой сСссии, синхронизациСй ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ запасной ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (`settings.plugin.item`). ΠŸΡƒΠ½ΠΊΡ‚Π° `settings.section` Π² Π±ΠΎΠΊΠΎΠ²ΠΎΠΌ мСню Π½Π΅Ρ‚. --- ## πŸ“¦ Установка ```bash dsh plugin --profile web add @goodandready/dsh-clinebot ``` ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ экзСмпляр DeepSeek Harness ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. --- ## πŸ’¬ Блэш-ΠΊΠΎΠΌΠ°Π½Π΄Π° `/cline` Π² Ρ‡Π°Ρ‚Π΅ Π’ любой сСссии Ρ‡Π°Ρ‚Π° Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ `/cline` для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ остатка Π»ΠΈΠΌΠΈΡ‚ΠΎΠ², ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ статистики: ```text ### πŸ€– ClinePass Status (ClinePass) * Пинг хоста: βœ… 210 мс * Активный ΠΊΠ»ΡŽΡ‡: CLINEBOT_API_KEY (credentials) * МодСль ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: `cline-pass/deepseek-v4.1-flash` ⏱ 5-часовоС ΠΎΠΊΠ½ΠΎ: [β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘] 42% (сброс: 18:00) πŸ“… НСдСльноС ΠΎΠΊΠ½ΠΎ: [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘] 60% (сброс: 08.09) * Аккаунт: `developer@example.com` πŸ“ˆ Бтатистика Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сСссии: * Запросов: 14 Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² * Π’ΠΎΠΊΠ΅Π½Ρ‹: ~8,450 (ΠŸΡ€ΠΎΠΌΠΏΡ‚: 6,100 | ΠžΡ‚Π²Π΅Ρ‚: 2,350) * Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° послСднСго ΠΎΡ‚Π²Π΅Ρ‚Π°: 210 мс ``` --- ## βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ (Настройки DSH ΠΈ Web UI) Π’ соврСмСнном DeepSeek Harness (0.1.7+) настройки ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ Π² Web UI ΠΈΠ»ΠΈ `PUT /dsh-clinebot/config`, Π° сСкрСтныС ΠΊΠ»ΡŽΡ‡ΠΈ бСзопасно хранятся Π² DSH Credentials (`~/.dsh/.credentials.yaml`). ```yaml dsh-clinebot: enabled: true baseUrl: https://api.cline.bot/api/v1 apiKeyEnv: CLINEBOT_API_KEY defaultModel: your-default-model disabledModels: [] customModels: [] modelReasoningDefaults: your-reasoning-model: high modelContextOverrides: [] statsPath: ~/.dsh/clinebot-stats.json statsRetentionDays: 95 dailyBudgetUsd: 0 monthlyBudgetUsd: 0 timeoutMs: 30000 smokeTimeoutMs: 60000 streamIdleTimeoutMs: 60000 accounts: - label: Team Key apiKeyEnv: CLINEBOT_API_KEY_2 ``` ### ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ | ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС | |:---|:---|:---|:---| | `enabled` | `boolean` | `true` | Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ моста ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ClineBot Π² DSH | | `baseUrl` | `string` | `"https://api.cline.bot/api/v1"` | Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ URL OpenAI-совмСстимого API ClinePass | | `apiKeyEnv` | `string` | `"CLINEBOT_API_KEY"` | Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ / ΠΊΠ»ΡŽΡ‡Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ credentials | | `defaultModel` | `string` | `"cline-pass/deepseek-v4.1-flash"` | МодСль, выбираСмая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Ρ‡Π°Ρ‚Π° ΠΈ smoke-тСстов | | `disabledModels` | `array` | `[]` | Бписок ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ подписки Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ автоматичСски) | | `customModels` | `array` | `[]` | ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ шлюза (`[{ id, name, contextLength, maxTokens, category, isReasoning }]`) | | `modelReasoningDefaults` | `object` | `{}` | ЗначСния thinking effort ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (`low`, `medium`, `high`, `max`) | | `modelContextOverrides` | `array` | `[]` | ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ пСрСопрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° контСкста ΠΈ Π»ΠΈΠΌΠΈΡ‚Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² | | `statsPath` | `string` | `"~/.dsh/clinebot-stats.json"` | ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ пСрсистСнтной Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ использования Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² | | `statsRetentionDays` | `number` | `95` | Π‘Ρ€ΠΎΠΊ хранСния Π΄Π½Π΅Π²Π½ΠΎΠΉ/часовой/сСссионной Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ; 0 β€” Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всё | | `dailyBudgetUsd` | `number` | `0` | ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π½Π΅Π²Π½ΠΎΠΉ Π»ΠΈΠΌΠΈΡ‚ ΠΎΡ†Π΅Π½ΠΎΡ‡Π½Ρ‹Ρ… Ρ‚Ρ€Π°Ρ‚; 0 ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ | | `monthlyBudgetUsd` | `number` | `0` | ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ мСсячный Π»ΠΈΠΌΠΈΡ‚ ΠΎΡ†Π΅Π½ΠΎΡ‡Π½Ρ‹Ρ… Ρ‚Ρ€Π°Ρ‚; 0 ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ | | `accounts` | `array` | `[]` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ для Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΊΠ²ΠΎΡ‚Ρ‹ ΠΈ failover (`[{ label, apiKeyEnv }]`) | | `activeAccount` | `string` | `""` | ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½Ρ‹ΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ (пусто для автоматичСского Π²Ρ‹Π±ΠΎΡ€Π° least-used) | | `timeoutMs` | `number` | `15000` | Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ HTTP-запросов (мс) | | `smokeTimeoutMs` | `number` | `25000` | Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ тСстового ΠΏΠΈΠ½Π³Π° инфСрСнса (мс) | | `streamIdleTimeoutMs` | `number` | `30000` | Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ оТидания ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Π°Π½ΠΊΠ°ΠΌΠΈ SSE-ΠΏΠΎΡ‚ΠΎΠΊΠ° (мс) | | `enabledModels` | `array` | *(устарСло)* | Волько для чтСния Π² public config; отклоняСтся ΠΏΡ€ΠΈ `PUT /config` Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ `disabledModels` | | `dynamicModels` | `array` | `[]` | ДинамичСскиС ΠΌΠΎΠ΄Π΅Π»ΠΈ, автоматичСски синхронизированныС ΠΈΠ· Ρ‚Π°Ρ€ΠΈΡ„Π° | --- ## 🌐 ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ HTTP API ВсС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с прСфиксом `/dsh-clinebot/*` ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ мСТсайтовых запросов (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ same-origin ΠΈ loopback). Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ эндпоинты ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Π»ΠΈΠΌΠΈΡ‚ΠΎΠΌ 256 ΠšΠΈΠ‘: ### Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ эндпоинты (макс. 256 ΠšΠΈΠ‘) * `GET /dsh-clinebot/status` β€” Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚, ΠΊΠ²ΠΎΡ‚Ρ‹ ΠΈ статистика сСссий. * `GET /dsh-clinebot/config` β€” ДиагностичСский ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ (Π±Π΅Π· сСкрСтов). * `PUT /dsh-clinebot/config` β€” ОбновлСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ `enabledModels` блокируСтся). * `POST /dsh-clinebot/key/verify` β€” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° API-ΠΊΠ»ΡŽΡ‡Π° Π½Π° сСрвСрС `api.cline.bot` с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ email ΠΈ Ρ‚Π°Ρ€ΠΈΡ„Π°. * `POST /dsh-clinebot/save-key` β€” Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° Π² сСрвис credentials DSH ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ `CLINEBOT_API_KEY*`. * `POST /dsh-clinebot/models/sync` β€” Бинхронизация списка ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠΌ ClinePass. * `POST /dsh-clinebot/models/toggle` β€” Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· `disabledModels` с сохранСниСм Volatile-ссылок. * `POST /dsh-clinebot/models/custom` / `DELETE /dsh-clinebot/models/custom` β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ модСлями. * `POST /dsh-clinebot/models/context` / `DELETE /dsh-clinebot/models/context` β€” ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ контСкстного ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. * `POST /dsh-clinebot/accounts` β€” Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π² ΠΏΡƒΠ» Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ. * `POST /dsh-clinebot/accounts/delete` β€” Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° с Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ сСкрСтного ΠΊΠ»ΡŽΡ‡Π°. * `POST /dsh-clinebot/accounts/active` β€” НазначСниС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° ΠΈΠ· ΠΏΡƒΠ»Π° (ΠΈΠ»ΠΈ пусто для auto least-used). * `POST /dsh-clinebot/stats/reset` β€” Бброс счётчиков запросов ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². * `POST /dsh-clinebot/smoke` β€” Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ тСстового ΠΏΠΈΠ½Π³Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. * `GET /dsh-clinebot/update/status` β€” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π°. * `POST /dsh-clinebot/update/apply` β€” ОбновлСниС ΠΏΠ»Π°Π³ΠΈΠ½Π° с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π³Ρ€ΡƒΠΏΠΏ процСссов ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ профиля. --- ## πŸ§ͺ ВСстированиС Запуск автоматичСского Π½Π°Π±ΠΎΡ€Π° тСстов: ```bash npm test ``` --- ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY)