# πŸ“¦ @goodandready/dsh-subscriptions

ΠœΠΎΡΡ‚ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… подписок Π½Π° ИИ, ротация ΠΏΡƒΠ»Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² ΠΈ бСзопасный OAuth Π±Π΅Π· ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² для DeepSeek Harness

npm version license DSH Plugin Node version

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

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

--- ## ⚑ ΠžΠ±Π·ΠΎΡ€ **`dsh-subscriptions`** ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ваши ΠΏΠ»Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ подписки Π½Π° нСйросСти Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² **DeepSeek Harness** Π² качСствС ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… LLM-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². ВмСсто ΠΏΠΎΠΌΠΈΠ½ΡƒΡ‚Π½ΠΎΠΉ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Π΄ΠΎΡ€ΠΎΠ³ΠΈΡ… API-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для повсСднСвных Π·Π°Π΄Π°Ρ‡ Π°Π³Π΅Π½Ρ‚Π°, ΠΏΠ»Π°Π³ΠΈΠ½ позволяСт Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваши ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Π±-подписки Ρ‡Π΅Ρ€Π΅Π· бСзопасный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» OAuth PKCE. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ **ΠΏΡƒΠ»Ρ‹ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ²** с автоматичСской Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΈ исчСрпании Π»ΠΈΠΌΠΈΡ‚ΠΎΠ², **ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ²ΠΎΡ‚** ΠΈ **внутрипроцСссный сСрвис Cordis (`ctx.subscriptions`)**, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΈΡ‚Π°Π΅Ρ‚ сосСдниС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, [`dsh-image-gen`](https://github.com/GooDAnDReaDY/dsh-image-gen) ΠΈ [`dsh-grok-xsearch`](https://github.com/GooDAnDReaDY/dsh-grok-xsearch)) Π±Π΅Π· ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π² ΡΠ΅Ρ‚ΡŒ. ```mermaid graph LR subgraph DSHCore [БСссия Π΄ΠΈΠ°Π»ΠΎΠ³Π° DeepSeek Harness] Agent[πŸ€– Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ Π°Π³Π΅Π½Ρ‚ΠΎΠΌ] --> Router{ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²} end subgraph SubscriptionsCore [Π―Π΄Ρ€ΠΎ dsh-subscriptions] Router --> Pool{ΠŸΡƒΠ» Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π²Π΅Π½Π΄ΠΎΡ€Π°} Pool -->|Аккаунт 1| Acc1[πŸ‘€ Основной Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚: АктивСн] Pool -->|Аккаунт 2| Acc2[πŸ‘€ Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚: ОТиданиС] Pool -->|Аккаунт 3| Acc3[πŸ‘€ Запасной Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚: Cooldown] Acc1 -->|HTTP 429 / ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ²ΠΎΡ‚Ρ‹| Rotate[Π£ΠΌΠ½Ρ‹ΠΉ Ρ€ΠΎΡ‚Π°Ρ‚ΠΎΡ€ ΠΊΠ²ΠΎΡ‚ ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ] Rotate -->|ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°| Acc2 end subgraph VendorBridges [4 АдаптСра Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ²] Acc1 --> B1[БэкСнд ChatGPT / Codex] Acc1 --> B2[ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Claude Pro / Max] Acc1 --> B3[Подписки xAI / Grok] Acc1 --> B4[Google Cloud Code Assist / Antigravity] end subgraph EcosystemBridge [БСрвис Cordis: ctx.subscriptions] Pool --> ImgGen[dsh-image-gen: БСсплатная гСнСрация ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ] Pool --> XSearch[dsh-grok-xsearch: Поиск Π² X Twitter] end style DSHCore fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4 style SubscriptionsCore fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4 style VendorBridges fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4 style EcosystemBridge fill:#181825,stroke:#f38ba8,stroke-width:2px,color:#cdd6f4 ``` --- ## ✨ ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности ### 1. 🌐 16 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… встроСнных Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ² подписок | ΠšΠ»ΡŽΡ‡ Π²Π΅Π½Π΄ΠΎΡ€Π° | Π’Π°Ρ€ΠΈΡ„ подписки | ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈ возмоТности | |---|---|---| | `codex` | ChatGPT Plus / Pro | Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠ½Π³ Codex, Π²Ρ‹Π·ΠΎΠ² инструмСнтов ΠΈ гСнСрация ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ (`/backend-api/codex/...`) | | `claude` | Claude Pro / Max | Нативный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Claude Messages, Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³ расхода (`/v1/messages`, `/api/oauth/...`) | | `grok` | xAI / X Premium | ΠžΡ‚Π²Π΅Ρ‚Ρ‹ с рассуТдСниями, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° баланса ΠΈ поиск Π² соцсСти | | `antigravity` | Google Cloud Code Assist | Π”Π²ΠΈΠΆΠΎΠΊ Antigravity (`/v1/loadCodeAssist`, `/v1/streamGenerateContent`) | | `kimi` | Moonshot Kimi | Π’Ρ…ΠΎΠ΄ ΠΏΠΎ OAuth Device Flow (`auth.kimi.com`), OpenAI-совмСстимый Ρ‡Π°Ρ‚ | | `glm` | Z.ai GLM Coding Plan | Кодинг-эндпоинт GLM (`api.z.ai`), ΠΆΠΈΠ²ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΊΠ²ΠΎΡ‚Ρ‹ (`/api/monitor/usage/quota/limit`) | | `cursor` | Cursor | БэкСнд Cursor (`api2.cursor.sh`), Ρ€Π°Π·Π±ΠΎΡ€ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄Π° расхода Π·Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ | | `kiro` | AWS Kiro | ДСсктопный OAuth Kiro (`app.kiro.dev`), стриминг ΠΊΠΎΠ΄Π° | | `copilot` | GitHub Copilot | Π’Ρ…ΠΎΠ΄ ΠΏΠΎ GitHub Device Flow (`github.com/login/device`), chat completions Copilot | | `qwen` | Alibaba Qwen (DashScope) | OpenAI-совмСстимый эндпоинт (`dashscope.aliyuncs.com/compatible-mode/v1`), Π²Ρ…ΠΎΠ΄ ΠΏΠΎ API-ΠΊΠ»ΡŽΡ‡Ρƒ | | `ernie` | Baidu ERNIE (Qianfan) | ΠŸΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ OAuth2-Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΏΠΎ связкС API Key + Secret Key, Ρ‡Π°Ρ‚ Wenxinworkshop | | `spark` | iFlytek Spark | OpenAI-совмСстимый HTTP API Spark (`spark-api-open.xf-yun.com/v1`) | | `jetbrains` | JetBrains AI Assistant | Π Π΅Π»Π΅ΠΉ JetBrains AI (`api.jetbrains.ai`) | | `perplexity` | Perplexity Pro | ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Sonar (`api.perplexity.ai`) | | `replit` | Replit Core | Replit AI API (`replit.com/api/v1/ai`), Π²Ρ…ΠΎΠ΄ ΠΏΠΎ connect-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ | | `cody` | Sourcegraph Cody Pro | Sourcegraph API (`sourcegraph.com/.api`), Π²Ρ…ΠΎΠ΄ ΠΏΠΎ access-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ | *Π’Π°ΠΊΠΆΠ΅ поддСрТиваСтся рСгистрация кастомных Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ `createVendorFromProfile`.* --- ### 2. πŸ”„ Ротация Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² (`rotate.js`, `ratelimit.js`) * **ΠŸΡƒΠ»Ρ‹ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ²**: привязка Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π½Π° Π²Π΅Π½Π΄ΠΎΡ€Π° (`CODEX_OAUTH_1`, `CODEX_OAUTH_2`...). * **АвтоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ 429**: ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ Π»ΠΈΠΌΠΈΡ‚Π° запросов Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ свободный Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚. * **Π£ΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ²ΠΎΡ‚ (`switchAtRemaining`)**: смСна Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π΄ΠΎ падСния Π² ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли ΠΎΠΊΠ½ΠΎ сброса Π±Π»ΠΈΠ·ΠΊΠΎ. * **ДинамичСский расчёт Cooldown**: парсинг Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² `Retry-After`, `x-ratelimit-reset`, Π΄Π°Ρ‚ ISO ΠΈ миллисСкундных ΠΌΠ΅Ρ‚ΠΎΠΊ с автоматичСским Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ ΠΎΡΡ‚Ρ‹Π²ΡˆΠΈΡ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π² строй. --- ### 3. πŸ”’ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ авторизация Π½Π° headless-сСрвСрах * **НулСвая ΡƒΡ‚Π΅Ρ‡ΠΊΠ° Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²**: Ρ‚ΠΎΠΊΠ΅Π½ OAuth **Π½ΠΈΠΊΠΎΠ³Π΄Π°** Π½Π΅ отдаётся Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ HTTP API. Π’ интСрфСйсС Π²ΠΈΠ΄Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статус, имя ΠΈ остаток ΠΊΠ²ΠΎΡ‚Ρ‹. * **Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ хоста**: Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΡˆΠΈΡ„Ρ€ΡƒΡŽΡ‚ΡΡ Π² `$DSH_HOME/.credentials.yaml`. * **Π’Ρ…ΠΎΠ΄ Π±Π΅Π· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (SSH / Remote)**: Ссли сСрвСр Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎ, Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ, просто вставив ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ redirect URL ΠΈΠ»ΠΈ authorization code Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°. * **Π€ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²**: ΠΏΠ»Π°Π³ΠΈΠ½ автоматичСски обновляСт Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π΄ΠΎ истСчСния ΠΈΡ… срока дСйствия. --- ### 4. 🧩 ВнутрипроцСссный сСрвис Cordis (`ctx.subscriptions`) Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ подписки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² памяти: ```javascript // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· dsh-image-gen: const res = await ctx.subscriptions.request('codex', '/backend-api/codex/images/generations', { method: 'POST', body: JSON.stringify({ prompt: 'Cyberpunk landscape', size: '1024x1024' }), }) ``` * **НулСвой ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄**: прямоС ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… HTTP-запросов. * **Π‘Π΅Π»Ρ‹ΠΉ список ΠΏΡƒΡ‚Π΅ΠΉ (`ALLOWLIST`)**: строгий ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… эндпоинтов для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ SSRF. --- ### 5. πŸ” Π’Ρ…ΠΎΠ΄ Π±Π΅Π· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°: loopback ΠΈ device-ΠΊΠΎΠ΄ (`v0.4.9`) * **АвтоматичСский loopback-callback (`autoLoopback`, Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)**: Ссли redirect_uri Π²Π΅Π½Π΄ΠΎΡ€Π° β€” loopback-адрСс (Codex `:1455`, Grok `:56121`), ΠΏΠ»Π°Π³ΠΈΠ½ сам ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ HTTP-сСрвСр ΠΈ Π»ΠΎΠ²ΠΈΡ‚ callback Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠΉ вставки ссылки. Ручная вставка остаётся ΠΊΠ°ΠΊ запасной ΠΏΡƒΡ‚ΡŒ. * **Π’Ρ…ΠΎΠ΄ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ устройства (Codex)**: Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ headless-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Π½Π°ΠΆΠΌΠΈΡ‚Π΅ **Device login** Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Codex: ΠΏΠ»Π°Π³ΠΈΠ½ запросит ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° `auth.openai.com`, Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ `https://auth.openai.com/codex/device` с любого устройства, Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ β€” ΠΏΠ»Π°Π³ΠΈΠ½ сам Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ стандартный PKCE-ΠΎΠ±ΠΌΠ΅Π½. * **ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π½Π° мСстС**: redirect Π½Π° origin Π²Π΅Π±-интСрфСйса (`useWebCallback`) ΠΈ ручная вставка адрСса/ΠΊΠΎΠ΄Π° доступны ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅. ### 6. 🌍 Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ HTTP/SOCKS-прокси Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ (`v0.4.9`) * **ΠŸΡ€ΠΎΠΊΡΠΈ Π½Π° слот (`proxyUrl`)**: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ свой адрСс `http://`, `https://`, `socks5://[user:pass@]host:port`. Π§Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ ΠΈΠ΄ΡƒΡ‚ всС запросы Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° β€” ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Π΅Π½Π΄ΠΎΡ€Π°, запросы ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠŸΡƒΡΡ‚ΠΎ = прямоС соСдинСниС. * **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ**: ΠΊΠ½ΠΎΠΏΠΊΠ° **Check proxy** Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ запрос ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ URL Π²Π΅Π½Π΄ΠΎΡ€Π° Ρ‡Π΅Ρ€Π΅Π· прокси ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ΠΎΡ‚ΠΊΠ°Π·Π°. * **Π’Π°ΠΉΠΌΠΈΠ½Π³ΠΈ Π² истории**: каТдая запись истории запросов Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (`ms`) β€” ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ прямоС соСдинСниС ΠΈ прокси. ### 7. πŸ•ΆοΈ Π Π΅ΠΆΠΈΠΌ приватности ΠΈ диагностичСский ΠΎΡ‚Ρ‡Ρ‘Ρ‚ (`v0.4.9`) * **ΠœΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (`privacyMask`)**: ΠΎΠ΄ΠΈΠ½ Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ настроСк скрываСт ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ всём интСрфСйсС: email отобраТаСтся ΠΊΠ°ΠΊ `j***n@example.com` (списки Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ², статусы, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ). ΠœΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСтся Π½Π° сСрвСрС β€” Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡƒΡ‚Π΅ΠΊΡƒΡ‚ ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ API; сами Π΄Π°Π½Π½Ρ‹Π΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ этом Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Π—Π°Π΄ΡƒΠΌΠ°Π½ΠΎ для дСмонстраций экрана ΠΈ стримов. * **Анонимизированный диагностичСский ΠΎΡ‚Ρ‡Ρ‘Ρ‚**: Π±Π»ΠΎΠΊ **Generate diagnostics report**: ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ β€” ΠΎΡ‚Ρ‡Ρ‘Ρ‚ (вСрсии ΠΏΠ»Π°Π³ΠΈΠ½Π°/Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ°, ОБ, счётчики Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΏΠΎ Π²Π΅Π½Π΄ΠΎΡ€Π°ΠΌ, Π°Π³Ρ€Π΅Π³Π°Ρ‚Ρ‹ HTTP-статусов, послСдниС ошибки β‰₯400 с Ρ‚Π°ΠΉΠΌΠΈΠ½Π³Π°ΠΌΠΈ, Π½Π΅-сСкрСтныС настройки) скачан ΠΈ скопирован Π² Π±ΡƒΡ„Π΅Ρ€. Π’ΠΎΠΊΠ΅Π½Ρ‹, email, ΠΈΠΌΠ΅Π½Π° ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… записСй ΠΈ адрСса прокси ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ (ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΎ тСстами). * **Π“ΠΎΡ‚ΠΎΠ²ΠΎ для issue**: рядом ссылка Π½Π° Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€ Π·Π°Π΄Π°Ρ‡ β€” Π±Π°Π³-Ρ€Π΅ΠΏΠΎΡ€Ρ‚ это Β«ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β†’ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ β†’ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΒ». ### 8. πŸ”Œ HTTP API (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² `v0.4.9`) | ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ | ΠœΠ΅Ρ‚ΠΎΠ΄ | НазначСниС | |---|---|---| | `/dsh-subscriptions/diagnostics` | GET | Анонимизированный диагностичСский ΠΎΡ‚Ρ‡Ρ‘Ρ‚ (Π±Π΅Π· сСкрСтов, Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈ адрСсов прокси) | | `/dsh-subscriptions/proxy-check` | POST | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ прокси слота Ρ‡Π΅Ρ€Π΅Π· Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ URL Π²Π΅Π½Π΄ΠΎΡ€Π° | | `/dsh-subscriptions/oauth/device/start` | POST | ΠΠ°Ρ‡Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄ Codex ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ устройства (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ адрСс подтвСрТдСния) | | `/dsh-subscriptions/oauth/device/poll` | POST | ΠžΠΏΡ€ΠΎΡ статуса Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ устройства | --- ### 9. πŸ¦› Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ шлюз Ollama ΠΈ Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹ΠΉ фолбэк (`v0.4.17`) * **Нативный ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ (`ollama`)**: Ссли Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ollama доступСн ΠΏΠΎ `ollamaBaseUrl` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `http://127.0.0.1:11434`), ΠΎΠ½ появляСтся Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ сСлСкторС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ DSH с модСлями ΠΈΠ· `/api/tags`. ΠšΠ»ΡŽΡ‡ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. * **Π‘Π΅ΡΡˆΠΎΠ²Π½Ρ‹ΠΉ фолбэк (`ollamaFallback`, Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)**: ΠΊΠΎΠ³Π΄Π° всС Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° исчСрпаны (ΠΈΠ»ΠΈ нСдоступны) ΠΈ Π΅Ρ‰Ρ‘ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ, Ρ‡Π°Ρ‚ продолТаСтся Π½Π° локальной ΠΌΠΎΠ΄Π΅Π»ΠΈ (`ollamaFallbackModel`, Π»ΠΈΠ±ΠΎ пСрвая ΠΈΠ· `/api/tags`). Ѐолбэк ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΠΆΡƒΡ€Π½Π°Π» ΠΈ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ запросов ΠΊΠ°ΠΊ `kind: fallback`. * **БСсплатный ($0) Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ**: Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ Π±Π΅Π· ΠΊΠ²ΠΎΡ‚ β€” ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΎΡ„Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎ. ### 10. ⚑ Effort, Verbosity ΠΈ Fast Mode (`v0.4.17`) * **Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ рассуТдСний (Effort)**: ΠΌΠΎΠ΄Π΅Π»ΠΈ Codex ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΈΠ· ΠΆΠΈΠ²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°; Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ сСлСктор Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€, ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ пСрСдаётся ΠΊΠ°ΠΊ `reasoning.effort` Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» `/responses`. Grok ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ effort со своСй ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³-осознанной Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. * **ДСтализация (`codexVerbosity`)**: `low` / `medium` / `high` пСрСдаётся ΠΊΠ°ΠΊ `text.verbosity` для reasoning-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Codex. ΠŸΡƒΡΡ‚ΠΎ = Π΄Π΅Ρ„ΠΎΠ»Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. * **Fast Mode (`codexFastMode`)**: c ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Codex-запросом пСрСдаётся `service_tier: priority` (ΠΏΠ»Π°Ρ‚Π½Ρ‹ΠΉ скоростной Ρ‚ΠΈΡ€ 1.5x). Π’ Ρ‡ΠΈΠΏΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ подписки ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ отобраТаСтся `⚑`. ### 11. 🚦 ΠšΡƒΠ»Π΄Π°ΡƒΠ½Ρ‹ ΠΏΠΎ сСмСйствам ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (`v0.4.17`) * **Reasoning vs Standard**: 429 Π½Π° reasoning-ΠΌΠΎΠ΄Π΅Π»ΠΈ (claude `*thinking*`, grok `*reasoning*`, всС codex-ΠΌΠΎΠ΄Π΅Π»ΠΈ) ΠΎΡ…Π»Π°ΠΆΠ΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСмСйство reasoning этого Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° β€” standard-ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Legacy-ΠΊΡƒΠ»Π΄Π°ΡƒΠ½Ρ‹ (ΠΎΡ‚ старых вСрсий) ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ вСсь Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π΄ΠΎ истСчСния. * **Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ (`hideDeprecatedModels`)**: ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСлСктора id с `test`/`preview`/`dev`/`alpha`/`beta`/`legacy` (дСйствуСт ΠΈ Π½Π° ΠΆΠΈΠ²Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, ΠΈ Π½Π° статичный фолбэк). ### 12. ⚑ Π”ΠΈΠ·Π°ΠΉΠ½ Π² стилС ClineBot ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ тСлСмСтрия (`v0.6.6`) * **Π‘Ρ‚Ρ€ΠΎΠΊΠ° статуса с Π±Π΅ΠΉΠ΄ΠΆΠ°ΠΌΠΈ**: ΠœΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΌΠ΅Ρ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ хоста (`Host online (XX ms)`), количСство Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π°. * **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Smoke Test (Ping)**: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° связи с ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ с ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° Π² миллисСкундах. * **ПанСль Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ сСссии**: 4 ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ (ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ…/всСго запросов, срСдняя Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ, послСдняя Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ). * **ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ подписок**: ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ контСкста (128k, 200k, 1M) ΠΈ Ρ‚Π΅Π³Π°ΠΌΠΈ возмоТностСй. * **Асинхронная история**: ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ дСбаунсинг записи `HistoryStore`, ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ просадки event loop ΠΏΡ€ΠΈ интСнсивном стримингС. --- ## πŸ“¦ Быстрая установка ```bash dsh plugin --profile web add @goodandready/dsh-subscriptions ``` --- > [!TIP] > **ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° настроСк Π² UI vs Настройки Π² YAML**: > ВсС основныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (слоты Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ autoLoopback, privacyMask, ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ composerQuota, ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ expiryNotifyDays, codexFastMode, codexVerbosity, ollamaFallback/baseUrl/model, ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ cooldown ΠΈ probe) Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Web UI: **«Настройки β†’ ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ β†’ Настройки ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² β†’ SubscriptionsΒ»**. НизкоуровнСвыС ΠΎΠ²Π΅Ρ€Ρ€Π°ΠΉΠ΄Ρ‹ (собствСнныС OAuth Client ID / Redirect URI, Base URL для прокси, кастомныС Π²Π΅Π½Π΄ΠΎΡ€Ρ‹) Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² `settings.yaml`. ## βš™οΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (`settings.yaml`) ```yaml dsh-subscriptions: switchAtRemaining: 1 cooldownMs: 60000 autoLoopback: true # v0.4.9: автоматичСски Π»ΠΎΠ²ΠΈΡ‚ΡŒ loopback-callback privacyMask: false # v0.4.9: ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ email ΠΈ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ записи Π² UI ollamaBaseUrl: http://127.0.0.1:11434 # v0.4.17: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ шлюз Ollama ollamaFallback: true # v0.4.17: Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹ΠΉ фолбэк ΠΏΡ€ΠΈ исчСрпании всСх Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² ollamaFallbackModel: '' # v0.4.17: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ qwen2.5-coder; пусто = пСрвая модСль ΠΈΠ· /api/tags hideDeprecatedModels: false # v0.4.17: Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ test/preview/beta/legacy id ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ codexVerbosity: '' # v0.4.17: low | medium | high (text.verbosity) codexFastMode: false # v0.4.17: service_tier priority (скоростной Ρ‚ΠΈΡ€ 1.5x) composerQuota: 'off' # v0.4.18: ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² строкС Π²Π²ΠΎΠ΄Π°: off | percent | bar | forecast # Поля слота (v0.4.9): expiresAt (ms), proxyUrl (http/https/socks5://) accounts: codex: - ref: CODEX_OAUTH_1 label: "Π Π°Π±ΠΎΡ‡ΠΈΠΉ Pro-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚" - ref: CODEX_OAUTH_2 label: "Π›ΠΈΡ‡Π½Ρ‹ΠΉ Plus-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚" claude: - ref: CLAUDE_OAUTH_1 label: "Claude Max" grok: - ref: GROK_OAUTH_1 label: "X Premium" ``` --- ## 🧠 АдаптивноС ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ Claude ΠΈ ΡƒΡ€ΠΎΠ²Π½ΠΈ усилия (Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.6.7) ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Anthropic (`thinking: { type: "adaptive" }`) ΠΈ управлСния Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ рассуТдСний (`output_config: { effort }`): - **ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ**: АвтоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ усилия для Opus 4.6+, Opus 4.7+, Opus 5 (`low`, `medium`, `high`, `xhigh`, `max`) ΠΈ Sonnet 4.6+, Sonnet 5 (`low`, `medium`, `high`). - **БСзопасный фоллбэк**: МодСли Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ рассуТдСния (Haiku, Fable, 4.5 ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅) Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ошибок Anthropic API (400 Bad Request). - **ДинамичСский ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³**: Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ рСгистрируСтся сСкция `reasoning.efforts`, доступная для Π²Ρ‹Π±ΠΎΡ€Π° Π² интСрфСйсС DeepSeek Harness. --- ## 🌐 Двуязычная локализация (EN / ZH) ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² (Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.6.8) - **Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ**: ВстроСнный интСрфСйс стал Π½Π° 100% двуязычным β€” прСдоставлСны ΠΏΠΎΠ»Π½Ρ‹Π΅ словари ΠΈ инструкции Π½Π° английском (`en`) ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΌ китайском (`zh`) языках. - **Π’Π½Π΅ΡˆΠ½ΡΡ русификация**: РусскиС строки ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΡ‚ исходного ΠΊΠΎΠ΄Π° ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ динамичСски Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ русификации (`dsh-russian-lang`). - **Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°**: Кнопка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ слота измСряСт Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ (`latencyMs`) ΠΈ статус Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°. --- ## πŸš€ ОбновлСниС Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.6.9) - **ВстроСнный Π°ΠΏΠ΄Π΅ΠΉΡ‚Π΅Ρ€ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ**: Ѐоновая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… вСрсий Π² npm registry ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° мСстС ΠΏΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρƒ `/dsh-subscriptions/update` Ρ‡Π΅Ρ€Π΅Π· хостовый CLI DSH (`dsh plugin add`). - **Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° эндпоинта**: Бтрогая вСрификация loopback-адрСсов (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° IPv4 `127.0.0.1`, IPv6 `::1`, `localhost`), валидация Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° `x-dsh-plugin-update` ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ CSRF/cross-origin запросов. - **Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² шапкС ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° обновлСния**: Π’ строкС состояния ΠΏΠ°Π½Π΅Π»ΠΈ отобраТаСтся тСкущая вСрсия, Π±Π΅ΠΉΠ΄ΠΆ наличия обновлСния ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° быстрого обновлСния (Β«Update β†’ vX.Y.ZΒ») с ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎ пСрСзапускС слуТбы. - **Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹ ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ**: ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания запросов баланса ΠΈ smoke-тСстов Π΄ΠΎ 15 сСкунд (`AbortSignal.timeout(15_000)`), ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ зависаниС сокСтов ΠΏΡ€ΠΈ нСдоступности Π²Π½Π΅ΡˆΠ½ΠΈΡ… API. - **Нормализация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ дСдупликация**: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° алиасов ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² `provider || vendor` ΠΈ `index || accountIndex` Π² статусных ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ устранСниС Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½ΠΎΡ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π² `lib/accounts.js`. --- --- ## πŸ›‘οΈ Нормализация расхода Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ сСссий (Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.6.12) - **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ поврСТдСния сСссий (GitHub #4)**: УстранСна критичСская ошибка, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сСссии с модСлями ChatGPT Codex ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π°Π»ΠΈΡΡŒ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π»ΠΈΡΡŒ послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с ошибкой `received NaN, expected number on uncachedInputTokens and outputTokens`. - **ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠ°Ρ нормализация `TokenUsage`**: Π’Π½Π΅Π΄Ρ€Π΅Π½Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ функция `toTokenUsage()` Π²ΠΎ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°Ρ… (`codexResponsesStream`, `openaiChatStream`, `anthropicStream`, `googleStream`) для привСдСния вСндорских структур ΠΊ стандартному интСрфСйсу DSH `TokenUsage` (`inputTokens`, `outputTokens`, `cacheReadTokens`, `cacheWriteTokens`, `reasoningTokens`, `totalTokens`). - **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ `NaN` ΠΈ disjoint-расчСт**: ВсС значСния Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ приводятся ΠΊ Ρ†Π΅Π»Ρ‹ΠΌ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числам (с бСзопасным fallback Π² `0`, Π±Π΅Π· `NaN` ΠΈ `undefined`). Для ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… кэш с ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠΌ, автоматичСски вычисляСтся Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм Π½Π΅ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. - **Π­ΡˆΠ΅Π»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈ валидация Ρ‡Π°Π½ΠΊΠΎΠ² расхода Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ `SubscriptionAdapter`, ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΆΡƒΡ€Π½Π°Π» ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ сСссий DSH. --- ## πŸ”’ Π—Π°Ρ‰ΠΈΡ‚Π° OAuth Client ID ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ссылок (Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.6.11) - **Π—Π°Ρ‰ΠΈΡ‚Π° OAuth Client ID (GitHub #2)**: uildAuthorizeUrl ΠΈ ntigravity.authorizeUrl Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ строго Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ нСпустой clientId. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ Π·Π°Π΄Π°Π½, сСрвСр Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ явный ΠΊΠΎΠ΄ ошибки HTTP 400 (missing_client_id), Π° интСрфСйс Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ подсказку с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ntigravityClientId Π² настройках ΠΈΠ»ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ Β«πŸ“₯ Из CLIΒ», прСдотвращая ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ Π±ΠΈΡ‚Ρ‹Ρ… запросов Π² Google OAuth. - **Π‘Π΅ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² схСмС настроСк**: Π’ схСму Config Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ ntigravityClientSecret для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Client Secret рядом с ntigravityClientId с автоматичСским маскированиСм Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ API. - **Актуализация ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° Zhipu GLM (GitHub #3)**: Бсылка Π½Π° консоль API-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Zhipu GLM ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс (https://bigmodel.cn/usercenter/proj-mgmt/apikeys), устраняя ΠΎΡˆΠΈΠ±ΠΊΡƒ 404 («鑡青跑丒啦!!»), Π²Ρ‹Π·Π²Π°Π½Π½ΡƒΡŽ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π²Π΅Π½Π΄ΠΎΡ€Π°. --- ## πŸ›‘οΈ ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ стандарты качСства (Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² v0.6.10) - **Бтруктурированная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок**: УстранСны всС пустыС Π±Π»ΠΎΠΊΠΈ catch Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° бСзопасный Ρ…Π΅Π»ΠΏΠ΅Ρ€ `bestEffort` с диагностичСским Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. - **Нативный Π»ΠΎΠ³Π³Π΅Ρ€ контСкста**: ВсС Π²Ρ‹Π·ΠΎΠ²Ρ‹ логирования ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ подсистСму Cordis `ctx.logger('subscriptions')`. - **Π—Π°Ρ‰ΠΈΡ‚Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°ΠΌΠΈ**: ВсС сСтСвыС ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΊ API Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ² (`listModels`, `fetchFor`, `quotaFetch`, `jsonTokenRequest`) Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· `fetchWithTimeout` ΠΈ `AbortSignal.timeout`. - **БСмантичСская UI-тСмизация**: БтатичСскиС Ρ†Π²Π΅Ρ‚Π° ΠΈ rgba-значСния Π² `client.js` Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½-систСмы DeepSeek Harness (`--dsw-alias-*`, `color-mix`), достигнут 0 остаточных `rgba`. - **ДСкларация клиСнтских зависимостСй**: Π—Π°Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚Ρ‹ (`@deepseek-ai/dsh-client-locale`, `@deepseek-ai/dsh-client-ui-slots`) Π² манифСстС `package.json`. - **Чистота ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСпозитория**: Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ инструкции Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ планирования ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ· git-отслСТивания ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² `.gitignore`. --- ## 🌐 Локализация Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ язык ΠΏΠ»Π°Π³ΠΈΠ½Π° - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ английский. Русский ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ языковыС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ»Π°Π³ΠΈΠ½ русификации), пСрСводящиС зарСгистрированныС ΠΊΠ»ΡŽΡ‡ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈ, - сам ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π΅ содСрТит встроСнных ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² (Changed in 0.6.1). --- ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY)