@goodandready/dsh-cost-meter 0.7.4 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -50
- package/docs/README.ru.md +134 -0
- package/docs/README.zh.md +134 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,78 +1,134 @@
|
|
|
1
|
-
# dsh-cost-meter
|
|
1
|
+
# 📦 @goodandready/dsh-cost-meter
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
текущий тариф (пик / не-пик), обратный отсчёт до его смены и карточка настроек.
|
|
3
|
+
<div align="center">
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
<h3>Live Session Cost Chip, Peak/Off-Peak Tariff Switcher & Token Pricing for DeepSeek Harness</h3>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-cost-meter"><img src="https://img.shields.io/npm/v/@goodandready/dsh-cost-meter.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-cost-meter.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
|
+
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<!-- Author Showcase Link -->
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/All_Author_Projects-goodandready.app-ff4500.svg?style=for-the-badge&logo=rocket&logoColor=white&labelColor=1a1a2e" alt="GoodAndReady Showcase"></a>
|
|
17
|
+
</p>
|
|
9
18
|
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="README.md"><b>🇬🇧 English</b></a> •
|
|
21
|
+
<a href="docs/README.ru.md"><b>🇷🇺 Русский</b></a> •
|
|
22
|
+
<a href="docs/README.zh.md"><b>🇨🇳 中文说明</b></a>
|
|
23
|
+
</p>
|
|
12
24
|
|
|
13
|
-
|
|
25
|
+
</div>
|
|
14
26
|
|
|
15
|
-
|
|
16
|
-
- **Двухуровневые тарифы**: поддержка официальной сетки DeepSeek (пик / не-пик) и скидочных окон OpenRouter.
|
|
17
|
-
- **Provider-aware маршрутизация**: раздельная тарификация для прямых моделей DeepSeek и хостинга моделей через OpenRouter.
|
|
18
|
-
- **Учёт по получасовым слотам UTC**: исторические траты фиксируются по ставке слота и не пересчитываются задним числом.
|
|
19
|
-
- **Карточка настроек в UI**: нативная карточка в `settings.plugin.item` для настройки валюты, курса USD и таймзоны.
|
|
20
|
-
- **Полная двуязычная локализация**: интерфейс чипа, панели и настроек на русском и английском языках (`ctx.locale`).
|
|
27
|
+
---
|
|
21
28
|
|
|
22
|
-
##
|
|
29
|
+
## ⚡ Overview & The Problem
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
AI development and agentic coding consume large volumes of tokens across prompt generation, reasoning, and context caches. Without continuous financial feedback, developers risk unexpected billing spikes, missing off-peak discount windows, or failing to identify runaway subagent expenses.
|
|
32
|
+
|
|
33
|
+
**`@goodandready/dsh-cost-meter`** embeds a high-precision cost telemetry chip directly into the DeepSeek Harness conversation header (`conversation.session.header.utilities`):
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
● ≈ $0.12 0:17 ← Live session cost chip with tariff countdown
|
|
37
|
+
```
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
Clicking the chip expands an interactive breakdown modal displaying 1M token rate tables across peak and off-peak tiers, active UTC window status, and per-model session expenditure summaries.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🏛️ Architecture
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
graph TD
|
|
47
|
+
subgraph StreamTelemetry ["DeepSeek Harness Runtime"]
|
|
48
|
+
Req["LLM Request / Header<br/>(provider, model)"]
|
|
49
|
+
StreamHook["Incremental Streaming Chunks"]
|
|
50
|
+
Proj["costByModel Projection<br/>(30-min UTC Slots)"]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
subgraph PricingCatalog ["Tariff Resolution Engine"]
|
|
54
|
+
Manual["Manual Config Rates<br/>(settings.yaml: prices)"]
|
|
55
|
+
DeepSeekTier["DeepSeek Official Tier<br/>(Peak vs Off-Peak 50% discount)"]
|
|
56
|
+
OpenRouterTier["OpenRouter API Catalog<br/>(Cached Daily)"]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
subgraph UI ["User Interface Surfaces"]
|
|
60
|
+
Chip["Header Cost Chip<br/>(Active tariff + countdown)"]
|
|
61
|
+
Modal["Breakdown Drawer<br/>(Rates per 1M, UTC windows, model table)"]
|
|
62
|
+
Settings["Settings Card<br/>(Currency, USD rate, timezones)"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Req --> Proj
|
|
66
|
+
StreamHook --> Proj
|
|
67
|
+
Proj --> Chip
|
|
68
|
+
PricingCatalog --> Proj
|
|
69
|
+
Manual --> PricingCatalog
|
|
70
|
+
DeepSeekTier --> PricingCatalog
|
|
71
|
+
OpenRouterTier --> PricingCatalog
|
|
72
|
+
Chip --> Modal
|
|
73
|
+
```
|
|
34
74
|
|
|
35
|
-
|
|
36
|
-
прямо во время стрима, без опроса.
|
|
75
|
+
---
|
|
37
76
|
|
|
38
|
-
|
|
77
|
+
## ✨ Features & Key Capabilities
|
|
39
78
|
|
|
40
|
-
1.
|
|
41
|
-
2. **
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
для всех остальных моделей. Каталог кэшируется на диск в runtime-директории профиля и обновляется раз в сутки.
|
|
79
|
+
1. **Incremental Streaming Telemetry**: Computes prompt, completion, and cache read/write tokens in real-time without polling or UI stutter.
|
|
80
|
+
2. **Dual-Tier Tariff Engine**: Official DeepSeek peak windows (01:00–04:00 and 06:00–10:00 UTC) with automatic 50% off-peak discount detection.
|
|
81
|
+
3. **UTC Half-Hour Slot Immutability**: Historical session expenditure is permanently anchored to the rate active at the moment of execution.
|
|
82
|
+
4. **Provider-Aware Routing**: Distinguishes direct provider connections from hosted gateways (e.g. OpenRouter vs native endpoints).
|
|
83
|
+
5. **Interactive UI Modal & Settings**: Custom currency symbols (`$`, `€`, `₽`, `¥`), exchange rates, and timezone configurations.
|
|
46
84
|
|
|
47
|
-
|
|
85
|
+
---
|
|
48
86
|
|
|
49
|
-
##
|
|
87
|
+
## 📦 Installation
|
|
50
88
|
|
|
51
89
|
```bash
|
|
52
90
|
dsh plugin --profile web add @goodandready/dsh-cost-meter
|
|
53
91
|
```
|
|
54
92
|
|
|
55
|
-
|
|
93
|
+
Restart your DeepSeek Harness instance and refresh the browser.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## ⚙️ Configuration Reference (`settings.yaml`)
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
dsh-cost-meter:
|
|
101
|
+
currency: "$"
|
|
102
|
+
usdRate: 1.0
|
|
103
|
+
displayTimeZone: "UTC"
|
|
104
|
+
useOpenRouter: true
|
|
105
|
+
prices: {}
|
|
106
|
+
modelMap: {}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Configuration Parameters
|
|
110
|
+
|
|
111
|
+
| Parameter | Type | Default | Description |
|
|
112
|
+
|:---|:---|:---|:---|
|
|
113
|
+
| `currency` | `string` | `"$"` | Display currency symbol or code |
|
|
114
|
+
| `usdRate` | `number` | `1.0` | Exchange rate multiplier from USD |
|
|
115
|
+
| `displayTimeZone` | `string` | `"UTC"` | Timezone for window schedule formatting (e.g. `Europe/London`, `Asia/Shanghai`) |
|
|
116
|
+
| `useOpenRouter` | `boolean` | `true` | Fetch OpenRouter public catalog for fallback models |
|
|
117
|
+
| `prices` | `object` | `{}` | Custom override rates per 1M tokens `{ prompt, completion, cacheRead?, cacheWrite? }` |
|
|
118
|
+
| `modelMap` | `object` | `{}` | Model alias mappings `{ "alias": "target-model" }` |
|
|
56
119
|
|
|
57
|
-
|
|
120
|
+
---
|
|
58
121
|
|
|
59
|
-
|
|
60
|
-
|---|---|---|
|
|
61
|
-
| `currency` | `₽` | Символ или код валюты для отображения |
|
|
62
|
-
| `usdRate` | `90` | Множитель пересчёта долларовых цен в валюту отображения |
|
|
63
|
-
| `displayTimeZone` | `UTC` | Таймзона для отображения окон в панели (например, `Europe/Moscow`) |
|
|
64
|
-
| `useOpenRouter` | `true` | Загружать ли каталог цен OpenRouter для сторонних моделей |
|
|
65
|
-
| `prices` | `{}` | Ручные ставки за 1M токенов `{ prompt, completion, cacheRead?, cacheWrite? }` |
|
|
66
|
-
| `modelMap` | `{}` | Алиасы моделей `{ "alias": "target-model" }` |
|
|
122
|
+
## 🧪 Testing
|
|
67
123
|
|
|
68
|
-
|
|
124
|
+
Run the automated test suite:
|
|
69
125
|
|
|
70
126
|
```bash
|
|
71
127
|
npm test
|
|
72
128
|
```
|
|
73
129
|
|
|
74
|
-
|
|
130
|
+
---
|
|
75
131
|
|
|
76
|
-
##
|
|
132
|
+
## 📄 License
|
|
77
133
|
|
|
78
|
-
MIT
|
|
134
|
+
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 📦 @goodandready/dsh-cost-meter
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
<h3>Чип стоимости сессии, переключатель пиковых тарифов и мониторинг расходов токенов для DeepSeek Harness</h3>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-cost-meter"><img src="https://img.shields.io/npm/v/@goodandready/dsh-cost-meter.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
|
+
<a href="../LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-cost-meter.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
|
+
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<!-- Обязательная кнопка перехода на витрину всех проектов -->
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/Все_проекты_автора-goodandready.app-ff4500.svg?style=for-the-badge&logo=rocket&logoColor=white&labelColor=1a1a2e" alt="Все проекты автора"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="../README.md"><b>🇬🇧 English</b></a> •
|
|
21
|
+
<a href="README.ru.md"><b>🇷🇺 Русский</b></a> •
|
|
22
|
+
<a href="README.zh.md"><b>🇨🇳 中文说明</b></a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## ⚡ Обзор и решаемая проблема
|
|
30
|
+
|
|
31
|
+
Разработка с помощью ИИ-агентов и генерация кода требуют активного потребления токенов (промпты, рассуждения, контекстный кэш). Без непрерывного финансового контроля разработчики рискуют столкнуться с перерасходом бюджета или упустить окна 50% скидок внепикового тарифа.
|
|
32
|
+
|
|
33
|
+
**`@goodandready/dsh-cost-meter`** встраивает компактный высокоточный телеметрический чип прямо в заголовок диалога DeepSeek Harness (`conversation.session.header.utilities`):
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
● ≈ ₽8.55 0:17 ← Чип стоимости сессии в шапке с обратным отсчётом тарифа
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
По клику открывается интерактивная панель: тарифная сетка за 1M токенов (не-пик / пик с подсветкой активного режима), статус окон в UTC и детальная разбивка расходов текущей сессии по моделям.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🏛️ Архитектура
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
graph TD
|
|
47
|
+
subgraph StreamTelemetry ["Рантайм DeepSeek Harness"]
|
|
48
|
+
Req["Запрос LLM / Заголовок<br/>(provider, model)"]
|
|
49
|
+
StreamHook["Потоковые инкрементальные чанки"]
|
|
50
|
+
Proj["Проекция costByModel<br/>(30-минутные слоты UTC)"]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
subgraph PricingCatalog ["Движок тарификации"]
|
|
54
|
+
Manual["Пользовательские цены<br/>(settings.yaml: prices)"]
|
|
55
|
+
DeepSeekTier["Сетка DeepSeek<br/>(Пик / 50% скидка не-пик)"]
|
|
56
|
+
OpenRouterTier["Каталог OpenRouter<br/>(Ежедневный кэш)"]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
subgraph UI ["Интерфейс пользователя"]
|
|
60
|
+
Chip["Чип стоимости в шапке<br/>(Тариф + таймер смены)"]
|
|
61
|
+
Modal["Модальное окно разбивки<br/>(Ставки за 1M, окна UTC, модели)"]
|
|
62
|
+
Settings["Карточка настроек<br/>(Валюта, курс USD, таймзона)"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Req --> Proj
|
|
66
|
+
StreamHook --> Proj
|
|
67
|
+
Proj --> Chip
|
|
68
|
+
PricingCatalog --> Proj
|
|
69
|
+
Manual --> PricingCatalog
|
|
70
|
+
DeepSeekTier --> PricingCatalog
|
|
71
|
+
OpenRouterTier --> PricingCatalog
|
|
72
|
+
Chip --> Modal
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## ✨ Ключевые возможности
|
|
78
|
+
|
|
79
|
+
1. **Живой расчёт во время стриминга**: расчёт стоимости инкрементально обновляется в реальном времени прямо во время генерации ответа.
|
|
80
|
+
2. **Двухуровневая сетка тарифов**: официальные пиковые окна DeepSeek (01:00–04:00 и 06:00–10:00 UTC) со скидкой 50% во внепиковое время.
|
|
81
|
+
3. **Иммутабельность получасовых слотов UTC**: исторические расходы сессии фиксируются по ставке слота и не пересчитываются задним числом при смене тарифа.
|
|
82
|
+
4. **Provider-aware тарификация**: раздельный учёт для прямых подключений DeepSeek и шлюзов OpenRouter.
|
|
83
|
+
5. **Гибкая настройка валюты**: поддержка пользовательских символов валют (`₽`, `$`, `€`, `¥`), курсов конвертации и таймзон.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 📦 Установка
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
dsh plugin --profile web add @goodandready/dsh-cost-meter
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Перезапустите экземпляр DeepSeek Harness и обновите страницу в браузере.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## ⚙️ Таблица конфигурации (`settings.yaml`)
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
dsh-cost-meter:
|
|
101
|
+
currency: "₽"
|
|
102
|
+
usdRate: 90.0
|
|
103
|
+
displayTimeZone: "Europe/Moscow"
|
|
104
|
+
useOpenRouter: true
|
|
105
|
+
prices: {}
|
|
106
|
+
modelMap: {}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Параметры конфигурации
|
|
110
|
+
|
|
111
|
+
| Параметр | Тип | По умолчанию | Описание |
|
|
112
|
+
|:---|:---|:---|:---|
|
|
113
|
+
| `currency` | `string` | `"₽"` | Символ или код валюты для отображения |
|
|
114
|
+
| `usdRate` | `number` | `90.0` | Множитель пересчёта долларовых цен в валюту отображения |
|
|
115
|
+
| `displayTimeZone` | `string` | `"UTC"` | Таймзона для отображения окон в панели |
|
|
116
|
+
| `useOpenRouter` | `boolean` | `true` | Загружать ли каталог цен OpenRouter для сторонних моделей |
|
|
117
|
+
| `prices` | `object` | `{}` | Ручные ставки за 1M токенов `{ prompt, completion, cacheRead?, cacheWrite? }` |
|
|
118
|
+
| `modelMap` | `object` | `{}` | Алиасы моделей `{ "alias": "target-model" }` |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 🧪 Тестирование
|
|
123
|
+
|
|
124
|
+
Запуск набора юнит-тестов:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
npm test
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 📄 Лицензия
|
|
133
|
+
|
|
134
|
+
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 📦 @goodandready/dsh-cost-meter
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
<h3>面向 DeepSeek Harness 的会话实时花费计费芯片、波峰/波谷阶梯电价与 Token 监控插件</h3>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-cost-meter"><img src="https://img.shields.io/npm/v/@goodandready/dsh-cost-meter.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
|
+
<a href="../LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-cost-meter.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
|
+
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<!-- 作者所有项目展示页面链接 -->
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/作者所有开源项目-goodandready.app-ff4500.svg?style=for-the-badge&logo=rocket&logoColor=white&labelColor=1a1a2e" alt="所有项目"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="../README.md"><b>🇬🇧 English</b></a> •
|
|
21
|
+
<a href="README.ru.md"><b>🇷🇺 Русский</b></a> •
|
|
22
|
+
<a href="README.zh.md"><b>🇨🇳 中文说明</b></a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## ⚡ 概述与核心痛点
|
|
30
|
+
|
|
31
|
+
在使用智能体与大语言模型编程时,模型推理、长上下文以及缓存读写会产生大量 Token 消耗。如果缺乏实时的财务监控,开发者容易错过官方 50% 闲时折扣窗口,或因死循环导致账单超出预算。
|
|
32
|
+
|
|
33
|
+
**`@goodandready/dsh-cost-meter`** 在 DeepSeek Harness 会话顶部工具栏(`conversation.session.header.utilities`)无缝嵌入高精度花费微件芯片:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
● ≈ ¥0.85 0:17 ← 会话顶部实时花费芯片与换价倒计时
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
点击芯片可展开交互式详情面板:按每 1M Token 展示峰谷两档费率表格(高亮显示当前激活档位)、UTC 优惠时间段状态以及各模型在当前会话中的累计消费明细。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🏛️ 架构设计
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
graph TD
|
|
47
|
+
subgraph StreamTelemetry ["DSH 流式遥测运行时"]
|
|
48
|
+
Req["LLM 请求 / 报头<br/>(provider, model)"]
|
|
49
|
+
StreamHook["增量流式分片 Hook"]
|
|
50
|
+
Proj["costByModel 会话投影<br/>(半小时 UTC 时隙)"]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
subgraph PricingCatalog ["费率解析引擎"]
|
|
54
|
+
Manual["自定义费率配置<br/>(settings.yaml: prices)"]
|
|
55
|
+
DeepSeekTier["DeepSeek 官方费率<br/>(高峰 / 闲时 50% 折扣)"]
|
|
56
|
+
OpenRouterTier["OpenRouter 公开目录<br/>(每日自动缓存)"]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
subgraph UI ["用户交互界面"]
|
|
60
|
+
Chip["顶部花费芯片<br/>(实时计费 + 换价倒计时)"]
|
|
61
|
+
Modal["消费明细抽屉面板<br/>(1M 单价表, UTC 时段, 模型清单)"]
|
|
62
|
+
Settings["设置卡片<br/>(币种符号, 汇率, 时区)"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Req --> Proj
|
|
66
|
+
StreamHook --> Proj
|
|
67
|
+
Proj --> Chip
|
|
68
|
+
PricingCatalog --> Proj
|
|
69
|
+
Manual --> PricingCatalog
|
|
70
|
+
DeepSeekTier --> PricingCatalog
|
|
71
|
+
OpenRouterTier --> PricingCatalog
|
|
72
|
+
Chip --> Modal
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## ✨ 核心特性
|
|
78
|
+
|
|
79
|
+
1. **增量流式实时计算**:在模型打字生成过程中毫秒级更新 Prompt、Completion 和 Cache 费用,无轮询无卡顿。
|
|
80
|
+
2. **两级阶梯电价引擎**:支持 DeepSeek 官方高峰时段(UTC 01:00–04:00 与 06:00–10:00)及闲时 50% 优惠折扣自动匹配。
|
|
81
|
+
3. **UTC 半小时时隙不可变性**:历史消费严格锁定在消耗发生时刻的时隙费率,切换费率不溯及既往。
|
|
82
|
+
4. **服务商智能路由**:精准区分直连 DeepSeek 服务商与 OpenRouter 等代理网关。
|
|
83
|
+
5. **多币种与本地化**:支持自定义货币符号(`¥`, `$`, `€`, `₽`)、汇率换算与显示时区。
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 📦 快速安装
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
dsh plugin --profile web add @goodandready/dsh-cost-meter
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
重启 DeepSeek Harness 实例并刷新浏览器页面。
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## ⚙️ 配置项说明 (`settings.yaml`)
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
dsh-cost-meter:
|
|
101
|
+
currency: "¥"
|
|
102
|
+
usdRate: 7.2
|
|
103
|
+
displayTimeZone: "Asia/Shanghai"
|
|
104
|
+
useOpenRouter: true
|
|
105
|
+
prices: {}
|
|
106
|
+
modelMap: {}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 配置参数列表
|
|
110
|
+
|
|
111
|
+
| 参数项 | 类型 | 默认值 | 说明 |
|
|
112
|
+
|:---|:---|:---|:---|
|
|
113
|
+
| `currency` | `string` | `"¥"` | 显示的货币符号或代码 |
|
|
114
|
+
| `usdRate` | `number` | `7.2` | 美元到目标货币的换算汇率 |
|
|
115
|
+
| `displayTimeZone` | `string` | `"Asia/Shanghai"` | 界面中优惠时间段显示的参考时区 |
|
|
116
|
+
| `useOpenRouter` | `boolean` | `true` | 是否加载 OpenRouter 价格表作为备用 |
|
|
117
|
+
| `prices` | `object` | `{}` | 自定义每 1M Token 的费率覆盖 |
|
|
118
|
+
| `modelMap` | `object` | `{}` | 模型别名映射表 |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 🧪 自动化测试
|
|
123
|
+
|
|
124
|
+
运行单元测试套件:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
npm test
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 📄 许可证
|
|
133
|
+
|
|
134
|
+
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-cost-meter",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5",
|
|
4
4
|
"description": "DeepSeek Harness plugin: a session cost chip in the conversation header - live token usage by bucket, peak/off-peak tariff, and a countdown to the next tariff switch.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|