dsh-think-translate 1.2.13 → 1.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.fr.md CHANGED
@@ -1,125 +1,217 @@
1
- <div align="center">
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.fr.png?v=1.2.16" alt="dsh-think-translate — La pensée de l’IA, dans votre langue" width="100%" />
3
+ </p>
2
4
 
3
- # 🐋 dsh-think-translate
5
+ <p align="center">
6
+ <b>Traduction de la couche d’affichage de DeepSeek Harness.</b><br />
7
+ Lisez le raisonnement, suivez les tâches et comprenez les réponses. Les originaux sont conservés ; les traductions restent hors du contexte du modèle.
8
+ </p>
4
9
 
5
- **Langues :** [English](README.md) · [中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md)
10
+ <p align="center">
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.fr.svg?v=1.2.16" alt="Licence MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.fr.svg?v=1.2.16" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.fr.svg?v=1.2.16" alt="Originaux conservés" />
14
+ </p>
6
15
 
7
- [![npm version](https://img.shields.io/npm/v/dsh-think-translate?color=4D6BFE&label=npm)](https://www.npmjs.com/package/dsh-think-translate)
8
- [![license](https://img.shields.io/npm/l/dsh-think-translate?color=4D6BFE)](LICENSE)
9
- [![dsh](https://img.shields.io/badge/powered_by-dsh-4D6BFE?style=flat-square&logo=deepseek&logoColor=white)](https://github.com/deepseek-ai/deepseek-harness)
16
+ <p align="center">
17
+ <a href="README.zh-CN.md">中文</a> · <a href="README.md">English</a> · <a href="README.ja.md">日本語</a> · <a href="README.ko.md">한국어</a> · <a href="README.es.md">Español</a> · <b>Français</b> · <a href="README.de.md">Deutsch</a> · <a href="README.ru.md">Русский</a> · <a href="README.pt.md">Português</a>
18
+ </p>
10
19
 
11
- <img src="demo/demo.gif?v=2" width="46%" alt="dsh-think-translate demo" style="border:1px solid #4D6BFE;border-radius:8px;margin:4px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="demo/demo2.gif?v=2" width="41%" alt="dsh-think-translate demo 2" style="border:1px solid #4D6BFE;border-radius:8px;margin:4px" />
12
-
13
- </div>
20
+ <p align="center">
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.fr.svg?v=1.2.16" alt="Installation" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.fr.svg?v=1.2.16" alt="Démonstrations" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.fr.svg?v=1.2.16" alt="Fonctions" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.fr.svg?v=1.2.16" alt="Comparaison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.fr.svg?v=1.2.16" alt="Questions" height="24" /></a>
22
+ </p>
14
23
 
15
24
  ---
16
25
 
17
- Traduction au niveau de l'affichage pour l'interface web de [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) : la **chaîne de réflexion (ligne Think), les cartes de tâches et le texte de réponse** s'affichent dans la langue cible choisie, tandis que les originaux restent intacts dans la transcription et que le texte traduit **n'entre jamais dans le contexte du modèle**.
26
+ <a id="demo"></a>
27
+ ## Voir la pensée se déployer
28
+
29
+ <table>
30
+ <tr>
31
+ <td width="50%" align="center" valign="bottom">
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.16" alt="Démo 1 · Raisonnement et réponses" width="100%" />
33
+ </td>
34
+ <td width="50%" align="center" valign="bottom">
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.16" alt="Démo 2 · Autres opérations" width="100%" />
36
+ </td>
37
+ </tr>
38
+ <tr>
39
+ <td align="center" valign="top"><sub>Démo 1 · Raisonnement et réponses</sub></td>
40
+ <td align="center" valign="top"><sub>Démo 2 · Autres opérations</sub></td>
41
+ </tr>
42
+ </table>
18
43
 
19
- ## ✨ Fonctionnalités
44
+ <a id="comparison"></a>
45
+ ## Comparaison avec le plugin officiel de traduction
20
46
 
21
- Les modèles de la famille DeepSeek raisonnent souvent en chinois — ou dans la langue qu'ils utilisent pour penser. dsh-think-translate affiche la ligne Think, les cartes de tâches et la réponse dans *votre* langue en direct, comme des sous-titres pour la réflexion du modèle.
47
+ <p align="center">
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.fr.png?v=1.2.16" alt="Comparaison avec le plugin officiel de traduction" width="100%" />
49
+ </p>
22
50
 
23
- - **Motifs de refus Auto review** — conserve le texte original et ajoute sa traduction de façon asynchrone dans la carte d’approbation, avec un réglage indépendant.
24
- - **🕵️ Lisez n'importe quelle chaîne de raisonnement** — raisonnement, chaîne de pensée, cartes de tâches et réponses traduits en temps réel, par lots
25
- - **8 langues cibles** — 中文 / English / 日本語 / 한국어 / Español / Français / Deutsch / Русский
26
- - **Interface monolingue** — panneau de réglages, lignes de réflexion et cartes de tâches suivent la langue cible (pas de mélange zh/en) ; le choix persiste
27
- - **Ollama local** — réutilise les installations et modèles existants. Si Ollama est activé en première position ou si vous cliquez sur Test, le service démarre et le modèle se charge au besoin. Les logiciels ou modèles manquants nécessitent le bouton de préparation avant installation/téléchargement, avec progression en direct
28
- - **🧠 Coût de contexte nul** — couche d'affichage pure : le modèle voit toujours le texte original et le texte traduit ne consomme jamais la fenêtre de contexte
29
- - **Repli Google / Bing** — bascule automatique si le modèle local est indisponible (google passe par un tunnel CONNECT Node avec le proxy système)
30
- - **Artefacts de code ignorés** — chemins, commandes, URL, regex et lignes de code pur ne sont jamais traduits
31
- - **Traduction par lots de phrases** — les chaînes longues sont traduites en petits lots pour garder la qualité sur les petits modèles locaux
32
- - **🧩 Découpage par paragraphes et phrases** — les longues chaînes sont découpées sur les lignes vides (structure de paragraphes préservée) puis par phrases, pour garder la qualité sur un petit modèle local
33
- - **Sortie en streaming** — les traductions apparaissent lot par lot pendant la réflexion ; dépliez la ligne Think pour comparer avec l'original
34
- - **🎚️ Moment de traduction réglable** — tout pré-traduire / chargement différé des anciennes chaînes (défaut) / uniquement à l'ouverture
35
- - **🔗 Chaîne de fournisseurs dynamique** — l'ordre de la liste est l'ordre d'exécution : glissez pour réordonner, activez ou désactivez chaque ligne. Intégrés google gtx / bing / Ollama local, plus tout endpoint personnalisé
36
- - **🔌 Fournisseurs personnalisés (OpenAI et Anthropic)** — ajoutez depuis le panneau tout endpoint compatible OpenAI (`/v1/chat/completions`) ou l'**Anthropic Messages API** (Claude) : type, préréglage, URL de base, clé API et modèle
37
- - **🪄 Hérite des fournisseurs configurés dans DSH** — détecte les lignes DSH en lecture seule depuis `profiles/<profile>/cordis.patch.yml` / ancien `settings.yaml` (`llm-pi-ai.providers`), et un bouton relance l'analyse et les ajoute toutes à la chaîne ; la clé est résolue à chaque requête depuis `.credentials.yaml` et n'est jamais écrite dans la config du plugin. La route par défaut du harness compte aussi : si `default-model` / `agent-default-model` désigne `deepseek-official`, l'API officielle DeepSeek apparaît comme une ligne DSH de plus
38
- - **⏱️ Résilient** — les échecs sont conservés en mémoire pendant 30 secondes pour éviter les tentatives répétées, puis réessayés automatiquement ; chaque fournisseur dispose de son bouton de test
51
+ Activez ce plugin ou le traducteur officiel du raisonnement. Tous deux prennent en charge l’affichage du raisonnement.
39
52
 
40
- ## 📦 Installation
53
+ <a id="quick-start"></a>
54
+ ## Une commande pour commencer
41
55
 
42
56
  ```bash
43
- # Option 1 : npm (recommandé)
44
57
  dsh plugin --profile web add dsh-think-translate
45
- # puis redémarrez web
58
+ ```
59
+
60
+ Après l’installation, redémarrez complètement DSH Web. Ouvrez **Paramètres → Traduction de la réflexion**, puis choisissez la langue et les fournisseurs.
46
61
 
47
- # Option 2 : GitHub
62
+ <details>
63
+ <summary><b>Installation GitHub, mises à jour et autres méthodes</b></summary>
64
+
65
+ Installer depuis GitHub :
66
+
67
+ ```bash
48
68
  dsh plugin --profile web add github:UncleK/dsh-think-translate
69
+ ```
70
+
71
+ Mettre à jour depuis npm :
49
72
 
50
- # Option 3 : manuel (junction + patch)
51
- # 1. liez le paquet dans le node_modules du profil
52
- New-Item -ItemType Junction -Path "$HOME\.dsh\profiles\node_modules\dsh-think-translate" `
53
- -Target "<chemin du dépôt>"
54
- # 2. ajoutez à "$HOME\.dsh\profiles\web\cordis.patch.yml" :
55
- # - insert:
56
- # - id: dsh-think-translate
57
- # name: dsh-think-translate
58
- # 3. redémarrez web
73
+ ```bash
74
+ dsh plugin --profile web add dsh-think-translate@latest
59
75
  ```
60
76
 
61
- ## 🧯 Après une mise à jour de DSH
77
+ Redémarrez complètement DSH après chaque installation ou mise à jour. En manuel, liez le paquet au profil et ajoutez son entrée dans `cordis.patch.yml`. Les commandes ci-dessus conviennent à l’usage courant.
78
+
79
+ </details>
80
+
81
+ <a id="features"></a>
82
+ ## Il n’y a pas que le raisonnement à comprendre
83
+
84
+ <table>
85
+ <tr>
86
+ <td width="50%" valign="top">
87
+ <h3>Lire le raisonnement en direct</h3>
88
+ <p>Tout prétraduire, charger l’historique à la demande ou traduire uniquement au dépliage</p>
89
+ </td>
90
+ <td width="50%" valign="top">
91
+ <h3>Tâches et réponses ensemble</h3>
92
+ <p>Raisonnement, cartes et liste de tâches de la zone de saisie ; réponses et motifs de refus de révision automatique en option</p>
93
+ </td>
94
+ </tr>
95
+ <tr>
96
+ <td width="50%" valign="top">
97
+ <h3>Comprendre les décisions de révision</h3>
98
+ <p>Lorsqu’une révision automatique refuse un appel d’outil, le motif est traduit à côté de l’original. Les boutons de décision existants restent disponibles.</p>
99
+ </td>
100
+ <td width="50%" valign="top">
101
+ <h3>Préserver originaux et code</h3>
102
+ <p>Originaux conservés ; les traductions restent hors du contexte du modèle. Réutilise le rendu Markdown ; protège code, chemins et commandes avant traduction.</p>
103
+ </td>
104
+ </tr>
105
+ <tr>
106
+ <td width="50%" valign="top">
107
+ <h3>Modèles locaux à la demande</h3>
108
+ <p>Libération manuelle, au décochage ou après inactivité ; rechargement à la prochaine traduction</p>
109
+ </td>
110
+ <td width="50%" valign="top">
111
+ <h3>Vos fournisseurs, dans votre ordre</h3>
112
+ <p>Repli automatique selon l’ordre actif ; langue clairement incorrecte : fournisseur suivant ; nouvelle tentative après délai</p>
113
+ </td>
114
+ </tr>
115
+ </table>
116
+
117
+ ### Connectez les fournisseurs que vous utilisez déjà
118
+
119
+ **Ollama · Google · Bing · OpenAI · Anthropic Messages API**
120
+
121
+ Détectez les fournisseurs configurés dans DSH sans ressaisir endpoints et clés. Testez chaque ligne séparément ; l’ordre de la liste détermine les tentatives.
122
+
123
+ ```text
124
+ Premier choix → fournisseur actif suivant → … → original si tous échouent
125
+ ```
62
126
 
63
- Les plugins clients tiers sont chargés via le graphe de modules client de DSH, et ce graphe n'est composé **qu'une seule fois par processus** : une composition en échec reste en mémoire jusqu'au redémarrage. D'où ces trois écueils juste après une mise à jour.
127
+ <details>
128
+ <summary><b>Endpoints personnalisés, identifiants et reprise</b></summary>
64
129
 
65
- - **Le démarrage depuis un checkout source échoue** avec `client bundles not found; run \`pnpm run build\` before launch` —— les nouveaux paquets clients ne sont pas compilés : lancez `pnpm run build` dans le checkout du harness, puis redémarrez `dsh web`.
66
- - **L'interface du plugin a disparu** (pas de ligne Think traduite, pas de section *Traduction de chaîne de réflexion* dans les Réglages) —— **redémarrez `dsh web`** ; un simple rafraîchissement de la page ne suffit pas toujours.
67
- - **La liste des modèles locaux est vide** —— le service `ollama` ne sert pas ce répertoire de modèles : vérifiez `ollama list` (ou `GET /api/tags`) et l'`OLLAMA_MODELS` réellement utilisé par le service en cours. Si les modèles sont sur un autre disque, une jonction de répertoire peut pointer le répertoire par défaut du service vers eux.
130
+ - Prend en charge `/v1/chat/completions` compatible OpenAI et l’API native Anthropic Messages.
131
+ - Détecte les fournisseurs du profil DSH courant et des surcharges ; relancez l’analyse et ajoutez-les à la chaîne.
132
+ - `apiKeyEnv` est résolu lors de la requête ; les identifiants résolus ne sont pas réécrits dans la configuration.
133
+ - Les échecs attendent 30 secondes en mémoire du host avant les nouvelles tentatives. Une langue clairement incorrecte déclenche le fournisseur suivant.
134
+ - Le texte reconnu dans la langue cible est ignoré ; les tests de fournisseur effectuent toujours une vraie requête.
68
135
 
69
- Rien à configurer côté plugin : il ne déclare aucune dépendance d'ordre vis-à-vis des paquets internes de DSH (il ne se lie qu'au service `slots`, et éventuellement à `@deepseek-ai/dsh-client-ui-primitives`), et fonctionne donc aussi bien sur un DSH ancien (≤ 0.1.1-rc) que sur la ligne actuelle (≥ 0.1.2-alpha.1, 0.1.5-rc.1 incluse).
136
+ </details>
70
137
 
71
- Pour DSH **0.2.0-rc.2**, utilisez **dsh-think-translate 1.2.5 ou une version ultérieure**. La version 1.2.5 corrige le conflit du slot `todo_write` et déclare la plage de versions peer 0.2. Exécutez `dsh plugin --profile web add dsh-think-translate@latest`, puis redémarrez DSH ; aucune exception de version requise.
138
+ ### Modèles locaux de traduction : chargement et libération à la demande
72
139
 
73
- **1.2.6** corrige les pensées et réponses affichées en double dans DSH 0.2 : le rendu et le texte original de secours respectent les groupes reasoning/response.
140
+ | Votre action | Comportement |
141
+ |---|---|
142
+ | Traduire ou tester | Démarre le service et charge le modèle sélectionné à la demande |
143
+ | Libérer la mémoire du modèle | Attend les traductions en cours, puis libère ; conserve fichiers, interrupteurs et ordre |
144
+ | Décocher le fournisseur local | Le désactive et libère le modèle sélectionné |
145
+ | Le réactiver ou ouvrir les paramètres | Aucun préchargement ; chargement à la prochaine traduction réelle |
146
+ | Définir le délai d’inactivité | 5 minutes par défaut ; 1 / 5 / 10 / 30 / 60 minutes ou désactivé |
74
147
 
75
- **1.2.7 préparation locale :** Ollama activé en première position, ou son test, détecte une installation existante, démarre le service et charge le modèle. Le bouton de préparation autorise les installations et téléchargements manquants, avec progression par étapes. Installation automatique du logiciel sur Windows ; guide officiel ailleurs. Le fournisseur utilisé respecte la priorité des fournisseurs activés et vérifiés.
148
+ Le délai s’applique dès l’utilisation suivante. Ollama suit le modèle sélectionné sans modifier les variables globales. Les logiciels ou modèles manquants sont installés ou téléchargés uniquement après un clic sur préparer, avec suivi de progression.
76
149
 
77
- **1.2.8 transport et reprise :** les traductions HTTP/HTTPS ordinaires utilisent le réseau natif de Node au lieu de lancer curl pour chaque lot de texte. Les proxys SOCKS et l’installateur Ollama conservent curl. Les échecs restent en mémoire pendant 30 secondes, puis les traductions du raisonnement et des réponses sont réessayées automatiquement. Les délais tiennent compte du chargement des modèles locaux et du recours à d’autres fournisseurs.
150
+ <a id="languages"></a>
151
+ ### Votre langue vous accompagne
78
152
 
79
- **1.2.13 :** les cartes de refus Auto review conservent l’original et ajoutent une traduction asynchrone, avec un réglage indépendant activé par défaut. Les anciens résultats sont ignorés après désactivation, changement de langue ou retrait de la carte. Les motifs non anglais sont également traduits en anglais. Merci à [llg1634](https://github.com/llg1634) pour le signalement, le correctif initial et les tests dans [#13](https://github.com/UncleK/dsh-think-translate/issues/13). Redémarrez complètement DSH Web ou Desktop après la mise à jour.
153
+ 中文 · English · 日本語 · 한국어 · Español · Français · Deutsch · Русский · Português
80
154
 
81
- **1.2.12 :** les choix de fournisseurs sont respectés ; le navigateur ne contacte plus Google directement après un échec du Host. Le code délimité, indenté ou en ligne est exclu des requêtes et conservé exactement, y compris pendant un flux incomplet. Les anciennes traductions en cache sont supprimées, les préférences conservées. Après la mise à jour, redémarrez entièrement DSH Web ou Desktop ; une simple actualisation peut encore référencer les anciennes ressources du client.
155
+ Neuf langues cibles, de paramètres et de tâches, dont le portugais. Le choix reste enregistré après actualisation.
82
156
 
83
- **1.2.11 corrections de Bing :** le fournisseur gratuit est conservé. Les requêtes de traduction utilisent l’origine finale de la page de session pour éviter que la redirection `www.bing.com` → `cn.bing.com` en Chine continentale supprime le corps POST. SOCKS/curl utilise les mêmes en-têtes de navigateur que le transport natif pour corriger HTTP 401 ; les réponses vides ou non JSON signalent des erreurs explicites.
157
+ <a id="faq"></a>
158
+ ## Réponses aux questions fréquentes
84
159
 
85
- **1.2.10 compatibilité des profils DSH :** la détection suit le profil Desktop/Web actif et lit `profiles/<profile>/cordis.patch.yml` (`id` + `config`), puis applique les correctifs du répertoire DSH et les surcharges de lancement. L’ancien `settings.yaml` reste pris en charge. Le modèle par défaut utilise `default-model` ; les identifiants restent dans `.credentials.yaml` du répertoire DSH et en mémoire uniquement. Le diagnostic indique le fichier lu.
160
+ <details>
161
+ <summary><b>L’entrée de traduction n’apparaît pas après installation ou mise à jour</b></summary>
86
162
 
87
- **1.2.9 corrections linguistiques :** les indications de vocabulaire japonais ne concernent que le japonais ; OpenAI/Anthropic reçoivent le nom complet de la langue. Bing utilise `auto-detect` et `zh-Hans`/`zh-Hant`. La détection du chinois écarte chemins, code et JSON : elle ignore la prose déjà simplifiée, demande une conversion en présence de caractères traditionnels courants et traduit la prose japonaise/coréenne. Les anciennes traductions en cache sont supprimées une fois, sans toucher aux réglages.
163
+ Redémarrez complètement `dsh web`. Le graphe des modules est assemblé au démarrage ; une simple actualisation peut ne pas suffire. Le pied des paramètres affiche la version installée.
88
164
 
89
- ## 🚀 Utilisation
165
+ </details>
90
166
 
91
- 1. Ouvrez **Réglages → Traduction de chaîne de réflexion**
92
- 2. Choisissez la **langue cible** (p. ex. Français) — le panneau, les lignes et les cartes basculent dans cette langue
93
- 3. Gérez la **chaîne de fournisseurs** (glisser pour ordonner, cocher pour activer) :
94
- - Intégrés : **google gtx / bing** (gratuits, via le proxy système) et **Ollama local** ; les logiciels et modèles existants sont réutilisés. Les composants manquants nécessitent le bouton de préparation, avec progression (7b/14b ou modèle personnalisé)
95
- - **Fournisseurs DSH** : les endpoints déjà configurés dans `profiles/<profile>/cordis.patch.yml` / ancien `settings.yaml` apparaissent seuls (lecture seule ; cochez pour les ajouter à la chaîne). Le bouton **Importer depuis la config DSH**, juste sous la liste, relance l'analyse et les ajoute tous d'un coup : ni baseURL ni clé à ressaisir, la clé étant résolue depuis les identifiants de DSH
96
- - La clé se saisit à la main ou arrive via **`apiKeyEnv`** depuis un préréglage ou une ligne DSH : cette ligne affiche le badge `env:NAME`, et la clé est résolue à chaque requête sans jamais être écrite dans `config.json`. Le formulaire d'édition n'a pas de champ de variable d'environnement (la valeur est conservée telle quelle), mais vider un champ le supprime réellement (envoyé comme suppression explicite)
97
- - Décocher un fournisseur l'ignore. Détails dans [README.md](README.md)
98
- 4. Envoyez un message et dépliez la ligne Think pour voir la traduction
167
+ <details>
168
+ <summary><b>La liste des modèles locaux est vide</b></summary>
99
169
 
100
- ## ⚙️ Fonctionnement
170
+ Vérifiez `ollama list` ou `/api/tags`, le répertoire actif et `OLLAMA_MODELS` du service. Les fichiers existants n’ont pas à être téléchargés à nouveau.
101
171
 
102
- ```
103
- navigateur → POST /_xlate/translate (même origine, sans CORS)
104
- → chaîne de fournisseurs côté host (fail-open, réordonnable) :
105
- chain: [provider1, provider2, ...] ← ordre par glisser dans les Réglages
106
- google / bing / compatible OpenAI / Anthropic
107
- chaîne fallback (facultative, désactivée par défaut, activable dans la config)
108
- → texte original si tous les fournisseurs activés échouent
109
- ```
172
+ </details>
110
173
 
111
- - La **configuration des fournisseurs** vit dans `config.json` (généré à l'exécution, ignoré par git) : `chain` (ids ordonnés), `fallback` (enabled + chain, fichier uniquement), `providers` (par fournisseur `type`/`enabled`/`baseURL`/`apiKey`/`apiKeyEnv`/`model`). Les anciennes configurations `priority` sont migrées automatiquement ; un fournisseur qui déclare `apiKeyEnv` résout sa clé depuis cette variable à chaque requête (le `apiKey` littéral reste en secours) et aucune clé résolue n'est réécrite dans `config.json` ; un `null` dans un patch supprime ce champ, c'est ainsi que l'interface en vide un
112
- - La **découverte DSH** lit `profiles/<profile>/cordis.patch.yml` / ancien `settings.yaml` (`llm-pi-ai.providers`) et `.credentials.yaml` (`refs`) du harness au chargement ; les fournisseurs détectés portent `source: "dsh"`, les clés résolues restent en mémoire (jamais dans `config.json`), et la route `/_xlate/dsh-scan` les relit à la demande
113
- - **Moitié host** (`lib/index.js`) : adaptateurs de fournisseurs, cache LRU (600), `/_xlate/models`, `/_xlate/model/pull` + `pull-status` (configuration automatique à la fin)
114
- - **Moitié client** (`lib/client.js`) : UI en 8 langues, traduction par lots, lignes Think en streaming, persistance localStorage
115
- - Couche d'affichage pure : les originaux restent dans la transcription et le contexte du modèle
174
+ <details>
175
+ <summary><b>Client bundles not found après une mise à jour DSH</b></summary>
116
176
 
117
- ## 🛠 Développement
177
+ Lancez `pnpm run build` dans le dépôt DeepSeek Harness, puis redémarrez DSH Web.
118
178
 
119
- - Pas d'étape de compilation : `lib/client.js` est le bundle navigateur (source = artefact) ; `lib/index.js` est l'ESM host
120
- - Les changements client s'appliquent au rafraîchissement ; les changements host nécessitent un redémarrage de web
121
- - Les chaînes en 8 langues vivent dans le dictionnaire `UI_TEXT` de `lib/client.js`
179
+ </details>
122
180
 
123
- ## 📄 Licence
181
+ <details>
182
+ <summary><b>Un échec de traduction affecte-t-il la conversation ?</b></summary>
183
+
184
+ Si tous les fournisseurs actifs échouent, l’original reste visible. Testez chaque fournisseur et consultez la dernière erreur. Les requêtes suivantes peuvent réessayer après le délai.
185
+
186
+ </details>
187
+
188
+ <details>
189
+ <summary><b>Mises à jour et compatibilité</b></summary>
190
+
191
+ **1.2.16** ajoute le portugais comme cible et langue d’interface, renouvelle les neuf README et images localisées, et déclare trois images pour le marché.
192
+
193
+ **1.2.15** ajoute la gestion mémoire locale et adapte images, repli du raisonnement et sélection de l’original à DSH `0.2.2-alpha.2`.
194
+
195
+ **1.2.13** traduit les motifs de refus de révision automatique. Merci à [llg1634](https://github.com/llg1634) pour le signalement, le correctif initial et les tests.
196
+
197
+ Anciennes versions : [GitHub Releases](https://github.com/UncleK/dsh-think-translate/releases).
198
+
199
+ </details>
200
+
201
+ <details>
202
+ <summary><b>Développement et fonctionnement</b></summary>
203
+
204
+ - `lib/index.js` : routes du host, fournisseurs, configuration, cache et modèles locaux.
205
+ - `lib/client.js` : paramètres, traduction d’affichage, lots en streaming et cache du navigateur.
206
+ - `lib/config.json` : configuration d’exécution, exclue de Git et npm.
207
+ - Aucune compilation supplémentaire : les sources sont le livrable. Redémarrez DSH après une modification du host.
208
+ - Vérification : `npm test`. Détection et identifiants : [notes de maintenance](https://github.com/UncleK/dsh-think-translate/blob/main/docs/maintenance-notes.md).
209
+
210
+ </details>
211
+
212
+ ---
124
213
 
125
- MIT
214
+ <p align="center">
215
+ <b>dsh-think-translate</b><br />
216
+ <a href="https://github.com/UncleK/dsh-think-translate/issues">Signaler un problème</a> &nbsp;·&nbsp; <a href="https://github.com/UncleK/dsh-think-translate/releases">Versions</a> &nbsp;·&nbsp; <a href="https://github.com/UncleK/dsh-think-translate/blob/main/LICENSE">Licence MIT</a>
217
+ </p>