dsh-coding-subscription-oauth 0.5.8 → 0.6.0

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