dsh-coding-subscription-oauth 0.5.7 → 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 -182
  2. package/CONTRIBUTING.md +120 -109
  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 -166
  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 -20
  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 -364
  86. package/src/client/components/NoticeBanner.tsx +46 -46
  87. package/src/client/components/ProgressBar.tsx +53 -52
  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 -487
  97. package/src/client/microStyles.ts +52 -33
  98. package/src/client/parsers.ts +396 -386
  99. package/src/client/styles.ts +325 -312
  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.fr.md CHANGED
@@ -1,300 +1,305 @@
1
-
2
- <!-- banner -->
3
- <div align="center">
4
-
5
- # 🔐 dsh-coding-subscription-oauth
6
-
7
- **v0.5.7 · anciennement `dsh-grok-build`
8
-
9
- **Plugin OAuth pour abonnements de codage de [DeepSeek Harness](https://github.com/deepseek-ai/dsh).** Connectez-vous une fois avec les abonnements que vous payez déjà, puis utilisez leurs modèles depuis la page de configuration ou la CLI dsh. **Aucun token collé dans le 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 · anciennement `dsh-grok-build`
8
+
9
+ **Plugin OAuth pour abonnements de codage de [DeepSeek Harness](https://github.com/deepseek-ai/dsh).** Connectez-vous une fois avec les abonnements que vous payez déjà, puis utilisez leurs modèles depuis la page de configuration ou la CLI dsh. **Aucun token collé dans le 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
- ## Changement de nom
21
-
22
- Le projet s'appelait **`dsh-grok-build`** (Grok Build uniquement). Il couvre maintenant SuperGrok / Codex / Kimi / Claude / Antigravity.
23
-
24
- | | Utiliser | Toujours valable |
25
- |---|---|---|
26
- | GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (même `main`) |
27
- | npm | `dsh-coding-subscription-oauth@0.5.7` (version actuelle) | Aucun ancien paquet npm n'a été publié |
28
- | CLI | `dsh-coding-oauth` | `dsh-grok-build` |
29
- | Cordis plugin id | `llm-grok-build-oauth` | inchangé |
30
- | API HTTP des réglages | `/plugins/dsh-grok-build/*` | inchangé |
31
- | Fichiers d'identifiants | `$DSH_HOME/.grok-build-auth.json` et les autres `*-oauth-auth.json` | inchangé |
32
-
33
- ## ✨ Fonctionnalités
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
- - 🧾 **Apportez votre abonnement** — utilisez les plans de codage que vous payez déjà au lieu de clés API séparées.
36
- - 🔑 **OAuth local, sans coller de clé** — autorisez dans la page de configuration ou la CLI ; les tokens n'entrent jamais dans le chat.
37
- - 🧩 **Un plugin, cinq fournisseurs** — Grok Build, Codex, Kimi, Claude et Google Antigravity.
38
- - 🛡️ **Sécurisé par conception** — fichiers d'identification propriétaire-seul `0600`, écriture atomique, verrou de fichier inter-processus.
39
- - ⚙️ **Catalogue dynamique** le sélecteur n'affiche que les routes authentifiées, étiquetées `(OAuth)`, y compris le `xhigh` de grok-4.6.
40
- - 🌐 **Conscient du proxy** — ne proxifie que les domaines d'abonnement examinés et de confiance.
41
- - 📥 **CLI Pull manuel** les paramètres découvrent en lecture seule les fichiers OAuth officiels des CLI Grok/Codex/Kimi/Claude autorisés ; vous récupérez une copie à sens unique après prévisualisation et confirmation d'écrasement.
42
- - 🗂️ **Paramètres en onglets** — Accounts, Gateway, Capabilities et About ; les hôtes distants privilégient le device code avec moins de bruit CLI missing ; les cartes connectées restent repliées jusqu'à expansion.
43
- - 🎛️ **Capacités optionnelles, désactivées par défaut** recherche Codex, usage/quota, génération/édition d'images, Fast et Grok Imagine s'appliquent en direct dès leur activation.
44
- - 🔌 **Passerelle API locale opt-in** serveur loopback compatible OpenAI/Anthropic, désactivé par défaut ; pour vos propres outils, jamais un relais public.
45
-
46
- ## Problèmes d'intégration que ce plugin résout
47
-
48
- Ce sont les recherches et erreurs DSH qui mènent le plus souvent ici.
49
- | Vous avez cherché / vu | Ce qui était cassé | Ce que fait le plugin |
50
- |---|---|---|
51
- | SuperGrok / X Premium dans DSH, Grok Build vs `api.x.ai` | La route `xai` est l'API à l'usage. L'abonnement coding passe par `cli-chat-proxy.grok.com` | Route `grok-build` + en-têtes d'empreinte CLI (`X-XAI-Token-Auth`, etc.) pour éviter un 403 silencieux |
52
- | `API key is invalid` / `AUTH` | L'UI mappe **tout** AUTH sur ce texte. Souvent le access token OAuth a juste expiré | Refresh **5 min** avant l'expiry ; sur 401, invalide le jeton et **relance le step** |
53
- | `INVALID_REPLAY_STATE` au 2ᵉ tour Codex/Kimi | Le replay gardait l'id provider natif de pi-ai | Conserve l'id de route Harness et répare l'ancien replay |
54
- | grok-4.6 sans **xhigh** | `/v1/models-v2` renvoie déjà `reasoning_efforts` ; cloner le modèle 4.5 cache xhigh | Lit les efforts en direct. 4.6 a xhigh ; 4.5 reste low/medium/high |
55
- | Kimi Code en `x-api-key` Anthropic | Le jeton OAuth partait comme clé Anthropic | Uniquement `Authorization: Bearer` |
56
- | Des modèles non connectés restent dans le sélecteur | Toutes les routes enregistrées étaient listées | Les routes non authentifiées sont vides ; les noms connectés portent `(OAuth)` |
57
- | PKCE sur un DSH distant / headless | Impossible de revenir sur `localhost` | Device-code pour Grok/Codex/Kimi ; Claude accepte l'URL de redirect collée |
58
- | Le proxy passe Grok et casse Kimi en Chine | Un `HTTPS_PROXY` global | Proxy sur liste blanche ; Kimi reste **direct** sauf `proxyKimi: true` |
59
-
60
- ## Fournisseurs pris en charge
61
-
62
- | Fournisseur | Route | Authentification | Coexiste avec |
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
- > La connexion par dispositif de Grok Build, le catalogue dynamique `/v1/models-v2` et l'inférence en streaming via Responses sont vérifiés sur des déploiements réels. Codex/Kimi/Claude réutilisent l'OAuth/refresh natif du fournisseur de `@earendil-works/pi-ai` plutôt que de réimplémenter les flux de chaque vendeur.
71
-
72
- ## 🚀 Démarrage rapide
73
-
74
- ```bash
75
- # 1. installez le plugin dans le profil web (version actuelle npm)
76
- dsh plugin --profile web add dsh-coding-subscription-oauth@0.5.7
77
-
78
- # 2. optionnel — Google Antigravity (version épinglée examinée)
79
- dsh plugin --profile web add dsh-agy@0.1.2
80
-
81
- # 3. redémarrez le service dsh web résident
22
+ ---
23
+
24
+ ## Changement de nom
25
+
26
+ Le projet s'appelait **`dsh-grok-build`** (Grok Build uniquement). Il couvre maintenant SuperGrok / Codex / Kimi / Claude / Antigravity.
27
+
28
+ | | Utiliser | Toujours valable |
29
+ |---|---|---|
30
+ | GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (même `main`) |
31
+ | npm | `dsh-coding-subscription-oauth@0.6.0` (version actuelle) | Aucun ancien paquet npm n'a été publié |
32
+ | CLI | `dsh-coding-oauth` | `dsh-grok-build` |
33
+ | Cordis plugin id | `llm-grok-build-oauth` | inchangé |
34
+ | API HTTP des réglages | `/plugins/dsh-grok-build/*` | inchangé |
35
+ | Fichiers d'identifiants | `$DSH_HOME/.grok-build-auth.json` et les autres `*-oauth-auth.json` | inchangé |
36
+
37
+ ## ✨ Fonctionnalités
38
+
39
+ - 🧾 **Apportez votre abonnement** utilisez les plans de codage que vous payez déjà au lieu de clés API séparées.
40
+ - 🔑 **OAuth local, sans coller de clé** autorisez dans la page de configuration ou la CLI ; les tokens n'entrent jamais dans le chat.
41
+ - 🧩 **Un plugin, cinq fournisseurs** Grok Build, Codex, Kimi, Claude et Google Antigravity.
42
+ - 🛡️ **Sécurisé par conception** fichiers d'identification propriétaire-seul `0600`, écriture atomique, verrou de fichier inter-processus.
43
+ - ⚙️ **Catalogue dynamique** le sélecteur n'affiche que les routes authentifiées, étiquetées `(OAuth)`, y compris le `xhigh` de grok-4.6.
44
+ - 🌐 **Conscient du proxy** ne proxifie que les domaines d'abonnement examinés et de confiance.
45
+ - 📥 **CLI Pull manuel** les paramètres découvrent en lecture seule les fichiers OAuth officiels des CLI Grok/Codex/Kimi/Claude autorisés ; vous récupérez une copie à sens unique après prévisualisation et confirmation d'écrasement.
46
+ - 🗂️ **Paramètres en onglets** — Accounts, Gateway, Capabilities et About ; les hôtes distants privilégient le device code avec moins de bruit CLI missing ; les cartes connectées restent repliées jusqu'à expansion.
47
+ - 🎛️ **Capacités optionnelles, désactivées par défaut** — recherche Codex, usage/quota, génération/édition d'images, Fast et Grok Imagine s'appliquent en direct dès leur activation.
48
+ - 🔌 **Passerelle API locale opt-in** — serveur loopback compatible OpenAI/Anthropic, désactivé par défaut ; pour vos propres outils, jamais un relais public.
49
+
50
+ ## Problèmes d'intégration que ce plugin résout
51
+
52
+ Ce sont les recherches et erreurs DSH qui mènent le plus souvent ici.
53
+ | Vous avez cherché / vu | Ce qui était cassé | Ce que fait le plugin |
54
+ |---|---|---|
55
+ | SuperGrok / X Premium dans DSH, Grok Build vs `api.x.ai` | La route `xai` est l'API à l'usage. L'abonnement coding passe par `cli-chat-proxy.grok.com` | Route `grok-build` + en-têtes d'empreinte CLI (`X-XAI-Token-Auth`, etc.) pour éviter un 403 silencieux |
56
+ | `API key is invalid` / `AUTH` | L'UI mappe **tout** AUTH sur ce texte. Souvent le access token OAuth a juste expiré | Refresh **5 min** avant l'expiry ; sur 401, invalide le jeton et **relance le step** |
57
+ | `INVALID_REPLAY_STATE` au 2ᵉ tour Codex/Kimi | Le replay gardait l'id provider natif de pi-ai | Conserve l'id de route Harness et répare l'ancien replay |
58
+ | grok-4.6 sans **xhigh** | `/v1/models-v2` renvoie déjà `reasoning_efforts` ; cloner le modèle 4.5 cache xhigh | Lit les efforts en direct. 4.6 a xhigh ; 4.5 reste low/medium/high |
59
+ | Kimi Code en `x-api-key` Anthropic | Le jeton OAuth partait comme clé Anthropic | Uniquement `Authorization: Bearer` |
60
+ | Des modèles non connectés restent dans le sélecteur | Toutes les routes enregistrées étaient listées | Les routes non authentifiées sont vides ; les noms connectés portent `(OAuth)` |
61
+ | PKCE sur un DSH distant / headless | Impossible de revenir sur `localhost` | Device-code pour Grok/Codex/Kimi ; Claude accepte l'URL de redirect collée |
62
+ | Le proxy passe Grok et casse Kimi en Chine | Un `HTTPS_PROXY` global | Proxy sur liste blanche ; Kimi reste **direct** sauf `proxyKimi: true` |
63
+
64
+ ## Fournisseurs pris en charge
65
+
66
+ | Fournisseur | Route | Authentification | Coexiste avec |
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
+ > La connexion par dispositif de Grok Build, le catalogue dynamique `/v1/models-v2` et l'inférence en streaming via Responses sont vérifiés sur des déploiements réels. Codex/Kimi/Claude réutilisent l'OAuth/refresh natif du fournisseur de `@earendil-works/pi-ai` plutôt que de réimplémenter les flux de chaque vendeur.
75
+
76
+ ## 🚀 Démarrage rapide
77
+
78
+ ```bash
79
+ # 1. installez le plugin dans le profil web (version actuelle npm)
80
+ dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.0
81
+
82
+ # 2. optionnel — Google Antigravity (version épinglée examinée)
83
+ dsh plugin --profile web add dsh-agy@0.1.2
84
+
85
+ # 3. redémarrez le service dsh web résident
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
- Ensuite ouvrez **Settings → Coding OAuth** et connectez-vous à n'importe quel fournisseur. C'est tout — choisissez votre modèle authentifié dans le sélecteur.
86
-
87
- ## 📚 Sommaire
88
-
89
- - [Changement de nom](#changement-de-nom)
90
- - [Fonctionnalités](#-fonctionnalités)
91
- - [Problèmes d'intégration que ce plugin résout](#problèmes-dintégration-que-ce-plugin-résout)
92
- - [Fournisseurs pris en charge](#fournisseurs-pris-en-charge)
93
- - [Démarrage rapide](#-démarrage-rapide)
94
- - [Installation](#installation)
95
- - [Page de configuration](#page-de-configuration)
96
- - [Capacités optionnelles](#capacités-optionnelles)
97
- - [Passerelle API locale](#passerelle-api-locale)
98
- - [CLI](#cli)
99
- - [Kimi en Chine](#kimi-en-chine)
100
- - [Proxy réseau](#proxy-réseau)
101
- - [Résilience](#résilience)
102
- - [Identifiants](#identifiants)
103
- - [Architecture](#architecture)
104
- - [Notes techniques](#notes-techniques)
105
- - [Conformité](#conformité)
106
- - [Documentation](#documentation)
107
- - [Lié](#lié)
108
- - [Contribution](#contribution)
109
- - [Licence](#licence)
110
-
111
- ## Installation
112
-
113
- Nécessite DeepSeek Harness `0.1.0-rc.6+` et Node.js 22.19+. Détails complets dans les [notes d'installation](INSTALL.md).
114
-
115
- ```bash
116
- # version actuelle npm (recommandé)
117
- dsh plugin --profile web add dsh-coding-subscription-oauth@0.5.7
118
-
119
- # développement/alternatif : depuis GitHub
120
- dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
121
-
122
- # développement/alternatif : un checkout local de développement
123
- dsh plugin --profile web add ./dsh-coding-subscription-oauth
124
- ```
125
-
126
- Redémarrez `dsh web` après l'installation. Vérification sur un déploiement en direct :
127
-
128
- ```bash
129
- pnpm run verify:deployed # vérifie /api/llm.models réel + état OAuth
130
- DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # si Google est connecté
131
-
132
- DSH_RESTORE_PROVIDER=openai \
133
- DSH_RESTORE_MODEL=gpt-5.6-sol \
134
- DSH_RESTORE_REASONING=max \
135
- pnpm run smoke:deployed # appels réels Codex/Kimi + rejeu du second tour
136
- ```
137
-
138
- > `smoke:deployed` crée une session temporaire, valide les appels d'outils de Codex et Kimi ainsi qu'un second tour utilisateur (régression `INVALID_REPLAY_STATE`), restaure le modèle par défaut déclaré, puis archive la session.
139
-
140
- ## Page de configuration
141
-
142
- Ouvrez **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
- | Fournisseur | Méthodes |
164
- |---|---|
165
- | Grok | code d'autorisation · code de dispositif · importation CLI Grok · sélection de modèles |
166
- | Codex | code de dispositif (recommandé sur DSH distant) · PKCE navigateur |
167
- | Kimi | code de dispositif |
168
- | Claude | PKCE navigateur (un navigateur distant peut coller l'URL complète de redirect localhost) |
169
- | Antigravity | état d'installation de `dsh-agy` + commandes CLI locales au profil |
170
-
171
- La page de configuration est divisée en quatre onglets principaux : **Accounts**, **Gateway**, **Capabilities** et **About**. Les cartes des fournisseurs connectés se replient en un résumé compact et se déplient pour l'édition des modèles. L'aperçu du pull CLI occupe toute la largeur, et le statut d'Imagine s'affiche dans l'onglet Capabilities.
172
-
173
- Le sélecteur ne liste que les routes ayant terminé l'authentification ; les fournisseurs non authentifiés renvoient une liste vide. Les noms de fournisseurs portent `(OAuth)` et le catalogue est rafraîchi via `llm/adapters-updated` après connexion/déconnexion.
174
-
175
- ## Capacités optionnelles
176
-
177
- Les sept options `codexSearch`, `codexImages`, `codexImageEdits`, `codexUsage`, `codexFast`, `grokImagineImage` et `grokImagineVideo` sont désactivées par défaut et s'appliquent à chaud, sans redémarrage. Les limites sont `searchResults` (1–20, défaut 5), `imageCount` (1–4, défaut 1) et `videoArtifactTtlMs` (1 heure–7 jours, défaut 7 jours ; l'interface affiche 1–168 heures). Réduire la rétention raccourcit et nettoie immédiatement les artefacts existants ; l'augmenter ne concerne que les nouveaux.
178
-
179
- ## Passerelle API locale
180
-
181
- Désactivée par défaut. Une fois activée, elle démarre un serveur `node:http` isolé (pas le port web de DSH) sur `127.0.0.1:18080` et réutilise les mêmes sessions OAuth authentifiées :
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`. Une clé Bearer est stockée dans `$DSH_HOME/.coding-oauth-gateway.json` (`0600`). La configuration permet de copier l'URL de base OpenAI (base + `/v1`), l'URL de base Anthropic et la clé Bearer actuelle sans la régénérer ; la révélation de la clé est limitée au loopback et n'est pas persistée dans le stockage du navigateur. La rotation est une action destructive avec confirmation. Le port d'écoute peut être modifié directement puis enregistré avec Apply, ou rempli par Random (18100–18999) ; le port choisi est persisté dans le document de passerelle propriétaire-seul, et un listener en cours d'exécution se rebind. Le bind reste configurable uniquement en YAML ; un bind non loopback exige une clé. Ce n'est pas un relais distant.
191
-
192
- ## CLI
193
-
194
- ```bash
195
- # `dsh-grok-build` reste un alias de commande
196
- dsh-coding-oauth login [--pkce] | import | status | logout
197
-
198
- # fournisseurs plus récents
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 (installez d'abord dans le profil web)
204
- dsh plugin --profile web exec dsh-agy login --headless
205
- ```
206
-
207
- > La CLI de `dsh-agy` modifie le pool de comptes en dehors du processus DSH, elle ne peut donc pas émettre d'événement de catalogue dans le processus — fermez et rouvrez le sélecteur de modèles après connexion/déconnexion.
208
-
209
- ## Kimi en Chine
210
-
211
- L'OAuth de l'abonnement Kimi Code utilise `https://auth.kimi.com` ; l'inférence utilise `https://api.kimi.com/coding`. `https://api.moonshot.cn/v1` est le canal de clé API à l'utilisation du **Moonshot Open Platform** — il n'existe aucun « endpoint OAuth Chine » commutable. Ce plugin utilise une route séparée `kimi-code-oauth` et n'affecte pas une configuration `kimi-coding` par clé API existante.
212
-
213
- ## Proxy réseau
214
-
215
- Priorité : `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
- Seuls les domaines d'abonnement examinés sont proxifiés (xAI/Grok, OpenAI Codex, Claude/Anthropic, Google Antigravity) ; tout le reste du trafic DSH garde son répartiteur d'origine. Kimi reste direct par défaut et n'utilise le proxy que lorsque `proxyKimi: true`.
225
-
226
- ## Résilience
227
-
228
- Les jetons d'accès OAuth sont renouvelés **cinq minutes** avant l'expiration enregistrée (pi-ai 0.84+). Si l'amont refuse encore un jeton localement valide avec 401/403, le plugin recule le `expires` stocké et l'étape relancée rafraîchit le jeton avant de renvoyer.
229
-
230
- Les nouvelles tentatives suivent la politique du harness : les pannes transitoires (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **et `AUTH`** sont relancées avec un backoff exponentiel (5 essais, 5 s → 10 s → 20 s → 40 s → 80 s (~155 s cumulés), jitter 10 %). L'épuisement de quota et un refresh token mort **ne** sont **pas** relancés. Surcharge par déploiement :
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
- ## Identifiants
243
-
244
- Propriétaire-seul `0600`, écriture atomique, verrou de fichier inter-processus :
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
- Les caches de sélection vivent dans les fichiers `*-models.json` correspondants. **Aucun statut HTTP, log ou interface ne peut renvoyer un token.**
252
-
253
- ## Architecture
254
-
255
- ```mermaid
256
- flowchart LR
257
- subgraph DSH["DSH Harness"]
258
- UI[Configuration / Web · Coding OAuth] --> LLM[llm route]
259
- LLM --> ALIA[Adaptateur d'alias de route]
260
- end
261
- ALIA --> PI[fournisseur natif 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
- ## Notes techniques
270
-
271
- - **Grok Build** : fournisseur Responses personnalisé sur `cli-chat-proxy.grok.com/v1`, en-têtes d'empreinte CLI, catalogue de modèles dynamique.
272
- - **Codex/Kimi/Claude** : les fournisseurs natifs pi-ai gèrent OAuth et refresh ; l'adaptateur d'alias de route les mappe aux ids natifs tandis que l'identité du modèle reste inchangée.
273
- - Le token d'accès Kimi est explicitement converti en `Authorization: Bearer` — jamais envoyé par erreur comme `x-api-key` d'Anthropic.
274
- - Google Antigravity n'est **pas** rétro-ingénieré ici ; il utilise un plugin DSH dédié épinglé en version.
275
-
276
- ## Conformité
277
-
278
- Utiliser des abonnements de codage via un harness tiers peut se situer dans une zone grise des conditions de chaque vendeur et peut déclencher des contrôles de quota, régionaux ou de risque de compte. **N'utilisez que vos propres comptes** ; ce projet ne prend pas en charge les comptes en masse, la revente de quota, le relais distant, le contournement de paywall ou l'usurpation de client. Pour un usage commercial, préférez les canaux officiels de clé API des vendeurs.
279
-
280
- ## Documentation
281
-
282
- | Document | Objectif |
283
- |---|---|
284
- | [`INSTALL.md`](INSTALL.md) | Détails d'installation et d'utilisation |
285
- | [`CHANGELOG.md`](CHANGELOG.md) | Historique des versions |
286
- | [`docs/00-project-rules.md`](docs/00-project-rules.md) | Versioning, boucle de release, répartition public/privé |
287
- | [`docs/02-architecture.md`](docs/02-architecture.md) | Architecture interne (routes, flux de données, modules, API) · [中文](docs/02-architecture.zh-CN.md) |
288
- | [`CONTRIBUTING.md`](CONTRIBUTING.md) | Guide de contribution |
289
-
290
- ## Lié
291
-
292
- - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — plugin séparé épinglé pour Google Antigravity.
293
-
294
- ## Contribution
295
-
296
- Les contributions de toute nature sont bienvenues — fonctionnalités, documentation, traductions, rapports de bugs. Voir **[CONTRIBUTING](CONTRIBUTING.md)** pour le flux, les conventions de commit et la boucle de release. Si votre langue n'est pas listée, envoyez un PR avec une traduction du README et nous l'ajouterons au tableau ci-dessus.
297
-
298
- ## Licence
299
-
300
- [Apache-2.0](LICENSE) · voir [NOTICE](NOTICE). Des portions sont dérivées du projet [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).
88
+ ```
89
+
90
+ Ensuite ouvrez **Settings → Coding OAuth** et connectez-vous à n'importe quel fournisseur. C'est tout — choisissez votre modèle authentifié dans le sélecteur.
91
+
92
+ ## 📚 Sommaire
93
+
94
+ - [Changement de nom](#changement-de-nom)
95
+ - [Fonctionnalités](#-fonctionnalités)
96
+ - [Problèmes d'intégration que ce plugin résout](#problèmes-dintégration-que-ce-plugin-résout)
97
+ - [Fournisseurs pris en charge](#fournisseurs-pris-en-charge)
98
+ - [Démarrage rapide](#-démarrage-rapide)
99
+ - [Installation](#installation)
100
+ - [Page de configuration](#page-de-configuration)
101
+ - [Capacités optionnelles](#capacités-optionnelles)
102
+ - [Passerelle API locale](#passerelle-api-locale)
103
+ - [CLI](#cli)
104
+ - [Kimi en Chine](#kimi-en-chine)
105
+ - [Proxy réseau](#proxy-réseau)
106
+ - [Résilience](#résilience)
107
+ - [Identifiants](#identifiants)
108
+ - [Architecture](#architecture)
109
+ - [Notes techniques](#notes-techniques)
110
+ - [Conformité](#conformité)
111
+ - [Documentation](#documentation)
112
+ - [Lié](#lié)
113
+ - [Contribution](#contribution)
114
+ - [Licence](#licence)
115
+
116
+ ## Installation
117
+
118
+ Nécessite DeepSeek Harness `0.1.0-rc.6+` et Node.js 22.19+. Détails complets dans les [notes d'installation](INSTALL.md).
119
+
120
+ ```bash
121
+ # version actuelle npm (recommandé)
122
+ dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.0
123
+
124
+ # développement/alternatif : depuis GitHub
125
+ dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
126
+
127
+ # développement/alternatif : un checkout local de développement
128
+ dsh plugin --profile web add ./dsh-coding-subscription-oauth
129
+ ```
130
+
131
+ Redémarrez le processus DSH Web existant après l'installation. Vérification sur un déploiement en direct :
132
+
133
+ ```bash
134
+ pnpm run verify:deployed # vérifie /api/llm.models réel + état OAuth
135
+ DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # si Google est connecté
136
+
137
+ DSH_RESTORE_PROVIDER=openai \
138
+ DSH_RESTORE_MODEL=gpt-5.6-sol \
139
+ DSH_RESTORE_REASONING=max \
140
+ pnpm run smoke:deployed # appels réels Codex/Kimi + rejeu du second tour
141
+ ```
142
+
143
+ > `smoke:deployed` crée une session temporaire, valide les appels d'outils de Codex et Kimi ainsi qu'un second tour utilisateur (régression `INVALID_REPLAY_STATE`), restaure le modèle par défaut déclaré, puis archive la session.
144
+
145
+ ## Page de configuration
146
+
147
+ Ouvrez **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
+ | Fournisseur | Méthodes |
169
+ |---|---|
170
+ | Grok | code d'autorisation · code de dispositif · importation CLI Grok · sélection de modèles |
171
+ | Codex | code de dispositif (recommandé sur DSH distant) · PKCE navigateur |
172
+ | Kimi | code de dispositif |
173
+ | Claude | PKCE navigateur (un navigateur distant peut coller l'URL complète de redirect localhost) |
174
+ | Antigravity | état d'installation de `dsh-agy` + commandes CLI locales au profil |
175
+
176
+ La page de configuration est divisée en quatre onglets principaux : **Accounts**, **Gateway**, **Capabilities** et **About**. Les cartes des fournisseurs connectés se replient en un résumé compact et se déplient pour l'édition des modèles. L'aperçu du pull CLI occupe toute la largeur, et le statut d'Imagine s'affiche dans l'onglet Capabilities.
177
+
178
+ Le sélecteur ne liste que les routes ayant terminé l'authentification ; les fournisseurs non authentifiés renvoient une liste vide. Les noms de fournisseurs portent `(OAuth)` et le catalogue est rafraîchi via `llm/adapters-updated` après connexion/déconnexion.
179
+
180
+ ## Capacités optionnelles
181
+
182
+ Les sept options `codexSearch`, `codexImages`, `codexImageEdits`, `codexUsage`, `codexFast`, `grokImagineImage` et `grokImagineVideo` sont désactivées par défaut et s'appliquent à chaud, sans redémarrage. Les limites sont `searchResults` (1–20, défaut 5), `imageCount` (1–4, défaut 1) et `videoArtifactTtlMs` (1 heure–7 jours, défaut 7 jours ; l'interface affiche 1–168 heures). Réduire la rétention raccourcit et nettoie immédiatement les artefacts existants ; l'augmenter ne concerne que les nouveaux.
183
+
184
+ ## Passerelle API locale
185
+
186
+ Désactivée par défaut. Une fois activée, elle démarre un serveur `node:http` isolé (pas le port web de DSH) sur `127.0.0.1:18080` et réutilise les mêmes sessions OAuth authentifiées :
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`. Une clé Bearer est stockée dans `$DSH_HOME/.coding-oauth-gateway.json` (`0600`). La configuration permet de copier l'URL de base OpenAI (base + `/v1`), l'URL de base Anthropic et la clé Bearer actuelle sans la régénérer ; la révélation de la clé est limitée au loopback et n'est pas persistée dans le stockage du navigateur. La rotation est une action destructive avec confirmation. Le port d'écoute peut être modifié directement puis enregistré avec Apply, ou rempli par Random (18100–18999) ; le port choisi est persisté dans le document de passerelle propriétaire-seul, et un listener en cours d'exécution se rebind. Le bind reste configurable uniquement en YAML ; un bind non loopback exige une clé. Ce n'est pas un relais distant.
196
+
197
+ ## CLI
198
+
199
+ ```bash
200
+ # `dsh-grok-build` reste un alias de commande
201
+ dsh-coding-oauth login [--pkce] | import | status | logout
202
+
203
+ # fournisseurs plus récents
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 (installez d'abord dans le profil web)
209
+ dsh plugin --profile web exec dsh-agy login --headless
210
+ ```
211
+
212
+ > La CLI de `dsh-agy` modifie le pool de comptes en dehors du processus DSH, elle ne peut donc pas émettre d'événement de catalogue dans le processus — fermez et rouvrez le sélecteur de modèles après connexion/déconnexion.
213
+
214
+ ## Kimi en Chine
215
+
216
+ L'OAuth de l'abonnement Kimi Code utilise `https://auth.kimi.com` ; l'inférence utilise `https://api.kimi.com/coding`. `https://api.moonshot.cn/v1` est le canal de clé API à l'utilisation du **Moonshot Open Platform** — il n'existe aucun « endpoint OAuth Chine » commutable. Ce plugin utilise une route séparée `kimi-code-oauth` et n'affecte pas une configuration `kimi-coding` par clé API existante.
217
+
218
+ ## Proxy réseau
219
+
220
+ Priorité : `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
+ Seuls les domaines d'abonnement examinés sont proxifiés (xAI/Grok, OpenAI Codex, Claude/Anthropic, Google Antigravity) ; tout le reste du trafic DSH garde son répartiteur d'origine. Kimi reste direct par défaut et n'utilise le proxy que lorsque `proxyKimi: true`.
230
+
231
+ ## Résilience
232
+
233
+ Les jetons d'accès OAuth sont renouvelés **cinq minutes** avant l'expiration enregistrée (pi-ai 0.84+). Si l'amont refuse encore un jeton localement valide avec 401/403, le plugin recule le `expires` stocké et l'étape relancée rafraîchit le jeton avant de renvoyer.
234
+
235
+ Les nouvelles tentatives suivent la politique du harness : les pannes transitoires (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **et `AUTH`** sont relancées avec un backoff exponentiel (5 essais, 5 s → 10 s → 20 s → 40 s → 80 s (~155 s cumulés), jitter 10 %). L'épuisement de quota et un refresh token mort **ne** sont **pas** relancés. Surcharge par déploiement :
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
+ ## Identifiants
248
+
249
+ Propriétaire-seul `0600`, écriture atomique, verrou de fichier inter-processus :
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
+ Les caches de sélection vivent dans les fichiers `*-models.json` correspondants. **Aucun statut HTTP, log ou interface ne peut renvoyer un token.**
257
+
258
+ ## Architecture
259
+
260
+ ```mermaid
261
+ flowchart LR
262
+ subgraph DSH["DSH Harness"]
263
+ UI[Configuration / Web · Coding OAuth] --> LLM[llm route]
264
+ LLM --> ALIA[Adaptateur d'alias de route]
265
+ end
266
+ ALIA --> PI[fournisseur natif 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
+ ## Notes techniques
275
+
276
+ - **Grok Build** : fournisseur Responses personnalisé sur `cli-chat-proxy.grok.com/v1`, en-têtes d'empreinte CLI, catalogue de modèles dynamique.
277
+ - **Codex/Kimi/Claude** : les fournisseurs natifs pi-ai gèrent OAuth et refresh ; l'adaptateur d'alias de route les mappe aux ids natifs tandis que l'identité du modèle reste inchangée.
278
+ - Le token d'accès Kimi est explicitement converti en `Authorization: Bearer` — jamais envoyé par erreur comme `x-api-key` d'Anthropic.
279
+ - Google Antigravity n'est **pas** rétro-ingénieré ici ; il utilise un plugin DSH dédié épinglé en version.
280
+
281
+ ## Conformité
282
+
283
+ Utiliser des abonnements de codage via un harness tiers peut se situer dans une zone grise des conditions de chaque vendeur et peut déclencher des contrôles de quota, régionaux ou de risque de compte. **N'utilisez que vos propres comptes** ; ce projet ne prend pas en charge les comptes en masse, la revente de quota, le relais distant, le contournement de paywall ou l'usurpation de client. Pour un usage commercial, préférez les canaux officiels de clé API des vendeurs.
284
+
285
+ ## Documentation
286
+
287
+ | Document | Objectif |
288
+ |---|---|
289
+ | [`INSTALL.md`](INSTALL.md) | Détails d'installation et d'utilisation |
290
+ | [`CHANGELOG.md`](CHANGELOG.md) | Historique des versions |
291
+ | [`docs/00-project-rules.md`](docs/00-project-rules.md) | Versioning, boucle de release, répartition public/privé |
292
+ | [`docs/02-architecture.md`](docs/02-architecture.md) | Architecture interne (routes, flux de données, modules, API) · [中文](docs/02-architecture.zh-CN.md) |
293
+ | [`CONTRIBUTING.md`](CONTRIBUTING.md) | Guide de contribution |
294
+
295
+ ## Lié
296
+
297
+ - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — plugin séparé épinglé pour Google Antigravity.
298
+
299
+ ## Contribution
300
+
301
+ Les contributions de toute nature sont bienvenues — fonctionnalités, documentation, traductions, rapports de bugs. Voir **[CONTRIBUTING](CONTRIBUTING.md)** pour le flux, les conventions de commit et la boucle de release. Si votre langue n'est pas listée, envoyez un PR avec une traduction du README et nous l'ajouterons au tableau ci-dessus.
302
+
303
+ ## Licence
304
+
305
+ [Apache-2.0](LICENSE) · voir [NOTICE](NOTICE). Des portions sont dérivées du projet [dsh-xai](https://github.com/MirDie/dsh-xai) (Apache-2.0).