# πŸ“¦ @goodandready/dsh-cost-meter

Π§ΠΈΠΏ стоимости сСссии, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ² ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ расходов Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² для DeepSeek Harness

npm version license DSH Plugin Node version

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

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

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

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создайтС issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ## ⚑ ΠžΠ±Π·ΠΎΡ€ ΠΈ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠ² ΠΈ гСнСрация ΠΊΠΎΠ΄Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ потрСблСния Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (ΠΏΡ€ΠΎΠΌΠΏΡ‚Ρ‹, рассуТдСния, контСкстный кэш). Π‘Π΅Π· Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ финансового контроля Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€ΠΈΡΠΊΡƒΡŽΡ‚ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с пСрСрасходом Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° ΠΈΠ»ΠΈ ΡƒΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΊΠ½Π° 50% скидок Π²Π½Π΅ΠΏΠΈΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚Π°Ρ€ΠΈΡ„Π°. **`@goodandready/dsh-cost-meter`** встраиваСт ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ высокоточный тСлСмСтричСский Ρ‡ΠΈΠΏ прямо Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Π° DeepSeek Harness (`conversation.session.header.utilities`): ```text ● β‰ˆ β‚½8.55 0:17 ← Π§ΠΈΠΏ стоимости сСссии Π² шапкС с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ отсчётом Ρ‚Π°Ρ€ΠΈΡ„Π° ``` По ΠΊΠ»ΠΈΠΊΡƒ открываСтся интСрактивная панСль: тарифная сСтка Π·Π° 1M Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (Π½Π΅-ΠΏΠΈΠΊ / ΠΏΠΈΠΊ с подсвСткой Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°), статус ΠΎΠΊΠΎΠ½ Π² UTC ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠ° расходов Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сСссии ΠΏΠΎ модСлям. --- ## πŸ›οΈ АрхитСктура ```mermaid graph TD subgraph StreamTelemetry ["Π Π°Π½Ρ‚Π°ΠΉΠΌ DeepSeek Harness"] Req["Запрос LLM / Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
(provider, model)"] StreamHook["ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π°Π½ΠΊΠΈ"] Proj["ΠŸΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡ costByModel
(30-ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Π΅ слоты UTC)"] end subgraph PricingCatalog ["Π”Π²ΠΈΠΆΠΎΠΊ Ρ‚Π°Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ"] Manual["ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ†Π΅Π½Ρ‹
(settings.yaml: prices)"] DeepSeekTier["Π‘Π΅Ρ‚ΠΊΠ° DeepSeek
(Пик / 50% скидка Π½Π΅-ΠΏΠΈΠΊ)"] OpenRouterTier["ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ OpenRouter
(Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹ΠΉ кэш)"] end subgraph UI ["Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ"] Chip["Π§ΠΈΠΏ стоимости Π² шапкС
(Π’Π°Ρ€ΠΈΡ„ + Ρ‚Π°ΠΉΠΌΠ΅Ρ€ смСны)"] Modal["МодальноС ΠΎΠΊΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΈ
(Π‘Ρ‚Π°Π²ΠΊΠΈ Π·Π° 1M, ΠΎΠΊΠ½Π° UTC, ΠΌΠΎΠ΄Π΅Π»ΠΈ)"] Settings["ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° настроСк
(Π’Π°Π»ΡŽΡ‚Π°, курс USD, Ρ‚Π°ΠΉΠΌΠ·ΠΎΠ½Π°)"] end Req --> Proj StreamHook --> Proj Proj --> Chip PricingCatalog --> Proj Manual --> PricingCatalog DeepSeekTier --> PricingCatalog OpenRouterTier --> PricingCatalog Chip --> Modal ``` --- ## ✨ ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности 1. **Π–ΠΈΠ²ΠΎΠΉ расчёт Π²ΠΎ врСмя стриминга**: расчёт стоимости ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ обновляСтся Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ прямо Π²ΠΎ врСмя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°. 2. **ДвухуровнСвая сСтка Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ²**: ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΈΠΊΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° DeepSeek (01:00–04:00 ΠΈ 06:00–10:00 UTC) со скидкой 50% Π²ΠΎ Π²Π½Π΅ΠΏΠΈΠΊΠΎΠ²ΠΎΠ΅ врСмя. 3. **Π˜ΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ получасовых слотов UTC**: историчСскиС расходы сСссии Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ставкС слота ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π°Π΄Π½ΠΈΠΌ числом ΠΏΡ€ΠΈ смСнС Ρ‚Π°Ρ€ΠΈΡ„Π°. 4. **Provider-aware тарификация**: Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ‡Ρ‘Ρ‚ для прямых ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ DeepSeek ΠΈ шлюзов OpenRouter. 5. **Гибкая настройка Π²Π°Π»ΡŽΡ‚Ρ‹**: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… символов Π²Π°Π»ΡŽΡ‚ (`β‚½`, `$`, `€`, `Β₯`), курсов ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚Π°ΠΉΠΌΠ·ΠΎΠ½. --- ## πŸ“¦ Установка ```bash dsh plugin --profile web add @goodandready/dsh-cost-meter ``` ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ экзСмпляр DeepSeek Harness ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ страницу Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. --- ## βš™οΈ Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (`settings.yaml`) ```yaml dsh-cost-meter: currency: "β‚½" usdRate: 90.0 displayTimeZone: "Europe/Moscow" useOpenRouter: true prices: {} modelMap: {} ``` ### ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ | ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ | Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС | |:---|:---|:---|:---|:---| | `currency` | GUI / `settings.yaml` | `string` | `"β‚½"` | Π‘ΠΈΠΌΠ²ΠΎΠ» Π²Π°Π»ΡŽΡ‚Ρ‹ Π² интСрфСйсС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `β‚½`, `$`, `€`) | | `usdRate` | GUI / `settings.yaml` | `number` | `80.0` | ΠšΡƒΡ€Ρ ΠΎΠ±ΠΌΠ΅Π½Π°: Π΅Π΄ΠΈΠ½ΠΈΡ† Π²Π°Π»ΡŽΡ‚Ρ‹ Π·Π° 1 USD | | `displayTimeZone` | GUI / `settings.yaml` | `string` | `"Europe/Moscow"` | IANA часовой пояс для отобраТСния ΠΎΠΊΠΎΠ½ ΠΏΠΈΠΊΠ° ΠΈ Π½Π΅-ΠΏΠΈΠΊΠ° | | `useOpenRouter` | GUI / `settings.yaml` | `boolean` | `true` | Π—Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ² ΠΈ скидочных ΠΎΠΊΠΎΠ½ OpenRouter | | `refreshHours` | GUI / `settings.yaml` | `number` | `24` | Частота обновлСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° OpenRouter (Π² часах) | | `deepseekPeakPrices` | Волько `settings.yaml` | `object` | `{}` | ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ встроСнных ΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… ставок DeepSeek ΠΏΠΎ id ΠΌΠΎΠ΄Π΅Π»ΠΈ | | `prices` | Волько `settings.yaml` | `object` | `{}` | Π ΡƒΡ‡Π½Ρ‹Π΅ ставки Π·Π° 1M Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² `{ input, output, cacheHit?, cacheWrite? }` | | `modelMap` | Волько `settings.yaml` | `object` | `{}` | БопоставлСниС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° `"provider/model"` Π½Π° id Π² OpenRouter | | `manualPeakWindowsUtc` | Волько `settings.yaml` | `array` | `[]` | Π ΡƒΡ‡Π½Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΏΠΈΠΊΠ° HH:MM-HH:MM UTC для Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ставок | | `manualOffPeakMultiplier` | Волько `settings.yaml` | `number` | `1.0` | ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ Ρ‚Π°Ρ€ΠΈΡ„Π° Π²Π½Π΅ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΎΠΊΠΎΠ½ ΠΏΠΈΠΊΠ° | > **Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ настроСк (GUI) vs settings.yaml**: ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (`currency`, `usdRate`, `displayTimeZone`, `useOpenRouter`, `refreshHours`) Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ прямо Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ интСрфСйса DSH (**Настройки β†’ ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ β†’ Настройки ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² β†’ Cost Meter**). Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ структурированныС ΠΏΡ€Π°Π²ΠΈΠ»Π° сопоставлСния ΠΈ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ² Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· `settings.yaml` ΠΈΠ·-Π·Π° слоТной Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры. --- ## πŸ§ͺ ВСстированиС Запуск Π½Π°Π±ΠΎΡ€Π° ΡŽΠ½ΠΈΡ‚-тСстов: ```bash npm test ``` --- ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY) ### ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ подсказки (v0.8.1) - **Алгоритм O(K)**: ΠœΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ расчёт Π³Ρ€Π°Π½ΠΈΡ† смСны Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ² ΠΈ мСмоизация экстрСмумов Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. - **Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ кэш ΠΈ ETag**: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° `304 Not Modified` для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° `/state` ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сопоставлСний ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. - **Ручная синхронизация**: Кнопка Β«Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСйчас» Π² настройках с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ Ρ„Π»ΡƒΠ΄Π° (`POST /dsh-cost-meter/refresh`). - **Подсказки экономии ΠΈ ΠΏΠΎΡ€ΠΎΠ³ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π°**: ΠžΡ‚ΡΡ‡Ρ‘Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ Π»ΡŒΠ³ΠΎΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (скидка 50%), ΠΏΠΎΡ€ΠΎΠ³ сСссии (`budgetThreshold`) ΠΈ экспорт сводки Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°.