dsh-coding-subscription-oauth 0.5.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.
- package/CHANGELOG.md +136 -0
- package/CONTRIBUTING.md +109 -0
- package/INSTALL.md +220 -0
- package/LICENSE +19 -0
- package/NOTICE +11 -0
- package/README.de.md +254 -0
- package/README.es.md +254 -0
- package/README.fr.md +254 -0
- package/README.ja.md +254 -0
- package/README.ko.md +254 -0
- package/README.md +286 -0
- package/README.pt-BR.md +254 -0
- package/README.ru.md +254 -0
- package/README.zh-CN.md +271 -0
- package/cordis.patch.yml +13 -0
- package/docs/00-project-rules.md +195 -0
- package/docs/02-architecture.md +132 -0
- package/docs/02-architecture.zh-CN.md +128 -0
- package/lib/adapter.d.ts +24 -0
- package/lib/adapter.d.ts.map +1 -0
- package/lib/alias-adapter.d.ts +43 -0
- package/lib/alias-adapter.d.ts.map +1 -0
- package/lib/auth-routes.d.ts +155 -0
- package/lib/auth-routes.d.ts.map +1 -0
- package/lib/auth.d.ts +29 -0
- package/lib/auth.d.ts.map +1 -0
- package/lib/bin.d.ts +6 -0
- package/lib/bin.d.ts.map +1 -0
- package/lib/bin.js +27591 -0
- package/lib/bin.js.map +7 -0
- package/lib/capability-routes.d.ts +43 -0
- package/lib/capability-routes.d.ts.map +1 -0
- package/lib/capability-runtime.d.ts +56 -0
- package/lib/capability-runtime.d.ts.map +1 -0
- package/lib/capability-settings.d.ts +263 -0
- package/lib/capability-settings.d.ts.map +1 -0
- package/lib/capability-tools.d.ts +50 -0
- package/lib/capability-tools.d.ts.map +1 -0
- package/lib/catalog.d.ts +53 -0
- package/lib/catalog.d.ts.map +1 -0
- package/lib/client.js +3 -0
- package/lib/client.js.map +7 -0
- package/lib/codex-http.d.ts +77 -0
- package/lib/codex-http.d.ts.map +1 -0
- package/lib/codex-images.d.ts +109 -0
- package/lib/codex-images.d.ts.map +1 -0
- package/lib/codex-model-capabilities.d.ts +112 -0
- package/lib/codex-model-capabilities.d.ts.map +1 -0
- package/lib/codex-search.d.ts +96 -0
- package/lib/codex-search.d.ts.map +1 -0
- package/lib/codex-usage.d.ts +79 -0
- package/lib/codex-usage.d.ts.map +1 -0
- package/lib/gateway-anthropic-messages.d.ts +8 -0
- package/lib/gateway-anthropic-messages.d.ts.map +1 -0
- package/lib/gateway-auth.d.ts +22 -0
- package/lib/gateway-auth.d.ts.map +1 -0
- package/lib/gateway-backend.d.ts +62 -0
- package/lib/gateway-backend.d.ts.map +1 -0
- package/lib/gateway-body.d.ts +9 -0
- package/lib/gateway-body.d.ts.map +1 -0
- package/lib/gateway-config.d.ts +24 -0
- package/lib/gateway-config.d.ts.map +1 -0
- package/lib/gateway-http.d.ts +16 -0
- package/lib/gateway-http.d.ts.map +1 -0
- package/lib/gateway-openai-chat.d.ts +8 -0
- package/lib/gateway-openai-chat.d.ts.map +1 -0
- package/lib/gateway-openai-responses.d.ts +8 -0
- package/lib/gateway-openai-responses.d.ts.map +1 -0
- package/lib/gateway-parse.d.ts +10 -0
- package/lib/gateway-parse.d.ts.map +1 -0
- package/lib/gateway-protocol.d.ts +47 -0
- package/lib/gateway-protocol.d.ts.map +1 -0
- package/lib/gateway-routes.d.ts +21 -0
- package/lib/gateway-routes.d.ts.map +1 -0
- package/lib/gateway.d.ts +48 -0
- package/lib/gateway.d.ts.map +1 -0
- package/lib/grok-imagine.d.ts +271 -0
- package/lib/grok-imagine.d.ts.map +1 -0
- package/lib/grok-import.d.ts +21 -0
- package/lib/grok-import.d.ts.map +1 -0
- package/lib/http-json.d.ts +10 -0
- package/lib/http-json.d.ts.map +1 -0
- package/lib/ids.d.ts +33 -0
- package/lib/ids.d.ts.map +1 -0
- package/lib/imagine-routes.d.ts +59 -0
- package/lib/imagine-routes.d.ts.map +1 -0
- package/lib/index.d.ts +69 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +35355 -0
- package/lib/index.js.map +7 -0
- package/lib/invariant.d.ts +9 -0
- package/lib/invariant.d.ts.map +1 -0
- package/lib/invariant.js +14 -0
- package/lib/invariant.js.map +7 -0
- package/lib/kimi-errors.d.ts +13 -0
- package/lib/kimi-errors.d.ts.map +1 -0
- package/lib/media-store.d.ts +130 -0
- package/lib/media-store.d.ts.map +1 -0
- package/lib/oauth-import-routes.d.ts +52 -0
- package/lib/oauth-import-routes.d.ts.map +1 -0
- package/lib/oauth-providers.d.ts +26 -0
- package/lib/oauth-providers.d.ts.map +1 -0
- package/lib/oauth-session.d.ts +40 -0
- package/lib/oauth-session.d.ts.map +1 -0
- package/lib/oauth-sources.d.ts +205 -0
- package/lib/oauth-sources.d.ts.map +1 -0
- package/lib/oauth.d.ts +79 -0
- package/lib/oauth.d.ts.map +1 -0
- package/lib/provider.d.ts +38 -0
- package/lib/provider.d.ts.map +1 -0
- package/lib/proxy.d.ts +17 -0
- package/lib/proxy.d.ts.map +1 -0
- package/lib/redact.d.ts +5 -0
- package/lib/redact.d.ts.map +1 -0
- package/lib/session.d.ts +40 -0
- package/lib/session.d.ts.map +1 -0
- package/lib/store.d.ts +46 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/web-origin.d.ts +10 -0
- package/lib/web-origin.d.ts.map +1 -0
- package/lib/web-routes.d.ts +20 -0
- package/lib/web-routes.d.ts.map +1 -0
- package/package.json +185 -0
- package/patches/dsh-agy@0.1.2.patch +25 -0
- package/scripts/release.mjs +166 -0
- package/scripts/smoke-deployed-routes.mjs +146 -0
- package/scripts/verify-deployed-catalog.mjs +87 -0
- package/src/adapter.ts +282 -0
- package/src/alias-adapter.ts +152 -0
- package/src/auth-routes.ts +871 -0
- package/src/auth.ts +67 -0
- package/src/bin.ts +350 -0
- package/src/capability-routes.ts +275 -0
- package/src/capability-runtime.ts +313 -0
- package/src/capability-settings.ts +657 -0
- package/src/capability-tools.ts +666 -0
- package/src/catalog.ts +271 -0
- package/src/client/GrokBuildSettings.tsx +2221 -0
- package/src/client/index.tsx +37 -0
- package/src/client/locales.ts +421 -0
- package/src/codex-http.ts +447 -0
- package/src/codex-images.ts +485 -0
- package/src/codex-model-capabilities.ts +320 -0
- package/src/codex-search.ts +245 -0
- package/src/codex-usage.ts +263 -0
- package/src/gateway-anthropic-messages.ts +84 -0
- package/src/gateway-auth.ts +100 -0
- package/src/gateway-backend.ts +274 -0
- package/src/gateway-body.ts +49 -0
- package/src/gateway-config.ts +76 -0
- package/src/gateway-http.ts +104 -0
- package/src/gateway-openai-chat.ts +124 -0
- package/src/gateway-openai-responses.ts +53 -0
- package/src/gateway-parse.ts +224 -0
- package/src/gateway-protocol.ts +52 -0
- package/src/gateway-routes.ts +152 -0
- package/src/gateway.ts +242 -0
- package/src/grok-imagine.ts +1627 -0
- package/src/grok-import.ts +151 -0
- package/src/http-json.ts +82 -0
- package/src/ids.ts +45 -0
- package/src/imagine-routes.ts +461 -0
- package/src/index.ts +598 -0
- package/src/invariant.ts +17 -0
- package/src/kimi-errors.ts +26 -0
- package/src/media-store.ts +927 -0
- package/src/oauth-import-routes.ts +314 -0
- package/src/oauth-providers.ts +152 -0
- package/src/oauth-session.ts +183 -0
- package/src/oauth-sources.ts +1104 -0
- package/src/oauth.ts +620 -0
- package/src/provider.ts +128 -0
- package/src/proxy.ts +99 -0
- package/src/redact.ts +72 -0
- package/src/session.ts +218 -0
- package/src/store.ts +217 -0
- package/src/web-origin.ts +60 -0
- package/src/web-routes.ts +75 -0
package/README.pt-BR.md
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
|
|
2
|
+
<!-- banner -->
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
# 🔐 dsh-coding-subscription-oauth
|
|
6
|
+
|
|
7
|
+
**v0.5.0** · antigo `dsh-grok-build`
|
|
8
|
+
|
|
9
|
+
**Plugin de OAuth para assinaturas de codificação do [DeepSeek Harness](https://github.com/deepseek-ai/dsh).** Entre com as assinaturas que você já paga — depois use os modelos delas a partir da página de configurações do dsh ou da CLI. **Nenhum token colado no chat.**
|
|
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
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Mudança de nome
|
|
21
|
+
|
|
22
|
+
O projeto começou como **`dsh-grok-build`** (só Grok Build). Agora cobre SuperGrok / Codex / Kimi / Claude / Antigravity.
|
|
23
|
+
|
|
24
|
+
| | Use isto | Ainda funciona |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (mesmo `main`) |
|
|
27
|
+
| npm | Ainda não publicado; instale pelo GitHub | Nenhum pacote npm legado foi publicado |
|
|
28
|
+
| CLI | `dsh-coding-oauth` | `dsh-grok-build` |
|
|
29
|
+
| Cordis plugin id | `llm-grok-build-oauth` | inalterado |
|
|
30
|
+
| API HTTP das configurações | `/plugins/dsh-grok-build/*` | inalterado |
|
|
31
|
+
| Arquivos de credenciais | `$DSH_HOME/.grok-build-auth.json` e os outros `*-oauth-auth.json` | inalterado |
|
|
32
|
+
|
|
33
|
+
## ✨ Recursos
|
|
34
|
+
|
|
35
|
+
- 🧾 **Traga sua própria assinatura** — use os planos de codificação que você já paga em vez de chaves de API separadas.
|
|
36
|
+
- 🔑 **OAuth local, sem colar chave** — autorize na página de configurações ou na CLI; os tokens nunca entram no chat.
|
|
37
|
+
- 🧩 **Um plugin, cinco provedores** — Grok Build, Codex, Kimi, Claude e Google Antigravity.
|
|
38
|
+
- 🛡️ **Seguro por design** — arquivos de credenciais com permissão somente-dono `0600`, escrita atômica, bloqueio de arquivo entre processos.
|
|
39
|
+
- ⚙️ **Catálogo dinâmico** — o seletor de modelos lista exatamente os provedores que você autenticou.
|
|
40
|
+
- 🌐 **Ciente de proxy** — faz proxy apenas de domínios de assinatura revisados e confiáveis.
|
|
41
|
+
|
|
42
|
+
## Problemas de integração que este plugin resolve
|
|
43
|
+
|
|
44
|
+
Estas são as buscas e erros do DSH que costumam trazer as pessoas até aqui.
|
|
45
|
+
|
|
46
|
+
| Você buscou / viu | O que estava quebrado | O que o plugin faz |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| SuperGrok / X Premium no DSH, Grok Build vs `api.x.ai` | A rota `xai` é a API paga por uso. A assinatura de coding vai a `cli-chat-proxy.grok.com` | Rota `grok-build` + cabeçalhos de fingerprint da CLI (`X-XAI-Token-Auth` etc.) para evitar 403 silencioso |
|
|
49
|
+
| `API key is invalid` / `AUTH` | A GUI mapeia **todo** AUTH para esse texto. Muitas vezes o access token OAuth expirou | Refresh **5 min** antes do expiry; em 401 invalida o token e **repete o step** |
|
|
50
|
+
| `INVALID_REPLAY_STATE` no 2º turno Codex/Kimi | O replay ainda tinha o provider id nativo do pi-ai | Mantém o id da rota do Harness e repara replay antigo |
|
|
51
|
+
| grok-4.6 sem **xhigh** | `/v1/models-v2` já traz `reasoning_efforts`; clonar o template 4.5 esconde xhigh | Lê os efforts ao vivo. 4.6 tem xhigh; 4.5 fica low/medium/high |
|
|
52
|
+
| Kimi Code como `x-api-key` Anthropic | Token OAuth enviado como chave Anthropic | Só `Authorization: Bearer` |
|
|
53
|
+
| Modelos sem login ainda no seletor | Todas as rotas registradas apareciam | Rotas sem auth ficam vazias; nomes autenticados levam `(OAuth)` |
|
|
54
|
+
| PKCE em DSH remoto / headless | Não há como voltar ao `localhost` | Device-code para Grok/Codex/Kimi; Claude aceita a URL de redirect colada |
|
|
55
|
+
| Proxy libera Grok e quebra Kimi na China | Um `HTTPS_PROXY` global | Proxy só na allowlist; Kimi fica **direto** salvo `proxyKimi: true` |
|
|
56
|
+
|
|
57
|
+
## Provedores suportados
|
|
58
|
+
|
|
59
|
+
| Provedor | Rota | Autenticação | Coexiste com |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` |
|
|
62
|
+
| **OpenAI Codex** | `codex-oauth` | ChatGPT Plus/Pro OAuth | `openai` |
|
|
63
|
+
| **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` |
|
|
64
|
+
| **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — |
|
|
65
|
+
| **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — |
|
|
66
|
+
|
|
67
|
+
> O login por dispositivo do Grok Build, o catálogo dinâmico `/v1/models-v2` e a inferência em streaming via Responses são verificados em implantações reais. Codex/Kimi/Claude reutilizam o OAuth/refresh nativo do provedor de `@earendil-works/pi-ai` em vez de reimplementar fluxos de cada fornecedor.
|
|
68
|
+
|
|
69
|
+
## 🚀 Início rápido
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# 1. instale o plugin no perfil web
|
|
73
|
+
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
|
|
74
|
+
|
|
75
|
+
# 2. opcional — Google Antigravity (versão fixa revisada)
|
|
76
|
+
dsh plugin --profile web add dsh-agy@0.1.2
|
|
77
|
+
|
|
78
|
+
# 3. reinicie o serviço dsh web residente
|
|
79
|
+
systemctl --user restart dsh-web.service
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Depois abra **Settings → Coding OAuth** e faça login em qualquer provedor. Pronto — escolha seu modelo autenticado no seletor.
|
|
83
|
+
|
|
84
|
+
## 📚 Sumário
|
|
85
|
+
|
|
86
|
+
- [Mudança de nome](#mudança-de-nome)
|
|
87
|
+
- [Problemas de integração que este plugin resolve](#problemas-de-integração-que-este-plugin-resolve)
|
|
88
|
+
- [Instalação](#instalação)
|
|
89
|
+
- [Página de configurações](#página-de-configurações)
|
|
90
|
+
- [CLI](#cli)
|
|
91
|
+
- [Kimi na China](#kimi-na-china)
|
|
92
|
+
- [Proxy de rede](#proxy-de-rede)
|
|
93
|
+
- [Resiliência](#resiliência)
|
|
94
|
+
- [Credenciais](#credenciais)
|
|
95
|
+
- [Arquitetura](#arquitetura)
|
|
96
|
+
- [Notas técnicas](#notas-técnicas)
|
|
97
|
+
- [Conformidade](#conformidade)
|
|
98
|
+
- [Documentação](#documentação)
|
|
99
|
+
- [Contribuição](#contribuição)
|
|
100
|
+
- [Licença](#licença)
|
|
101
|
+
|
|
102
|
+
## Instalação
|
|
103
|
+
|
|
104
|
+
Requer DeepSeek Harness `0.1.0-rc.6+` e Node.js 22.19+. Detalhes completos nas [notas de instalação](INSTALL.md).
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# do GitHub
|
|
108
|
+
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
|
|
109
|
+
|
|
110
|
+
# ou um checkout local de desenvolvimento
|
|
111
|
+
dsh plugin --profile web add ./dsh-coding-subscription-oauth
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Reinicie o `dsh web` após instalar. Verificação contra uma implantação ao vivo:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pnpm run verify:deployed # confere /api/llm.models real + estado OAuth
|
|
118
|
+
DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # se o Google estiver conectado
|
|
119
|
+
|
|
120
|
+
DSH_RESTORE_PROVIDER=openai \
|
|
121
|
+
DSH_RESTORE_MODEL=gpt-5.6-sol \
|
|
122
|
+
DSH_RESTORE_REASONING=max \
|
|
123
|
+
pnpm run smoke:deployed # chamadas reais Codex/Kimi + replay do segundo turn
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
> O `smoke:deployed` cria uma sessão temporária, valida chamadas de ferramenta do Codex e do Kimi e um segundo turn do usuário (regressão de `INVALID_REPLAY_STATE`), restaura o modelo padrão declarado e depois arquiva a sessão.
|
|
127
|
+
|
|
128
|
+
## Página de configurações
|
|
129
|
+
|
|
130
|
+
Abra **Settings → Coding OAuth**:
|
|
131
|
+
|
|
132
|
+
| Provedor | Métodos |
|
|
133
|
+
|---|---|
|
|
134
|
+
| Grok | código de autorização · código de dispositivo · importação via CLI Grok · seleção de modelos |
|
|
135
|
+
| Codex | código de dispositivo (recomendado em DSH remoto) · PKCE no navegador |
|
|
136
|
+
| Kimi | código de dispositivo |
|
|
137
|
+
| Claude | PKCE no navegador (um navegador remoto pode colar a URL completa de redirect localhost) |
|
|
138
|
+
| Antigravity | status de instalação do `dsh-agy` + comandos CLI local ao perfil |
|
|
139
|
+
|
|
140
|
+
O seletor lista apenas rotas que concluíram a autenticação; provedores não autenticados retornam lista vazia. Os nomes dos provedores recebem `(OAuth)` e o catálogo é atualizado via `llm/adapters-updated` após entrar/sair.
|
|
141
|
+
|
|
142
|
+
## Capacidades opcionais
|
|
143
|
+
|
|
144
|
+
Os sete controles `codexSearch`, `codexImages`, `codexImageEdits`, `codexUsage`, `codexFast`, `grokImagineImage` e `grokImagineVideo` começam desativados e mudam ao vivo, sem reinício. Os limites são `searchResults` (1–20, padrão 5), `imageCount` (1–4, padrão 1) e `videoArtifactTtlMs` (1 hora–7 dias, padrão 7 dias; a interface mostra 1–168 horas). Reduzir a retenção encurta e limpa artefatos existentes imediatamente; aumentá-la vale apenas para novos artefatos.
|
|
145
|
+
|
|
146
|
+
## CLI
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# `dsh-grok-build` continua sendo um alias
|
|
150
|
+
dsh-coding-oauth login [--pkce] | import | status | logout
|
|
151
|
+
|
|
152
|
+
# provedores mais recentes
|
|
153
|
+
dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude
|
|
154
|
+
dsh-coding-oauth status all
|
|
155
|
+
dsh-coding-oauth logout codex
|
|
156
|
+
|
|
157
|
+
# Antigravity (instale no perfil web primeiro)
|
|
158
|
+
dsh plugin --profile web exec dsh-agy login --headless
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
> A CLI do `dsh-agy` altera o pool de contas fora do processo DSH, então não consegue emitir um evento de catálogo no processo — feche e reabra o seletor de modelos após entrar/sair.
|
|
162
|
+
|
|
163
|
+
## Kimi na China
|
|
164
|
+
|
|
165
|
+
O OAuth da assinatura do Kimi Code usa `https://auth.kimi.com`; a inferência usa `https://api.kimi.com/coding`. O `https://api.moonshot.cn/v1` é o canal de chave API de pagamento por uso do **Moonshot Open Platform** — não existe um "endpoint OAuth da China" alternável. Este plugin usa uma rota separada `kimi-code-oauth` e não afeta uma configuração `kimi-coding` por chave API existente.
|
|
166
|
+
|
|
167
|
+
## Proxy de rede
|
|
168
|
+
|
|
169
|
+
Prioridade: `config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`.
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
- id: llm-grok-build-oauth
|
|
173
|
+
config:
|
|
174
|
+
proxy: http://127.0.0.1:7890
|
|
175
|
+
proxyKimi: false
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Apenas domínios de assinatura revisados são usados via proxy (xAI/Grok, OpenAI Codex, Claude/Anthropic, Google Antigravity); todo o restante do tráfego DSH mantém o dispatcher original. O Kimi fica direto por padrão e só usa o proxy quando `proxyKimi: true`.
|
|
179
|
+
|
|
180
|
+
## Resiliência
|
|
181
|
+
|
|
182
|
+
Os tokens de acesso OAuth são renovados **cinco minutos** antes do vencimento armazenado (pi-ai 0.84+). Se o upstream ainda rejeitar um token localmente válido com 401/403, o plugin retrocede o `expires` gravado e o step repetido renova o token antes de reenviar.
|
|
183
|
+
|
|
184
|
+
As novas tentativas seguem a política do harness: falhas transitórias (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **e `AUTH`** repetem com backoff exponencial (padrão: 2 tentativas, 500 ms → 10 s, 10% de jitter). Esgotamento de cota e refresh token morto **não** são repetidos. Sobrescrita por implantação:
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
- id: llm-grok-build-oauth
|
|
188
|
+
config:
|
|
189
|
+
retryPolicy:
|
|
190
|
+
mode: normal
|
|
191
|
+
maxRetries: 2
|
|
192
|
+
retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
|
|
193
|
+
backoff: { initialDelayMs: 500, maxDelayMs: 10000, jitterRatio: 0.1 }
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Credenciais
|
|
197
|
+
|
|
198
|
+
Somente-dono `0600`, escrita atômica, bloqueio de arquivo entre processos:
|
|
199
|
+
|
|
200
|
+
- `$DSH_HOME/.grok-build-auth.json`
|
|
201
|
+
- `$DSH_HOME/.codex-oauth-auth.json`
|
|
202
|
+
- `$DSH_HOME/.kimi-code-oauth-auth.json`
|
|
203
|
+
- `$DSH_HOME/.claude-code-oauth-auth.json`
|
|
204
|
+
|
|
205
|
+
Os caches de seleção ficam nos arquivos `*-models.json` correspondentes. **Nenhum status HTTP, log ou interface pode devolver um token.**
|
|
206
|
+
|
|
207
|
+
## Arquitetura
|
|
208
|
+
|
|
209
|
+
```mermaid
|
|
210
|
+
flowchart LR
|
|
211
|
+
subgraph DSH["DSH Harness"]
|
|
212
|
+
UI[Configurações / Web · Coding OAuth] --> LLM[llm route]
|
|
213
|
+
LLM --> ALIA[Adaptador de alias de rota]
|
|
214
|
+
end
|
|
215
|
+
ALIA --> PI[provedor nativo pi-ai<br/>OAuth · refresh · stream]
|
|
216
|
+
PI --> GROK[Grok Build]
|
|
217
|
+
PI --> COD[Codex]
|
|
218
|
+
PI --> KIMI[Kimi]
|
|
219
|
+
PI --> CLAU[Claude]
|
|
220
|
+
AGY[plugin dsh-agy] --> GAL[Google Antigravity]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Notas técnicas
|
|
224
|
+
|
|
225
|
+
- **Grok Build**: provedor Responses personalizado em `cli-chat-proxy.grok.com/v1`, cabeçalhos de impressão digital da CLI, catálogo de modelos dinâmico.
|
|
226
|
+
- **Codex/Kimi/Claude**: provedores nativos do pi-ai cuidam do OAuth e do refresh; o adaptador de alias de rota os mapeia para os ids nativos enquanto a identidade do modelo permanece inalterada.
|
|
227
|
+
- O access token do Kimi é convertido explicitamente para `Authorization: Bearer` — nunca é enviado acidentalmente como `x-api-key` do Anthropic.
|
|
228
|
+
- O Google Antigravity **não** é engenharia reversa aqui; ele usa um plugin DSH dedicado com versão fixa.
|
|
229
|
+
|
|
230
|
+
## Conformidade
|
|
231
|
+
|
|
232
|
+
Usar assinaturas de codificação por meio de um harness de terceiros pode estar em uma zona cinzenta dos termos de cada fornecedor e pode acionar controles de cota, regional ou de risco de conta. **Use apenas suas próprias contas**; este projeto não suporta contas em massa, revenda de cota, retransmissão remota, bypass de paywall ou personificação de cliente. Para uso comercial, prefira os canais oficiais de chave API dos fornecedores.
|
|
233
|
+
|
|
234
|
+
## Documentação
|
|
235
|
+
|
|
236
|
+
| Documento | Propósito |
|
|
237
|
+
|---|---|
|
|
238
|
+
| [`INSTALL.md`](INSTALL.md) | Detalhes de instalação e uso |
|
|
239
|
+
| [`CHANGELOG.md`](CHANGELOG.md) | Histórico de versões |
|
|
240
|
+
| [`docs/00-project-rules.md`](docs/00-project-rules.md) | Versionamento, loop de release, divisão público/privado |
|
|
241
|
+
| [`docs/02-architecture.md`](docs/02-architecture.md) | Arquitetura interna (rotas, fluxo de dados, módulos, API) · [中文](docs/02-architecture.zh-CN.md) |
|
|
242
|
+
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | Guia de contribuição |
|
|
243
|
+
|
|
244
|
+
## Relacionados
|
|
245
|
+
|
|
246
|
+
- [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — plugin separado fixo para Google Antigravity.
|
|
247
|
+
|
|
248
|
+
## Contribuição
|
|
249
|
+
|
|
250
|
+
Contribuições de todos os tipos são bem-vindas — recursos, documentação, traduções, relatórios de bug. Veja **[CONTRIBUTING](CONTRIBUTING.md)** para o fluxo, convenções de commit e o loop de release. Se o seu idioma não estiver listado, envie um PR com a tradução do README e o adicionaremos à tabela acima.
|
|
251
|
+
|
|
252
|
+
## Licença
|
|
253
|
+
|
|
254
|
+
[Apache-2.0](LICENSE) · consulte [NOTICE](NOTICE). Partes derivadas do projeto [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).
|
package/README.ru.md
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
|
|
2
|
+
<!-- banner -->
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
# 🔐 dsh-coding-subscription-oauth
|
|
6
|
+
|
|
7
|
+
**v0.5.0** · ранее `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
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
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 | Пока не опубликовано; ставьте с GitHub | Старого 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
|
+
## ✨ Возможности
|
|
34
|
+
|
|
35
|
+
- 🧾 **Своя подписка** — используйте уже оплаченные планы для кодинга вместо отдельных API-ключей.
|
|
36
|
+
- 🔑 **Локальный OAuth, без вставки ключа** — авторизация в странице настроек или CLI; токены никогда не попадают в чат.
|
|
37
|
+
- 🧩 **Один плагин, пять провайдеров** — Grok Build, Codex, Kimi, Claude и Google Antigravity.
|
|
38
|
+
- 🛡️ **Безопасность по замыслу** — файлы учётных данных только-владелец `0600`, атомарная запись, межпроцессная блокировка файла.
|
|
39
|
+
- ⚙️ **Динамический каталог** — селектор моделей показывает ровно те провайдеры, которые вы авторизовали.
|
|
40
|
+
- 🌐 **С учётом прокси** — проксируется только проверенные доверенные домены подписок.
|
|
41
|
+
|
|
42
|
+
## Какие проблемы подключения закрывает этот плагин
|
|
43
|
+
|
|
44
|
+
Обычно сюда приходят по этим поисковым запросам и ошибкам DSH.
|
|
45
|
+
|
|
46
|
+
| Искали / увидели | Что на самом деле сломано | Что делает плагин |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| 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 |
|
|
49
|
+
| `API key is invalid` / `AUTH` | GUI показывает этот текст на **любой** AUTH. Часто просто истёк короткий OAuth access token | Refresh за **5 минут** до expiry; при 401 токен сбрасывается и **step повторяется** |
|
|
50
|
+
| `INVALID_REPLAY_STATE` на втором ходе Codex/Kimi | Replay всё ещё нёс нативный provider id pi-ai | Сохраняется id маршрута Harness, старый replay чинится |
|
|
51
|
+
| у grok-4.6 нет **xhigh** | `/v1/models-v2` уже отдаёт `reasoning_efforts`; шаблон 4.5 прячет xhigh | Разбираем live efforts. У 4.6 есть xhigh; у 4.5 — low/medium/high |
|
|
52
|
+
| Kimi Code уходит как Anthropic `x-api-key` | OAuth-токен отправили как ключ Anthropic | Только `Authorization: Bearer` |
|
|
53
|
+
| Не вошедшие модели остаются в селекторе | Перечислялись все зарегистрированные маршруты | Неаутентифицированные маршруты пустые; вошедшие помечены `(OAuth)` |
|
|
54
|
+
| PKCE на удалённом / headless DSH | Нельзя вернуться на `localhost` | Device-code для Grok/Codex/Kimi; Claude принимает вставленный redirect URL |
|
|
55
|
+
| Прокси пускает Grok и ломает Kimi в Китае | Глобальный `HTTPS_PROXY` | Прокси только по allowlist; Kimi **напрямую**, пока не включён `proxyKimi: true` |
|
|
56
|
+
|
|
57
|
+
## Поддерживаемые провайдеры
|
|
58
|
+
|
|
59
|
+
| Провайдер | Маршрут | Аутентификация | Сосуществует с |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` |
|
|
62
|
+
| **OpenAI Codex** | `codex-oauth` | ChatGPT Plus/Pro OAuth | `openai` |
|
|
63
|
+
| **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` |
|
|
64
|
+
| **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — |
|
|
65
|
+
| **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — |
|
|
66
|
+
|
|
67
|
+
> Вход по устройству Grok Build, динамический каталог `/v1/models-v2` и потоковая инференция Responses проверены на реальных развёртываниях. Codex/Kimi/Claude используют нативный OAuth/refresh провайдера из `@earendil-works/pi-ai` вместо переписывания флоу каждого вендора.
|
|
68
|
+
|
|
69
|
+
## 🚀 Быстрый старт
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# 1. установите плагин в web-профиль
|
|
73
|
+
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
|
|
74
|
+
|
|
75
|
+
# 2. опционально — Google Antigravity (зафиксированная проверенная версия)
|
|
76
|
+
dsh plugin --profile web add dsh-agy@0.1.2
|
|
77
|
+
|
|
78
|
+
# 3. перезапустите резидентный сервис dsh web
|
|
79
|
+
systemctl --user restart dsh-web.service
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Затем откройте **Settings → Coding OAuth** и войдите в любого провайдера. Готово — выберите авторизованную модель в селекторе.
|
|
83
|
+
|
|
84
|
+
## 📚 Содержание
|
|
85
|
+
|
|
86
|
+
- [Смена имени](#смена-имени)
|
|
87
|
+
- [Какие проблемы подключения закрывает этот плагин](#какие-проблемы-подключения-закрывает-этот-плагин)
|
|
88
|
+
- [Установка](#установка)
|
|
89
|
+
- [Страница настроек](#страница-настроек)
|
|
90
|
+
- [CLI](#cli)
|
|
91
|
+
- [Kimi в Китае](#kimi-в-китае)
|
|
92
|
+
- [Сетевой прокси](#сетевой-прокси)
|
|
93
|
+
- [Отказоустойчивость](#отказоустойчивость)
|
|
94
|
+
- [Учётные данные](#учётные-данные)
|
|
95
|
+
- [Архитектура](#архитектура)
|
|
96
|
+
- [Технические заметки](#технические-заметки)
|
|
97
|
+
- [Соответствие](#соответствие)
|
|
98
|
+
- [Документация](#документация)
|
|
99
|
+
- [Участие](#участие)
|
|
100
|
+
- [Лицензия](#лицензия)
|
|
101
|
+
|
|
102
|
+
## Установка
|
|
103
|
+
|
|
104
|
+
Требуется DeepSeek Harness `0.1.0-rc.6+` и Node.js 22.19+. Полные детали в [заметках по установке](INSTALL.md).
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# с GitHub
|
|
108
|
+
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
|
|
109
|
+
|
|
110
|
+
# или локальный dev-клоун
|
|
111
|
+
dsh plugin --profile web add ./dsh-coding-subscription-oauth
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
После установки перезапустите `dsh web`. Проверка на реальном развёртывании:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pnpm run verify:deployed # проверяет реальный /api/llm.models + статус OAuth
|
|
118
|
+
DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # если Google уже вошёл
|
|
119
|
+
|
|
120
|
+
DSH_RESTORE_PROVIDER=openai \
|
|
121
|
+
DSH_RESTORE_MODEL=gpt-5.6-sol \
|
|
122
|
+
DSH_RESTORE_REASONING=max \
|
|
123
|
+
pnpm run smoke:deployed # реальные вызовы Codex/Kimi + replay второго turn
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
> `smoke:deployed` создаёт временную сессию, проверяет вызовы инструментов Codex и Kimi и второй пользовательский turn (регрессию `INVALID_REPLAY_STATE`), восстанавливает объявленную модель по умолчанию и затем архивирует сессию.
|
|
127
|
+
|
|
128
|
+
## Страница настроек
|
|
129
|
+
|
|
130
|
+
Откройте **Settings → Coding OAuth**:
|
|
131
|
+
|
|
132
|
+
| Провайдер | Методы |
|
|
133
|
+
|---|---|
|
|
134
|
+
| Grok | код авторизации · код устройства · импорт CLI Grok · выбор моделей |
|
|
135
|
+
| Codex | код устройства (рекомендуется на удалённом DSH) · PKCE в браузере |
|
|
136
|
+
| Kimi | код устройства |
|
|
137
|
+
| Claude | PKCE в браузере (удалённый браузер может вставить полный URL редиректа localhost) |
|
|
138
|
+
| Antigravity | статус установки `dsh-agy` + локальные для профиля CLI-команды |
|
|
139
|
+
|
|
140
|
+
Селектор показывает только маршруты, завершившие аутентификацию; неавторизованные провайдеры возвращают пустой список. Имена провайдеров получают `(OAuth)`, а каталог обновляется через `llm/adapters-updated` после входа/выхода.
|
|
141
|
+
|
|
142
|
+
## Дополнительные возможности
|
|
143
|
+
|
|
144
|
+
Все семь переключателей `codexSearch`, `codexImages`, `codexImageEdits`, `codexUsage`, `codexFast`, `grokImagineImage` и `grokImagineVideo` по умолчанию выключены и применяются без перезапуска. Ограничения: `searchResults` (1–20, по умолчанию 5), `imageCount` (1–4, по умолчанию 1) и `videoArtifactTtlMs` (1 час–7 дней, по умолчанию 7 дней; в интерфейсе 1–168 часов). Уменьшение срока сразу сокращает и очищает существующие артефакты; увеличение действует только на новые.
|
|
145
|
+
|
|
146
|
+
## CLI
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# `dsh-grok-build` по-прежнему алиас той же команды
|
|
150
|
+
dsh-coding-oauth login [--pkce] | import | status | logout
|
|
151
|
+
|
|
152
|
+
# более новые провайдеры
|
|
153
|
+
dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude
|
|
154
|
+
dsh-coding-oauth status all
|
|
155
|
+
dsh-coding-oauth logout codex
|
|
156
|
+
|
|
157
|
+
# Antigravity (сначала установите в web-профиль)
|
|
158
|
+
dsh plugin --profile web exec dsh-agy login --headless
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
> CLI `dsh-agy` изменяет пул аккаунтов вне процесса DSH, поэтому не может отправить событие каталога внутри процесса — после входа/выхода закройте и снова откройте селектор моделей.
|
|
162
|
+
|
|
163
|
+
## Kimi в Китае
|
|
164
|
+
|
|
165
|
+
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-ключу.
|
|
166
|
+
|
|
167
|
+
## Сетевой прокси
|
|
168
|
+
|
|
169
|
+
Приоритет: `config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`.
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
- id: llm-grok-build-oauth
|
|
173
|
+
config:
|
|
174
|
+
proxy: http://127.0.0.1:7890
|
|
175
|
+
proxyKimi: false
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Проксируются только проверенные домены подписок (xAI/Grok, OpenAI Codex, Claude/Anthropic, Google Antigravity); остальной трафик DSH сохраняет исходный диспетчер. Kimi по умолчанию работает напрямую и использует прокси только при `proxyKimi: true`.
|
|
179
|
+
|
|
180
|
+
## Отказоустойчивость
|
|
181
|
+
|
|
182
|
+
OAuth access token обновляется **за пять минут** до сохранённого срока (pi-ai 0.84+). Если апстрим всё же отклоняет локально ещё живой токен кодом 401/403, плагин сдвигает сохранённый `expires` в прошлое, и повторный шаг сначала обновляет токен, затем повторяет запрос.
|
|
183
|
+
|
|
184
|
+
Повторы идут по политике harness: временные сбои (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **и `AUTH`** повторяются с экспоненциальной задержкой (2 попытки, 500 мс → 10 с, 10% jitter). Исчерпание квоты и мёртвый refresh token **не** повторяются. Переопределение для развёртывания:
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
- id: llm-grok-build-oauth
|
|
188
|
+
config:
|
|
189
|
+
retryPolicy:
|
|
190
|
+
mode: normal
|
|
191
|
+
maxRetries: 2
|
|
192
|
+
retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
|
|
193
|
+
backoff: { initialDelayMs: 500, maxDelayMs: 10000, jitterRatio: 0.1 }
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Учётные данные
|
|
197
|
+
|
|
198
|
+
Только-владелец `0600`, атомарная запись, межпроцессная блокировка файла:
|
|
199
|
+
|
|
200
|
+
- `$DSH_HOME/.grok-build-auth.json`
|
|
201
|
+
- `$DSH_HOME/.codex-oauth-auth.json`
|
|
202
|
+
- `$DSH_HOME/.kimi-code-oauth-auth.json`
|
|
203
|
+
- `$DSH_HOME/.claude-code-oauth-auth.json`
|
|
204
|
+
|
|
205
|
+
Кеши выбора живут в соответствующих файлах `*-models.json`. **Ни один HTTP-статус, лог или интерфейс не должен возвращать токен.**
|
|
206
|
+
|
|
207
|
+
## Архитектура
|
|
208
|
+
|
|
209
|
+
```mermaid
|
|
210
|
+
flowchart LR
|
|
211
|
+
subgraph DSH["DSH Harness"]
|
|
212
|
+
UI[Настройки / Web · Coding OAuth] --> LLM[llm route]
|
|
213
|
+
LLM --> ALIA[Адаптер алиасов маршрутов]
|
|
214
|
+
end
|
|
215
|
+
ALIA --> PI[нативный провайдер pi-ai<br/>OAuth · refresh · stream]
|
|
216
|
+
PI --> GROK[Grok Build]
|
|
217
|
+
PI --> COD[Codex]
|
|
218
|
+
PI --> KIMI[Kimi]
|
|
219
|
+
PI --> CLAU[Claude]
|
|
220
|
+
AGY[плагин dsh-agy] --> GAL[Google Antigravity]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Технические заметки
|
|
224
|
+
|
|
225
|
+
- **Grok Build**: собственный провайдер Responses на `cli-chat-proxy.grok.com/v1`, заголовки fingerprint CLI, динамический каталог моделей.
|
|
226
|
+
- **Codex/Kimi/Claude**: нативные провайдеры pi-ai отвечают за OAuth и refresh; адаптер алиасов маршрутов сопоставляет их с нативными id, при этом идентичность модели не меняется.
|
|
227
|
+
- Токен доступа Kimi явно преобразуется в `Authorization: Bearer` — никогда не отправляется по ошибке как `x-api-key` Anthropic.
|
|
228
|
+
- Google Antigravity здесь **не** реверс-инжинирится; используется выделенный плагин DSH с зафиксированной версией.
|
|
229
|
+
|
|
230
|
+
## Соответствие
|
|
231
|
+
|
|
232
|
+
Использование подписок на кодинг через сторонний harness может находиться в серой зоне условий каждого вендора и вызывать контроль квот, региона или риска аккаунта. **Используйте только свои аккаунты**; этот проект не поддерживает массовые аккаунты, перепродажу квот, удалённый relay, обход paywall или выдачу себя за клиента. Для коммерческого использования предпочитайте официальные каналы API-ключей вендоров.
|
|
233
|
+
|
|
234
|
+
## Документация
|
|
235
|
+
|
|
236
|
+
| Документ | Назначение |
|
|
237
|
+
|---|---|
|
|
238
|
+
| [`INSTALL.md`](INSTALL.md) | Детали установки и использования |
|
|
239
|
+
| [`CHANGELOG.md`](CHANGELOG.md) | История релизов |
|
|
240
|
+
| [`docs/00-project-rules.md`](docs/00-project-rules.md) | Версионирование, цикл релиза, разделение публичное/личное |
|
|
241
|
+
| [`docs/02-architecture.md`](docs/02-architecture.md) | Внутренняя архитектура (маршруты, поток данных, модули, API) · [中文](docs/02-architecture.zh-CN.md) |
|
|
242
|
+
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | Руководство по участию |
|
|
243
|
+
|
|
244
|
+
## Связанное
|
|
245
|
+
|
|
246
|
+
- [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — отдельный зафиксированный плагин для Google Antigravity.
|
|
247
|
+
|
|
248
|
+
## Участие
|
|
249
|
+
|
|
250
|
+
Приветствуются любые вклады — фичи, документация, переводы, отчёты об ошибках. См. **[CONTRIBUTING](CONTRIBUTING.md)** о порядке, конвенциях коммитов и цикле релиза. Если вашего языка нет в списке, отправьте PR с переводом README, и мы добавим его в таблицу выше.
|
|
251
|
+
|
|
252
|
+
## Лицензия
|
|
253
|
+
|
|
254
|
+
[Apache-2.0](LICENSE) · см. [NOTICE](NOTICE). Части заимствованы из проекта [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).
|