# 🔐 dsh-coding-subscription-oauth **v0.5.6 · anciennement `dsh-grok-build` **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.** [![License](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) *[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)*
--- ## Changement de nom Le projet s'appelait **`dsh-grok-build`** (Grok Build uniquement). Il couvre maintenant SuperGrok / Codex / Kimi / Claude / Antigravity. | | Utiliser | Toujours valable | |---|---|---| | GitHub / `dsh plugin add` | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | `github:lninghaha/dsh-grok-build` (mĂȘme `main`) | | npm | `dsh-coding-subscription-oauth@0.5.6` (version actuelle) | Aucun ancien paquet npm n'a Ă©tĂ© publiĂ© | | CLI | `dsh-coding-oauth` | `dsh-grok-build` | | Cordis plugin id | `llm-grok-build-oauth` | inchangĂ© | | API HTTP des rĂ©glages | `/plugins/dsh-grok-build/*` | inchangĂ© | | Fichiers d'identifiants | `$DSH_HOME/.grok-build-auth.json` et les autres `*-oauth-auth.json` | inchangĂ© | ## ✹ FonctionnalitĂ©s - đŸ§Ÿ **Apportez votre abonnement** — utilisez les plans de codage que vous payez dĂ©jĂ  au lieu de clĂ©s API sĂ©parĂ©es. - 🔑 **OAuth local, sans coller de clĂ©** — autorisez dans la page de configuration ou la CLI ; les tokens n'entrent jamais dans le chat. - đŸ§© **Un plugin, cinq fournisseurs** — Grok Build, Codex, Kimi, Claude et Google Antigravity. - đŸ›Ąïž **SĂ©curisĂ© par conception** — fichiers d'identification propriĂ©taire-seul `0600`, Ă©criture atomique, verrou de fichier inter-processus. - ⚙ **Catalogue dynamique** — le sĂ©lecteur n'affiche que les routes authentifiĂ©es, Ă©tiquetĂ©es `(OAuth)`, y compris le `xhigh` de grok-4.6. - 🌐 **Conscient du proxy** — ne proxifie que les domaines d'abonnement examinĂ©s et de confiance. - đŸ“„ **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. - đŸ—‚ïž **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. - đŸŽ›ïž **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. - 🔌 **Passerelle API locale opt-in** — serveur loopback compatible OpenAI/Anthropic, dĂ©sactivĂ© par dĂ©faut ; pour vos propres outils, jamais un relais public. ## ProblĂšmes d'intĂ©gration que ce plugin rĂ©sout Ce sont les recherches et erreurs DSH qui mĂšnent le plus souvent ici. | Vous avez cherchĂ© / vu | Ce qui Ă©tait cassĂ© | Ce que fait le plugin | |---|---|---| | 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 | | `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** | | `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 | | 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 | | Kimi Code en `x-api-key` Anthropic | Le jeton OAuth partait comme clĂ© Anthropic | Uniquement `Authorization: Bearer` | | 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)` | | 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 | | Le proxy passe Grok et casse Kimi en Chine | Un `HTTPS_PROXY` global | Proxy sur liste blanche ; Kimi reste **direct** sauf `proxyKimi: true` | ## Fournisseurs pris en charge | Fournisseur | Route | Authentification | Coexiste avec | |---|---|---|---| | **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` | | **OpenAI Codex** | `codex-oauth` | ChatGPT Plus/Pro OAuth | `openai` | | **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` | | **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — | | **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — | > 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. ## 🚀 DĂ©marrage rapide ```bash # 1. installez le plugin dans le profil web (version actuelle npm) dsh plugin --profile web add dsh-coding-subscription-oauth@0.5.6 # 2. optionnel — Google Antigravity (version Ă©pinglĂ©e examinĂ©e) dsh plugin --profile web add dsh-agy@0.1.2 # 3. redĂ©marrez le service dsh web rĂ©sident systemctl --user restart dsh-web.service ``` Ensuite ouvrez **Settings → Coding OAuth** et connectez-vous Ă  n'importe quel fournisseur. C'est tout — choisissez votre modĂšle authentifiĂ© dans le sĂ©lecteur. ## 📚 Sommaire - [Changement de nom](#changement-de-nom) - [FonctionnalitĂ©s](#-fonctionnalitĂ©s) - [ProblĂšmes d'intĂ©gration que ce plugin rĂ©sout](#problĂšmes-dintĂ©gration-que-ce-plugin-rĂ©sout) - [Fournisseurs pris en charge](#fournisseurs-pris-en-charge) - [DĂ©marrage rapide](#-dĂ©marrage-rapide) - [Installation](#installation) - [Page de configuration](#page-de-configuration) - [CapacitĂ©s optionnelles](#capacitĂ©s-optionnelles) - [Passerelle API locale](#passerelle-api-locale) - [CLI](#cli) - [Kimi en Chine](#kimi-en-chine) - [Proxy rĂ©seau](#proxy-rĂ©seau) - [RĂ©silience](#rĂ©silience) - [Identifiants](#identifiants) - [Architecture](#architecture) - [Notes techniques](#notes-techniques) - [ConformitĂ©](#conformitĂ©) - [Documentation](#documentation) - [LiĂ©](#liĂ©) - [Contribution](#contribution) - [Licence](#licence) ## Installation NĂ©cessite DeepSeek Harness `0.1.0-rc.6+` et Node.js 22.19+. DĂ©tails complets dans les [notes d'installation](INSTALL.md). ```bash # version actuelle npm (recommandĂ©) dsh plugin --profile web add dsh-coding-subscription-oauth@0.5.6 # dĂ©veloppement/alternatif : depuis GitHub dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth # dĂ©veloppement/alternatif : un checkout local de dĂ©veloppement dsh plugin --profile web add ./dsh-coding-subscription-oauth ``` RedĂ©marrez `dsh web` aprĂšs l'installation. VĂ©rification sur un dĂ©ploiement en direct : ```bash pnpm run verify:deployed # vĂ©rifie /api/llm.models rĂ©el + Ă©tat OAuth DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # si Google est connectĂ© DSH_RESTORE_PROVIDER=openai \ DSH_RESTORE_MODEL=gpt-5.6-sol \ DSH_RESTORE_REASONING=max \ pnpm run smoke:deployed # appels rĂ©els Codex/Kimi + rejeu du second tour ``` > `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. ## Page de configuration Ouvrez **Settings → Coding OAuth** :
Coding OAuth Accounts tab
Accounts
Coding OAuth Gateway tab
Gateway
Coding OAuth Capabilities tab
Capabilities
| Fournisseur | MĂ©thodes | |---|---| | Grok | code d'autorisation · code de dispositif · importation CLI Grok · sĂ©lection de modĂšles | | Codex | code de dispositif (recommandĂ© sur DSH distant) · PKCE navigateur | | Kimi | code de dispositif | | Claude | PKCE navigateur (un navigateur distant peut coller l'URL complĂšte de redirect localhost) | | Antigravity | Ă©tat d'installation de `dsh-agy` + commandes CLI locales au profil | 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. 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. ## CapacitĂ©s optionnelles 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. ## Passerelle API locale 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 : ```yaml gateway: enabled: false bind: 127.0.0.1 port: 18080 ``` 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. ## CLI ```bash # `dsh-grok-build` reste un alias de commande dsh-coding-oauth login [--pkce] | import | status | logout # fournisseurs plus rĂ©cents dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude dsh-coding-oauth status all dsh-coding-oauth logout codex # Antigravity (installez d'abord dans le profil web) dsh plugin --profile web exec dsh-agy login --headless ``` > 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. ## Kimi en Chine 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. ## Proxy rĂ©seau PrioritĂ© : `config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`. ```yaml - id: llm-grok-build-oauth config: proxy: http://127.0.0.1:7890 proxyKimi: false ``` 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`. ## RĂ©silience 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. 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 : ```yaml - id: llm-grok-build-oauth config: retryPolicy: mode: normal maxRetries: 5 retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH] backoff: { initialDelayMs: 5000, maxDelayMs: 80000, jitterRatio: 0.1 } ``` ## Identifiants PropriĂ©taire-seul `0600`, Ă©criture atomique, verrou de fichier inter-processus : - `$DSH_HOME/.grok-build-auth.json` - `$DSH_HOME/.codex-oauth-auth.json` - `$DSH_HOME/.kimi-code-oauth-auth.json` - `$DSH_HOME/.claude-code-oauth-auth.json` Les caches de sĂ©lection vivent dans les fichiers `*-models.json` correspondants. **Aucun statut HTTP, log ou interface ne peut renvoyer un token.** ## Architecture ```mermaid flowchart LR subgraph DSH["DSH Harness"] UI[Configuration / Web · Coding OAuth] --> LLM[llm route] LLM --> ALIA[Adaptateur d'alias de route] end ALIA --> PI[fournisseur natif pi-ai
OAuth · refresh · stream] PI --> GROK[Grok Build] PI --> COD[Codex] PI --> KIMI[Kimi] PI --> CLAU[Claude] AGY[plugin dsh-agy] --> GAL[Google Antigravity] ``` ## Notes techniques - **Grok Build** : fournisseur Responses personnalisĂ© sur `cli-chat-proxy.grok.com/v1`, en-tĂȘtes d'empreinte CLI, catalogue de modĂšles dynamique. - **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. - Le token d'accĂšs Kimi est explicitement converti en `Authorization: Bearer` — jamais envoyĂ© par erreur comme `x-api-key` d'Anthropic. - Google Antigravity n'est **pas** rĂ©tro-ingĂ©nierĂ© ici ; il utilise un plugin DSH dĂ©diĂ© Ă©pinglĂ© en version. ## ConformitĂ© 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. ## Documentation | Document | Objectif | |---|---| | [`INSTALL.md`](INSTALL.md) | DĂ©tails d'installation et d'utilisation | | [`CHANGELOG.md`](CHANGELOG.md) | Historique des versions | | [`docs/00-project-rules.md`](docs/00-project-rules.md) | Versioning, boucle de release, rĂ©partition public/privĂ© | | [`docs/02-architecture.md`](docs/02-architecture.md) | Architecture interne (routes, flux de donnĂ©es, modules, API) · [äž­æ–‡](docs/02-architecture.zh-CN.md) | | [`CONTRIBUTING.md`](CONTRIBUTING.md) | Guide de contribution | ## LiĂ© - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) — plugin sĂ©parĂ© Ă©pinglĂ© pour Google Antigravity. ## Contribution 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. ## Licence [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).