dsh-think-translate 1.2.16 → 1.2.17

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.de.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.de.png?v=1.2.16" alt="dsh-think-translate — KI-Gedanken in deiner Sprache" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.de.png?v=1.2.17" alt="dsh-think-translate — KI-Gedanken in deiner Sprache" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.de.svg?v=1.2.16" alt="MIT-Lizenz" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.de.svg?v=1.2.16" alt="Lokales Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.de.svg?v=1.2.16" alt="Originale erhalten" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.de.svg?v=1.2.17" alt="MIT-Lizenz" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.de.svg?v=1.2.17" alt="Lokales Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.de.svg?v=1.2.17" alt="Originale erhalten" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.de.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.de.svg?v=1.2.16" alt="Live-Demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.de.svg?v=1.2.16" alt="Funktionen" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.de.svg?v=1.2.16" alt="Vergleich" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.de.svg?v=1.2.16" alt="Fragen" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.de.svg?v=1.2.17" 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.de.svg?v=1.2.17" alt="Live-Demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.de.svg?v=1.2.17" alt="Funktionen" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.de.svg?v=1.2.17" alt="Vergleich" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.de.svg?v=1.2.17" alt="Fragen" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="Demo 1 · Gedanken und Antworten" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="Demo 1 · Gedanken und Antworten" width="100%" />
33
33
  </td>
34
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="Demo 2 · Weitere Bedienung" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="Demo 2 · Weitere Bedienung" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Vergleich mit dem offiziellen Übersetzungsplugin
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.de.png?v=1.2.16" alt="Vergleich mit dem offiziellen Übersetzungsplugin" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.de.png?v=1.2.17" alt="Vergleich mit dem offiziellen Übersetzungsplugin" width="100%" />
49
49
  </p>
50
50
 
51
51
  Aktiviere dieses Plugin oder den offiziellen Gedankenübersetzer. Beide übernehmen die Gedankenoberfläche.
@@ -188,6 +188,8 @@ Scheitern alle aktiven Anbieter, bleibt das Original. Teste einzelne Anbieter un
188
188
  <details>
189
189
  <summary><b>Änderungen und Kompatibilität</b></summary>
190
190
 
191
+ **1.2.17** übernimmt gespeicherte Leerlaufzeiten für bereits geladene Ollama-Modelle, wartet bis zu 120 Sekunden auf lokale Inferenz und zeigt die Restzeit an. Behebt reproduzierbare Teile von Issue #17; langfristiger Speicheranstieg wird weiter untersucht.
192
+
191
193
  **1.2.16** ergänzt Portugiesisch als Ziel- und Oberflächensprache, erneuert alle neun READMEs und Vergleichsbilder und erklärt drei Marktplatzbilder.
192
194
 
193
195
  **1.2.15** ergänzt lokale Speicherverwaltung und passt Bilder, gruppiertes Einklappen und Originalauswahl an DSH `0.2.2-alpha.2` an.
package/README.es.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.es.png?v=1.2.16" alt="dsh-think-translate — El pensamiento de la IA, en tu idioma" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.es.png?v=1.2.17" alt="dsh-think-translate — El pensamiento de la IA, en tu idioma" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.es.svg?v=1.2.16" alt="Licencia MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.es.svg?v=1.2.16" alt="Ollama local" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.es.svg?v=1.2.16" alt="Originales intactos" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.es.svg?v=1.2.17" alt="Licencia MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.es.svg?v=1.2.17" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.es.svg?v=1.2.17" alt="Originales intactos" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.es.svg?v=1.2.16" alt="Instalar" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.es.svg?v=1.2.16" alt="Demostraciones" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.es.svg?v=1.2.16" alt="Funciones" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.es.svg?v=1.2.16" alt="Comparación" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.es.svg?v=1.2.16" alt="Preguntas" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.es.svg?v=1.2.17" alt="Instalar" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.es.svg?v=1.2.17" alt="Demostraciones" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.es.svg?v=1.2.17" alt="Funciones" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.es.svg?v=1.2.17" alt="Comparación" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.es.svg?v=1.2.17" alt="Preguntas" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="Demo 1 · Razonamiento y respuestas" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="Demo 1 · Razonamiento y respuestas" width="100%" />
33
33
  </td>
34
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="Demo 2 · Más operaciones" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="Demo 2 · Más operaciones" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparación con el plugin oficial de traducción
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.es.png?v=1.2.16" alt="Comparación con el plugin oficial de traducción" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.es.png?v=1.2.17" alt="Comparación con el plugin oficial de traducción" width="100%" />
49
49
  </p>
50
50
 
51
51
  Activa este plugin o el traductor oficial de razonamiento. Ambos controlan la interfaz del razonamiento.
@@ -188,6 +188,8 @@ Si todos los proveedores activos fallan, se conserva el original. Prueba cada pr
188
188
  <details>
189
189
  <summary><b>Cambios recientes y compatibilidad</b></summary>
190
190
 
191
+ **1.2.17** corrige el cambio del plazo de inactividad en modelos Ollama ya cargados, permite hasta 120 segundos de inferencia local y muestra el tiempo restante. Resuelve los problemas reproducibles del issue #17; el aumento de memoria a largo plazo sigue en investigación.
192
+
191
193
  **1.2.16** añade portugués al destino y la interfaz, renueva los nueve README e imágenes localizadas y declara tres imágenes para el mercado.
192
194
 
193
195
  **1.2.15** añade gestión de memoria local y adapta imágenes, plegado de razonamiento y selección del original a DSH `0.2.2-alpha.2`.
package/README.fr.md CHANGED
@@ -1,5 +1,5 @@
1
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%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.fr.png?v=1.2.17" alt="dsh-think-translate — La pensée de l’IA, dans votre langue" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
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" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.fr.svg?v=1.2.17" alt="Licence MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.fr.svg?v=1.2.17" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.fr.svg?v=1.2.17" alt="Originaux conservés" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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>
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.17" 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.17" 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.17" 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.17" 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.17" alt="Questions" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="Démo 1 · Raisonnement et réponses" width="100%" />
33
33
  </td>
34
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%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="Démo 2 · Autres opérations" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparaison avec le plugin officiel de traduction
46
46
 
47
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%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.fr.png?v=1.2.17" alt="Comparaison avec le plugin officiel de traduction" width="100%" />
49
49
  </p>
50
50
 
51
51
  Activez ce plugin ou le traducteur officiel du raisonnement. Tous deux prennent en charge l’affichage du raisonnement.
@@ -188,6 +188,8 @@ Si tous les fournisseurs actifs échouent, l’original reste visible. Testez ch
188
188
  <details>
189
189
  <summary><b>Mises à jour et compatibilité</b></summary>
190
190
 
191
+ **1.2.17** applique le délai enregistré aux modèles Ollama déjà chargés, attend jusqu’à 120 secondes pour l’inférence locale et affiche le temps restant. Corrige les problèmes reproductibles du ticket #17 ; la hausse de mémoire à long terme reste à étudier.
192
+
191
193
  **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
194
 
193
195
  **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`.
package/README.ja.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ja.png?v=1.2.16" alt="dsh-think-translate — AI の思考を、あなたの言語で" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ja.png?v=1.2.17" alt="dsh-think-translate — AI の思考を、あなたの言語で" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ja.svg?v=1.2.16" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ja.svg?v=1.2.16" alt="ローカル Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ja.svg?v=1.2.16" alt="原文を保持" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ja.svg?v=1.2.17" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ja.svg?v=1.2.17" alt="ローカル Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ja.svg?v=1.2.17" alt="原文を保持" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.ja.svg?v=1.2.16" alt="簡単インストール" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ja.svg?v=1.2.16" alt="動作デモ" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ja.svg?v=1.2.16" alt="主な機能" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ja.svg?v=1.2.16" alt="公式との比較" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ja.svg?v=1.2.16" alt="よくある質問" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ja.svg?v=1.2.17" alt="簡単インストール" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ja.svg?v=1.2.17" alt="動作デモ" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ja.svg?v=1.2.17" alt="主な機能" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ja.svg?v=1.2.17" alt="公式との比較" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ja.svg?v=1.2.17" alt="よくある質問" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="デモ1 · 思考と回答の翻訳" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="デモ1 · 思考と回答の翻訳" width="100%" />
33
33
  </td>
34
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="デモ2 · その他の操作" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="デモ2 · その他の操作" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## 公式翻訳プラグインとの比較
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ja.png?v=1.2.16" alt="公式翻訳プラグインとの比較" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ja.png?v=1.2.17" alt="公式翻訳プラグインとの比較" width="100%" />
49
49
  </p>
50
50
 
51
51
  本プラグインか公式思考翻訳のどちらか一方を有効にしてください。両者とも思考表示を担当します。
@@ -188,6 +188,8 @@ DeepSeek Harness のリポジトリで `pnpm run build` を実行し、DSH Web
188
188
  <details>
189
189
  <summary><b>最近の更新と互換性</b></summary>
190
190
 
191
+ **1.2.17**:ロード済み Ollama モデルにも保存した待機時間を適用。ローカル推論は最大120秒待機し、残り時間を表示します。issue #17 の再現可能な問題を修正し、長時間のメモリ増加は引き続き調査します。
192
+
191
193
  **1.2.16**:翻訳先と UI にポルトガル語を追加。9言語の README と比較画像を更新し、市場向け画像を3枚に拡充。
192
194
 
193
195
  **1.2.15**:ローカルモデルのメモリ管理を追加。DSH `0.2.2-alpha.2` の画像表示、思考のまとめ折りたたみ、原文選択に対応。
package/README.ko.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ko.png?v=1.2.16" alt="dsh-think-translate — AI의 생각을 당신의 언어로" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ko.png?v=1.2.17" alt="dsh-think-translate — AI의 생각을 당신의 언어로" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ko.svg?v=1.2.16" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ko.svg?v=1.2.16" alt="로컬 Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ko.svg?v=1.2.16" alt="원문 보존" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ko.svg?v=1.2.17" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ko.svg?v=1.2.17" alt="로컬 Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ko.svg?v=1.2.17" alt="원문 보존" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.ko.svg?v=1.2.16" alt="빠른 설치" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ko.svg?v=1.2.16" alt="실제 데모" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ko.svg?v=1.2.16" alt="핵심 기능" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ko.svg?v=1.2.16" alt="공식 비교" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ko.svg?v=1.2.16" alt="자주 묻는 질문" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ko.svg?v=1.2.17" alt="빠른 설치" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ko.svg?v=1.2.17" alt="실제 데모" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ko.svg?v=1.2.17" alt="핵심 기능" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ko.svg?v=1.2.17" alt="공식 비교" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ko.svg?v=1.2.17" alt="자주 묻는 질문" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="데모 1 · 사고 과정과 답변 번역" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="데모 1 · 사고 과정과 답변 번역" width="100%" />
33
33
  </td>
34
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="데모 2 · 더 많은 실제 조작" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="데모 2 · 더 많은 실제 조작" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## 공식 번역 플러그인과 비교
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ko.png?v=1.2.16" alt="공식 번역 플러그인과 비교" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ko.png?v=1.2.17" alt="공식 번역 플러그인과 비교" width="100%" />
49
49
  </p>
50
50
 
51
51
  이 플러그인과 공식 사고 번역 중 하나만 활성화하세요. 둘 다 사고 화면을 담당합니다.
@@ -188,6 +188,8 @@ DeepSeek Harness 저장소에서 `pnpm run build`를 실행한 뒤 DSH Web을
188
188
  <details>
189
189
  <summary><b>최근 변경 및 호환성</b></summary>
190
190
 
191
+ **1.2.17**: 로드된 Ollama 모델에도 저장한 유휴 시간을 적용하고, 로컬 추론을 최대 120초 기다리며 남은 시간을 표시합니다. issue #17의 재현 가능한 문제를 수정했으며 장시간 메모리 증가는 조사 중입니다.
192
+
191
193
  **1.2.16**: 포르투갈어 번역 대상과 UI 추가. 9개 언어 README와 비교 이미지 갱신, 마켓 이미지 3장 선언.
192
194
 
193
195
  **1.2.15**: 로컬 모델 메모리 관리 추가. DSH `0.2.2-alpha.2`의 이미지 표시, 사고 묶음 접기, 원문 선택에 대응.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.en.png?v=1.2.16" alt="dsh-think-translate — AI thinking, in your language" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.en.png?v=1.2.17" alt="dsh-think-translate — AI thinking, in your language" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.en.svg?v=1.2.16" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.en.svg?v=1.2.16" alt="Local Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.en.svg?v=1.2.16" alt="Originals preserved" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.en.svg?v=1.2.17" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.en.svg?v=1.2.17" alt="Local Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.en.svg?v=1.2.17" alt="Originals preserved" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.en.svg?v=1.2.16" alt="Quick install" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.en.svg?v=1.2.16" alt="Live demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.en.svg?v=1.2.16" alt="Features" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.en.svg?v=1.2.16" alt="Official comparison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.en.svg?v=1.2.16" alt="FAQ" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.en.svg?v=1.2.17" alt="Quick install" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.en.svg?v=1.2.17" alt="Live demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.en.svg?v=1.2.17" alt="Features" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.en.svg?v=1.2.17" alt="Official comparison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.en.svg?v=1.2.17" alt="FAQ" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="Demo 1 · Reasoning and answers" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="Demo 1 · Reasoning and answers" width="100%" />
33
33
  </td>
34
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="Demo 2 · More live operations" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="Demo 2 · More live operations" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparison with the official translation plugin
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.en.png?v=1.2.16" alt="Comparison with the official translation plugin" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.en.png?v=1.2.17" alt="Comparison with the official translation plugin" width="100%" />
49
49
  </p>
50
50
 
51
51
  Enable either this plugin or the official reasoning translator. Both take over the reasoning interface.
@@ -188,6 +188,8 @@ When all enabled providers fail, the original remains. Test individual providers
188
188
  <details>
189
189
  <summary><b>Recent changes and compatibility</b></summary>
190
190
 
191
+ **1.2.17** fixes idle-policy changes for already loaded Ollama models, allows up to 120 seconds for local inference, and displays the server idle countdown. Addresses reproducible parts of issue #17; long-term memory growth remains under investigation.
192
+
191
193
  **1.2.16** adds Portuguese throughout the translation target and UI, refreshes all nine READMEs and localized comparison images, and declares three marketplace images.
192
194
 
193
195
  **1.2.15** adds local model memory management and adapts to DSH `0.2.2-alpha.2` image rendering, grouped reasoning collapse and original text selection.
package/README.pt.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.pt.png?v=1.2.16" alt="dsh-think-translate — O pensamento da IA, no seu idioma" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.pt.png?v=1.2.17" alt="dsh-think-translate — O pensamento da IA, no seu idioma" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.pt.svg?v=1.2.16" alt="Licença MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.pt.svg?v=1.2.16" alt="Ollama local" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.pt.svg?v=1.2.16" alt="Originais preservados" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.pt.svg?v=1.2.17" alt="Licença MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.pt.svg?v=1.2.17" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.pt.svg?v=1.2.17" alt="Originais preservados" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.pt.svg?v=1.2.16" alt="Instalação" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.pt.svg?v=1.2.16" alt="Demonstrações" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.pt.svg?v=1.2.16" alt="Recursos" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.pt.svg?v=1.2.16" alt="Comparação" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.pt.svg?v=1.2.16" alt="Perguntas" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.pt.svg?v=1.2.17" alt="Instalação" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.pt.svg?v=1.2.17" alt="Demonstrações" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.pt.svg?v=1.2.17" alt="Recursos" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.pt.svg?v=1.2.17" alt="Comparação" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.pt.svg?v=1.2.17" alt="Perguntas" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="Demo 1 · Raciocínio e respostas" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="Demo 1 · Raciocínio e respostas" width="100%" />
33
33
  </td>
34
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="Demo 2 · Mais operações" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="Demo 2 · Mais operações" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparação com o plugin oficial de tradução
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.pt.png?v=1.2.16" alt="Comparação com o plugin oficial de tradução" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.pt.png?v=1.2.17" alt="Comparação com o plugin oficial de tradução" width="100%" />
49
49
  </p>
50
50
 
51
51
  Ative este plugin ou o tradutor oficial de raciocínio. Ambos controlam a interface de raciocínio.
@@ -188,6 +188,8 @@ Se todos os provedores ativados falharem, o original permanece. Teste cada prove
188
188
  <details>
189
189
  <summary><b>Atualizações e compatibilidade</b></summary>
190
190
 
191
+ **1.2.17** aplica o prazo salvo a modelos Ollama já carregados, aguarda até 120 segundos pela inferência local e mostra o tempo restante. Corrige os problemas reproduzíveis do issue #17; o aumento de memória a longo prazo continua em investigação.
192
+
191
193
  **1.2.16** adiciona português ao destino e à interface, renova os nove README e imagens localizadas, e declara três imagens para o mercado.
192
194
 
193
195
  **1.2.15** adiciona gestão de memória local e adapta imagens, recolhimento agrupado do raciocínio e seleção do original ao DSH `0.2.2-alpha.2`.
package/README.ru.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ru.png?v=1.2.16" alt="dsh-think-translate — Мысли ИИ — на вашем языке" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ru.png?v=1.2.17" alt="dsh-think-translate — Мысли ИИ — на вашем языке" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ru.svg?v=1.2.16" alt="Лицензия MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ru.svg?v=1.2.16" alt="Локальный Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ru.svg?v=1.2.16" alt="Оригиналы сохранены" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ru.svg?v=1.2.17" alt="Лицензия MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ru.svg?v=1.2.17" alt="Локальный Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ru.svg?v=1.2.17" alt="Оригиналы сохранены" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
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.ru.svg?v=1.2.16" alt="Установка" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ru.svg?v=1.2.16" alt="Демонстрации" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ru.svg?v=1.2.16" alt="Возможности" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ru.svg?v=1.2.16" alt="Сравнение" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ru.svg?v=1.2.16" alt="Вопросы" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ru.svg?v=1.2.17" alt="Установка" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ru.svg?v=1.2.17" alt="Демонстрации" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ru.svg?v=1.2.17" alt="Возможности" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ru.svg?v=1.2.17" alt="Сравнение" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ru.svg?v=1.2.17" alt="Вопросы" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
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="Демо 1 · Рассуждения и ответы" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.17" alt="Демо 1 · Рассуждения и ответы" width="100%" />
33
33
  </td>
34
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="Демо 2 · Другие операции" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.17" alt="Демо 2 · Другие операции" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Сравнение с официальным плагином перевода
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ru.png?v=1.2.16" alt="Сравнение с официальным плагином перевода" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ru.png?v=1.2.17" alt="Сравнение с официальным плагином перевода" width="100%" />
49
49
  </p>
50
50
 
51
51
  Включайте этот плагин или официальный переводчик рассуждений. Оба управляют интерфейсом рассуждений.
@@ -188,6 +188,8 @@ dsh plugin --profile web add dsh-think-translate@latest
188
188
  <details>
189
189
  <summary><b>Изменения и совместимость</b></summary>
190
190
 
191
+ **1.2.17** применяет сохранённое время простоя к уже загруженным моделям Ollama, ожидает локальный перевод до 120 секунд и показывает оставшееся время. Исправлены воспроизводимые проблемы из issue #17; длительный рост памяти ещё исследуется.
192
+
191
193
  **1.2.16** добавляет португальский для перевода и интерфейса, обновляет все девять README и сравнительных изображений, объявляет три изображения для маркета.
192
194
 
193
195
  **1.2.15** добавляет управление памятью локальных моделей и адаптацию изображений, группового сворачивания и выбора оригинала к DSH `0.2.2-alpha.2`.
package/README.zh-CN.md CHANGED
@@ -1,229 +1,231 @@
1
- <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.zh-CN.png?v=1.2.16" width="100%" alt="dsh-think-translate:让 AI 的思考,用你的语言呈现" />
3
- </p>
4
-
5
- <p align="center">
6
- <b>为 DeepSeek Harness 提供显示层翻译。</b><br />
7
- 读懂思考,跟上任务,也看清回答。原文完整保留,译文不进入模型上下文。
8
- </p>
9
-
10
- <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.zh-CN.svg?v=1.2.16" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.zh-CN.svg?v=1.2.16" alt="支持本地 Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.zh-CN.svg?v=1.2.16" alt="保留原文与模型上下文" />
14
- </p>
15
-
16
- <p align="center">
17
- <b>中文</b> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.md">English</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.ja.md">日本語</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.ko.md">한국어</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.es.md">Español</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.fr.md">Français</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.de.md">Deutsch</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.ru.md">Русский</a> · <a href="README.pt.md">Português</a>
18
- </p>
19
-
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.zh-CN.svg?v=1.2.16" alt="快速安装" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.zh-CN.svg?v=1.2.16" alt="实际演示" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.zh-CN.svg?v=1.2.16" alt="核心能力" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.zh-CN.svg?v=1.2.16" alt="官方对比" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.zh-CN.svg?v=1.2.16" alt="常见问题" height="24" /></a>
22
- </p>
23
-
24
- ---
25
-
26
- <a id="demo"></a>
27
- ## 看见思考发生
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" width="100%" alt="思考链与回答翻译的实际操作演示" />
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" width="100%" alt="dsh-think-translate 第二段实际操作演示" />
36
- </td>
37
- </tr>
38
- <tr>
39
- <td align="center" valign="top">
40
- <sub>演示一 · 思考链与回答翻译</sub>
41
- </td>
42
- <td align="center" valign="top">
43
- <sub>演示二 · 更多实际操作</sub>
44
- </td>
45
- </tr>
46
- </table>
47
-
48
- <a id="comparison"></a>
49
- ## 与官方翻译插件对比
50
-
51
- <p align="center">
52
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.zh-CN.png?v=1.2.16" width="100%" alt="与官方翻译插件的功能和首次上线日期对比" />
53
- </p>
54
-
55
- 本插件与官方思考翻译都接管思考界面,请二选一启用。
56
-
57
- <a id="quick-start"></a>
58
- ## 一条命令,开始使用
59
-
60
- ```bash
61
- dsh plugin --profile web add dsh-think-translate
62
- ```
63
-
64
- 安装后**完整重启 DSH Web**,打开 **设置 → 思考链翻译**,选择目标语言和翻译提供方即可。
65
-
66
- <details>
67
- <summary>从 GitHub 安装、升级与其他安装方式</summary>
68
-
69
- 从 GitHub 安装:
70
-
71
- ```bash
72
- dsh plugin --profile web add github:UncleK/dsh-think-translate
73
- ```
74
-
75
- 升级 npm 版本:
76
-
77
- ```bash
78
- dsh plugin --profile web add dsh-think-translate@latest
79
- ```
80
-
81
- 安装或升级后均需完整重启 DSH。手动部署可通过目录联接把包链接到 profile,并在 `cordis.patch.yml` 中插入 `dsh-think-translate` 插件行;普通使用建议选择上面的安装命令。
82
-
83
- </details>
84
-
85
- <a id="features"></a>
86
- ## 需要读懂的,不只是思考链
87
-
88
- <table>
89
- <tr>
90
- <td width="50%" valign="top">
91
- <h3>思考链,边想边读</h3>
92
- <p>按段落与句子分批翻译。可选全部预翻译、懒加载历史,或仅在展开后翻译。</p>
93
- </td>
94
- <td width="50%" valign="top">
95
- <h3>任务与回答,一起跟上</h3>
96
- <p>覆盖任务卡片和输入区任务列表;回答正文提供独立翻译开关。</p>
97
- </td>
98
- </tr>
99
- <tr>
100
- <td valign="top">
101
- <h3>审查理由,也能看清</h3>
102
- <p>自动审查拒绝一次调用时,保留原文并追加目标语言的理由,原有操作按钮照常使用。</p>
103
- </td>
104
- <td valign="top">
105
- <h3>原文与代码,完整保留</h3>
106
- <p>代码、路径和命令在翻译前受到保护。译文只用于显示,不进入模型上下文。</p>
107
- </td>
108
- </tr>
109
- <tr>
110
- <td valign="top">
111
- <h3>本地模型,用时再加载</h3>
112
- <p>复用已有 Ollama 和模型,支持手动释放、禁用后释放与空闲自动释放。</p>
113
- </td>
114
- <td valign="top">
115
- <h3>提供方,按你的顺序工作</h3>
116
- <p>拖动排序并逐行启停。失败时尝试下一家,明显串语言的结果也会触发回退。</p>
117
- </td>
118
- </tr>
119
- </table>
120
-
121
- ### 连接你已经在用的提供方
122
-
123
- **Ollama · Google · Bing · OpenAI 兼容端点 · Anthropic Messages API**
124
-
125
- 也可以发现 DSH 已配置的提供方,无需重复填写端点和密钥。每一行都能单独测试,列表顺序就是尝试顺序。
126
-
127
- ```text
128
- 你的首选提供方 → 下一家已启用提供方 → … → 全部失败时保留原文
129
- ```
130
-
131
- <details>
132
- <summary>自定义端点、密钥与自动恢复</summary>
133
-
134
- - 自定义端点支持 OpenAI 兼容的 `/v1/chat/completions` 和原生 Anthropic Messages API。
135
- - 自动发现当前 DSH profile 及覆盖配置中的提供方;可重新扫描并加入翻译链。
136
- - 声明 `apiKeyEnv` 的提供方在请求时解析密钥,解析结果不会写回插件配置。
137
- - 失败结果在 Host 内存冷却 30 秒,之后翻译会恢复重试。
138
- - 已经是目标语言的正文会按语言检测规则跳过;提供方测试仍会真实发起请求。
139
-
140
- </details>
141
-
142
- ### 本地翻译模型,按需加载与释放
143
-
144
- | 你的操作 | 插件行为 |
145
- |---|---|
146
- | 实际翻译或点击测试 | 按需启动服务、加载所选模型 |
147
- | 点击“释放模型内存” | 当前翻译结束后释放;保留模型文件、开关和排序 |
148
- | 取消勾选本地提供方 | 停用并释放所选模型 |
149
- | 重新勾选或打开设置 | 不预加载;下一次实际翻译时再加载 |
150
- | 设置空闲释放 | 默认 5 分钟,可选 1 / 5 / 10 / 30 / 60 分钟或关闭 |
151
-
152
- 空闲策略从下次使用起生效,由 Ollama 对当前模型计时,不修改全局环境变量。缺少软件或模型时,只有点击准备按钮后才安装或下载,并显示进度。
153
-
154
- <a id="languages"></a>
155
- ### 让语言设置跟着你
156
-
157
- 中文 · English · 日本語 · 한국어 · Español · Français · Deutsch · Русский · Português
158
-
159
- 9 种目标语言、设置面板和任务文案保持一致,现已包含葡萄牙语,选择会在刷新后保留。
160
-
161
- <a id="faq"></a>
162
- ## 遇到问题,先看这里
163
-
164
- <details>
165
- <summary><b>安装或升级后,看不到翻译入口</b></summary>
166
-
167
- 完整重启 `dsh web`。客户端模块图在进程启动时组合,仅刷新页面有时不足以加载新插件。设置页底部会显示实际安装包的版本号。
168
-
169
- </details>
170
-
171
- <details>
172
- <summary><b>本地模型列表为空</b></summary>
173
-
174
- 检查 `ollama list` 或 `/api/tags`,确认运行中的服务使用了正确的模型目录;同时检查该服务生效的 `OLLAMA_MODELS`。不需要重新下载已经存在于其他模型目录中的文件。
175
-
176
- </details>
177
-
178
- <details>
179
- <summary><b>升级 DSH 后,源码启动报 client bundles not found</b></summary>
180
-
181
- 在 DeepSeek Harness 仓库根目录先运行 `pnpm run build`,完成后重新启动 DSH Web。
182
-
183
- </details>
184
-
185
- <details>
186
- <summary><b>翻译失败会影响正常对话吗</b></summary>
187
-
188
- 所有已启用提供方都失败时保留原文,插件不会用失败结果覆盖会话原文。可以在设置中逐行测试提供方,并查看最近错误;冷却后翻译会自动恢复重试。
189
-
190
- </details>
191
-
192
- <details>
193
- <summary><b>最近更新与兼容性</b></summary>
194
-
195
- **1.2.16** 补齐葡萄牙语翻译目标与界面,同步 9 种语言的 README、横幅和对比图,并声明市场三张展示图。
196
-
197
- **1.2.15** 增加本地模型内存管理,适配 DSH `0.2.2-alpha.2` 的官方图片渲染、整轮思考折叠和正文原文选择。
198
-
199
- **1.2.14** 拒绝明显错误语言的译文并尝试下一提供方,清理旧译文缓存并保留设置。
200
-
201
- **1.2.13** 支持自动审查拒绝理由翻译。感谢 [llg1634](https://github.com/llg1634) 提供问题报告、初始补丁和测试。
202
-
203
- 更早版本与具体变更见 [GitHub Releases](https://github.com/UncleK/dsh-think-translate/releases)。
204
-
205
- </details>
206
-
207
- <details>
208
- <summary><b>开发与工作原理</b></summary>
209
-
210
- ```text
211
- 浏览器 → 同源翻译接口 → 已启用的提供方链 → 译文或原文
212
- ```
213
-
214
- - `lib/index.js`:Host 路由、提供方适配、配置、内存缓存与本地模型管理。
215
- - `lib/client.js`:设置、显示层翻译、流式分批和浏览器缓存。
216
- - `lib/config.json`:运行期配置,已从 Git 和 npm 包排除。
217
- - 无需额外构建,源码即产物;修改 Host 后重启 DSH。
218
- - 检查命令:`npm test`。
219
-
220
- 配置发现、凭据处理和维护说明见 [维护笔记](https://github.com/UncleK/dsh-think-translate/blob/main/docs/maintenance-notes.md)。
221
-
222
- </details>
223
-
224
- ---
225
-
226
- <p align="center">
227
- <b>dsh-think-translate</b><br />
228
- <a href="https://github.com/UncleK/dsh-think-translate/issues">反馈问题</a> &nbsp;·&nbsp; <a href="https://github.com/UncleK/dsh-think-translate/releases">版本发布</a> &nbsp;·&nbsp; <a href="https://github.com/UncleK/dsh-think-translate/blob/main/LICENSE">MIT License</a>
229
- </p>
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.zh-CN.png?v=1.2.17" width="100%" alt="dsh-think-translate:让 AI 的思考,用你的语言呈现" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <b>为 DeepSeek Harness 提供显示层翻译。</b><br />
7
+ 读懂思考,跟上任务,也看清回答。原文完整保留,译文不进入模型上下文。
8
+ </p>
9
+
10
+ <p align="center">
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.zh-CN.svg?v=1.2.17" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.zh-CN.svg?v=1.2.17" alt="支持本地 Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.zh-CN.svg?v=1.2.17" alt="保留原文与模型上下文" />
14
+ </p>
15
+
16
+ <p align="center">
17
+ <b>中文</b> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.md">English</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.ja.md">日本語</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.ko.md">한국어</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.es.md">Español</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.fr.md">Français</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.de.md">Deutsch</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/README.ru.md">Русский</a> · <a href="README.pt.md">Português</a>
18
+ </p>
19
+
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.zh-CN.svg?v=1.2.17" alt="快速安装" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.zh-CN.svg?v=1.2.17" alt="实际演示" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.zh-CN.svg?v=1.2.17" alt="核心能力" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.zh-CN.svg?v=1.2.17" alt="官方对比" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.zh-CN.svg?v=1.2.17" alt="常见问题" height="24" /></a>
22
+ </p>
23
+
24
+ ---
25
+
26
+ <a id="demo"></a>
27
+ ## 看见思考发生
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.17" width="100%" alt="思考链与回答翻译的实际操作演示" />
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.17" width="100%" alt="dsh-think-translate 第二段实际操作演示" />
36
+ </td>
37
+ </tr>
38
+ <tr>
39
+ <td align="center" valign="top">
40
+ <sub>演示一 · 思考链与回答翻译</sub>
41
+ </td>
42
+ <td align="center" valign="top">
43
+ <sub>演示二 · 更多实际操作</sub>
44
+ </td>
45
+ </tr>
46
+ </table>
47
+
48
+ <a id="comparison"></a>
49
+ ## 与官方翻译插件对比
50
+
51
+ <p align="center">
52
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.zh-CN.png?v=1.2.17" width="100%" alt="与官方翻译插件的功能和首次上线日期对比" />
53
+ </p>
54
+
55
+ 本插件与官方思考翻译都接管思考界面,请二选一启用。
56
+
57
+ <a id="quick-start"></a>
58
+ ## 一条命令,开始使用
59
+
60
+ ```bash
61
+ dsh plugin --profile web add dsh-think-translate
62
+ ```
63
+
64
+ 安装后**完整重启 DSH Web**,打开 **设置 → 思考链翻译**,选择目标语言和翻译提供方即可。
65
+
66
+ <details>
67
+ <summary>从 GitHub 安装、升级与其他安装方式</summary>
68
+
69
+ 从 GitHub 安装:
70
+
71
+ ```bash
72
+ dsh plugin --profile web add github:UncleK/dsh-think-translate
73
+ ```
74
+
75
+ 升级 npm 版本:
76
+
77
+ ```bash
78
+ dsh plugin --profile web add dsh-think-translate@latest
79
+ ```
80
+
81
+ 安装或升级后均需完整重启 DSH。手动部署可通过目录联接把包链接到 profile,并在 `cordis.patch.yml` 中插入 `dsh-think-translate` 插件行;普通使用建议选择上面的安装命令。
82
+
83
+ </details>
84
+
85
+ <a id="features"></a>
86
+ ## 需要读懂的,不只是思考链
87
+
88
+ <table>
89
+ <tr>
90
+ <td width="50%" valign="top">
91
+ <h3>思考链,边想边读</h3>
92
+ <p>按段落与句子分批翻译。可选全部预翻译、懒加载历史,或仅在展开后翻译。</p>
93
+ </td>
94
+ <td width="50%" valign="top">
95
+ <h3>任务与回答,一起跟上</h3>
96
+ <p>覆盖任务卡片和输入区任务列表;回答正文提供独立翻译开关。</p>
97
+ </td>
98
+ </tr>
99
+ <tr>
100
+ <td valign="top">
101
+ <h3>审查理由,也能看清</h3>
102
+ <p>自动审查拒绝一次调用时,保留原文并追加目标语言的理由,原有操作按钮照常使用。</p>
103
+ </td>
104
+ <td valign="top">
105
+ <h3>原文与代码,完整保留</h3>
106
+ <p>代码、路径和命令在翻译前受到保护。译文只用于显示,不进入模型上下文。</p>
107
+ </td>
108
+ </tr>
109
+ <tr>
110
+ <td valign="top">
111
+ <h3>本地模型,用时再加载</h3>
112
+ <p>复用已有 Ollama 和模型,支持手动释放、禁用后释放与空闲自动释放。</p>
113
+ </td>
114
+ <td valign="top">
115
+ <h3>提供方,按你的顺序工作</h3>
116
+ <p>拖动排序并逐行启停。失败时尝试下一家,明显串语言的结果也会触发回退。</p>
117
+ </td>
118
+ </tr>
119
+ </table>
120
+
121
+ ### 连接你已经在用的提供方
122
+
123
+ **Ollama · Google · Bing · OpenAI 兼容端点 · Anthropic Messages API**
124
+
125
+ 也可以发现 DSH 已配置的提供方,无需重复填写端点和密钥。每一行都能单独测试,列表顺序就是尝试顺序。
126
+
127
+ ```text
128
+ 你的首选提供方 → 下一家已启用提供方 → … → 全部失败时保留原文
129
+ ```
130
+
131
+ <details>
132
+ <summary>自定义端点、密钥与自动恢复</summary>
133
+
134
+ - 自定义端点支持 OpenAI 兼容的 `/v1/chat/completions` 和原生 Anthropic Messages API。
135
+ - 自动发现当前 DSH profile 及覆盖配置中的提供方;可重新扫描并加入翻译链。
136
+ - 声明 `apiKeyEnv` 的提供方在请求时解析密钥,解析结果不会写回插件配置。
137
+ - 失败结果在 Host 内存冷却 30 秒,之后翻译会恢复重试。
138
+ - 已经是目标语言的正文会按语言检测规则跳过;提供方测试仍会真实发起请求。
139
+
140
+ </details>
141
+
142
+ ### 本地翻译模型,按需加载与释放
143
+
144
+ | 你的操作 | 插件行为 |
145
+ |---|---|
146
+ | 实际翻译或点击测试 | 按需启动服务、加载所选模型 |
147
+ | 点击“释放模型内存” | 当前翻译结束后释放;保留模型文件、开关和排序 |
148
+ | 取消勾选本地提供方 | 停用并释放所选模型 |
149
+ | 重新勾选或打开设置 | 不预加载;下一次实际翻译时再加载 |
150
+ | 设置空闲释放 | 默认 5 分钟,可选 1 / 5 / 10 / 30 / 60 分钟或关闭 |
151
+
152
+ 空闲策略从下次使用起生效,由 Ollama 对当前模型计时,不修改全局环境变量。缺少软件或模型时,只有点击准备按钮后才安装或下载,并显示进度。
153
+
154
+ <a id="languages"></a>
155
+ ### 让语言设置跟着你
156
+
157
+ 中文 · English · 日本語 · 한국어 · Español · Français · Deutsch · Русский · Português
158
+
159
+ 9 种目标语言、设置面板和任务文案保持一致,现已包含葡萄牙语,选择会在刷新后保留。
160
+
161
+ <a id="faq"></a>
162
+ ## 遇到问题,先看这里
163
+
164
+ <details>
165
+ <summary><b>安装或升级后,看不到翻译入口</b></summary>
166
+
167
+ 完整重启 `dsh web`。客户端模块图在进程启动时组合,仅刷新页面有时不足以加载新插件。设置页底部会显示实际安装包的版本号。
168
+
169
+ </details>
170
+
171
+ <details>
172
+ <summary><b>本地模型列表为空</b></summary>
173
+
174
+ 检查 `ollama list` 或 `/api/tags`,确认运行中的服务使用了正确的模型目录;同时检查该服务生效的 `OLLAMA_MODELS`。不需要重新下载已经存在于其他模型目录中的文件。
175
+
176
+ </details>
177
+
178
+ <details>
179
+ <summary><b>升级 DSH 后,源码启动报 client bundles not found</b></summary>
180
+
181
+ 在 DeepSeek Harness 仓库根目录先运行 `pnpm run build`,完成后重新启动 DSH Web。
182
+
183
+ </details>
184
+
185
+ <details>
186
+ <summary><b>翻译失败会影响正常对话吗</b></summary>
187
+
188
+ 所有已启用提供方都失败时保留原文,插件不会用失败结果覆盖会话原文。可以在设置中逐行测试提供方,并查看最近错误;冷却后翻译会自动恢复重试。
189
+
190
+ </details>
191
+
192
+ <details>
193
+ <summary><b>最近更新与兼容性</b></summary>
194
+
195
+ **1.2.17** 修复已加载 Ollama 模型保存空闲时长后不生效的问题,本地推理等待延长至 120 秒,并显示服务端剩余空闲时间。修复 issue #17 中已复现的部分,长期内存增长仍在调查。
196
+
197
+ **1.2.16** 补齐葡萄牙语翻译目标与界面,同步 9 种语言的 README、横幅和对比图,并声明市场三张展示图。
198
+
199
+ **1.2.15** 增加本地模型内存管理,适配 DSH `0.2.2-alpha.2` 的官方图片渲染、整轮思考折叠和正文原文选择。
200
+
201
+ **1.2.14** 拒绝明显错误语言的译文并尝试下一提供方,清理旧译文缓存并保留设置。
202
+
203
+ **1.2.13** 支持自动审查拒绝理由翻译。感谢 [llg1634](https://github.com/llg1634) 提供问题报告、初始补丁和测试。
204
+
205
+ 更早版本与具体变更见 [GitHub Releases](https://github.com/UncleK/dsh-think-translate/releases)。
206
+
207
+ </details>
208
+
209
+ <details>
210
+ <summary><b>开发与工作原理</b></summary>
211
+
212
+ ```text
213
+ 浏览器 → 同源翻译接口 → 已启用的提供方链 → 译文或原文
214
+ ```
215
+
216
+ - `lib/index.js`:Host 路由、提供方适配、配置、内存缓存与本地模型管理。
217
+ - `lib/client.js`:设置、显示层翻译、流式分批和浏览器缓存。
218
+ - `lib/config.json`:运行期配置,已从 Git 和 npm 包排除。
219
+ - 无需额外构建,源码即产物;修改 Host 后重启 DSH。
220
+ - 检查命令:`npm test`。
221
+
222
+ 配置发现、凭据处理和维护说明见 [维护笔记](https://github.com/UncleK/dsh-think-translate/blob/main/docs/maintenance-notes.md)。
223
+
224
+ </details>
225
+
226
+ ---
227
+
228
+ <p align="center">
229
+ <b>dsh-think-translate</b><br />
230
+ <a href="https://github.com/UncleK/dsh-think-translate/issues">反馈问题</a> &nbsp;·&nbsp; <a href="https://github.com/UncleK/dsh-think-translate/releases">版本发布</a> &nbsp;·&nbsp; <a href="https://github.com/UncleK/dsh-think-translate/blob/main/LICENSE">MIT License</a>
231
+ </p>
package/lib/client.js CHANGED
@@ -23,7 +23,7 @@ window.__ModuleLoader__.load({
23
23
  // there yet (an older process still serving the port), and the contract test
24
24
  // pins PLUGIN_VERSION to package.json so the two can never drift.
25
25
  var PLUGIN_NAME = "dsh-think-translate";
26
- var PLUGIN_VERSION = "1.2.16";
26
+ var PLUGIN_VERSION = "1.2.17";
27
27
  var PLUGIN_REPO = "https://github.com/UncleK/dsh-think-translate";
28
28
  // The official MarkdownText contract changed in 0.1.2-alpha: it now takes a
29
29
  // nested `labels` object and dereferences it without defaults inside its code
@@ -1034,12 +1034,12 @@ window.__ModuleLoader__.load({
1034
1034
 
1035
1035
  async function hostAttempt(text, target) {
1036
1036
  // The host may first load a local model (up to 120s), then infer or
1037
- // walk its fallback providers. Bound the full route, not each hop.
1037
+ // infer for up to 120s, then walk its fallback providers.
1038
1038
  var res = await fetchWithTimeout("/_xlate/translate", {
1039
1039
  method: "POST",
1040
1040
  headers: { "Content-Type": "application/json" },
1041
1041
  body: JSON.stringify({ text: text, target: target })
1042
- }, 180000);
1042
+ }, 300000);
1043
1043
  if (!res.ok) throw new Error("route HTTP " + res.status);
1044
1044
  var j = await res.json();
1045
1045
  if (j && Array.isArray(j.attempts)) j.attempts.forEach(function (attempt) { recordCheck(attempt.provider, attempt.ok, attempt.model, attempt.signature); });
@@ -2051,15 +2051,15 @@ window.__ModuleLoader__.load({
2051
2051
  };
2052
2052
  var MEMORY_KEYS = ["release", "idle", "never", "hint", "loaded", "unloaded", "unavailable", "waiting_idle", "unloading_model"];
2053
2053
  var MEMORY_LABELS = {
2054
- pt: ["Liberar memória do modelo", "Liberar após inatividade", "Desativar liberação automática", "O modelo será carregado quando a tradução for necessária. O prazo vale a partir do próximo uso; apenas o modelo selecionado será liberado.", "Modelo carregado", "Modelo liberado", "O Ollama não está em execução ou está inacessível", "Aguardando as traduções atuais", "Liberando memória do modelo"],
2055
- "zh-CN": ["释放模型内存", "空闲后自动释放", "关闭自动释放", "下次需要翻译时自动加载;时长从下次使用起生效,仅释放所选模型。", "模型已加载", "模型已释放", "Ollama 未运行或不可达", "等待当前翻译结束", "正在释放模型内存"],
2056
- en: ["Release model memory", "Release after idle", "Disable auto release", "Loads again when translation is needed. Timing applies from the next use; only the selected model is released.", "Model loaded", "Model unloaded", "Ollama is not running or unreachable", "Waiting for current translations", "Releasing model memory"],
2057
- ja: ["モデルメモリを解放", "アイドル後に自動解放", "自動解放を無効化", "翻訳が必要になると再ロードします。時間は次回使用時から適用され、選択したモデルだけを解放します。", "モデルロード済み", "モデル解放済み", "Ollama が停止中または接続できません", "現在の翻訳の完了を待機", "モデルメモリを解放中"],
2058
- ko: ["모델 메모리 해제", "유휴 후 자동 해제", "자동 해제 끄기", "번역이 필요하면 다시 로드합니다. 시간은 다음 사용부터 적용되며 선택한 모델만 해제합니다.", "모델 로드됨", "모델 해제됨", "Ollama가 실행 중이 아니거나 연결할 수 없습니다", "현재 번역이 끝나기를 기다리는 중", "모델 메모리 해제 중"],
2059
- es: ["Liberar memoria del modelo", "Liberar tras inactividad", "Desactivar liberación automática", "Se carga cuando se necesita traducir. El plazo se aplica desde el próximo uso; solo se libera el modelo seleccionado.", "Modelo cargado", "Modelo descargado de memoria", "Ollama no está ejecutándose o no es accesible", "Esperando las traducciones actuales", "Liberando memoria del modelo"],
2060
- fr: ["Libérer la mémoire du modèle", "Libérer après inactivité", "Désactiver la libération automatique", "Le modèle se recharge pour traduire. Le délai s’applique dès la prochaine utilisation ; seul le modèle sélectionné est libéré.", "Modèle chargé", "Modèle déchargé", "Ollama est arrêté ou inaccessible", "En attente des traductions en cours", "Libération de la mémoire du modèle"],
2061
- de: ["Modellspeicher freigeben", "Nach Leerlauf freigeben", "Automatische Freigabe deaktivieren", "Wird bei der nächsten Übersetzung geladen. Die Zeit gilt ab der nächsten Nutzung; nur das gewählte Modell wird entladen.", "Modell geladen", "Modell entladen", "Ollama läuft nicht oder ist nicht erreichbar", "Warten auf laufende Übersetzungen", "Modellspeicher wird freigegeben"],
2062
- ru: ["Освободить память модели", "Освобождать после простоя", "Отключить автоосвобождение", "Модель загрузится при следующем переводе. Время действует со следующего использования; освобождается только выбранная модель.", "Модель загружена", "Модель выгружена", "Ollama не запущен или недоступен", "Ожидание завершения текущих переводов", "Освобождение памяти модели"],
2054
+ pt: ["Liberar memória do modelo", "Liberar após inatividade", "Desativar liberação automática", "Ao salvar, aplica-se ao modelo carregado. Cada tradução reinicia o prazo; outros aplicativos também podem prolongá-lo. Só o modelo selecionado é liberado e recarrega na próxima tradução.", "Modelo carregado", "Modelo liberado", "O Ollama não está em execução ou está inacessível", "Aguardando as traduções atuais", "Liberando memória do modelo"],
2055
+ "zh-CN": ["释放模型内存", "空闲后自动释放", "关闭自动释放", "保存后应用于已加载模型;每次翻译后重新计时。其他应用使用同一模型也会延长驻留。仅释放所选模型,下次翻译时自动加载。", "模型已加载", "模型已释放", "Ollama 未运行或不可达", "等待当前翻译结束", "正在释放模型内存"],
2056
+ en: ["Release model memory", "Release after idle", "Disable auto release", "Applies to a loaded model when saved. Each translation restarts the idle timer; other apps using the model can extend it. Only the selected model is released and reloads for the next translation.", "Model loaded", "Model unloaded", "Ollama is not running or unreachable", "Waiting for current translations", "Releasing model memory"],
2057
+ ja: ["モデルメモリを解放", "アイドル後に自動解放", "自動解放を無効化", "保存時にロード済みモデルへ適用します。翻訳のたびに待機時間をリセットし、他のアプリの使用でも延長されます。選択したモデルだけを解放し、次の翻訳時に再ロードします。", "モデルロード済み", "モデル解放済み", "Ollama が停止中または接続できません", "現在の翻訳の完了を待機", "モデルメモリを解放中"],
2058
+ ko: ["모델 메모리 해제", "유휴 후 자동 해제", "자동 해제 끄기", "저장하면 로드된 모델에 적용됩니다. 번역할 때마다 유휴 시간이 다시 시작되며 다른 앱의 사용으로도 연장됩니다. 선택한 모델만 해제하고 다음 번역 시 다시 로드합니다.", "모델 로드됨", "모델 해제됨", "Ollama가 실행 중이 아니거나 연결할 수 없습니다", "현재 번역이 끝나기를 기다리는 중", "모델 메모리 해제 중"],
2059
+ es: ["Liberar memoria del modelo", "Liberar tras inactividad", "Desactivar liberación automática", "Al guardar se aplica al modelo cargado. Cada traducción reinicia el plazo; otras aplicaciones también pueden prolongarlo. Solo se libera el modelo seleccionado y se recarga al traducir.", "Modelo cargado", "Modelo descargado de memoria", "Ollama no está ejecutándose o no es accesible", "Esperando las traducciones actuales", "Liberando memoria del modelo"],
2060
+ fr: ["Libérer la mémoire du modèle", "Libérer après inactivité", "Désactiver la libération automatique", "Le délai est appliqué au modèle chargé dès l’enregistrement. Chaque traduction le réinitialise ; les autres applications peuvent le prolonger. Seul le modèle choisi est déchargé et se recharge pour traduire.", "Modèle chargé", "Modèle déchargé", "Ollama est arrêté ou inaccessible", "En attente des traductions en cours", "Libération de la mémoire du modèle"],
2061
+ de: ["Modellspeicher freigeben", "Nach Leerlauf freigeben", "Automatische Freigabe deaktivieren", "Gilt nach dem Speichern für das geladene Modell. Jede Übersetzung startet die Wartezeit neu; andere Apps können sie verlängern. Nur das gewählte Modell wird entladen und bei der nächsten Übersetzung geladen.", "Modell geladen", "Modell entladen", "Ollama läuft nicht oder ist nicht erreichbar", "Warten auf laufende Übersetzungen", "Modellspeicher wird freigegeben"],
2062
+ ru: ["Освободить память модели", "Освобождать после простоя", "Отключить автоосвобождение", "Применяется к загруженной модели после сохранения. Каждый перевод перезапускает отсчёт; другие приложения тоже могут его продлить. Выгружается только выбранная модель, при следующем переводе она загрузится снова.", "Модель загружена", "Модель выгружена", "Ollama не запущен или недоступен", "Ожидание завершения текущих переводов", "Освобождение памяти модели"],
2063
2063
  };
2064
2064
  function memoryLabel(key, lang) { return (MEMORY_LABELS[lang] || MEMORY_LABELS.en)[MEMORY_KEYS.indexOf(key)]; }
2065
2065
  function localLabel(phase, lang) {
@@ -2769,7 +2769,10 @@ window.__ModuleLoader__.load({
2769
2769
  unusedArea,
2770
2770
  localKey ? createElement("div", { className: "xl-local-memory", style: { marginTop: "10px" } },
2771
2771
  createElement("div", { className: "xl-note", role: "status" }, memory ? memoryLabel(memory.unavailable ? "unavailable" : memory.loaded ? "loaded" : "unloaded", s.lang) +
2772
- (memory.loaded && memory.sizeBytes ? " · " + (memory.sizeBytes / 1073741824).toFixed(1) + " GiB" : "") : ""),
2772
+ (memory.loaded && memory.sizeBytes ? " · " + (memory.sizeBytes / 1073741824).toFixed(1) + " GiB" : "") +
2773
+ (memory.loaded && memory.active ? " · " + memoryLabel("waiting_idle", s.lang) :
2774
+ memory.loaded && cfg.localModel && cfg.localModel.idleMinutes && Number.isFinite(Date.parse(memory.expiresAt))
2775
+ ? " · " + memoryLabel("idle", s.lang) + " " + Math.max(0, Math.ceil((Date.parse(memory.expiresAt) - Date.now()) / 60000)) + " min" : "") : ""),
2773
2776
  createElement("div", { style: { display: "flex", gap: "8px", alignItems: "center", flexWrap: "wrap", marginTop: "4px" } },
2774
2777
  createElement("button", { type: "button", className: "xl-btn", onClick: releaseLocal,
2775
2778
  disabled: !!(localJob && localJob.running && /^release-/.test(localJob.id)) || !!(memory && !memory.loaded && !memory.active) }, memoryLabel("release", s.lang)),
package/lib/index.js CHANGED
@@ -214,11 +214,17 @@ const localPreparation = createLocalPreparation({
214
214
  const localModels = createLocalModelLifecycle({ json: localJson, preparation: localPreparation })
215
215
 
216
216
  async function viaLocalOllama(text, to, provider, policy) {
217
- const response = await localJson(ollamaOrigin('openai', provider) + '/api/chat', {
217
+ let response
218
+ try { response = await localJson(ollamaOrigin('openai', provider) + '/api/chat', {
218
219
  method: 'POST', headers: { 'Content-Type': 'application/json' },
219
220
  body: JSON.stringify({ model: provider.model, stream: false, keep_alive: modelKeepAlive(policy),
220
221
  messages: [{ role: 'system', content: systemForTarget(to) }, { role: 'user', content: translationUserText(text) }] }),
221
- }, 15000)
222
+ }, 120000) } catch (error) {
223
+ if (error?.name === 'TimeoutError' || error?.name === 'AbortError') {
224
+ throw new Error('Ollama translation timed out after 120 seconds; the local model may be busy or too slow', { cause: error })
225
+ }
226
+ throw error
227
+ }
222
228
  const translated = response.message?.content
223
229
  if (typeof translated !== 'string' || !translated.trim()) throw new Error('Ollama returned an empty translation')
224
230
  return translated
@@ -1448,6 +1454,7 @@ export function apply(ctx) {
1448
1454
  }
1449
1455
  const live = await loadConfig()
1450
1456
  const previousLocal = live.providers.openai ? { ...live.providers.openai } : null
1457
+ const previousPolicy = live.localModel ? { ...live.localModel } : undefined
1451
1458
  const norm = normalizeConfigPatch(patch, live)
1452
1459
  if (norm._fullProviders) {
1453
1460
  live.providers = applyFullProviders(live, norm._fullProviders)
@@ -1459,7 +1466,7 @@ export function apply(ctx) {
1459
1466
  if (merged.fallback && Array.isArray(merged.fallback.chain)) merged.fallback.chain = merged.fallback.chain.filter(function (id) { return merged.providers[id] })
1460
1467
  clearNullFields(merged)
1461
1468
  await saveConfig(merged)
1462
- localModels.configChanged(previousLocal, merged.providers.openai)
1469
+ localModels.configChanged(previousLocal, merged.providers.openai, merged.localModel, previousPolicy)
1463
1470
  // Which provider a text goes through is part of the answer, so a
1464
1471
  // config change invalidates every cached translation: otherwise
1465
1472
  // reordering the chain or switching models keeps serving the old
@@ -1,5 +1,5 @@
1
1
  // Owns this plugin's uses of the selected Ollama model. Ollama owns the idle
2
- // countdown; a release waits for this plugin's active translations to finish.
2
+ // countdown; residency updates wait for this plugin's active translations.
3
3
  import { ollamaOrigin } from './ollama.js'
4
4
 
5
5
  export function modelKeepAlive(policy) {
@@ -51,38 +51,45 @@ export function createLocalModelLifecycle(runtime) {
51
51
  catch (error) { done(); throw error }
52
52
  return done
53
53
  }
54
- function release(provider) {
54
+ function residency(provider, keepAlive) {
55
55
  const model = entry(provider)
56
- if (model.release) return snapshot(model.job.id)
57
- const job = { id: 'release-' + (++sequence), origin: model.origin, model: model.model,
58
- phase: model.active ? 'waiting_idle' : 'unloading_model', running: true, percent: null, error: null, updatedAt: Date.now() }
56
+ if (model.release && model.job.keepAlive === keepAlive) return snapshot(model.job.id)
57
+ const previous = model.release
58
+ const unloading = keepAlive === 0
59
+ const job = { id: (unloading ? 'release-' : 'policy-') + (++sequence), origin: model.origin, model: model.model, keepAlive,
60
+ phase: model.active ? 'waiting_idle' : unloading ? 'unloading_model' : 'checking',
61
+ running: true, percent: null, error: null, updatedAt: Date.now() }
59
62
  const progress = patch => Object.assign(job, patch, { updatedAt: Date.now() })
60
63
  latest = job
61
64
  model.job = job
62
65
  jobs.set(job.id, job)
63
66
  model.release = job.promise = Promise.resolve().then(async () => {
64
67
  try {
68
+ if (previous) await previous
65
69
  if (model.active) await new Promise(resolve => { model.drained = resolve })
66
70
  await runtime.preparation.whenIdle(provider)
67
- progress({ phase: 'unloading_model' })
71
+ progress({ phase: unloading ? 'unloading_model' : 'checking' })
68
72
  const current = await status(provider)
69
73
  if (current.loaded) {
70
74
  await runtime.json(model.origin + '/api/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' },
71
- body: JSON.stringify({ model: model.model, prompt: '', stream: false, keep_alive: 0 }) }, 120000)
72
- if ((await status(provider)).loaded) throw new Error('Ollama still reports this model as loaded')
75
+ body: JSON.stringify({ model: model.model, prompt: '', stream: false, keep_alive: keepAlive }) }, 120000)
76
+ if (unloading && (await status(provider)).loaded) throw new Error('Ollama still reports this model as loaded')
73
77
  }
74
- progress({ phase: 'unloaded', running: false, percent: 100 })
78
+ progress({ phase: unloading || !current.loaded ? 'unloaded' : 'ready', running: false, percent: 100 })
75
79
  } catch (error) {
76
80
  progress({ phase: 'error', running: false, error: error instanceof Error ? error.message : String(error) })
77
- } finally { model.release = null }
81
+ } finally { if (model.release === job.promise) model.release = null }
78
82
  })
79
83
  if (jobs.size > 30) for (const [id, old] of jobs) {
80
84
  if (!old.running && old !== latest) { jobs.delete(id); break }
81
85
  }
82
86
  return snapshot(job.id)
83
87
  }
84
- function configChanged(before, after) {
88
+ const release = provider => residency(provider, 0)
89
+ function configChanged(before, after, policy, previousPolicy) {
85
90
  if (before?.enabled && !after?.enabled && ollamaOrigin('openai', before) && typeof before.model === 'string' && before.model.trim()) return release(before)
91
+ if (after?.enabled && policy && ollamaOrigin('openai', after) && after.model?.trim() &&
92
+ modelKeepAlive(policy) !== modelKeepAlive(previousPolicy)) return residency(after, modelKeepAlive(policy))
86
93
  return null
87
94
  }
88
95
  return { acquire, release, status, snapshot, configChanged, isReleasing: provider => !!entry(provider).release }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-think-translate",
3
3
  "description": "Display-layer translation for the DSH web app: thinking chain, task cards, and optional answer text, in 9 target languages (local Ollama / any OpenAI-compatible or Anthropic endpoint / Google / Bing, fail-open)",
4
- "version": "1.2.16",
4
+ "version": "1.2.17",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -78,4 +78,4 @@
78
78
  "dependencies": {
79
79
  "js-yaml": "4.3.2"
80
80
  }
81
- }
81
+ }