dsh-coding-subscription-oauth 0.6.2 → 0.6.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 +222 -206
- package/CONTRIBUTING.md +129 -120
- package/INSTALL.md +218 -218
- package/LICENSE +19 -19
- package/NOTICE +11 -11
- package/README.de.md +289 -289
- package/README.es.md +290 -290
- package/README.fr.md +290 -290
- package/README.ja.md +290 -290
- package/README.ko.md +290 -290
- package/README.md +304 -304
- package/README.pt-BR.md +290 -290
- package/README.ru.md +290 -290
- package/README.zh-CN.md +302 -302
- package/compatibility/dsh-bom.json +0 -0
- package/cordis.patch.yml +13 -13
- package/docs/00-project-rules.md +212 -195
- package/docs/02-architecture.md +130 -130
- package/docs/02-architecture.zh-CN.md +130 -130
- package/lib/bin.js.map +1 -1
- package/lib/capability-settings.d.ts +8 -2
- package/lib/capability-settings.d.ts.map +1 -1
- package/lib/capability-tools.d.ts +7 -2
- package/lib/capability-tools.d.ts.map +1 -1
- package/lib/client.js +3 -3
- package/lib/client.js.map +2 -2
- package/lib/codex-images.d.ts +8 -0
- package/lib/codex-images.d.ts.map +1 -1
- package/lib/index.js +32 -7
- package/lib/index.js.map +2 -2
- package/lib/invariant.js.map +1 -1
- package/media/en/settings_accounts.png +0 -0
- package/media/en/settings_capabilities.png +0 -0
- package/media/en/settings_gateway.png +0 -0
- package/media/settings_accounts.png +0 -0
- package/media/settings_capabilities.png +0 -0
- package/media/settings_gateway.png +0 -0
- package/media/settings_overview.png +0 -0
- package/media/zh-CN/settings_accounts.png +0 -0
- package/media/zh-CN/settings_capabilities.png +0 -0
- package/media/zh-CN/settings_gateway.png +0 -0
- package/package.json +148 -148
- package/patches/dsh-agy@0.1.2.patch +25 -25
- package/scripts/release.mjs +186 -186
- package/scripts/smoke-deployed-routes.mjs +146 -146
- package/scripts/verify-deployed-catalog.mjs +87 -87
- package/src/adapter.ts +273 -273
- package/src/alias-adapter.ts +130 -130
- package/src/auth-routes.ts +921 -921
- package/src/auth.ts +67 -67
- package/src/bin.ts +350 -350
- package/src/capability-routes.ts +279 -279
- package/src/capability-runtime.ts +314 -313
- package/src/capability-settings.ts +671 -658
- package/src/capability-tools.ts +685 -666
- package/src/catalog.ts +271 -271
- package/src/client/GrokBuildSettings.tsx +771 -770
- package/src/client/api.ts +88 -88
- package/src/client/components/AboutTab.tsx +30 -30
- package/src/client/components/AccountsTab.tsx +241 -241
- package/src/client/components/Badge.tsx +33 -33
- package/src/client/components/CapabilitiesTab.tsx +265 -265
- package/src/client/components/CliPullPreview.tsx +116 -116
- package/src/client/components/CopyButton.tsx +57 -57
- package/src/client/components/GatewayTab.tsx +469 -469
- package/src/client/components/NoticeBanner.tsx +46 -46
- package/src/client/components/ProgressBar.tsx +53 -53
- package/src/client/components/ProviderCard.tsx +606 -606
- package/src/client/components/SettingsTabs.tsx +75 -75
- package/src/client/components/ToggleSwitch.tsx +71 -71
- package/src/client/constants.ts +230 -224
- package/src/client/display.ts +61 -61
- package/src/client/dshClientAdapter.ts +127 -127
- package/src/client/gatewaySnippets.ts +37 -37
- package/src/client/index.tsx +156 -156
- package/src/client/locales.ts +540 -535
- package/src/client/microStyles.ts +52 -52
- package/src/client/parsers.ts +398 -396
- package/src/client/styles.ts +325 -325
- package/src/client/types.ts +199 -197
- package/src/codex-http.ts +447 -447
- package/src/codex-images.ts +503 -485
- package/src/codex-model-capabilities.ts +320 -320
- package/src/codex-search.ts +245 -245
- package/src/codex-usage.ts +263 -263
- package/src/compatibility.ts +41 -41
- package/src/dsh-host-adapter.ts +173 -173
- package/src/gateway-anthropic-messages.ts +84 -84
- package/src/gateway-auth.ts +102 -102
- package/src/gateway-backend.ts +274 -274
- package/src/gateway-body.ts +49 -49
- package/src/gateway-config.ts +76 -76
- package/src/gateway-http.ts +104 -104
- package/src/gateway-openai-chat.ts +124 -124
- package/src/gateway-openai-responses.ts +53 -53
- package/src/gateway-parse.ts +224 -224
- package/src/gateway-protocol.ts +52 -52
- package/src/gateway-routes.ts +158 -158
- package/src/gateway.ts +258 -258
- package/src/grok-errors.ts +24 -24
- package/src/grok-imagine.ts +1627 -1627
- package/src/grok-import.ts +151 -151
- package/src/http-json.ts +82 -82
- package/src/ids.ts +59 -59
- package/src/imagine-routes.ts +463 -463
- package/src/index.ts +709 -709
- package/src/invariant.ts +17 -17
- package/src/kimi-errors.ts +26 -26
- package/src/media-store.ts +927 -927
- package/src/oauth-import-routes.ts +324 -324
- package/src/oauth-providers.ts +152 -152
- package/src/oauth-session.ts +183 -183
- package/src/oauth-sources.ts +1104 -1104
- package/src/oauth.ts +620 -620
- package/src/provider.ts +128 -128
- package/src/proxy.ts +11 -11
- package/src/redact.ts +72 -72
- package/src/session.ts +218 -218
- package/src/store.ts +217 -217
- package/src/web-origin.ts +296 -296
- package/src/web-routes.ts +38 -38
package/README.ru.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
<!-- banner -->
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-
# 🔐 dsh-coding-subscription-oauth
|
|
6
|
-
|
|
7
|
-
**v0.6.
|
|
8
|
-
|
|
9
|
-
**Плагин OAuth для подписок на кодинг для [DeepSeek Harness](https://github.com/deepseek-ai/dsh).** Войдите один раз по уже оплаченным подпискам — и используйте их модели из страницы настроек или CLI dsh. **Никаких вставленных токенов в чат.**
|
|
10
|
-
|
|
11
|
-
[](LICENSE)
|
|
12
|
-
[](CONTRIBUTING.md)
|
|
13
|
-
|
|
14
|
-
*[English](README.md) · [中文版](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Português (BR)](README.pt-BR.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md)*
|
|
15
|
-
|
|
1
|
+
|
|
2
|
+
<!-- banner -->
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
# 🔐 dsh-coding-subscription-oauth
|
|
6
|
+
|
|
7
|
+
**v0.6.3 · ранее `dsh-grok-build`
|
|
8
|
+
|
|
9
|
+
**Плагин OAuth для подписок на кодинг для [DeepSeek Harness](https://github.com/deepseek-ai/dsh).** Войдите один раз по уже оплаченным подпискам — и используйте их модели из страницы настроек или CLI dsh. **Никаких вставленных токенов в чат.**
|
|
10
|
+
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](CONTRIBUTING.md)
|
|
13
|
+
|
|
14
|
+
*[English](README.md) · [中文版](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Português (BR)](README.pt-BR.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md)*
|
|
15
|
+
|
|
16
16
|
</div>
|
|
17
17
|
|
|
18
18
|
---
|
|
@@ -20,285 +20,285 @@
|
|
|
20
20
|
> **Upgrade / 升级:** Follow the versioned steps in [`INSTALL.md`](INSTALL.md). Install into the existing `web` profile, keep profile/config/credential files, and restart one existing DSH Web process after all packages are updated. When Hub and Subscription are both used, `dsh-coding-oauth-core@0.1.0` is their shared npm dependency, not a separate DSH plugin.
|
|
21
21
|
|
|
22
22
|
---
|
|
23
|
-
|
|
24
|
-
## Смена имени
|
|
25
|
-
|
|
26
|
-
Сначала репозиторий назывался **`dsh-grok-build`** (только Grok Build). Теперь это OAuth для SuperGrok / Codex / Kimi / Claude / Antigravity.
|
|
27
|
-
|
|
28
|
-
| | Используйте | По-прежнему работает |
|
|
29
|
-
|---|---|---|
|
|
30
|
-
| GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (тот же `main`) |
|
|
31
|
-
| npm | `dsh-coding-subscription-oauth@0.6.
|
|
32
|
-
| CLI | `dsh-coding-oauth` | `dsh-grok-build` |
|
|
33
|
-
| Cordis plugin id | `llm-grok-build-oauth` | без изменений |
|
|
34
|
-
| HTTP API страницы настроек | `/plugins/dsh-grok-build/*` | без изменений |
|
|
35
|
-
| Файлы учёток | `$DSH_HOME/.grok-build-auth.json` и остальные `*-oauth-auth.json` | без изменений |
|
|
36
|
-
|
|
37
|
-
## ✨ Возможности
|
|
38
|
-
|
|
39
|
-
- 🧾 **Своя подписка** — используйте уже оплаченные планы для кодинга вместо отдельных API-ключей.
|
|
40
|
-
- 🔑 **Локальный OAuth, без вставки ключа** — авторизация в странице настроек или CLI; токены никогда не попадают в чат.
|
|
41
|
-
- 🧩 **Один плагин, пять провайдеров** — Grok Build, Codex, Kimi, Claude и Google Antigravity.
|
|
42
|
-
- 🛡️ **Безопасность по замыслу** — файлы учётных данных только-владелец `0600`, атомарная запись, межпроцессная блокировка файла.
|
|
43
|
-
- ⚙️ **Динамический каталог** — селектор показывает только авторизованные маршруты с пометкой `(OAuth)`, включая `xhigh` для grok-4.6.
|
|
44
|
-
- 🌐 **С учётом прокси** — проксируется только проверенные доверенные домены подписок.
|
|
45
|
-
- 📥 **Ручной CLI Pull** — настройки обнаруживают разрешённые официальные OAuth-файлы CLI Grok/Codex/Kimi/Claude только для чтения; вы забираете одностороннюю копию после предпросмотра и подтверждения перезаписи.
|
|
46
|
-
- 🗂️ **Настройки во вкладках** — Accounts, Gateway, Capabilities и About; на удалённых хостах предпочтителен device code и меньше шума CLI missing; вошедшие карточки свёрнуты, пока их не развернёшь.
|
|
47
|
-
- 🎛️ **Опциональные возможности, по умолчанию выключены** — поиск Codex, использование/квота, генерация/редактирование изображений, Fast и Grok Imagine применяются сразу при включении.
|
|
48
|
-
- 🔌 **Локальный API-шлюз по opt-in** — по умолчанию выключенный loopback-сервер, совместимый с OpenAI/Anthropic; для ваших собственных инструментов, а не публичный relay.
|
|
49
|
-
|
|
50
|
-
## Какие проблемы подключения закрывает этот плагин
|
|
51
|
-
|
|
52
|
-
Обычно сюда приходят по этим поисковым запросам и ошибкам DSH.
|
|
53
|
-
| Искали / увидели | Что на самом деле сломано | Что делает плагин |
|
|
54
|
-
|---|---|---|
|
|
55
|
-
| SuperGrok / X Premium в DSH, Grok Build vs `api.x.ai` | Встроенный маршрут `xai` — это pay-as-you-go API. Подписка ходит на `cli-chat-proxy.grok.com` | Маршрут `grok-build` + отпечаток CLI (`X-XAI-Token-Auth` и др.), чтобы не ловить тихий 403 |
|
|
56
|
-
| `API key is invalid` / `AUTH` | GUI показывает этот текст на **любой** AUTH. Часто просто истёк короткий OAuth access token | Refresh за **5 минут** до expiry; при 401 токен сбрасывается и **step повторяется** |
|
|
57
|
-
| `INVALID_REPLAY_STATE` на втором ходе Codex/Kimi | Replay всё ещё нёс нативный provider id pi-ai | Сохраняется id маршрута Harness, старый replay чинится |
|
|
58
|
-
| у grok-4.6 нет **xhigh** | `/v1/models-v2` уже отдаёт `reasoning_efforts`; шаблон 4.5 прячет xhigh | Разбираем live efforts. У 4.6 есть xhigh; у 4.5 — low/medium/high |
|
|
59
|
-
| Kimi Code уходит как Anthropic `x-api-key` | OAuth-токен отправили как ключ Anthropic | Только `Authorization: Bearer` |
|
|
60
|
-
| Не вошедшие модели остаются в селекторе | Перечислялись все зарегистрированные маршруты | Неаутентифицированные маршруты пустые; вошедшие помечены `(OAuth)` |
|
|
61
|
-
| PKCE на удалённом / headless DSH | Нельзя вернуться на `localhost` | Device-code для Grok/Codex/Kimi; Claude принимает вставленный redirect URL |
|
|
62
|
-
| Прокси пускает Grok и ломает Kimi в Китае | Глобальный `HTTPS_PROXY` | Прокси только по allowlist; Kimi **напрямую**, пока не включён `proxyKimi: true` |
|
|
63
|
-
|
|
64
|
-
## Поддерживаемые провайдеры
|
|
65
|
-
|
|
66
|
-
| Провайдер | Маршрут | Аутентификация | Сосуществует с |
|
|
67
|
-
|---|---|---|---|
|
|
68
|
-
| **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` |
|
|
69
|
-
| **OpenAI Codex** | `codex-oauth` | ChatGPT Plus/Pro OAuth | `openai` |
|
|
70
|
-
| **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` |
|
|
71
|
-
| **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — |
|
|
72
|
-
| **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — |
|
|
73
|
-
|
|
74
|
-
> Вход по устройству Grok Build, динамический каталог `/v1/models-v2` и потоковая инференция Responses проверены на реальных развёртываниях. Codex/Kimi/Claude используют нативный OAuth/refresh провайдера из `@earendil-works/pi-ai` вместо переписывания флоу каждого вендора.
|
|
75
|
-
|
|
76
|
-
## 🚀 Быстрый старт
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# 1. установите текущую npm-версию в web-профиль
|
|
80
|
-
dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.
|
|
81
|
-
|
|
82
|
-
# 2. опционально — Google Antigravity (зафиксированная проверенная версия)
|
|
83
|
-
dsh plugin --profile web add dsh-agy@0.1.2
|
|
84
|
-
|
|
23
|
+
|
|
24
|
+
## Смена имени
|
|
25
|
+
|
|
26
|
+
Сначала репозиторий назывался **`dsh-grok-build`** (только Grok Build). Теперь это OAuth для SuperGrok / Codex / Kimi / Claude / Antigravity.
|
|
27
|
+
|
|
28
|
+
| | Используйте | По-прежнему работает |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (тот же `main`) |
|
|
31
|
+
| npm | `dsh-coding-subscription-oauth@0.6.3` (текущая версия) | Старого npm-пакета не было |
|
|
32
|
+
| CLI | `dsh-coding-oauth` | `dsh-grok-build` |
|
|
33
|
+
| Cordis plugin id | `llm-grok-build-oauth` | без изменений |
|
|
34
|
+
| HTTP API страницы настроек | `/plugins/dsh-grok-build/*` | без изменений |
|
|
35
|
+
| Файлы учёток | `$DSH_HOME/.grok-build-auth.json` и остальные `*-oauth-auth.json` | без изменений |
|
|
36
|
+
|
|
37
|
+
## ✨ Возможности
|
|
38
|
+
|
|
39
|
+
- 🧾 **Своя подписка** — используйте уже оплаченные планы для кодинга вместо отдельных API-ключей.
|
|
40
|
+
- 🔑 **Локальный OAuth, без вставки ключа** — авторизация в странице настроек или CLI; токены никогда не попадают в чат.
|
|
41
|
+
- 🧩 **Один плагин, пять провайдеров** — Grok Build, Codex, Kimi, Claude и Google Antigravity.
|
|
42
|
+
- 🛡️ **Безопасность по замыслу** — файлы учётных данных только-владелец `0600`, атомарная запись, межпроцессная блокировка файла.
|
|
43
|
+
- ⚙️ **Динамический каталог** — селектор показывает только авторизованные маршруты с пометкой `(OAuth)`, включая `xhigh` для grok-4.6.
|
|
44
|
+
- 🌐 **С учётом прокси** — проксируется только проверенные доверенные домены подписок.
|
|
45
|
+
- 📥 **Ручной CLI Pull** — настройки обнаруживают разрешённые официальные OAuth-файлы CLI Grok/Codex/Kimi/Claude только для чтения; вы забираете одностороннюю копию после предпросмотра и подтверждения перезаписи.
|
|
46
|
+
- 🗂️ **Настройки во вкладках** — Accounts, Gateway, Capabilities и About; на удалённых хостах предпочтителен device code и меньше шума CLI missing; вошедшие карточки свёрнуты, пока их не развернёшь.
|
|
47
|
+
- 🎛️ **Опциональные возможности, по умолчанию выключены** — поиск Codex, использование/квота, генерация/редактирование изображений, Fast и Grok Imagine применяются сразу при включении. Дополнительный выключенный по умолчанию переключатель разрешает маршрутам не-Codex моделей вызывать инструменты изображений Codex, не обходя вход Codex, сессию и проверку владения вложениями.
|
|
48
|
+
- 🔌 **Локальный API-шлюз по opt-in** — по умолчанию выключенный loopback-сервер, совместимый с OpenAI/Anthropic; для ваших собственных инструментов, а не публичный relay.
|
|
49
|
+
|
|
50
|
+
## Какие проблемы подключения закрывает этот плагин
|
|
51
|
+
|
|
52
|
+
Обычно сюда приходят по этим поисковым запросам и ошибкам DSH.
|
|
53
|
+
| Искали / увидели | Что на самом деле сломано | Что делает плагин |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| SuperGrok / X Premium в DSH, Grok Build vs `api.x.ai` | Встроенный маршрут `xai` — это pay-as-you-go API. Подписка ходит на `cli-chat-proxy.grok.com` | Маршрут `grok-build` + отпечаток CLI (`X-XAI-Token-Auth` и др.), чтобы не ловить тихий 403 |
|
|
56
|
+
| `API key is invalid` / `AUTH` | GUI показывает этот текст на **любой** AUTH. Часто просто истёк короткий OAuth access token | Refresh за **5 минут** до expiry; при 401 токен сбрасывается и **step повторяется** |
|
|
57
|
+
| `INVALID_REPLAY_STATE` на втором ходе Codex/Kimi | Replay всё ещё нёс нативный provider id pi-ai | Сохраняется id маршрута Harness, старый replay чинится |
|
|
58
|
+
| у grok-4.6 нет **xhigh** | `/v1/models-v2` уже отдаёт `reasoning_efforts`; шаблон 4.5 прячет xhigh | Разбираем live efforts. У 4.6 есть xhigh; у 4.5 — low/medium/high |
|
|
59
|
+
| Kimi Code уходит как Anthropic `x-api-key` | OAuth-токен отправили как ключ Anthropic | Только `Authorization: Bearer` |
|
|
60
|
+
| Не вошедшие модели остаются в селекторе | Перечислялись все зарегистрированные маршруты | Неаутентифицированные маршруты пустые; вошедшие помечены `(OAuth)` |
|
|
61
|
+
| PKCE на удалённом / headless DSH | Нельзя вернуться на `localhost` | Device-code для Grok/Codex/Kimi; Claude принимает вставленный redirect URL |
|
|
62
|
+
| Прокси пускает Grok и ломает Kimi в Китае | Глобальный `HTTPS_PROXY` | Прокси только по allowlist; Kimi **напрямую**, пока не включён `proxyKimi: true` |
|
|
63
|
+
|
|
64
|
+
## Поддерживаемые провайдеры
|
|
65
|
+
|
|
66
|
+
| Провайдер | Маршрут | Аутентификация | Сосуществует с |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` |
|
|
69
|
+
| **OpenAI Codex** | `codex-oauth` | ChatGPT Plus/Pro OAuth | `openai` |
|
|
70
|
+
| **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` |
|
|
71
|
+
| **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — |
|
|
72
|
+
| **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — |
|
|
73
|
+
|
|
74
|
+
> Вход по устройству Grok Build, динамический каталог `/v1/models-v2` и потоковая инференция Responses проверены на реальных развёртываниях. Codex/Kimi/Claude используют нативный OAuth/refresh провайдера из `@earendil-works/pi-ai` вместо переписывания флоу каждого вендора.
|
|
75
|
+
|
|
76
|
+
## 🚀 Быстрый старт
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# 1. установите текущую npm-версию в web-профиль
|
|
80
|
+
dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.3
|
|
81
|
+
|
|
82
|
+
# 2. опционально — Google Antigravity (зафиксированная проверенная версия)
|
|
83
|
+
dsh plugin --profile web add dsh-agy@0.1.2
|
|
84
|
+
|
|
85
85
|
# 3. перезапустите существующий процесс DSH Web через настроенный менеджер процессов
|
|
86
86
|
# `dsh web` — официальный псевдоним CLI, а не имя службы.
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Затем откройте **Settings → Coding OAuth** и войдите в любого провайдера. Готово — выберите авторизованную модель в селекторе.
|
|
90
|
-
|
|
91
|
-
## 📚 Содержание
|
|
92
|
-
|
|
93
|
-
- [Смена имени](#смена-имени)
|
|
94
|
-
- [Возможности](#-возможности)
|
|
95
|
-
- [Какие проблемы подключения закрывает этот плагин](#какие-проблемы-подключения-закрывает-этот-плагин)
|
|
96
|
-
- [Поддерживаемые провайдеры](#поддерживаемые-провайдеры)
|
|
97
|
-
- [Быстрый старт](#-быстрый-старт)
|
|
98
|
-
- [Установка](#установка)
|
|
99
|
-
- [Страница настроек](#страница-настроек)
|
|
100
|
-
- [Дополнительные возможности](#дополнительные-возможности)
|
|
101
|
-
- [Локальный API-шлюз](#локальный-api-шлюз)
|
|
102
|
-
- [CLI](#cli)
|
|
103
|
-
- [Kimi в Китае](#kimi-в-китае)
|
|
104
|
-
- [Сетевой прокси](#сетевой-прокси)
|
|
105
|
-
- [Отказоустойчивость](#отказоустойчивость)
|
|
106
|
-
- [Учётные данные](#учётные-данные)
|
|
107
|
-
- [Архитектура](#архитектура)
|
|
108
|
-
- [Технические заметки](#технические-заметки)
|
|
109
|
-
- [Соответствие](#соответствие)
|
|
110
|
-
- [Документация](#документация)
|
|
111
|
-
- [Связанное](#связанное)
|
|
112
|
-
- [Участие](#участие)
|
|
113
|
-
- [Лицензия](#лицензия)
|
|
114
|
-
|
|
115
|
-
## Установка
|
|
116
|
-
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Затем откройте **Settings → Coding OAuth** и войдите в любого провайдера. Готово — выберите авторизованную модель в селекторе.
|
|
90
|
+
|
|
91
|
+
## 📚 Содержание
|
|
92
|
+
|
|
93
|
+
- [Смена имени](#смена-имени)
|
|
94
|
+
- [Возможности](#-возможности)
|
|
95
|
+
- [Какие проблемы подключения закрывает этот плагин](#какие-проблемы-подключения-закрывает-этот-плагин)
|
|
96
|
+
- [Поддерживаемые провайдеры](#поддерживаемые-провайдеры)
|
|
97
|
+
- [Быстрый старт](#-быстрый-старт)
|
|
98
|
+
- [Установка](#установка)
|
|
99
|
+
- [Страница настроек](#страница-настроек)
|
|
100
|
+
- [Дополнительные возможности](#дополнительные-возможности)
|
|
101
|
+
- [Локальный API-шлюз](#локальный-api-шлюз)
|
|
102
|
+
- [CLI](#cli)
|
|
103
|
+
- [Kimi в Китае](#kimi-в-китае)
|
|
104
|
+
- [Сетевой прокси](#сетевой-прокси)
|
|
105
|
+
- [Отказоустойчивость](#отказоустойчивость)
|
|
106
|
+
- [Учётные данные](#учётные-данные)
|
|
107
|
+
- [Архитектура](#архитектура)
|
|
108
|
+
- [Технические заметки](#технические-заметки)
|
|
109
|
+
- [Соответствие](#соответствие)
|
|
110
|
+
- [Документация](#документация)
|
|
111
|
+
- [Связанное](#связанное)
|
|
112
|
+
- [Участие](#участие)
|
|
113
|
+
- [Лицензия](#лицензия)
|
|
114
|
+
|
|
115
|
+
## Установка
|
|
116
|
+
|
|
117
117
|
Требуется DeepSeek Harness `0.1.1-rc.2` и Node.js 22.19+. Полные детали в [заметках по установке](INSTALL.md).
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
# текущая npm-версия (рекомендуется)
|
|
121
|
-
dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.
|
|
122
|
-
|
|
123
|
-
# разработка/альтернатива: из GitHub
|
|
124
|
-
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
|
|
125
|
-
|
|
126
|
-
# разработка/альтернатива: локальный checkout
|
|
127
|
-
# dsh plugin --profile web add ./dsh-coding-subscription-oauth
|
|
128
|
-
```
|
|
129
|
-
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# текущая npm-версия (рекомендуется)
|
|
121
|
+
dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.3
|
|
122
|
+
|
|
123
|
+
# разработка/альтернатива: из GitHub
|
|
124
|
+
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
|
|
125
|
+
|
|
126
|
+
# разработка/альтернатива: локальный checkout
|
|
127
|
+
# dsh plugin --profile web add ./dsh-coding-subscription-oauth
|
|
128
|
+
```
|
|
129
|
+
|
|
130
130
|
После установки перезапустите существующий процесс DSH Web. Проверка на реальном развёртывании:
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
pnpm run verify:deployed # проверяет реальный /api/llm.models + статус OAuth
|
|
134
|
-
DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # если Google уже вошёл
|
|
135
|
-
|
|
136
|
-
DSH_RESTORE_PROVIDER=openai \
|
|
137
|
-
DSH_RESTORE_MODEL=gpt-5.6-sol \
|
|
138
|
-
DSH_RESTORE_REASONING=max \
|
|
139
|
-
pnpm run smoke:deployed # реальные вызовы Codex/Kimi + replay второго turn
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
> `smoke:deployed` создаёт временную сессию, проверяет вызовы инструментов Codex и Kimi и второй пользовательский turn (регрессию `INVALID_REPLAY_STATE`), восстанавливает объявленную модель по умолчанию и затем архивирует сессию.
|
|
143
|
-
|
|
144
|
-
## Страница настроек
|
|
145
|
-
|
|
146
|
-
Откройте **Settings → Coding OAuth**:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
<table>
|
|
151
|
-
<tr>
|
|
152
|
-
<td align="center" valign="top" width="33%">
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
pnpm run verify:deployed # проверяет реальный /api/llm.models + статус OAuth
|
|
134
|
+
DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # если Google уже вошёл
|
|
135
|
+
|
|
136
|
+
DSH_RESTORE_PROVIDER=openai \
|
|
137
|
+
DSH_RESTORE_MODEL=gpt-5.6-sol \
|
|
138
|
+
DSH_RESTORE_REASONING=max \
|
|
139
|
+
pnpm run smoke:deployed # реальные вызовы Codex/Kimi + replay второго turn
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
> `smoke:deployed` создаёт временную сессию, проверяет вызовы инструментов Codex и Kimi и второй пользовательский turn (регрессию `INVALID_REPLAY_STATE`), восстанавливает объявленную модель по умолчанию и затем архивирует сессию.
|
|
143
|
+
|
|
144
|
+
## Страница настроек
|
|
145
|
+
|
|
146
|
+
Откройте **Settings → Coding OAuth**:
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
<table>
|
|
151
|
+
<tr>
|
|
152
|
+
<td align="center" valign="top" width="33%">
|
|
153
153
|
<a href="media/en/settings_accounts.png"><img src="media/en/settings_accounts.png" alt="Coding OAuth Accounts tab" width="280" /></a><br />
|
|
154
|
-
<sub>Accounts</sub>
|
|
155
|
-
</td>
|
|
156
|
-
<td align="center" valign="top" width="33%">
|
|
154
|
+
<sub>Accounts</sub>
|
|
155
|
+
</td>
|
|
156
|
+
<td align="center" valign="top" width="33%">
|
|
157
157
|
<a href="media/en/settings_gateway.png"><img src="media/en/settings_gateway.png" alt="Coding OAuth Gateway tab" width="280" /></a><br />
|
|
158
|
-
<sub>Gateway</sub>
|
|
159
|
-
</td>
|
|
160
|
-
<td align="center" valign="top" width="33%">
|
|
158
|
+
<sub>Gateway</sub>
|
|
159
|
+
</td>
|
|
160
|
+
<td align="center" valign="top" width="33%">
|
|
161
161
|
<a href="media/en/settings_capabilities.png"><img src="media/en/settings_capabilities.png" alt="Coding OAuth Capabilities tab" width="280" /></a><br />
|
|
162
|
-
<sub>Capabilities</sub>
|
|
163
|
-
</td>
|
|
164
|
-
</tr>
|
|
165
|
-
</table>
|
|
166
|
-
|
|
167
|
-
| Провайдер | Методы |
|
|
168
|
-
|---|---|
|
|
169
|
-
| Grok | код авторизации · код устройства · импорт CLI Grok · выбор моделей |
|
|
170
|
-
| Codex | код устройства (рекомендуется на удалённом DSH) · PKCE в браузере |
|
|
171
|
-
| Kimi | код устройства |
|
|
172
|
-
| Claude | PKCE в браузере (удалённый браузер может вставить полный URL редиректа localhost) |
|
|
173
|
-
| Antigravity | статус установки `dsh-agy` + локальные для профиля CLI-команды |
|
|
174
|
-
|
|
175
|
-
Страница настроек разделена на четыре верхние вкладки: **Accounts**, **Gateway**, **Capabilities** и **About**. Карточки вошедших провайдеров сворачиваются в компактное резюме и разворачиваются для редактирования моделей. Предпросмотр CLI pull занимает всю ширину, а статус Imagine показан на вкладке Capabilities.
|
|
176
|
-
|
|
177
|
-
Селектор показывает только маршруты, завершившие аутентификацию; неавторизованные провайдеры возвращают пустой список. Имена провайдеров получают `(OAuth)`, а каталог обновляется через `llm/adapters-updated` после входа/выхода.
|
|
178
|
-
|
|
179
|
-
## Дополнительные возможности
|
|
180
|
-
|
|
181
|
-
Все
|
|
182
|
-
|
|
183
|
-
## Локальный API-шлюз
|
|
184
|
-
|
|
185
|
-
По умолчанию **выключен**. При включении запускается изолированный `node:http`-сервер (не веб-порт DSH) на `127.0.0.1:18080`, переиспользующий те же вошедшие OAuth-сессии:
|
|
186
|
-
|
|
187
|
-
```yaml
|
|
188
|
-
gateway:
|
|
189
|
-
enabled: false
|
|
190
|
-
bind: 127.0.0.1
|
|
191
|
-
port: 18080
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Эндпоинты: `GET /healthz`, `GET /v1/models`, `POST /v1/chat/completions`, `POST /v1/responses`, `POST /v1/messages`. Bearer-ключ хранится в `$DSH_HOME/.coding-oauth-gateway.json` (`0600`). В настройках можно скопировать базовый URL OpenAI (база + `/v1`), базовый URL Anthropic и текущий Bearer-ключ без ротации; показ ключа возможен только через loopback и не сохраняется в хранилище браузера. Ротация — подтверждаемое деструктивное действие. Порт прослушивания можно отредактировать напрямую и сохранить через Apply или заполнить кнопкой Random (18100–18999); выбранный порт сохраняется в доступном только владельцу документе шлюза, а работающий listener перепривязывается. Bind по-прежнему задаётся только в YAML; для не-loopback bind требуется ключ. Это не удалённый relay.
|
|
195
|
-
|
|
196
|
-
## CLI
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
# `dsh-grok-build` по-прежнему алиас той же команды
|
|
200
|
-
dsh-coding-oauth login [--pkce] | import | status | logout
|
|
201
|
-
|
|
202
|
-
# более новые провайдеры
|
|
203
|
-
dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude
|
|
204
|
-
dsh-coding-oauth status all
|
|
205
|
-
dsh-coding-oauth logout codex
|
|
206
|
-
|
|
207
|
-
# Antigravity (сначала установите в web-профиль)
|
|
208
|
-
dsh plugin --profile web exec dsh-agy login --headless
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
> CLI `dsh-agy` изменяет пул аккаунтов вне процесса DSH, поэтому не может отправить событие каталога внутри процесса — после входа/выхода закройте и снова откройте селектор моделей.
|
|
212
|
-
|
|
213
|
-
## Kimi в Китае
|
|
214
|
-
|
|
215
|
-
OAuth подписки Kimi Code использует `https://auth.kimi.com`; инференция — `https://api.kimi.com/coding`. `https://api.moonshot.cn/v1` — это канал API-ключей с оплатой за использование **Moonshot Open Platform**; переключаемого «китайского OAuth-эндпоинта» не существует. Этот плагин использует отдельный маршрут `kimi-code-oauth` и не влияет на существующую конфигурацию `kimi-coding` по API-ключу.
|
|
216
|
-
|
|
217
|
-
## Сетевой прокси
|
|
218
|
-
|
|
219
|
-
Приоритет: `config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`.
|
|
220
|
-
|
|
221
|
-
```yaml
|
|
222
|
-
- id: llm-grok-build-oauth
|
|
223
|
-
config:
|
|
224
|
-
proxy: http://127.0.0.1:7890
|
|
225
|
-
proxyKimi: false
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
Проксируются только проверенные домены подписок (xAI/Grok, OpenAI Codex, Claude/Anthropic, Google Antigravity); остальной трафик DSH сохраняет исходный диспетчер. Kimi по умолчанию работает напрямую и использует прокси только при `proxyKimi: true`.
|
|
229
|
-
|
|
230
|
-
## Отказоустойчивость
|
|
231
|
-
|
|
232
|
-
OAuth access token обновляется **за пять минут** до сохранённого срока (pi-ai 0.84+). Если апстрим всё же отклоняет локально ещё живой токен кодом 401/403, плагин сдвигает сохранённый `expires` в прошлое, и повторный шаг сначала обновляет токен, затем повторяет запрос.
|
|
233
|
-
|
|
234
|
-
Повторы идут по политике harness: временные сбои (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **и `AUTH`** повторяются с экспоненциальной задержкой (5 попыток, 5 с → 10 с → 20 с → 40 с → 80 с (~155 с суммарно), 10% jitter). Исчерпание квоты и мёртвый refresh token **не** повторяются. Переопределение для развёртывания:
|
|
235
|
-
|
|
236
|
-
```yaml
|
|
237
|
-
- id: llm-grok-build-oauth
|
|
238
|
-
config:
|
|
239
|
-
retryPolicy:
|
|
240
|
-
mode: normal
|
|
241
|
-
maxRetries: 5
|
|
242
|
-
retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
|
|
243
|
-
backoff: { initialDelayMs: 5000, maxDelayMs: 80000, jitterRatio: 0.1 }
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
## Учётные данные
|
|
247
|
-
|
|
248
|
-
Только-владелец `0600`, атомарная запись, межпроцессная блокировка файла:
|
|
249
|
-
|
|
250
|
-
- `$DSH_HOME/.grok-build-auth.json`
|
|
251
|
-
- `$DSH_HOME/.codex-oauth-auth.json`
|
|
252
|
-
- `$DSH_HOME/.kimi-code-oauth-auth.json`
|
|
253
|
-
- `$DSH_HOME/.claude-code-oauth-auth.json`
|
|
254
|
-
|
|
255
|
-
Кеши выбора живут в соответствующих файлах `*-models.json`. **Ни один HTTP-статус, лог или интерфейс не должен возвращать токен.**
|
|
256
|
-
|
|
257
|
-
## Архитектура
|
|
258
|
-
|
|
259
|
-
```mermaid
|
|
260
|
-
flowchart LR
|
|
261
|
-
subgraph DSH["DSH Harness"]
|
|
262
|
-
UI[Настройки / Web · Coding OAuth] --> LLM[llm route]
|
|
263
|
-
LLM --> ALIA[Адаптер алиасов маршрутов]
|
|
264
|
-
end
|
|
265
|
-
ALIA --> PI[нативный провайдер pi-ai<br/>OAuth · refresh · stream]
|
|
266
|
-
PI --> GROK[Grok Build]
|
|
267
|
-
PI --> COD[Codex]
|
|
268
|
-
PI --> KIMI[Kimi]
|
|
269
|
-
PI --> CLAU[Claude]
|
|
270
|
-
AGY[плагин dsh-agy] --> GAL[Google Antigravity]
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
## Технические заметки
|
|
274
|
-
|
|
275
|
-
- **Grok Build**: собственный провайдер Responses на `cli-chat-proxy.grok.com/v1`, заголовки fingerprint CLI, динамический каталог моделей.
|
|
276
|
-
- **Codex/Kimi/Claude**: нативные провайдеры pi-ai отвечают за OAuth и refresh; адаптер алиасов маршрутов сопоставляет их с нативными id, при этом идентичность модели не меняется.
|
|
277
|
-
- Токен доступа Kimi явно преобразуется в `Authorization: Bearer` — никогда не отправляется по ошибке как `x-api-key` Anthropic.
|
|
278
|
-
- Google Antigravity здесь **не** реверс-инжинирится; используется выделенный плагин DSH с зафиксированной версией.
|
|
279
|
-
|
|
280
|
-
## Соответствие
|
|
281
|
-
|
|
282
|
-
Использование подписок на кодинг через сторонний harness может находиться в серой зоне условий каждого вендора и вызывать контроль квот, региона или риска аккаунта. **Используйте только свои аккаунты**; этот проект не поддерживает массовые аккаунты, перепродажу квот, удалённый relay, обход paywall или выдачу себя за клиента. Для коммерческого использования предпочитайте официальные каналы API-ключей вендоров.
|
|
283
|
-
|
|
284
|
-
## Документация
|
|
285
|
-
|
|
286
|
-
| Документ | Назначение |
|
|
287
|
-
|---|---|
|
|
288
|
-
| [`INSTALL.md`](INSTALL.md) | Детали установки и использования |
|
|
289
|
-
| [`CHANGELOG.md`](CHANGELOG.md) | История релизов |
|
|
290
|
-
| [`docs/00-project-rules.md`](docs/00-project-rules.md) | Версионирование, цикл релиза, разделение публичное/личное |
|
|
291
|
-
| [`docs/02-architecture.md`](docs/02-architecture.md) | Внутренняя архитектура (маршруты, поток данных, модули, API) · [中文](docs/02-architecture.zh-CN.md) |
|
|
292
|
-
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | Руководство по участию |
|
|
293
|
-
|
|
294
|
-
## Связанное
|
|
295
|
-
|
|
296
|
-
- [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — отдельный зафиксированный плагин для Google Antigravity.
|
|
297
|
-
|
|
298
|
-
## Участие
|
|
299
|
-
|
|
300
|
-
Приветствуются любые вклады — фичи, документация, переводы, отчёты об ошибках. См. **[CONTRIBUTING](CONTRIBUTING.md)** о порядке, конвенциях коммитов и цикле релиза. Если вашего языка нет в списке, отправьте PR с переводом README, и мы добавим его в таблицу выше.
|
|
301
|
-
|
|
302
|
-
## Лицензия
|
|
303
|
-
|
|
304
|
-
[Apache-2.0](LICENSE) · см. [NOTICE](NOTICE). Части заимствованы из проекта [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).
|
|
162
|
+
<sub>Capabilities</sub>
|
|
163
|
+
</td>
|
|
164
|
+
</tr>
|
|
165
|
+
</table>
|
|
166
|
+
|
|
167
|
+
| Провайдер | Методы |
|
|
168
|
+
|---|---|
|
|
169
|
+
| Grok | код авторизации · код устройства · импорт CLI Grok · выбор моделей |
|
|
170
|
+
| Codex | код устройства (рекомендуется на удалённом DSH) · PKCE в браузере |
|
|
171
|
+
| Kimi | код устройства |
|
|
172
|
+
| Claude | PKCE в браузере (удалённый браузер может вставить полный URL редиректа localhost) |
|
|
173
|
+
| Antigravity | статус установки `dsh-agy` + локальные для профиля CLI-команды |
|
|
174
|
+
|
|
175
|
+
Страница настроек разделена на четыре верхние вкладки: **Accounts**, **Gateway**, **Capabilities** и **About**. Карточки вошедших провайдеров сворачиваются в компактное резюме и разворачиваются для редактирования моделей. Предпросмотр CLI pull занимает всю ширину, а статус Imagine показан на вкладке Capabilities.
|
|
176
|
+
|
|
177
|
+
Селектор показывает только маршруты, завершившие аутентификацию; неавторизованные провайдеры возвращают пустой список. Имена провайдеров получают `(OAuth)`, а каталог обновляется через `llm/adapters-updated` после входа/выхода.
|
|
178
|
+
|
|
179
|
+
## Дополнительные возможности
|
|
180
|
+
|
|
181
|
+
Все восемь переключателей `codexSearch`, `codexImages`, `codexImageEdits`, `codexImagesAnyModel`, `codexUsage`, `codexFast`, `grokImagineImage` и `grokImagineVideo` по умолчанию выключены и применяются без перезапуска. Ограничения: `searchResults` (1–20, по умолчанию 5), `imageCount` (1–4, по умолчанию 1) и `videoArtifactTtlMs` (1 час–7 дней, по умолчанию 7 дней; в интерфейсе 1–168 часов). Уменьшение срока сразу сокращает и очищает существующие артефакты; увеличение действует только на новые.
|
|
182
|
+
|
|
183
|
+
## Локальный API-шлюз
|
|
184
|
+
|
|
185
|
+
По умолчанию **выключен**. При включении запускается изолированный `node:http`-сервер (не веб-порт DSH) на `127.0.0.1:18080`, переиспользующий те же вошедшие OAuth-сессии:
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
gateway:
|
|
189
|
+
enabled: false
|
|
190
|
+
bind: 127.0.0.1
|
|
191
|
+
port: 18080
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Эндпоинты: `GET /healthz`, `GET /v1/models`, `POST /v1/chat/completions`, `POST /v1/responses`, `POST /v1/messages`. Bearer-ключ хранится в `$DSH_HOME/.coding-oauth-gateway.json` (`0600`). В настройках можно скопировать базовый URL OpenAI (база + `/v1`), базовый URL Anthropic и текущий Bearer-ключ без ротации; показ ключа возможен только через loopback и не сохраняется в хранилище браузера. Ротация — подтверждаемое деструктивное действие. Порт прослушивания можно отредактировать напрямую и сохранить через Apply или заполнить кнопкой Random (18100–18999); выбранный порт сохраняется в доступном только владельцу документе шлюза, а работающий listener перепривязывается. Bind по-прежнему задаётся только в YAML; для не-loopback bind требуется ключ. Это не удалённый relay.
|
|
195
|
+
|
|
196
|
+
## CLI
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# `dsh-grok-build` по-прежнему алиас той же команды
|
|
200
|
+
dsh-coding-oauth login [--pkce] | import | status | logout
|
|
201
|
+
|
|
202
|
+
# более новые провайдеры
|
|
203
|
+
dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude
|
|
204
|
+
dsh-coding-oauth status all
|
|
205
|
+
dsh-coding-oauth logout codex
|
|
206
|
+
|
|
207
|
+
# Antigravity (сначала установите в web-профиль)
|
|
208
|
+
dsh plugin --profile web exec dsh-agy login --headless
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
> CLI `dsh-agy` изменяет пул аккаунтов вне процесса DSH, поэтому не может отправить событие каталога внутри процесса — после входа/выхода закройте и снова откройте селектор моделей.
|
|
212
|
+
|
|
213
|
+
## Kimi в Китае
|
|
214
|
+
|
|
215
|
+
OAuth подписки Kimi Code использует `https://auth.kimi.com`; инференция — `https://api.kimi.com/coding`. `https://api.moonshot.cn/v1` — это канал API-ключей с оплатой за использование **Moonshot Open Platform**; переключаемого «китайского OAuth-эндпоинта» не существует. Этот плагин использует отдельный маршрут `kimi-code-oauth` и не влияет на существующую конфигурацию `kimi-coding` по API-ключу.
|
|
216
|
+
|
|
217
|
+
## Сетевой прокси
|
|
218
|
+
|
|
219
|
+
Приоритет: `config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`.
|
|
220
|
+
|
|
221
|
+
```yaml
|
|
222
|
+
- id: llm-grok-build-oauth
|
|
223
|
+
config:
|
|
224
|
+
proxy: http://127.0.0.1:7890
|
|
225
|
+
proxyKimi: false
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Проксируются только проверенные домены подписок (xAI/Grok, OpenAI Codex, Claude/Anthropic, Google Antigravity); остальной трафик DSH сохраняет исходный диспетчер. Kimi по умолчанию работает напрямую и использует прокси только при `proxyKimi: true`.
|
|
229
|
+
|
|
230
|
+
## Отказоустойчивость
|
|
231
|
+
|
|
232
|
+
OAuth access token обновляется **за пять минут** до сохранённого срока (pi-ai 0.84+). Если апстрим всё же отклоняет локально ещё живой токен кодом 401/403, плагин сдвигает сохранённый `expires` в прошлое, и повторный шаг сначала обновляет токен, затем повторяет запрос.
|
|
233
|
+
|
|
234
|
+
Повторы идут по политике harness: временные сбои (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **и `AUTH`** повторяются с экспоненциальной задержкой (5 попыток, 5 с → 10 с → 20 с → 40 с → 80 с (~155 с суммарно), 10% jitter). Исчерпание квоты и мёртвый refresh token **не** повторяются. Переопределение для развёртывания:
|
|
235
|
+
|
|
236
|
+
```yaml
|
|
237
|
+
- id: llm-grok-build-oauth
|
|
238
|
+
config:
|
|
239
|
+
retryPolicy:
|
|
240
|
+
mode: normal
|
|
241
|
+
maxRetries: 5
|
|
242
|
+
retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
|
|
243
|
+
backoff: { initialDelayMs: 5000, maxDelayMs: 80000, jitterRatio: 0.1 }
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Учётные данные
|
|
247
|
+
|
|
248
|
+
Только-владелец `0600`, атомарная запись, межпроцессная блокировка файла:
|
|
249
|
+
|
|
250
|
+
- `$DSH_HOME/.grok-build-auth.json`
|
|
251
|
+
- `$DSH_HOME/.codex-oauth-auth.json`
|
|
252
|
+
- `$DSH_HOME/.kimi-code-oauth-auth.json`
|
|
253
|
+
- `$DSH_HOME/.claude-code-oauth-auth.json`
|
|
254
|
+
|
|
255
|
+
Кеши выбора живут в соответствующих файлах `*-models.json`. **Ни один HTTP-статус, лог или интерфейс не должен возвращать токен.**
|
|
256
|
+
|
|
257
|
+
## Архитектура
|
|
258
|
+
|
|
259
|
+
```mermaid
|
|
260
|
+
flowchart LR
|
|
261
|
+
subgraph DSH["DSH Harness"]
|
|
262
|
+
UI[Настройки / Web · Coding OAuth] --> LLM[llm route]
|
|
263
|
+
LLM --> ALIA[Адаптер алиасов маршрутов]
|
|
264
|
+
end
|
|
265
|
+
ALIA --> PI[нативный провайдер pi-ai<br/>OAuth · refresh · stream]
|
|
266
|
+
PI --> GROK[Grok Build]
|
|
267
|
+
PI --> COD[Codex]
|
|
268
|
+
PI --> KIMI[Kimi]
|
|
269
|
+
PI --> CLAU[Claude]
|
|
270
|
+
AGY[плагин dsh-agy] --> GAL[Google Antigravity]
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Технические заметки
|
|
274
|
+
|
|
275
|
+
- **Grok Build**: собственный провайдер Responses на `cli-chat-proxy.grok.com/v1`, заголовки fingerprint CLI, динамический каталог моделей.
|
|
276
|
+
- **Codex/Kimi/Claude**: нативные провайдеры pi-ai отвечают за OAuth и refresh; адаптер алиасов маршрутов сопоставляет их с нативными id, при этом идентичность модели не меняется.
|
|
277
|
+
- Токен доступа Kimi явно преобразуется в `Authorization: Bearer` — никогда не отправляется по ошибке как `x-api-key` Anthropic.
|
|
278
|
+
- Google Antigravity здесь **не** реверс-инжинирится; используется выделенный плагин DSH с зафиксированной версией.
|
|
279
|
+
|
|
280
|
+
## Соответствие
|
|
281
|
+
|
|
282
|
+
Использование подписок на кодинг через сторонний harness может находиться в серой зоне условий каждого вендора и вызывать контроль квот, региона или риска аккаунта. **Используйте только свои аккаунты**; этот проект не поддерживает массовые аккаунты, перепродажу квот, удалённый relay, обход paywall или выдачу себя за клиента. Для коммерческого использования предпочитайте официальные каналы API-ключей вендоров.
|
|
283
|
+
|
|
284
|
+
## Документация
|
|
285
|
+
|
|
286
|
+
| Документ | Назначение |
|
|
287
|
+
|---|---|
|
|
288
|
+
| [`INSTALL.md`](INSTALL.md) | Детали установки и использования |
|
|
289
|
+
| [`CHANGELOG.md`](CHANGELOG.md) | История релизов |
|
|
290
|
+
| [`docs/00-project-rules.md`](docs/00-project-rules.md) | Версионирование, цикл релиза, разделение публичное/личное |
|
|
291
|
+
| [`docs/02-architecture.md`](docs/02-architecture.md) | Внутренняя архитектура (маршруты, поток данных, модули, API) · [中文](docs/02-architecture.zh-CN.md) |
|
|
292
|
+
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | Руководство по участию |
|
|
293
|
+
|
|
294
|
+
## Связанное
|
|
295
|
+
|
|
296
|
+
- [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — отдельный зафиксированный плагин для Google Antigravity.
|
|
297
|
+
|
|
298
|
+
## Участие
|
|
299
|
+
|
|
300
|
+
Приветствуются любые вклады — фичи, документация, переводы, отчёты об ошибках. См. **[CONTRIBUTING](CONTRIBUTING.md)** о порядке, конвенциях коммитов и цикле релиза. Если вашего языка нет в списке, отправьте PR с переводом README, и мы добавим его в таблицу выше.
|
|
301
|
+
|
|
302
|
+
## Лицензия
|
|
303
|
+
|
|
304
|
+
[Apache-2.0](LICENSE) · см. [NOTICE](NOTICE). Части заимствованы из проекта [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).
|