@goodandready/dsh-opencode-provider 0.5.1 → 0.5.3
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/CHANGELOG.md +15 -0
- package/README.md +307 -301
- package/README.ru.md +208 -202
- package/README.zh.md +184 -177
- package/lib/client.js +314 -6
- package/lib/index.d.ts +31 -1
- package/lib/index.js +188 -32
- package/package.json +1 -1
package/README.ru.md
CHANGED
|
@@ -1,203 +1,209 @@
|
|
|
1
|
-
# 📦 @goodandready/dsh-opencode-provider
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-
<h3>Плагин-провайдер OpenCode Console и OpenCode Go для DeepSeek Harness</h3>
|
|
6
|
-
|
|
7
|
-
<p>
|
|
8
|
-
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="Витрина GoodAndReady"></a>
|
|
9
|
-
<a href="https://www.npmjs.com/package/@goodandready/dsh-opencode-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-opencode-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm версия"></a>
|
|
10
|
-
<a href="https://github.com/GooDAnDReaDY/dsh-opencode-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="Лицензия"></a>
|
|
11
|
-
</p>
|
|
12
|
-
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
<table align="center">
|
|
16
|
-
<tr>
|
|
17
|
-
<td align="center">
|
|
18
|
-
⭐ <strong>Если вам нравится этот плагин, поставьте ему Star на GitHub</strong> — это покажет мне, что плагин полезен, и добавит мотивации продолжать его развитие.
|
|
19
|
-
<br><br>
|
|
20
|
-
🐛 <strong>Если вы нашли баг или хотите предложить новую функцию</strong>, создайте Issue на GitHub на любом языке — я рассмотрю предложение и реализую полезные улучшения в одной из следующих версий плагина.
|
|
21
|
-
</td>
|
|
22
|
-
</tr>
|
|
23
|
-
</table>
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
Плагин-провайдер OpenCode / OpenCode Go для [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/) (dsh).
|
|
28
|
-
|
|
29
|
-
Плагин регистрирует два нативных LLM-маршрута:
|
|
30
|
-
|
|
31
|
-
| Маршрут | Продукт / Тариф | Базовый эндпоинт | Назначение |
|
|
32
|
-
|---|---|---|---|
|
|
33
|
-
| `opencode` | OpenCode Console / Zen | `https://opencode.ai/inference` | Поминутная тарификация (pay-as-you-go) |
|
|
34
|
-
| `opencode-go` | OpenCode Go / Go Plus | `https://opencode.ai/inference/go` | Фиксированная подписка с лимитами 5h / недели / месяца |
|
|
35
|
-
|
|
36
|
-
Ключи разрешаются динамически на каждый вызов: смена токена в настройках или в файле окружения вступает в силу мгновенно без перезапуска сервера.
|
|
37
|
-
|
|
38
|
-
## Архитектура
|
|
39
|
-
|
|
40
|
-
```mermaid
|
|
41
|
-
graph LR
|
|
42
|
-
subgraph DSH["Ядро DeepSeek Harness"]
|
|
43
|
-
Agent["DSH Агент / Чат"]
|
|
44
|
-
Creds["Сервис учетных записей / auth.json"]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
subgraph Plugin["dsh-opencode-provider"]
|
|
48
|
-
Router{"Выбор маршрута"}
|
|
49
|
-
Pool["Пул аккаунтов<br/>(Авто-ротация и Cooldown)"]
|
|
50
|
-
Heatmap["Телеметрия и Heatmap<br/>(5h / Неделя / Месяц)"]
|
|
51
|
-
|
|
52
|
-
subgraph Transports["4 Протокола передачи (Wire Transports)"]
|
|
53
|
-
T1["OpenAI Chat"]
|
|
54
|
-
T2["Anthropic Messages<br/>(Thinking Signatures)"]
|
|
55
|
-
T3["OpenAI Responses"]
|
|
56
|
-
T4["Google GenAI<br/>(thoughtSignature Replay)"]
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
subgraph OpenCode["Шлюз OpenCode Gateway"]
|
|
61
|
-
Console["opencode (Console / Zen)"]
|
|
62
|
-
Go["opencode-go (Go / Go Plus)"]
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
Agent --> Router
|
|
66
|
-
Creds -.-> Pool
|
|
67
|
-
Router -->|opencode| Pool
|
|
68
|
-
Router -->|opencode-go| Pool
|
|
69
|
-
Pool --> Heatmap
|
|
70
|
-
Pool --> Transports
|
|
71
|
-
T1 & T2 & T3 & T4 --> Console & Go
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Полный обзор возможностей
|
|
75
|
-
|
|
76
|
-
- **Четыре нативных транспорта**, выбираемых автоматически под каждую модель:
|
|
77
|
-
- OpenAI Chat Completions (DeepSeek, GLM, Kimi, MiMo, LongCat, Hy3, Step и др.).
|
|
78
|
-
- Anthropic Messages (Claude, MiniMax, Qwen).
|
|
79
|
-
- OpenAI Responses (GPT, Grok, Muse).
|
|
80
|
-
- Google Generative AI (Gemini).
|
|
81
|
-
- **Полноценная поддержка всех типов данных**: текст, рассуждения (reasoning), стриминг вызовов инструментов (tool calls), статистика токенов (usage), корректные finish reasons.
|
|
82
|
-
- **Обработка изображений** через встроенный сервис attachments с нативным рендерингом под протокол конкретного
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
###
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
##
|
|
201
|
-
|
|
202
|
-
|
|
1
|
+
# 📦 @goodandready/dsh-opencode-provider
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
<h3>Плагин-провайдер OpenCode Console и OpenCode Go для DeepSeek Harness</h3>
|
|
6
|
+
|
|
7
|
+
<p>
|
|
8
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="Витрина GoodAndReady"></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-opencode-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-opencode-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm версия"></a>
|
|
10
|
+
<a href="https://github.com/GooDAnDReaDY/dsh-opencode-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="Лицензия"></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<table align="center">
|
|
16
|
+
<tr>
|
|
17
|
+
<td align="center">
|
|
18
|
+
⭐ <strong>Если вам нравится этот плагин, поставьте ему Star на GitHub</strong> — это покажет мне, что плагин полезен, и добавит мотивации продолжать его развитие.
|
|
19
|
+
<br><br>
|
|
20
|
+
🐛 <strong>Если вы нашли баг или хотите предложить новую функцию</strong>, создайте Issue на GitHub на любом языке — я рассмотрю предложение и реализую полезные улучшения в одной из следующих версий плагина.
|
|
21
|
+
</td>
|
|
22
|
+
</tr>
|
|
23
|
+
</table>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
Плагин-провайдер OpenCode / OpenCode Go для [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/) (dsh).
|
|
28
|
+
|
|
29
|
+
Плагин регистрирует два нативных LLM-маршрута:
|
|
30
|
+
|
|
31
|
+
| Маршрут | Продукт / Тариф | Базовый эндпоинт | Назначение |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| `opencode` | OpenCode Console / Zen | `https://opencode.ai/inference` | Поминутная тарификация (pay-as-you-go) |
|
|
34
|
+
| `opencode-go` | OpenCode Go / Go Plus | `https://opencode.ai/inference/go` | Фиксированная подписка с лимитами 5h / недели / месяца |
|
|
35
|
+
|
|
36
|
+
Ключи разрешаются динамически на каждый вызов: смена токена в настройках или в файле окружения вступает в силу мгновенно без перезапуска сервера.
|
|
37
|
+
|
|
38
|
+
## Архитектура
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
graph LR
|
|
42
|
+
subgraph DSH["Ядро DeepSeek Harness"]
|
|
43
|
+
Agent["DSH Агент / Чат"]
|
|
44
|
+
Creds["Сервис учетных записей / auth.json"]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
subgraph Plugin["dsh-opencode-provider"]
|
|
48
|
+
Router{"Выбор маршрута"}
|
|
49
|
+
Pool["Пул аккаунтов<br/>(Авто-ротация и Cooldown)"]
|
|
50
|
+
Heatmap["Телеметрия и Heatmap<br/>(5h / Неделя / Месяц)"]
|
|
51
|
+
|
|
52
|
+
subgraph Transports["4 Протокола передачи (Wire Transports)"]
|
|
53
|
+
T1["OpenAI Chat"]
|
|
54
|
+
T2["Anthropic Messages<br/>(Thinking Signatures)"]
|
|
55
|
+
T3["OpenAI Responses"]
|
|
56
|
+
T4["Google GenAI<br/>(thoughtSignature Replay)"]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
subgraph OpenCode["Шлюз OpenCode Gateway"]
|
|
61
|
+
Console["opencode (Console / Zen)"]
|
|
62
|
+
Go["opencode-go (Go / Go Plus)"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Agent --> Router
|
|
66
|
+
Creds -.-> Pool
|
|
67
|
+
Router -->|opencode| Pool
|
|
68
|
+
Router -->|opencode-go| Pool
|
|
69
|
+
Pool --> Heatmap
|
|
70
|
+
Pool --> Transports
|
|
71
|
+
T1 & T2 & T3 & T4 --> Console & Go
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Полный обзор возможностей
|
|
75
|
+
|
|
76
|
+
- **Четыре нативных транспорта**, выбираемых автоматически под каждую модель:
|
|
77
|
+
- OpenAI Chat Completions (DeepSeek, GLM, Kimi, MiMo, LongCat, Hy3, Step и др.).
|
|
78
|
+
- Anthropic Messages (Claude, MiniMax, Qwen).
|
|
79
|
+
- OpenAI Responses (GPT, Grok, Muse).
|
|
80
|
+
- Google Generative AI (Gemini).
|
|
81
|
+
- **Полноценная поддержка всех типов данных**: текст, рассуждения (reasoning), стриминг вызовов инструментов (tool calls), статистика токенов (usage), корректные finish reasons.
|
|
82
|
+
- **Обработка изображений** через встроенный сервис attachments с нативным рендерингом под протокол конкретного транспорта; **файлы** проецируются в детерминированный handle-text DSH (с read-only путём от harness), без inline-байтов.
|
|
83
|
+
- **Изображения в tool-result** встраиваются в Anthropic, OpenAI Responses и Google; OpenAI Chat оставляет текстовый placeholder.
|
|
84
|
+
- **Воспроизведение метаданных провайдеров** при строгих требованиях API:
|
|
85
|
+
- Подписи рассуждений Anthropic (`thinking signatures`).
|
|
86
|
+
- Google `thoughtSignature` в истории вызовов функций.
|
|
87
|
+
- **Пул аккаунтов с интеллектуальной авто-ротацией** до старта генерации:
|
|
88
|
+
- Автоматический переход на следующий аккаунт при 401/403/429 или ответах о превышении квот (400/402/403/429).
|
|
89
|
+
- Недействительный ключ охлаждается 24 часа, превышение квоты — 10 минут (или по заголовку `Retry-After`), rate limit — 60 секунд (или по `Retry-After`).
|
|
90
|
+
- Если запрос уже начал стриминг, он не переключается посреди ответа; следующий запрос берёт следующий готовый ключ.
|
|
91
|
+
- **Квоты по каждому аккаунту**: отображение индивидуального расхода за 5 часов, неделю и месяц; активный аккаунт управляет сайдбаром и панелью.
|
|
92
|
+
- **Runway по каждому аккаунту**: оценка времени до исчерпания по среднему темпу каждого окна; отмечается первое окно, которое закончится раньше сброса. Оценка приблизительная: API отдаёт только текущий процент и время сброса.
|
|
93
|
+
- **Онбординг аккаунтов**: **Import all from auth.json** переносит все ключи OpenCode в отдельные credential ref и добавляет аккаунты; **Check all accounts** обновляет квоты и health по каждому аккаунту.
|
|
94
|
+
- **Правила «модель ➔ аккаунт»**: сопоставление по glob-паттернам закрепляет предпочтительный аккаунт за моделью; остальные аккаунты остаются в резерве.
|
|
95
|
+
- **Квотный fallback**: выберите бесплатную модель в настройках; при ошибке квоты Go тот же запрос один раз повторяется через Console/Zen. Если fallback тоже не сработал, возвращается исходная ошибка квоты.
|
|
96
|
+
- **Липкий аккаунт**: последний успешный аккаунт предпочитается в том же диалоге; явные правила модели, закреплённый аккаунт и квотный fallback имеют приоритет.
|
|
97
|
+
- **Трассировка маршрутизации**: панель квот показывает последние решения (`rule`, `sticky`, `rotation`, `quota-fallback`) без промптов и ключей.
|
|
98
|
+
- **Почасовой Heatmap запросов**: сетка «день недели × час» в локальном времени плюс суточная полоса агрегации. Фильтры переключают отображение между всеми запросами, конкретной моделью и аккаунтом. Лог `~/.dsh/storages/dsh-opencode/requests.jsonl` хранит только метаданные `{at, provider, model, purpose, account, reason}` (промпты и ответы не сохраняются).
|
|
99
|
+
- **Стабильный заголовок `x-opencode-session`**: вычисляется из устойчивого ID сессии DSH, обеспечивая одинаковый ключ маршрутизации при повторах и диалоге.
|
|
100
|
+
- **Живой каталог моделей**: автоматическое чтение `/v1/models` с резервным fallback из `models.dev`.
|
|
101
|
+
- **Оценки лимитов подписки OpenCode Go**: долларовый лимит и расчетное число запросов для окон 5h, недели и месяца для планов Go и Go Plus.
|
|
102
|
+
- **Команда `/opencode`**: быстрый просмотр статуса, квот, аккаунтов, моделей, правил и запуск теста связи `test [model]`.
|
|
103
|
+
- **Настройки в терминале (TUI)**: раздел `/settings → OpenCode` для профиля terminal с ключом, эндпоинтами, allowlist, активным аккаунтом, fallback-моделью, sticky-маршрутизацией и таймаутами.
|
|
104
|
+
- **Интеграция с Settings → Models**: стандартные карточки OpenCode/OpenCode Go; ключ задаётся только через «Изменить».
|
|
105
|
+
- **One-Click обновление плагина**: кнопка **Update now** в настройках проверяет npm registry, ставит точную версию через DSH CLI и запрашивает перезапуск.
|
|
106
|
+
- **Plan-aware Go picker**: фильтрация моделей вне тарифной сетки Go с бейджами `Go`, `Console` или `FREE`.
|
|
107
|
+
- **Защита лимита MCP-инструментов**: сохраняет системные инструменты DSH (`read`, `write`, `edit`, `bash`, `glob`, `grep`) при сокращении сторонних инструментов под лимит 128.
|
|
108
|
+
- **Панель аналитики использования**: карточки KPI (запросы, токены, успешность, reasoning, кэш, TTFT, задержка), фильтр 7/30/90 дней и таблицы Models / Days / Sessions.
|
|
109
|
+
|
|
110
|
+
## Установка
|
|
111
|
+
|
|
112
|
+
Сборка и упаковка из исходников:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
npm install
|
|
116
|
+
npm run build
|
|
117
|
+
npm pack
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Установка из **упакованного tarball**:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
dsh plugin --profile web add /absolute/path/to/goodandready-dsh-opencode-provider-0.5.3.tgz
|
|
124
|
+
# DSH Desktop:
|
|
125
|
+
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-opencode-provider-0.5.3.tgz
|
|
126
|
+
|
|
127
|
+
# Либо установка опубликованного пакета из npm:
|
|
128
|
+
dsh plugin --profile web add @goodandready/dsh-opencode-provider@0.5.3
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
После установки перезапустите dsh (или DSH Desktop) и выберите **OpenCode** или **OpenCode Go** в списке моделей.
|
|
132
|
+
|
|
133
|
+
## Конфигурация
|
|
134
|
+
|
|
135
|
+
Пример файла конфигурации:
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
- id: llm-opencode
|
|
139
|
+
name: "@goodandready/dsh-opencode-provider"
|
|
140
|
+
config:
|
|
141
|
+
apiKeyEnv: OPENCODE_API_KEY # переменная окружения или имя credential
|
|
142
|
+
# apiKey: oc_sk_... # только для локальной сборки, не коммитить!
|
|
143
|
+
openCodeAuthEntry: opencode-go
|
|
144
|
+
requestTimeoutMs: 300000
|
|
145
|
+
streamIdleTimeoutMs: 300000
|
|
146
|
+
visibleModels: []
|
|
147
|
+
modelTransports: {}
|
|
148
|
+
accounts:
|
|
149
|
+
- label: Go #2
|
|
150
|
+
apiKeyEnv: OPENCODE_API_KEY_2
|
|
151
|
+
activeAccount: '' # метка аккаунта для принудительного закрепления
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Источники ключей
|
|
155
|
+
|
|
156
|
+
1. `config.apiKey` в конфигурации DSH (`role('secret')`).
|
|
157
|
+
2. Системные учетные данные DSH по имени `apiKeyEnv`.
|
|
158
|
+
3. Авто-импорт из `~/.local/share/opencode/auth.json` (по ключу `openCodeAuthEntry`, по умолчанию `opencode-go`), записанный CLI-утилитой OpenCode.
|
|
159
|
+
4. Переменные окружения процесса, проекта `.env` или `$DSH_HOME/.env`.
|
|
160
|
+
|
|
161
|
+
### Настройка пула аккаунтов и ротации
|
|
162
|
+
|
|
163
|
+
Добавьте второй аккаунт в **Настройки → OpenCode → Accounts**: укажите метку (например, `Go #2`) и имя переменной/credential (`OPENCODE_API_KEY_2`), вставьте ключ и сохраните. Аккаунт по умолчанию (`default`) всегда обслуживает запросы первым, если не закреплен другой.
|
|
164
|
+
|
|
165
|
+
При ошибке авторизации, исчерпании лимита или rate limit адаптер помечает ключ периодом охлаждения (cooldown) и немедленно повторяет запрос со следующим доступным аккаунтом. Состояния cooldown сохраняются между перезапусками в `~/.dsh/storages/dsh-opencode/cooldowns.json` по SHA-256 хешу ключа — сырые токены на диск не записываются.
|
|
166
|
+
|
|
167
|
+
### Правила привязки «модель ➔ аккаунт»
|
|
168
|
+
|
|
169
|
+
С помощью glob-паттернов можно закрепить определенные модели за выделенными аккаунтами:
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
modelAccountRules:
|
|
173
|
+
- pattern: "*free*"
|
|
174
|
+
account: "free"
|
|
175
|
+
- pattern: "your-provider-*"
|
|
176
|
+
account: "go"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Страница настроек Web UI
|
|
180
|
+
|
|
181
|
+
В разделе **Настройки → OpenCode**:
|
|
182
|
+
- **Key**: статус ключа, вставка, импорт из OpenCode CLI, очистка и кнопка **Test connection** с замером задержки.
|
|
183
|
+
- **Quota**: шкалы расхода за 5 часов, неделю и месяц с датами сброса и предупреждениями при 80% и 95%.
|
|
184
|
+
- **Accounts**: управление пулом дополнительных учетных записей.
|
|
185
|
+
- **Models**: поиск, обновление каталога, фильтрация allowlist, переопределение транспорта и просмотр стоимости токенов.
|
|
186
|
+
- **Connection**: таймауты, базовые URL и переключатель карточки сайдбара.
|
|
187
|
+
- **Plugin update**: статус версии и кнопка **Update now**.
|
|
188
|
+
|
|
189
|
+
## Команды CLI
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
/opencode status # статус аккаунтов, квоты и правила
|
|
193
|
+
/opencode usage # текущие окна квот
|
|
194
|
+
/opencode accounts # список меток, статус и расход 5h/wk/mo
|
|
195
|
+
/opencode models # список моделей и лимиты Go
|
|
196
|
+
/opencode rules # правила модель ➔ аккаунт
|
|
197
|
+
/opencode test [model] # проверочный запрос к модели
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Безопасность и надежность
|
|
201
|
+
|
|
202
|
+
- Запросы на изменение настроек и ключей разрешены только с loopback (`127.0.0.1` / `::1`) с обязательной проверкой same-origin для защиты от DNS-rebinding атак.
|
|
203
|
+
- Тексты запросов и ответов пользователей никогда не записываются в файлы журнала.
|
|
204
|
+
- При исчерпании квоты на одном ключе диалог пользователя не прерывается благодаря бесшовной ротации.
|
|
205
|
+
|
|
206
|
+
## Лицензия
|
|
207
|
+
|
|
208
|
+
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY). См. [LICENSE](./LICENSE) и [NOTICE](./NOTICE).
|
|
203
209
|
|