dsh-eslat 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,31 +1,30 @@
1
1
  # dsh-eslat · EsLat
2
2
 
3
- > **English summary** — **EsLat**, a [DeepSeek Harness](https://github.com/deepseek-ai/DeepSeek-Harness)
4
- > language bundle that shows **Spanish labels for tool calls and status summaries** in the web GUI
5
- > (`Read`, `Running`, `Preparing tool call`, `Reading files`, `Ran commands`, …) while everything else
6
- > keeps its English fallback. 435 labels across four client namespaces; it selects Spanish once and
7
- > never overrides a language the user chose afterwards. Install with
8
- > `dsh plugin add dsh-eslat`, or from the **Plugins** page in the sidebar. Revert with
9
- > Settings → General → *Idioma* → English. Full documentation below is in Spanish.
10
-
11
- Etiquetas en español para las **llamadas a herramientas** y los **resúmenes de estado** de la
12
- interfaz web de DSH. Es un plugin local: un paquete de idioma que registra el idioma `es` y sus
13
- diccionarios en los namespaces que DSH usa para esas dos cosas, y deja todo lo demás en su texto
14
- original en inglés.
3
+ > **English summary** — **EsLat** is a [DeepSeek Harness](https://github.com/deepseek-ai/DeepSeek-Harness)
4
+ > language bundle that translates the **whole web GUI** into neutral **Latin American Spanish**:
5
+ > 1,615 labels across all 36 client namespaces shipped by DSH 0.2.0-rc.2 — conversation, sidebar,
6
+ > settings, trajectory, tool calls, status summaries, dialogs, errors and empty states. Nothing is
7
+ > left falling back to English. Install with `dsh plugin add dsh-eslat`, or from the **Plugins** page
8
+ > in the sidebar. Revert to English with Settings → *Idioma* → English. Full documentation below is
9
+ > in Spanish.
10
+
11
+ Traducción completa al **español neutro de Latinoamérica** de la interfaz web de DSH. Es un paquete
12
+ de idioma: registra el idioma `es` y un diccionario para **cada** namespace que el cliente de DSH
13
+ publica, de modo que la interfaz entera —no solo las herramientas— aparece en español.
15
14
 
16
15
  ```
17
- Llamada a herramienta → Leer / Escribir / Editar / Buscar en el contenido / Buscar archivos
18
- Bash / PowerShell / Obtener página web / Crear subagente …
19
- Estado de la llamada → En ejecución / Preparando la llamada / Fallida / Detenida
20
- Resumen de estado en curso → Leyendo archivos / Ejecutando comandos / Coordinando subagentes …
21
- Resumen del turno terminado → Completado en 12 s · Se leyeron archivos y se ejecutaron comandos
22
- Panel Inspeccionar → Estado / Tipo / Código de salida / Resultado / Sin resultados …
16
+ Conversación → Escribe un mensaje o una tarea, / para comandos, @ para archivos o sesiones
17
+ Barra lateral → Espacios de trabajo · Sesiones · Archivar · Fijar · Cambiar nombre
18
+ Ajustes → Configuración · Apariencia · Permisos · Tamaño de letra · Atajos
19
+ Trayectoria → Turnos · Llamadas · Solicitudes · Mediciones · Uso de tokens
20
+ Herramientas → Leer / Escribir / Editar / Buscar en el contenido / PowerShell / Crear subagente
21
+ Estados → En ejecución / Preparando la llamada / Fallida / Detenida
22
+ Resúmenes → Leyendo archivos · Completado en 12 s · Se leyeron archivos y se ejecutaron comandos
23
23
  ```
24
24
 
25
25
  ## Instalación
26
26
 
27
- Es un **bundle** de DSH (`dsh.bundle.patch`), así que se instala como cualquier otro plugin. Tres
28
- formas, de la más cómoda a la más manual:
27
+ Es un **bundle** de DSH (`dsh.bundle.patch`), así que se instala como cualquier otro plugin.
29
28
 
30
29
  ### Desde npm
31
30
 
@@ -38,10 +37,10 @@ o en la interfaz web: barra lateral → **Plugins** → **Add plugin** → escri
38
37
 
39
38
  ### Desde un tarball
40
39
 
41
- Sin cuenta de npm y sin permisos de compilación: el tarball ya trae la mitad Cliente construida.
40
+ Sin cuenta de npm y sin permisos de compilación: el tarball trae la mitad Cliente ya construida.
42
41
 
43
42
  ```
44
- dsh plugin add ./dsh-eslat-1.0.0.tgz
43
+ dsh plugin add ./dsh-eslat-2.0.0.tgz
45
44
  ```
46
45
 
47
46
  ### Desde un repositorio Git
@@ -50,60 +49,70 @@ dsh plugin add ./dsh-eslat-1.0.0.tgz
50
49
  dsh plugin add github:Amador-Aguilar/dsh-eslat
51
50
  ```
52
51
 
53
- Este paquete **no necesita `prepare` ni autorizar scripts de compilación** en la instalación: el
54
- bundle del navegador (`lib/client.js`) se publica ya construido, no se genera al instalar.
52
+ Este paquete **no necesita `prepare` ni autorizar scripts de compilación**: el bundle del navegador
53
+ (`lib/client.js`) se publica construido, no se genera al instalar.
55
54
 
56
55
  ### En este equipo (desarrollo)
57
56
 
58
- En el perfil `desktop` está instalado como dependencia local enlazada:
59
-
60
- ```jsonc
61
- // C:\Users\HP ZBook\.dsh\profiles\desktop\package.json
62
- "dependencies": { "dsh-eslat": "link:C:/Users/HP ZBook/Documents/deepseek-harness/default-workspace/dsh-eslat" },
63
- "dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-eslat"] } }
64
- ```
65
-
66
- Como es un enlace, editar `src/*.es.json`, ejecutar `node tools/build.mjs` y recargar la página
67
- aplica los cambios sin reinstalar.
68
-
69
- Al desactivarlo, el idioma `es` desaparece del selector y la interfaz vuelve al idioma disponible (no
70
- borra la preferencia guardada, simplemente deja de estar disponible).
57
+ En el perfil `desktop` está instalado desde el registro (`"dsh-eslat": "^2.0.0"`). Para probar
58
+ cambios locales sin publicar, instálalo desde la ruta del proyecto con el gestor de plugins: queda
59
+ como `link:` y los cambios de `src/` + `node tools/build.mjs` se aplican al recargar la página.
71
60
 
72
61
  ## Activación
73
62
 
74
- Al montarse, el plugin hace dos cosas: registra el idioma y selecciona **Español** una sola vez,
63
+ Al montarse, el plugin registra el idioma y sus diccionarios, y selecciona **Español** una sola vez,
75
64
  sustituyendo únicamente el idioma por defecto (`en`). Después:
76
65
 
77
66
  | Situación | Qué ocurre |
78
67
  |---|---|
79
- | La interfaz estaba en inglés (por defecto) | Pasa a Español; las etiquetas de herramientas y los resúmenes de estado salen en español |
80
- | Ya estaba en chino o en otro idioma elegido | No se toca nada: solo sustituye el idioma por defecto |
81
- | El usuario cambia a otro idioma en Ajustes → Idioma | Se respeta para siempre; el plugin no vuelve a forzar el español |
68
+ | La interfaz estaba en inglés (por defecto) | Pasa a Español; toda la interfaz cambia |
69
+ | Ya estaba en chino u otro idioma elegido | No se toca nada: solo sustituye el idioma por defecto |
70
+ | El usuario cambia a otro idioma en Configuración → Idioma | Se respeta para siempre; el plugin no vuelve a forzar el español |
82
71
  | Un shell nativo vuelve a anunciar su idioma por defecto | El plugin recupera el español, porque la elección no fue del usuario |
83
72
 
84
- La memoria de esa decisión vive en `localStorage` del navegador
85
- (`dsh-eslat:activation`). Si el almacenamiento no está disponible, el plugin se limita a
86
- seleccionar español en cada carga cuando la interfaz está en inglés.
73
+ La memoria de esa decisión vive en `localStorage` del navegador (`dsh-eslat:activation`). Si el
74
+ almacenamiento no está disponible, el plugin selecciona español en cada carga cuando la interfaz está
75
+ en inglés.
87
76
 
88
- **Para volver atrás:** Ajustes → General → *Idioma* → English. Las etiquetas vuelven al inglés y el
89
- plugin no las cambiará de nuevo. Para quitarlo del todo, desactívalo o desinstálalo desde la página
77
+ **Para volver atrás:** Configuración → General → *Idioma* → English. Para desinstalarlo, página
90
78
  **Plugins**.
91
79
 
92
- ## Alcance
80
+ ## Cobertura
93
81
 
94
- Traduce 435 etiquetas en cuatro namespaces del cliente. La cobertura de las claves que pertenecen a
95
- llamadas a herramientas y resúmenes de estado es del 100 %; el resto de la interfaz no se toca.
82
+ **1.615 de 1.615 claves (100 %) en 36 de 36 namespaces.** La verificación por clave lo garantiza y
83
+ falla si alguna falta.
96
84
 
97
- | Namespace | Claves traducidas | Qué cubre |
98
- |---|---|---|
99
- | `conversation` | 284 de 367 | Títulos de cada herramienta (`tool.title.*`), estado de la fila (`row.*`, `bash.*`), tarjetas de búsqueda y lectura (`search.*`, `read.*`, `diff.*`), web (`web.*`), terminal (`terminal.*`), preguntas al usuario (`ask.*`), tareas (`todo.*`) y etiquetas del panel Inspeccionar (`detail.*`) |
100
- | `chat` | 109 de 186 | Resúmenes de estado en curso y terminados (`message.stepProcess.*`, `message.turnProcess.*`), disparadores del turno (`message.trigger.*`), reintentos, errores, uso del turno, `row.*`, `command.*`, duraciones y formato de fecha |
101
- | `common` | 41 de 41 | Vocabulario compartido de las tarjetas: Copiar, Copiado, Contraer, Expandir, Bloque de código… |
102
- | `settings.locale` | 1 de 1 | El título de la fila de idioma: *Idioma* |
85
+ | Grupo | Namespaces | Claves |
86
+ |---|---|---:|
87
+ | Conversación y chat | `conversation` 367 · `chat` 186 | 553 |
88
+ | Trayectoria y entregables | `trajectory` 192 · `deliverables` 60 | 252 |
89
+ | Navegación y paneles | `workspace` 112 · `sidebarRight` 34 · `sidebarBrowser` 19 · `sidebarFiles` 11 · `sidebarDocumentPreview` 11 · `sidebar` 5 · `sidebarTerminal` 1 | 193 |
90
+ | Ajustes y preferencias | `settings` 34 · `shortcuts` 28 · `permission.access` 17 · `settings.permission` 12 · `settings.theme` 9 | 100 |
91
+ | Tareas y automatización | `schedule.manager` 133 · `job` 39 · `workflowRun` 18 · `schedule.catalog` 16 | 206 |
92
+ | Herramientas y agentes | `cordis` 51 · `subagent` 39 · `model` 23 · `slash.menu` 9 · `skill` 8 | 130 |
93
+ | Comandos y diálogos | `question` 31 · `command` 28 · `feedback` 20 · `plan` 17 · `goal` 12 · `approval` 1 | 109 |
94
+ | Base compartida | `common` 41 · `open-in-app` 15 · `reference` 11 · `documentMarkdown` 4 · `settings.locale` 1 | 72 |
103
95
 
104
- Las claves que no se traducen caen automáticamente al inglés, porque el idioma `es` declara `en`
105
- como respaldo. Ese es el motivo de que la interfaz quede mixta: español en las herramientas y los
106
- estados, inglés en el resto.
96
+ ## Dialecto
97
+
98
+ Español neutro de Latinoamérica, con estas decisiones aplicadas en todo el paquete:
99
+
100
+ | Se usa | En lugar de |
101
+ |---|---|
102
+ | Configuración | Ajustes |
103
+ | presiona / haz clic | pulsa / pincha |
104
+ | agregar | añadir |
105
+ | computadora, celular | ordenador, móvil |
106
+ | archivo | fichero |
107
+ | costo | coste |
108
+ | `dd/mm/aaaa`, millar con punto (`1.615`) | formato inglés |
109
+
110
+ Términos que se mantienen: `Bash`, `PowerShell`, `JSON`, `ZIP`, `TTFT`, `tok/s`, `Markdown`,
111
+ `Cordis`, `sandbox`, `preset` y los nombres de modelos.
112
+
113
+ `test/verify.mjs` incluye un **guardián de dialecto**: falla si reaparece un lexema peninsular
114
+ (`ordenador`, `fichero`, `puls…`, `añad…`, `vosotros`, `móvil`, `coger`, `pinch…`, `zumo`, `patata`,
115
+ `coche`).
107
116
 
108
117
  ## Identidad del plugin
109
118
 
@@ -111,156 +120,84 @@ estados, inglés en el resto.
111
120
  |---|---|---|
112
121
  | Nombre visible | **EsLat** | `locale/{en,es}.json` → `meta.title` |
113
122
  | Nombre técnico (npm y **id del módulo del navegador**) | `dsh-eslat` | `package.json` → `name` |
114
- | Icono | monograma «ñ»: tilde cian sobre trazo azul degradado, 36×36 | `icon.svg` |
123
+ | Icono | «Es» sobre «Lat»: degradado azul + cian, 36×36 | `icon.svg` |
115
124
  | Autor | Amador Aguilar (`@amador_aguilar` en npm, `Amador-Aguilar` en GitHub) | `package.json` → `author` |
116
125
  | Repositorio | [github.com/Amador-Aguilar/dsh-eslat](https://github.com/Amador-Aguilar/dsh-eslat) | `package.json` → `repository` |
117
126
 
118
- La tarjeta de la página **Plugins** muestra el icono, el título visible y la descripción, y debajo el
119
- nombre del paquete. La autoría formal no depende de la tarjeta: la registra npm al publicar, y se
120
- consulta con `npm owner ls dsh-eslat`.
121
-
122
- ### Si prefieres un nombre con ámbito
123
-
124
- `@amador_aguilar/dsh-eslat` es válido en npm (el ámbito es tu usuario, confirmado) y pone tu nombre en
125
- el propio nombre del paquete. Cuesta tres cambios y una reconstrucción, y la verificación falla si te
126
- falta uno:
127
-
128
- ```powershell
129
- # 1. package.json → "name": "@amador_aguilar/dsh-eslat"
130
- # 2. cordis.patch.yml → name: '@amador_aguilar/dsh-eslat'
131
- node tools/build.mjs # 3. regenera el id del módulo
132
- npm run verify
133
- ```
134
-
135
- El paquete sin ámbito es más fácil de teclear y de encontrar por búsqueda; el ámbito pone tu usuario
136
- a la vista. Ambas opciones son válidas: npm registra al editor en cualquiera de las dos.
137
-
138
- ### Campos del repositorio (ya configurados)
139
-
140
- `package.json` ya enlaza el código, así que la ficha de npm mostrará los botones de repositorio e
141
- incidencias:
142
-
143
- ```jsonc
144
- "repository": { "type": "git", "url": "git+https://github.com/Amador-Aguilar/dsh-eslat.git" },
145
- "homepage": "https://github.com/Amador-Aguilar/dsh-eslat#readme",
146
- "bugs": { "url": "https://github.com/Amador-Aguilar/dsh-eslat/issues" }
147
- ```
148
-
149
- ## Publicar
150
-
151
- Requisitos de DSH para que un paquete sea instalable y aparezca como tarjeta en **Plugins**
152
- (según la [guía oficial de empaquetado](https://github.com/deepseek-ai/DeepSeek-Harness/blob/master/docs/user/develop/basic/publish.zh.md)
153
- y el [cookbook de paquetes](https://deepseek-harness.github.io/deepseek-harness/en/reference/cookbook/adding-a-package)):
154
-
155
- | Requisito | Estado |
156
- |---|---|
157
- | `dsh.bundle.patch` con un archivo existente | `./cordis.patch.yml` |
158
- | La fila del patch usa el **nombre del paquete** (no una ruta) | `dsh-eslat` |
159
- | `name` + `version` no vacíos (identidad en el inventario) | `dsh-eslat@1.0.0` |
160
- | Mitad Cliente **ya construida**: nadie ejecuta tu build al instalar | `lib/client.js` versionado |
161
- | `dsh.client.platform: 'web'` y `exports["./client"]` | presentes |
162
- | `files` incluye todo lo que hace falta en ejecución | bundle, map, patch, `locale/*.json` |
163
- | `engines.dsh` declarado | `>=0.2.0-rc.2` (solo mínimo; sin techo) |
164
-
165
- `test/verify.mjs` comprueba todas esas condiciones, incluido que `package.json`, la fila del patch y
166
- el `id` del bundle se llamen igual, y que `files` no deje fuera el artefacto. `prepublishOnly`
167
- encadena build + verificación + pruebas, así que un `publish` no puede salir con el bundle obsoleto.
168
-
169
- ### Pasos
170
-
171
- ```powershell
172
- # 1. Comprobar que todo sigue en verde y que el bundle está al día
173
- npm run verify
174
-
175
- # 2. Revisar el contenido exacto del paquete (9 archivos, ~19 kB)
176
- npm pack --dry-run
177
-
178
- # 3. Publicar en npm (la primera vez: npm adduser)
179
- npm publish
180
- ```
181
-
182
- Si el `dsh-eslat` ya estuviera ocupado en el registro, publica con tu ámbito:
183
-
184
- ```powershell
185
- # cambiar el nombre en package.json, cordis.patch.yml y reconstruir:
186
- # "name": "@tu-usuario/dsh-eslat"
187
- node tools/build.mjs
188
- npm publish --access public
189
- ```
190
-
191
- El `id` del módulo del navegador sale de `package.json`, así que reconstruir es obligatorio: la
192
- verificación falla si el bundle, el patch y el manifiesto discrepan.
193
-
194
- ### Notas de compatibilidad
195
-
196
- - **Sin `peerDependencies` sobre `@deepseek-ai/dsh*`** a propósito: DSH rechaza instalar y arrancar
197
- un bundle cuyos peers (o su `engines.dsh`) no satisfagan el runtime. Este plugin no importa nada
198
- de DSH —solo usa servicios ambientales del cliente—, así que no declara ninguno y no queda atado a
199
- una versión concreta. `engines.dsh` solo pone el mínimo.
200
- - **`engines.dsh` sin techo superior**: `>=0.2.0-rc.2` documenta el mínimo real (la versión cuyos
201
- diccionarios se verifican) sin bloquear versiones futuras.
202
- - **Sin scripts de instalación**: no hay `prepare`, `install` ni `postinstall`, así que instalar
203
- desde Git o tarball no pide autorizar la ejecución de código en la máquina del usuario.
204
- - **Sin actualización automática**: DSH no actualiza plugins instalados; una versión nueva se
205
- instala desinstalando la anterior.
206
- - **Descubrimiento**: en `0.2.0-rc.2` no hay catálogo de terceros ni formulario de envío. El grupo
207
- **Official** de la página Plugins es lo que la instalación de DSH trae consigo, no un canal de
208
- publicación. La distribución es npm (o Git/tarball), y el descubrimiento pasa por las palabras
209
- clave del `package.json`, el repositorio y las listas de la comunidad.
127
+ La autoría formal la registra npm al publicar (`npm owner ls dsh-eslat`); la tarjeta de Plugins solo
128
+ muestra icono, título y descripción.
210
129
 
211
130
  ## Estructura
212
131
 
213
132
  ```
214
133
  package.json manifiesto: dsh.bundle.patch + dsh.client (platform web)
215
- cordis.patch.yml capa de parche del bundle: inserta la fila locale-es-labels
134
+ cordis.patch.yml capa de parche del bundle: inserta la fila eslat
216
135
  lib/index.js mitad Host: inerte, solo mantiene el paquete en el árbol del Loader
217
136
  lib/client.js mitad Cliente construida (generada) — todo el comportamiento vive aquí
218
137
  lib/client.js.map source map de identidad del bundle
219
138
  locale/{en,es}.json título y descripción del plugin en la página Plugins
220
- LICENSE MIT
221
- src/*.es.json diccionarios españoles editables (la fuente de verdad)
139
+ icon.svg icono de la tarjeta (36×36, convención de DSH)
140
+ src/<namespace>.es.json un diccionario por namespace; añadir cobertura es añadir un archivo
222
141
  src/language.json definición del idioma: id, etiqueta y respaldo
223
- tools/build.mjs construye lib/client.js a partir de src/
224
- tools/extract-shipped-keys.mjs regenera la instantánea de claves inglesas de DSH
225
- test/verify.mjs claves, marcadores, frescura del bundle y requisitos de publicación
142
+ tools/build.mjs construye lib/client.js y su map a partir de src/
143
+ tools/extract-shipped-keys.mjs descubre los namespaces de DSH y regenera la instantánea de claves
144
+ test/verify.mjs claves, marcadores, dialecto, frescura del bundle y requisitos de publicación
226
145
  test/smoke.mjs ejecuta la mitad Cliente contra dobles de prueba
146
+ test/shipped-en.json instantánea de los diccionarios ingleses de DSH 0.2.0-rc.2
227
147
  ```
228
148
 
229
- Solo se publica la primera mitad: `src/`, `tools/` y `test/` son material del repositorio. La
230
- instantánea `test/shipped-en.json` es lo que permite verificar el paquete sin tener DSH delante.
149
+ Solo se publica la primera mitad: `src/`, `tools/` y `test/` son material del repositorio.
231
150
 
232
151
  ### Por qué la mitad Cliente es un archivo construido
233
152
 
234
153
  DSH sirve cada plugin del navegador como un bundle *lazy-CJS* ya construido: el host lee
235
154
  `exports["./client"]` y el navegador evalúa el archivo, que debe estar en la forma del cargador de
236
155
  módulos (`window.__ModuleLoader__.load({ id, factory })`) y no puede importar nada, porque el
237
- protocolo no admite `require` relativos entre bundles.
156
+ protocolo no admite `require` relativos entre bundles. Por eso los diccionarios viven en `src/` y se
157
+ incorporan al bundle generado.
158
+
159
+ ## Desarrollo
160
+
161
+ ```powershell
162
+ node tools/build.mjs # regenera lib/client.js y su map
163
+ node test/verify.mjs # claves, marcadores, dialecto, frescura, publicación
164
+ node test/verify.mjs --strict # además exige cobertura 100 %
165
+ node test/smoke.mjs # comportamiento de la mitad Cliente
166
+ node tools/extract-shipped-keys.mjs # re-descubre los namespaces de la imagen instalada
167
+ ```
168
+
169
+ `verify` distingue **errores** (clave inexistente, marcador `{…}` que no cuadra, bundle obsoleto,
170
+ lexema peninsular) de **cobertura pendiente**, que informa; `--strict` la exige y es lo que corre
171
+ `prepublishOnly`.
172
+
173
+ `test/shipped-en.json` es una instantánea extraída de DSH `0.2.0-rc.2`. Si una versión futura
174
+ renombra o añade claves, `node tools/extract-shipped-keys.mjs` refresca la instantánea y `verify`
175
+ dice exactamente qué falta.
176
+
177
+ ## Publicar
238
178
 
239
- Por eso los diccionarios viven en `src/*.es.json` y se incorporan al bundle generado. Editar el
240
- JSON y reconstruir es todo el ciclo de trabajo:
179
+ `prepublishOnly` encadena build + `verify --strict` + smoke, así que no puede salir una versión con
180
+ cobertura incompleta.
241
181
 
242
182
  ```powershell
243
- node tools/build.mjs # regenera lib/client.js y su map
244
- node test/verify.mjs # claves, marcadores {…}, frescura del bundle
245
- node test/smoke.mjs # comportamiento de la mitad Cliente
183
+ npm run verify # build + verificación + pruebas
184
+ npm publish # con OTP: npm publish --otp=123456
246
185
  ```
247
186
 
248
- `test/shipped-en.json` es una instantánea de los diccionarios ingleses extraídos de DSH
249
- `0.2.0-rc.2`: si una versión futura renombra o elimina una clave, `verify` falla y lo dice, en lugar
250
- de dejar la etiqueta en inglés en silencio.
187
+ Requisitos que `verify` comprueba: `dsh.bundle.patch` presente, la fila del patch con el nombre del
188
+ paquete, `name`/`version` válidos, mitad Cliente construida y en `files`, `engines.dsh`, licencia y
189
+ `prepublishOnly`.
251
190
 
252
191
  ## Limitaciones
253
192
 
254
- - **Interfaz mixta por diseño** — solo se sustituyen las etiquetas de herramientas y de estado; el
255
- resto sigue en inglés a través del respaldo `en`.
256
193
  - **Claves atadas a una versión** — la verificación está anclada a DSH `0.2.0-rc.2`. Una clave
257
- renombrada aguas arriba revierte esa etiqueta al inglés hasta que se actualice el diccionario.
258
- - **Enumeraciones de tres o más elementos** — DSH une los resúmenes cerrados con `message.stepProcess.comma`
259
- y no ofrece una ranura para la conjunción final, así que una lista de tres sale como
260
- «Se leyeron archivos, se buscó en el código, se ejecutaron comandos» en lugar de usar «y» antes
261
- del último. Con dos elementos sí aparece la «y».
262
- - **Sin reglas de plural propias** — los plurales usan las ranuras `.one`/`.other` que DSH ya
263
- consulta; `es` comparte con `en` la regla de singular y plural.
264
- - **Separador de millares y fechas** — se aplican las convenciones de España (`1.234` y `dd/mm`).
265
- - **Sin configuración** — el plugin no declara esquema de configuración: activarlo o desactivarlo en
266
- la página Plugins es el único mando, y así se evita depender de librerías fuera del paquete.
194
+ renombrada aguas arriba revierte esa etiqueta al inglés hasta que se actualice el diccionario; el
195
+ extractor y el verificador lo detectan.
196
+ - **Los datos no se traducen** — rutas de archivos, descripciones de comandos, resúmenes derivados de
197
+ los argumentos de cada herramienta y la respuesta del modelo siguen en el idioma en que lleguen.
198
+ - **Enumeraciones de tres o más elementos** — DSH une los resúmenes cerrados con un separador fijo,
199
+ sin ranura para la conjunción final, así que una lista de tres sale con comas en lugar de «y».
200
+ - **Sin reglas de plural propias** — se usan las ranuras `.one`/`.other` que DSH consulta; `es`
201
+ comparte con `en` la regla singular/plural.
202
+ - **Sin configuración** — el plugin no declara esquema: activarlo o desactivarlo en la página Plugins
203
+ es el único mando.