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.pt-BR.md CHANGED
@@ -1,300 +1,305 @@
1
-
2
- <!-- banner -->
3
- <div align="center">
4
-
5
- # 🔐 dsh-coding-subscription-oauth
6
-
7
- **v0.5.8 · 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](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 · 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](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
- ## 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 | `dsh-coding-subscription-oauth@0.5.8` (versão atual) | 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
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
- - 🧾 **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 lista apenas rotas autenticadas, rotuladas com `(OAuth)`, incluindo o `xhigh` do grok-4.6.
40
- - 🌐 **Ciente de proxy** — faz proxy apenas de domínios de assinatura revisados e confiáveis.
41
- - 📥 **CLI Pull manual** as configurações descobrem os arquivos OAuth oficiais dos CLIs Grok/Codex/Kimi/Claude permitidos, somente leitura; você puxa uma cópia de via única após pré-visualização e confirmação de sobrescrita.
42
- - 🗂️ **Configurações em abas** — Accounts, Gateway, Capabilities e About; hosts remotos preferem device code com menos ruído de CLI missing; cartões conectados ficam recolhidos até serem expandidos.
43
- - 🎛️ **Capacidades opcionais, padrão desligado** busca do Codex, uso/cota, geração/edição de imagens, Fast e Grok Imagine são aplicadas ao vivo quando ativadas.
44
- - 🔌 **Gateway de API local opt-in** servidor loopback compatível com OpenAI/Anthropic, desligado por padrão; para as suas próprias ferramentas, nunca um relé público.
45
-
46
- ## Problemas de integração que este plugin resolve
47
-
48
- Estas são as buscas e erros do DSH que costumam trazer as pessoas até aqui.
49
- | Você buscou / viu | O que estava quebrado | O que o plugin faz |
50
- |---|---|---|
51
- | 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 |
52
- | `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** |
53
- | `INVALID_REPLAY_STATE` no 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 |
54
- | grok-4.6 sem **xhigh** | `/v1/models-v2` 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 |
55
- | Kimi Code como `x-api-key` Anthropic | Token OAuth enviado como chave Anthropic | `Authorization: Bearer` |
56
- | Modelos sem login ainda no seletor | Todas as rotas registradas apareciam | Rotas sem auth ficam vazias; nomes autenticados levam `(OAuth)` |
57
- | PKCE em DSH remoto / headless | Não como voltar ao `localhost` | Device-code para Grok/Codex/Kimi; Claude aceita a URL de redirect colada |
58
- | Proxy libera Grok e quebra Kimi na China | Um `HTTPS_PROXY` global | Proxy na allowlist; Kimi fica **direto** salvo `proxyKimi: true` |
59
-
60
- ## Provedores suportados
61
-
62
- | Provedor | Rota | Autenticação | Coexiste com |
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
- > 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.
71
-
72
- ## 🚀 Início rápido
73
-
74
- ```bash
75
- # 1. instale o plugin no perfil web (versão atual do npm)
76
- dsh plugin --profile web add dsh-coding-subscription-oauth@0.5.8
77
-
78
- # 2. opcional — Google Antigravity (versão fixa revisada)
79
- dsh plugin --profile web add dsh-agy@0.1.2
80
-
81
- # 3. reinicie o serviço dsh web residente
22
+ ---
23
+
24
+ ## Mudança de nome
25
+
26
+ O projeto começou como **`dsh-grok-build`** (só Grok Build). Agora cobre SuperGrok / Codex / Kimi / Claude / Antigravity.
27
+
28
+ | | Use isto | Ainda funciona |
29
+ |---|---|---|
30
+ | GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (mesmo `main`) |
31
+ | npm | `dsh-coding-subscription-oauth@0.6.0` (versão atual) | Nenhum pacote npm legado foi publicado |
32
+ | CLI | `dsh-coding-oauth` | `dsh-grok-build` |
33
+ | Cordis plugin id | `llm-grok-build-oauth` | inalterado |
34
+ | API HTTP das configurações | `/plugins/dsh-grok-build/*` | inalterado |
35
+ | Arquivos de credenciais | `$DSH_HOME/.grok-build-auth.json` e os outros `*-oauth-auth.json` | inalterado |
36
+
37
+ ## ✨ Recursos
38
+
39
+ - 🧾 **Traga sua própria assinatura** use os planos de codificação que você paga em vez de chaves de API separadas.
40
+ - 🔑 **OAuth local, sem colar chave** autorize na página de configurações ou na CLI; os tokens nunca entram no chat.
41
+ - 🧩 **Um plugin, cinco provedores** Grok Build, Codex, Kimi, Claude e Google Antigravity.
42
+ - 🛡️ **Seguro por design** arquivos de credenciais com permissão somente-dono `0600`, escrita atômica, bloqueio de arquivo entre processos.
43
+ - ⚙️ **Catálogo dinâmico** o seletor lista apenas rotas autenticadas, rotuladas com `(OAuth)`, incluindo o `xhigh` do grok-4.6.
44
+ - 🌐 **Ciente de proxy** faz proxy apenas de domínios de assinatura revisados e confiáveis.
45
+ - 📥 **CLI Pull manual** as configurações descobrem os arquivos OAuth oficiais dos CLIs Grok/Codex/Kimi/Claude permitidos, somente leitura; você puxa uma cópia de via única após pré-visualização e confirmação de sobrescrita.
46
+ - 🗂️ **Configurações em abas** — Accounts, Gateway, Capabilities e About; hosts remotos preferem device code com menos ruído de CLI missing; cartões conectados ficam recolhidos até serem expandidos.
47
+ - 🎛️ **Capacidades opcionais, padrão desligado** — busca do Codex, uso/cota, geração/edição de imagens, Fast e Grok Imagine são aplicadas ao vivo quando ativadas.
48
+ - 🔌 **Gateway de API local opt-in** — servidor loopback compatível com OpenAI/Anthropic, desligado por padrão; para as suas próprias ferramentas, nunca um relé público.
49
+
50
+ ## Problemas de integração que este plugin resolve
51
+
52
+ Estas são as buscas e erros do DSH que costumam trazer as pessoas até aqui.
53
+ | Você buscou / viu | O que estava quebrado | O que o plugin faz |
54
+ |---|---|---|
55
+ | 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 |
56
+ | `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** |
57
+ | `INVALID_REPLAY_STATE` no 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 |
58
+ | 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 |
59
+ | Kimi Code como `x-api-key` Anthropic | Token OAuth enviado como chave Anthropic | Só `Authorization: Bearer` |
60
+ | Modelos sem login ainda no seletor | Todas as rotas registradas apareciam | Rotas sem auth ficam vazias; nomes autenticados levam `(OAuth)` |
61
+ | 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 |
62
+ | Proxy libera Grok e quebra Kimi na China | Um `HTTPS_PROXY` global | Proxy só na allowlist; Kimi fica **direto** salvo `proxyKimi: true` |
63
+
64
+ ## Provedores suportados
65
+
66
+ | Provedor | Rota | Autenticação | Coexiste com |
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
+ > 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.
75
+
76
+ ## 🚀 Início rápido
77
+
78
+ ```bash
79
+ # 1. instale o plugin no perfil web (versão atual do npm)
80
+ dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.0
81
+
82
+ # 2. opcional — Google Antigravity (versão fixa revisada)
83
+ dsh plugin --profile web add dsh-agy@0.1.2
84
+
85
+ # 3. reinicie o serviço dsh web residente
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
- Depois abra **Settings → Coding OAuth** e faça login em qualquer provedor. Pronto — escolha seu modelo autenticado no seletor.
86
-
87
- ## 📚 Sumário
88
-
89
- - [Mudança de nome](#mudança-de-nome)
90
- - [Recursos](#-recursos)
91
- - [Problemas de integração que este plugin resolve](#problemas-de-integração-que-este-plugin-resolve)
92
- - [Provedores suportados](#provedores-suportados)
93
- - [Início rápido](#-início-rápido)
94
- - [Instalação](#instalação)
95
- - [Página de configurações](#página-de-configurações)
96
- - [Capacidades opcionais](#capacidades-opcionais)
97
- - [Gateway de API local](#gateway-de-api-local)
98
- - [CLI](#cli)
99
- - [Kimi na China](#kimi-na-china)
100
- - [Proxy de rede](#proxy-de-rede)
101
- - [Resiliência](#resiliência)
102
- - [Credenciais](#credenciais)
103
- - [Arquitetura](#arquitetura)
104
- - [Notas técnicas](#notas-técnicas)
105
- - [Conformidade](#conformidade)
106
- - [Documentação](#documentação)
107
- - [Relacionados](#relacionados)
108
- - [Contribuição](#contribuição)
109
- - [Licença](#licença)
110
-
111
- ## Instalação
112
-
113
- Requer DeepSeek Harness `0.1.0-rc.6+` e Node.js 22.19+. Detalhes completos nas [notas de instalação](INSTALL.md).
114
-
115
- ```bash
116
- # versão atual do npm (recomendado)
117
- dsh plugin --profile web add dsh-coding-subscription-oauth@0.5.8
118
-
119
- # desenvolvimento/alternativo: do GitHub
120
- dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
121
-
122
- # desenvolvimento/alternativo: um checkout local de desenvolvimento
123
- dsh plugin --profile web add ./dsh-coding-subscription-oauth
124
- ```
125
-
126
- Reinicie o `dsh web` após instalar. Verificação contra uma implantação ao vivo:
127
-
128
- ```bash
129
- pnpm run verify:deployed # confere /api/llm.models real + estado OAuth
130
- DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # se o Google estiver conectado
131
-
132
- DSH_RESTORE_PROVIDER=openai \
133
- DSH_RESTORE_MODEL=gpt-5.6-sol \
134
- DSH_RESTORE_REASONING=max \
135
- pnpm run smoke:deployed # chamadas reais Codex/Kimi + replay do segundo turn
136
- ```
137
-
138
- > 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.
139
-
140
- ## Página de configurações
141
-
142
- Abra **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
- | Provedor | Métodos |
164
- |---|---|
165
- | Grok | código de autorização · código de dispositivo · importação via CLI Grok · seleção de modelos |
166
- | Codex | código de dispositivo (recomendado em DSH remoto) · PKCE no navegador |
167
- | Kimi | código de dispositivo |
168
- | Claude | PKCE no navegador (um navegador remoto pode colar a URL completa de redirect localhost) |
169
- | Antigravity | status de instalação do `dsh-agy` + comandos CLI local ao perfil |
170
-
171
- A página de configurações é dividida em quatro abas superiores: **Accounts**, **Gateway**, **Capabilities** e **About**. Os cartões de provedores conectados colapsam em um resumo compacto e se expandem para edição de modelos. A pré-visualização do pull da CLI ocupa a largura total, e o status do Imagine aparece na aba Capabilities.
172
-
173
- 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.
174
-
175
- ## Capacidades opcionais
176
-
177
- 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.
178
-
179
- ## Gateway de API local
180
-
181
- Desligado por padrão. Quando ativado, inicia um servidor `node:http` isolado (não é a porta web do DSH) em `127.0.0.1:18080` e reutiliza as mesmas sessões OAuth autenticadas:
182
-
183
- ```yaml
184
- gateway:
185
- enabled: false
186
- bind: 127.0.0.1
187
- port: 18080
188
- ```
189
-
190
- Endpoints: `GET /healthz`, `GET /v1/models`, `POST /v1/chat/completions`, `POST /v1/responses`, `POST /v1/messages`. Uma chave Bearer é armazenada em `$DSH_HOME/.coding-oauth-gateway.json` (`0600`). As configurações podem copiar a URL base OpenAI (base + `/v1`), a URL base Anthropic e a chave Bearer atual sem rotacioná-la; a revelação da chave é apenas via loopback e não é persistida no armazenamento do navegador. A rotação é uma ação destrutiva com confirmação. A porta de escuta pode ser editada diretamente e salva com Apply, ou preenchida pelo botão Random (18100–18999); a porta escolhida é persistida no documento do gateway somente-dono, e um listener em execução é religado. O bind continua sendo somente via YAML; bind não-loopback exige uma chave. Isto não é um relé remoto.
191
-
192
- ## CLI
193
-
194
- ```bash
195
- # `dsh-grok-build` continua sendo um alias
196
- dsh-coding-oauth login [--pkce] | import | status | logout
197
-
198
- # provedores mais recentes
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 (instale no perfil web primeiro)
204
- dsh plugin --profile web exec dsh-agy login --headless
205
- ```
206
-
207
- > 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.
208
-
209
- ## Kimi na China
210
-
211
- 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.
212
-
213
- ## Proxy de rede
214
-
215
- Prioridade: `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
- 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`.
225
-
226
- ## Resiliência
227
-
228
- 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.
229
-
230
- 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: 5 tentativas, 5 s → 10 s → 20 s → 40 s → 80 s (~155 s acumulados), 10% de jitter). Esgotamento de cota e refresh token morto **não** são repetidos. Sobrescrita por implantação:
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
- ## Credenciais
243
-
244
- Somente-dono `0600`, escrita atômica, bloqueio de arquivo entre processos:
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
- Os caches de seleção ficam nos arquivos `*-models.json` correspondentes. **Nenhum status HTTP, log ou interface pode devolver um token.**
252
-
253
- ## Arquitetura
254
-
255
- ```mermaid
256
- flowchart LR
257
- subgraph DSH["DSH Harness"]
258
- UI[Configurações / Web · Coding OAuth] --> LLM[llm route]
259
- LLM --> ALIA[Adaptador de alias de rota]
260
- end
261
- ALIA --> PI[provedor nativo 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[plugin dsh-agy] --> GAL[Google Antigravity]
267
- ```
268
-
269
- ## Notas técnicas
270
-
271
- - **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.
272
- - **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.
273
- - O access token do Kimi é convertido explicitamente para `Authorization: Bearer` — nunca é enviado acidentalmente como `x-api-key` do Anthropic.
274
- - O Google Antigravity **não** é engenharia reversa aqui; ele usa um plugin DSH dedicado com versão fixa.
275
-
276
- ## Conformidade
277
-
278
- 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.
279
-
280
- ## Documentação
281
-
282
- | Documento | Propósito |
283
- |---|---|
284
- | [`INSTALL.md`](INSTALL.md) | Detalhes de instalação e uso |
285
- | [`CHANGELOG.md`](CHANGELOG.md) | Histórico de versões |
286
- | [`docs/00-project-rules.md`](docs/00-project-rules.md) | Versionamento, loop de release, divisão público/privado |
287
- | [`docs/02-architecture.md`](docs/02-architecture.md) | Arquitetura interna (rotas, fluxo de dados, módulos, API) · [中文](docs/02-architecture.zh-CN.md) |
288
- | [`CONTRIBUTING.md`](CONTRIBUTING.md) | Guia de contribuição |
289
-
290
- ## Relacionados
291
-
292
- - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — plugin separado fixo para Google Antigravity.
293
-
294
- ## Contribuição
295
-
296
- 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.
297
-
298
- ## Licença
299
-
300
- [Apache-2.0](LICENSE) · consulte [NOTICE](NOTICE). Partes derivadas do projeto [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).
88
+ ```
89
+
90
+ Depois abra **Settings → Coding OAuth** e faça login em qualquer provedor. Pronto — escolha seu modelo autenticado no seletor.
91
+
92
+ ## 📚 Sumário
93
+
94
+ - [Mudança de nome](#mudança-de-nome)
95
+ - [Recursos](#-recursos)
96
+ - [Problemas de integração que este plugin resolve](#problemas-de-integração-que-este-plugin-resolve)
97
+ - [Provedores suportados](#provedores-suportados)
98
+ - [Início rápido](#-início-rápido)
99
+ - [Instalação](#instalação)
100
+ - [Página de configurações](#página-de-configurações)
101
+ - [Capacidades opcionais](#capacidades-opcionais)
102
+ - [Gateway de API local](#gateway-de-api-local)
103
+ - [CLI](#cli)
104
+ - [Kimi na China](#kimi-na-china)
105
+ - [Proxy de rede](#proxy-de-rede)
106
+ - [Resiliência](#resiliência)
107
+ - [Credenciais](#credenciais)
108
+ - [Arquitetura](#arquitetura)
109
+ - [Notas técnicas](#notas-técnicas)
110
+ - [Conformidade](#conformidade)
111
+ - [Documentação](#documentação)
112
+ - [Relacionados](#relacionados)
113
+ - [Contribuição](#contribuição)
114
+ - [Licença](#licença)
115
+
116
+ ## Instalação
117
+
118
+ Requer DeepSeek Harness `0.1.0-rc.6+` e Node.js 22.19+. Detalhes completos nas [notas de instalação](INSTALL.md).
119
+
120
+ ```bash
121
+ # versão atual do npm (recomendado)
122
+ dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.0
123
+
124
+ # desenvolvimento/alternativo: do GitHub
125
+ dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
126
+
127
+ # desenvolvimento/alternativo: um checkout local de desenvolvimento
128
+ dsh plugin --profile web add ./dsh-coding-subscription-oauth
129
+ ```
130
+
131
+ Reinicie o processo DSH Web existente após instalar. Verificação contra uma implantação ao vivo:
132
+
133
+ ```bash
134
+ pnpm run verify:deployed # confere /api/llm.models real + estado OAuth
135
+ DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # se o Google estiver conectado
136
+
137
+ DSH_RESTORE_PROVIDER=openai \
138
+ DSH_RESTORE_MODEL=gpt-5.6-sol \
139
+ DSH_RESTORE_REASONING=max \
140
+ pnpm run smoke:deployed # chamadas reais Codex/Kimi + replay do segundo turn
141
+ ```
142
+
143
+ > 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.
144
+
145
+ ## Página de configurações
146
+
147
+ Abra **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
+ | Provedor | Métodos |
169
+ |---|---|
170
+ | Grok | código de autorização · código de dispositivo · importação via CLI Grok · seleção de modelos |
171
+ | Codex | código de dispositivo (recomendado em DSH remoto) · PKCE no navegador |
172
+ | Kimi | código de dispositivo |
173
+ | Claude | PKCE no navegador (um navegador remoto pode colar a URL completa de redirect localhost) |
174
+ | Antigravity | status de instalação do `dsh-agy` + comandos CLI local ao perfil |
175
+
176
+ A página de configurações é dividida em quatro abas superiores: **Accounts**, **Gateway**, **Capabilities** e **About**. Os cartões de provedores conectados colapsam em um resumo compacto e se expandem para edição de modelos. A pré-visualização do pull da CLI ocupa a largura total, e o status do Imagine aparece na aba Capabilities.
177
+
178
+ 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.
179
+
180
+ ## Capacidades opcionais
181
+
182
+ 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.
183
+
184
+ ## Gateway de API local
185
+
186
+ Desligado por padrão. Quando ativado, inicia um servidor `node:http` isolado (não é a porta web do DSH) em `127.0.0.1:18080` e reutiliza as mesmas sessões OAuth autenticadas:
187
+
188
+ ```yaml
189
+ gateway:
190
+ enabled: false
191
+ bind: 127.0.0.1
192
+ port: 18080
193
+ ```
194
+
195
+ Endpoints: `GET /healthz`, `GET /v1/models`, `POST /v1/chat/completions`, `POST /v1/responses`, `POST /v1/messages`. Uma chave Bearer é armazenada em `$DSH_HOME/.coding-oauth-gateway.json` (`0600`). As configurações podem copiar a URL base OpenAI (base + `/v1`), a URL base Anthropic e a chave Bearer atual sem rotacioná-la; a revelação da chave é apenas via loopback e não é persistida no armazenamento do navegador. A rotação é uma ação destrutiva com confirmação. A porta de escuta pode ser editada diretamente e salva com Apply, ou preenchida pelo botão Random (18100–18999); a porta escolhida é persistida no documento do gateway somente-dono, e um listener em execução é religado. O bind continua sendo somente via YAML; bind não-loopback exige uma chave. Isto não é um relé remoto.
196
+
197
+ ## CLI
198
+
199
+ ```bash
200
+ # `dsh-grok-build` continua sendo um alias
201
+ dsh-coding-oauth login [--pkce] | import | status | logout
202
+
203
+ # provedores mais recentes
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 (instale no perfil web primeiro)
209
+ dsh plugin --profile web exec dsh-agy login --headless
210
+ ```
211
+
212
+ > 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.
213
+
214
+ ## Kimi na China
215
+
216
+ 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.
217
+
218
+ ## Proxy de rede
219
+
220
+ Prioridade: `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
+ 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`.
230
+
231
+ ## Resiliência
232
+
233
+ 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.
234
+
235
+ 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: 5 tentativas, 5 s → 10 s → 20 s → 40 s → 80 s (~155 s acumulados), 10% de jitter). Esgotamento de cota e refresh token morto **não** são repetidos. Sobrescrita por implantação:
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
+ ## Credenciais
248
+
249
+ Somente-dono `0600`, escrita atômica, bloqueio de arquivo entre processos:
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
+ Os caches de seleção ficam nos arquivos `*-models.json` correspondentes. **Nenhum status HTTP, log ou interface pode devolver um token.**
257
+
258
+ ## Arquitetura
259
+
260
+ ```mermaid
261
+ flowchart LR
262
+ subgraph DSH["DSH Harness"]
263
+ UI[Configurações / Web · Coding OAuth] --> LLM[llm route]
264
+ LLM --> ALIA[Adaptador de alias de rota]
265
+ end
266
+ ALIA --> PI[provedor nativo 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[plugin dsh-agy] --> GAL[Google Antigravity]
272
+ ```
273
+
274
+ ## Notas técnicas
275
+
276
+ - **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.
277
+ - **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.
278
+ - O access token do Kimi é convertido explicitamente para `Authorization: Bearer` — nunca é enviado acidentalmente como `x-api-key` do Anthropic.
279
+ - O Google Antigravity **não** é engenharia reversa aqui; ele usa um plugin DSH dedicado com versão fixa.
280
+
281
+ ## Conformidade
282
+
283
+ 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.
284
+
285
+ ## Documentação
286
+
287
+ | Documento | Propósito |
288
+ |---|---|
289
+ | [`INSTALL.md`](INSTALL.md) | Detalhes de instalação e uso |
290
+ | [`CHANGELOG.md`](CHANGELOG.md) | Histórico de versões |
291
+ | [`docs/00-project-rules.md`](docs/00-project-rules.md) | Versionamento, loop de release, divisão público/privado |
292
+ | [`docs/02-architecture.md`](docs/02-architecture.md) | Arquitetura interna (rotas, fluxo de dados, módulos, API) · [中文](docs/02-architecture.zh-CN.md) |
293
+ | [`CONTRIBUTING.md`](CONTRIBUTING.md) | Guia de contribuição |
294
+
295
+ ## Relacionados
296
+
297
+ - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — plugin separado fixo para Google Antigravity.
298
+
299
+ ## Contribuição
300
+
301
+ 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.
302
+
303
+ ## Licença
304
+
305
+ [Apache-2.0](LICENSE) · consulte [NOTICE](NOTICE). Partes derivadas do projeto [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).