ratacode 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CREDITS.md +80 -0
  2. package/LICENSE +21 -0
  3. package/README.md +289 -0
  4. package/apreton/README.md +54 -0
  5. package/apreton/handshake.md +33 -0
  6. package/apreton/headless.md +58 -0
  7. package/apreton/mcp.md +221 -0
  8. package/apreton/navegador.md +58 -0
  9. package/bin/instalacion.js +148 -0
  10. package/bin/ratacode.js +1251 -0
  11. package/fabrica/settings.yaml +247 -0
  12. package/mcp/README.md +253 -0
  13. package/mcp/bin/ratacode-mcp.js +215 -0
  14. package/mcp/lib/actividad.js +49 -0
  15. package/mcp/lib/casa.js +126 -0
  16. package/mcp/lib/claves.js +148 -0
  17. package/mcp/lib/espacios.js +117 -0
  18. package/mcp/lib/http.js +184 -0
  19. package/mcp/lib/lectura.js +210 -0
  20. package/mcp/lib/modelos.js +235 -0
  21. package/mcp/lib/nucleo.js +332 -0
  22. package/mcp/lib/registro.js +21 -0
  23. package/mcp/lib/seguridad.js +283 -0
  24. package/mcp/lib/servidor.js +397 -0
  25. package/mcp/lib/tareas.js +406 -0
  26. package/mcp/package.json +22 -0
  27. package/mcp/tunel.mjs +209 -0
  28. package/modos/arquitecto/agent.cordis.yml +120 -0
  29. package/modos/arquitecto/preset.yml +3 -0
  30. package/modos/capataz/agent.cordis.yml +120 -0
  31. package/modos/capataz/preset.yml +3 -0
  32. package/modos/faro/agent.cordis.yml +120 -0
  33. package/modos/faro/preset.yml +3 -0
  34. package/modos/gepeto/agent.cordis.yml +191 -0
  35. package/modos/gepeto/preset.yml +3 -0
  36. package/modos/hero/agent.cordis.yml +198 -0
  37. package/modos/hero/preset.yml +3 -0
  38. package/modos/modo-rata/agent.cordis.yml +198 -0
  39. package/modos/modo-rata/preset.yml +3 -0
  40. package/modos/nex/agent.cordis.yml +213 -0
  41. package/modos/nex/preset.yml +3 -0
  42. package/modos/nex/skills/cordis-plugin-development/SKILL.md +420 -0
  43. package/modos/nex/skills/editing-cordis-compositions/SKILL.md +165 -0
  44. package/modos/pix/agent.cordis.yml +207 -0
  45. package/modos/pix/preset.yml +3 -0
  46. package/modos/tirita/agent.cordis.yml +130 -0
  47. package/modos/tirita/preset.yml +3 -0
  48. package/package.json +49 -0
  49. package/piel/activos/ratacode-emblema.svg +14 -0
  50. package/piel/activos/ratacode-es.js +1331 -0
  51. package/piel/activos/ratacode-identidad.css +50 -0
  52. package/piel/activos/ratacode-piel.css +217 -0
  53. package/piel/activos/ratacode-piel.js +487 -0
  54. package/piel/activos/ratacode-vida.js +424 -0
  55. package/piel/cordis.patch.yml +6 -0
  56. package/piel/lib/cliente.js +1020 -0
  57. package/piel/lib/index.js +1230 -0
  58. package/piel/package.json +36 -0
@@ -0,0 +1,1331 @@
1
+ /* RATACODE · el español de la casa (R21).
2
+ *
3
+ * Son los diccionarios del motor DSH (40 espacios de nombres, 1236 textos) pasados al español,
4
+ * medidos de los propios bundles instalados (`trabajo\R21\sacar-diccionarios.mjs`).
5
+ * Aquí NO se traduce nada a mano sobre la pantalla: este guion sólo deja los
6
+ * textos en `window.__RATACODE_ES`, y el plugin de cliente de la piel los
7
+ * registra por la vía OFICIAL de idiomas (`ctx.locale.addLanguage` +
8
+ * `ctx.locale.register`). Así el idioma se cambia desde Ajustes › General ›
9
+ * Language, sale «Español» en la lista, y el inglés y el chino siguen ahí.
10
+ *
11
+ * Lo pone el index (junto a `ratacode-piel.js`), antes del módulo de la piel:
12
+ * cuando el idioma se registra, ya está este texto, y no hay parpadeo en inglés.
13
+ */
14
+ window.__RATACODE_ES = {
15
+ "approval": {
16
+ "waiting": "Esperando aprobación",
17
+ "detail.aria": "Detalles de la aprobación",
18
+ "escalation": "La herramienta {toolName} pide ejecución con privilegios",
19
+ "reject": "Rechazar",
20
+ "allowOnce": "Permitir una vez",
21
+ },
22
+ "chat": {
23
+ "view.chat": "Chat",
24
+ "number.groupSeparator": ",",
25
+ "duration.compactSeconds": "{seconds}s",
26
+ "duration.compactMinutes": "{minutes}m{seconds}s",
27
+ "duration.milliseconds": "{milliseconds}ms",
28
+ "stats.counts": "{turns} vueltas {steps} pasos",
29
+ "stats.cacheHit": "Aciertos de caché {percent}%",
30
+ "stats.dialog.title": "Estadísticas de la sesión",
31
+ "stats.dialog.usageTitle": "Uso de tokens",
32
+ "stats.dialog.llmTime": "Tiempo del LLM",
33
+ "stats.dialog.toolTime": "Tiempo de herramientas",
34
+ "stats.dialog.ttft": "Tiempo medio hasta el primer token (TTFT)",
35
+ "stats.dialog.speed": "Tokens por segundo (TPS)",
36
+ "chat.loadingHistory": "Cargando el historial…",
37
+ "chat.loadError": "No se pudo cargar el historial: {message} ({code})",
38
+ "chat.loadOlder": "Cargar anteriores",
39
+ "chat.toBottom": "Volver abajo",
40
+ "chat.deepDiving": "Royendo…",
41
+ "chat.turnNavigation.label": "Navegación por vueltas",
42
+ "chat.turnNavigation.jump": "Ir a la vuelta {turn}",
43
+ "chat.turnNavigation.jumpLoad": "Cargar e ir a la vuelta {turn}",
44
+ "chat.turnNavigation.turn": "Vuelta {turn}",
45
+ "settings.transcript.title": "Visualización de la conversación",
46
+ "settings.transcript.description": "Controla el contenido del proceso en las vueltas ya terminadas",
47
+ "settings.transcript.normal": "Normal",
48
+ "settings.transcript.compact": "Compacto",
49
+ "fileOpen.title": "No se pudo abrir el fichero",
50
+ "fileOpen.unknown": "No se pudo abrir este fichero",
51
+ "message.extraBlock": "Bloque de contenido adicional",
52
+ "message.systemPrompt": "Instrucciones",
53
+ "message.systemPromptUpdate": "Actualización de instrucciones",
54
+ "message.contextInjection": "Soplos del motor",
55
+ "message.contextRecall": "Recuerdo de la sesión",
56
+ "message.referenceSummary": "Sesión referenciada · {labels}",
57
+ "message.referenceSeparator": ", ",
58
+ "message.context.instructions.loaded": "cargadas",
59
+ "message.context.instructions.added": "añadidas",
60
+ "message.context.instructions.updated": "actualizadas",
61
+ "message.context.instructions.removed": "quitadas",
62
+ "message.context.catalog.replaced": "Catálogo de reemplazo",
63
+ "message.context.catalog.more": "… {count} más",
64
+ "message.context.snapshot.supersedes": "Sustituye a las instantáneas anteriores",
65
+ "message.context.relay.from": "Desde la sesión {session}",
66
+ "message.context.recall.counts": "{retained} conservados · {omitted} omitidos",
67
+ "message.context.recall.truncated": "truncado",
68
+ "message.compaction": "Contexto compactado",
69
+ "message.compaction.running": "Compactando el contexto…",
70
+ "message.compaction.completed": "Compactados {items} elementos del historial (~{tokens} tokens)",
71
+ "message.compaction.expand": "Ver el resumen de la compactación",
72
+ "message.compaction.unavailable": "Resumen de compactación no disponible",
73
+ "message.compaction.commandTitle": "compact",
74
+ "message.think": "Rumiar",
75
+ "message.unknownSurface": "Evento de superficie desconocido: {type}",
76
+ "message.unknownBlock": "Bloque de contenido desconocido",
77
+ "message.turnProcess.toolCalls.one": "{count} llamada a herramienta",
78
+ "message.turnProcess.toolCalls.other": "{count} llamadas a herramienta",
79
+ "message.turnProcess.messages.one": "{count} mensaje",
80
+ "message.turnProcess.messages.other": "{count} mensajes",
81
+ "message.turnProcess.subagents.one": "{count} subagente",
82
+ "message.turnProcess.subagents.other": "{count} subagentes",
83
+ "message.turnProcess.thoughtForAWhile": "Rumió un rato",
84
+ "message.turnProcess.separator": " · ",
85
+ "message.stopped": "Detenido",
86
+ "message.branch": "Ramificar en una conversación nueva",
87
+ "message.branchUnavailable": "Sólo disponible en el último mensaje de una vuelta terminada",
88
+ "message.retry.active": "Reintentando la petición al modelo",
89
+ "message.retry.cancelled": "Reintento de la petición al modelo cancelado",
90
+ "message.retry.started": "Petición al modelo reintentada",
91
+ "message.retry.scheduled": "Esperando para reintentar la petición al modelo",
92
+ "message.retry.status": "{label} ({retry}/{maximum}) · {seconds}s",
93
+ "message.retry.delay": "Retardo del reintento: ",
94
+ "message.retry.failure": "Motivo del fallo: ",
95
+ "message.failure.auth": "La clave de API no es válida",
96
+ "message.turnError": "Esta vuelta ha fallado",
97
+ "message.maxTokens": "Se alcanzó el límite de tokens de salida",
98
+ "message.maxTokens.hint": "La respuesta se cortó; lo anterior se conserva en la conversación. Envía \"continue\" para que el modelo continúe.",
99
+ "message.ranFor": "Duró {duration}",
100
+ "message.tokensPerSecond": "{tps} tok/s",
101
+ "message.turnUsage.title": "Uso de la vuelta",
102
+ "message.turnUsage.consumed": "Uso {total}",
103
+ "message.turnUsage.model": "Proveedor / modelo",
104
+ "message.turnUsage.cacheHit": "Aciertos de caché",
105
+ "message.turnUsage.input": "Entrada sin caché",
106
+ "message.turnUsage.cacheRead": "Entrada cacheada",
107
+ "message.turnUsage.cacheWrite": "Escritura en caché",
108
+ "message.turnUsage.output": "Salida",
109
+ "message.turnUsage.reasoning": " ({tokens} de razonamiento)",
110
+ "message.turnUsage.count": "{count} tok",
111
+ "message.turnTime.title": "Tiempo y velocidad de la vuelta",
112
+ "message.turnTime.duration": "Tiempo total de ejecución",
113
+ "message.turnTime.speed": "Tokens por segundo (TPS)",
114
+ "message.turnTime.ttft": "Tiempo hasta el primer token (TTFT)",
115
+ "duration.seconds": "{seconds}s",
116
+ "duration.minutes": "{minutes}m {seconds}s",
117
+ "command.running": "Ejecutando…",
118
+ "command.failed": "El comando ha fallado",
119
+ "command.done": "Completado",
120
+ "command.title": "Comando",
121
+ "row.running": "Ejecutando",
122
+ "row.failed": "Ha fallado",
123
+ "json.truncated": "… truncado, {total} caracteres en total",
124
+ "clock.md": "{m}/{d}",
125
+ "clock.ymd": "{y}-{m}-{d}",
126
+ },
127
+ "command": {
128
+ "description.compact": "Compactar el historial antiguo de la conversación",
129
+ "description.export": "Descargar el registro de esta sesión como archivo ZIP",
130
+ "description.feedback": "registrar comentarios sobre esta sesión",
131
+ "description.goal": "fijar o ver el objetivo de una tarea larga",
132
+ "description.permission": "Cambiar el preset de permisos (modo de espacio aislado + política de aprobación)",
133
+ "description.plan": "Entrar o salir del modo plan",
134
+ "search.placeholder": "Buscar…",
135
+ "search.aria": "Filtrar opciones",
136
+ "status.loading": "Cargando opciones…",
137
+ "status.applying": "Aplicando…",
138
+ "status.empty": "Sin opciones",
139
+ "overlay.aria": "opciones de /{command}",
140
+ "listbox.aria": "coincidencias de /{command}",
141
+ "notice.attachmentsUnsupported": "/{command} no acepta adjuntos; quítalos primero",
142
+ },
143
+ "common": {
144
+ "ok": "OK",
145
+ "cancel": "Cancelar",
146
+ "close": "Cerrar",
147
+ "copy": "Copiar",
148
+ "copied": "Copiado",
149
+ "copy.failed": "No se pudo copiar",
150
+ "copy.value": "Copiar valor",
151
+ "copy.json": "Copiar JSON",
152
+ "copy.path": "Copiar la ruta de la propiedad",
153
+ "copy.prettyJson": "Copiar JSON formateado",
154
+ "copy.compactJson": "Copiar JSON compacto",
155
+ "copy.optionsHint": "{action}; haz clic derecho para ver las opciones de copia",
156
+ "retry": "Reintentar",
157
+ "loading": "Cargando…",
158
+ "load.failed": "No se pudo cargar",
159
+ "submit": "Enviar",
160
+ "submitting": "Enviando…",
161
+ "next": "Siguiente",
162
+ "previous": "Anterior",
163
+ "skip": "Saltar",
164
+ "delete": "Borrar",
165
+ "edit": "Editar",
166
+ "save": "Guardar",
167
+ "search": "Buscar",
168
+ "more": "Más",
169
+ "collapse": "Contraer",
170
+ "expand": "Expandir",
171
+ "back": "Atrás",
172
+ "brand.localBuild": "Compilación local de DSH",
173
+ "unknown": "Desconocido",
174
+ "none": "Ninguno",
175
+ "truncated": "Truncado",
176
+ "json.collapseNode": "Contraer el nodo JSON",
177
+ "json.expandNode": "Expandir el nodo JSON",
178
+ "json.label": "JSON",
179
+ "markdown.footnotes": "Notas al pie",
180
+ "markdown.truncatedCharacters": "… truncado a {total} caracteres",
181
+ "number.thousand": "{value}K",
182
+ "number.million": "{value}M",
183
+ },
184
+ "conversation": {
185
+ "hint.plan": "describe tu tarea para generar un plan",
186
+ "hint.goal": "describe el objetivo para una tarea larga",
187
+ "hint.goal.active": "objetivo activo — editar / pausar / reanudar / limpiar",
188
+ "placeholder.plan": "describe tu tarea para generar un plan",
189
+ "placeholder.default": "Escribe un mensaje o lanza una tarea, / comandos, @ ficheros o sesiones",
190
+ "placeholder.unavailable": "Sesión no disponible",
191
+ "placeholder.parentOffline": "La sesión madre está desconectada; no se puede enviar, pero sí detener la ejecución",
192
+ "placeholder.hero": "Describe lo que quieres construir, / comandos, @ ficheros o sesiones",
193
+ "placeholder.workspace": "Elige un espacio de trabajo para empezar",
194
+ "placeholder.steerQueue": "Cmd/Ctrl+Enter guía todos los mensajes encolados",
195
+ "input.commands": "Comandos",
196
+ "input.stop": "Detener la generación",
197
+ "input.send": "Enviar mensaje",
198
+ "input.send.queue": "Encolar mensaje",
199
+ "input.send.steer": "Guiar mensaje",
200
+ "input.accessMode": "Modo de acceso, actual: {name}",
201
+ "attachment.pending": "Adjuntos pendientes",
202
+ "attachment.scrollLeft": "Desplazar los adjuntos a la izquierda",
203
+ "attachment.scrollRight": "Desplazar los adjuntos a la derecha",
204
+ "attachment.dropTitle": "Arrastra ficheros o imágenes aquí para añadirlos",
205
+ "attachment.dropDesc": "Límite de imágenes: hasta {count} imágenes, {size} cada una",
206
+ "attachment.dropBlocked": "Ahora mismo no se pueden añadir ficheros ni imágenes",
207
+ "image.pending": "Imágenes pendientes",
208
+ "image.openOriginal": "Ver original",
209
+ "image.openOriginalLabel": "{label}, pulsa para ver el original",
210
+ "image.remove": "Quitar la imagen {name}",
211
+ "image.original": "Imagen original",
212
+ "image.label": "Imagen",
213
+ "image.loadFailed": "La imagen no se ha cargado; pulsa para reintentar",
214
+ "image.loading": "Cargando imagen…",
215
+ "image.preview": "Vista previa de la imagen original",
216
+ "image.closePreview": "Cerrar la vista previa de la imagen original",
217
+ "image.unsupportedType": "Sólo se admiten imágenes PNG, JPG, WebP y GIF",
218
+ "image.tooMany": "Un mensaje puede incluir hasta {count} imágenes",
219
+ "image.fileTooLarge": "Cada imagen debe pesar menos de {size}",
220
+ "image.totalTooLarge": "Las imágenes suman más de {size}; quita algunas y vuelve a intentarlo",
221
+ "image.tooManyPixels": "La resolución de la imagen es demasiado alta; comprímela y vuelve a intentarlo",
222
+ "image.dimensionTooLarge": "Los lados de la imagen deben medir como mucho {size}px; redúcela y vuelve a intentarlo",
223
+ "image.modelUnsupported": "El modelo actual no admite imágenes; cambia a uno que sí lo haga",
224
+ "image.sendFailed": "No se han podido enviar las imágenes ({reason}); vuelve a añadirlas e inténtalo de nuevo",
225
+ "file.attach": "Adjuntar",
226
+ "file.pending": "Ficheros pendientes",
227
+ "file.remove": "Quitar el fichero {name}",
228
+ "file.uploading": "Subiendo…",
229
+ "file.uploadFailed": "La subida ha fallado; pulsa para reintentar",
230
+ "file.retry": "Reintentar la subida de {name}",
231
+ "file.stillUploading": "Los ficheros se están subiendo todavía; envía cuando terminen",
232
+ "file.sessionUnavailable": "Sesión no disponible; no se pueden subir ficheros",
233
+ "file.notStaged": "El fichero no ha terminado de subirse; vuelve a añadirlo e inténtalo de nuevo",
234
+ "file.label": "Fichero",
235
+ "context.aria": "{percent} del contexto usado",
236
+ "context.used": "del contexto usado",
237
+ "context.system": "Prompt del sistema",
238
+ "context.tools": "Definiciones de herramientas",
239
+ "context.messages": "Mensajes",
240
+ "settings.enter.title": "Qué hacen Enter y el botón Enviar mientras trabaja",
241
+ "settings.enter.description": "Qué hacen Enter y el botón Enviar mientras el agente está en marcha; Cmd/Ctrl+Enter usa el otro comportamiento",
242
+ "settings.enter.queue": "Encolar",
243
+ "settings.enter.steer": "Guiar",
244
+ "access.preset.readOnly": "Sólo mirar",
245
+ "access.preset.workspaceWrite": "Dentro del taller",
246
+ "access.preset.fullAccess": "A rienda suelta",
247
+ "access.confirm.title": "¿Activar A rienda suelta?",
248
+ "access.confirm.description": "A rienda suelta reduce los pasos de confirmación y deja que el agente haga más acciones por su cuenta, incluidas operaciones delicadas, cambios en ficheros o comandos externos. Úsalo sólo cuando te fíes de la tarea en curso.",
249
+ "access.confirm.acknowledge": "Entiendo los riesgos y quiero continuar",
250
+ "access.confirm.cancel": "Cancelar",
251
+ "access.confirm.enable": "Activar A rienda suelta",
252
+ "hero.headline": "Hacia lo desconocido",
253
+ "hero.preview": "Vista previa",
254
+ "hero.chooseWorkspace": "Elegir espacio de trabajo",
255
+ "session.hierarchy": "Jerarquía de sesiones",
256
+ "todo.title": "Tareas pendientes",
257
+ "todo.progress.done": "{done} completadas",
258
+ "todo.progress.active": "{active} en curso",
259
+ "todo.progress.pending": "{pending} pendientes",
260
+ "todo.rowTitle": "Actualizar la lista de tareas",
261
+ "todo.completed": "{done}/{total} completadas",
262
+ "command.attachmentsUnsupported": "/{command} no acepta adjuntos; quítalos primero",
263
+ "ask.rowTitle": "Hacer una pregunta",
264
+ "ask.waiting": "en espera",
265
+ "ask.cancelled": "cancelada",
266
+ "ask.cancelledDetail": "Este conjunto de preguntas se canceló antes de enviar las respuestas.",
267
+ "ask.interrupted": "interrumpida",
268
+ "ask.interruptedDetail": "Este conjunto de preguntas se interrumpió antes de enviar las respuestas.",
269
+ "ask.answered": "{answered}/{total} respondidas",
270
+ "ask.skipped": "Sin responder",
271
+ "bash.running": "En marcha",
272
+ "bash.failed": "Falló",
273
+ "bash.stopped": "Detenido",
274
+ "row.running": "En marcha",
275
+ "row.failed": "Falló",
276
+ "row.stopped": "Detenido",
277
+ "row.input": "IN",
278
+ "row.output": "OUT",
279
+ "row.inspect": "Inspeccionar",
280
+ "tool.title.search": "Búsqueda",
281
+ "tool.title.read": "Lectura",
282
+ "tool.title.bash": "Bash",
283
+ "tool.title.write": "Escritura",
284
+ "tool.title.edit": "Edición",
285
+ "tool.title.code": "Código",
286
+ "tool.title.generic": "Llamada a herramienta",
287
+ "tool.title.inspect": "Inspeccionar",
288
+ "tool.title.runCordis": "Ejecutar plugin Cordis",
289
+ "tool.title.stopCordis": "Detener plugin Cordis",
290
+ "tool.title.removeCordis": "Quitar plugin Cordis",
291
+ "tool.title.pwsh": "Pwsh",
292
+ "tool.title.readImage": "Leer imagen",
293
+ "tool.title.grep": "Grep",
294
+ "tool.title.glob": "Glob",
295
+ "tool.title.webSearch": "Búsqueda",
296
+ "tool.title.webFetch": "Descarga",
297
+ "diff.files.one": "{count} fichero",
298
+ "diff.files.other": "{count} ficheros",
299
+ "diff.collapseAria": "Contraer el diff",
300
+ "diff.expandAria": "Desplegar {count} líneas de diff más",
301
+ "diff.expandRest": "… {count} líneas más",
302
+ "read.window": "Mostrando {shown} de {total} líneas",
303
+ "read.collapseAria": "Contraer el contenido",
304
+ "read.expandAria": "Desplegar {count} líneas más",
305
+ "read.expandRest": "… {count} líneas más",
306
+ "search.paths": "{shown} rutas",
307
+ "search.paths.truncated": "Mostrando {shown} de {total} rutas",
308
+ "search.matches": "{shown} coincidencias · {files} ficheros",
309
+ "search.matches.truncated": "Mostrando {shown} de {total} coincidencias · {files} ficheros",
310
+ "search.noResults": "Sin resultados",
311
+ "search.collapseAria": "Contraer los resultados",
312
+ "search.expandAria": "Desplegar {count} líneas de resultado más",
313
+ "search.expandRest": "… {count} líneas más",
314
+ "web.noResults": "No se han encontrado resultados",
315
+ "web.sourcesTruncated": "Lista de fuentes recortada",
316
+ "web.http": "HTTP",
317
+ "web.contentTruncated": "Contenido recortado",
318
+ "details.running": "En marcha…",
319
+ "queue.count": "{n} mensajes encolados",
320
+ "queue.sending": "Enviando…",
321
+ "queue.image": "Imagen del mensaje encolado",
322
+ "queue.file": "Fichero encolado {name}",
323
+ "queue.edit": "Editar el mensaje encolado",
324
+ "queue.edit.unsupported": "Contiene contenido que no es texto; editarlo aún no está soportado",
325
+ "queue.save": "Guardar el mensaje encolado",
326
+ "queue.cancelEdit": "Cancelar la edición",
327
+ "queue.remove": "Quitar el mensaje encolado",
328
+ "queue.steer": "Guiar el mensaje encolado",
329
+ "queue.steer.unavailable": "Guiar sólo está disponible mientras el agente está en marcha",
330
+ "queue.editFailed": "La edición ha fallado: puede que este mensaje ya haya empezado a enviarse.",
331
+ "queue.removeFailed": "No se ha podido quitar: puede que este mensaje ya haya empezado a enviarse.",
332
+ "queue.steerFailed": "No se ha podido guiar. Inténtalo de nuevo.",
333
+ "terminal.signal": "señal {signal}",
334
+ "terminal.exitCode": "código de salida {code}",
335
+ "terminal.running": "En marcha",
336
+ "terminal.failed": "Falló",
337
+ "terminal.done": "Terminado",
338
+ "terminal.noOutput": "Sin salida",
339
+ "terminal.collapseAria": "Contraer la salida",
340
+ "terminal.expandAria": "Desplegar las {n} líneas de salida restantes",
341
+ "terminal.expandRest": "… {n} líneas más",
342
+ "terminal.sendInput": "(enviar entrada)",
343
+ "terminal.session": "Terminal {sessionId}",
344
+ },
345
+ "cordis": {
346
+ "row.defineTitle": "Registrar plugin de Cordis",
347
+ "row.runTitle": "Ejecutar plugin de Cordis",
348
+ "row.updateTitle": "Actualizar plugin de Cordis",
349
+ "row.stopTitle": "Parar plugin de Cordis",
350
+ "row.removeTitle": "Quitar plugin de Cordis",
351
+ "purpose.missing": "(sin propósito indicado)",
352
+ "status.idle": "Listo",
353
+ "status.awaitingApproval": "Esperando aprobación",
354
+ "status.failed": "La ejecución falló",
355
+ "status.clientPending": "Cliente listo para activarse",
356
+ "status.running": "En marcha",
357
+ "status.removed": "Quitado",
358
+ "status.superseded": "Hay una ejecución más reciente",
359
+ "run.removed": "Este paquete ya no existe",
360
+ "run.superseded": "Abajo hay una tarjeta de ejecución más reciente",
361
+ "panel.hint": "Los controles de ejecución están en el panel de Cordis, encima de Ajustes",
362
+ "panel.plugins.aria": "Plugins de Cordis",
363
+ "panel.approvals.aria": "Aprobaciones de Cordis",
364
+ "panel.trigger": "Plugin de Cordis",
365
+ "panel.runningCount": "{count} en marcha",
366
+ "panel.title": "Plugins de Cordis",
367
+ "panel.empty": "Todavía no hay plugins definidos",
368
+ "panel.loading": "Leyendo…",
369
+ "panel.readFailed": "No se pudo leer el inventario de plugins: {message}",
370
+ "panel.group.current": "Esta sesión",
371
+ "panel.group.others": "Otras sesiones",
372
+ "panel.version": "Versión",
373
+ "panel.current": "Actual: {packageId}",
374
+ "panel.next": "Siguiente: {packageId}",
375
+ "action.approve": "Permitir",
376
+ "action.approveOnce": "Permitir sólo esta versión",
377
+ "action.approvePlugin": "Permitir futuras versiones de este plugin",
378
+ "action.decline": "Rechazar",
379
+ "action.run": "Ejecutar",
380
+ "action.stop": "Parar",
381
+ "action.remove": "Quitar",
382
+ "action.retry": "Reintentar",
383
+ "action.rollback": "Revertir",
384
+ "action.inspect": "Inspeccionar",
385
+ "render.failedAbdicated": "Falló el dibujado en {slot}; se ha restaurado la interfaz por defecto:",
386
+ "render.failedHeld": "Falló el dibujado en {slot}:",
387
+ "a11y.defining": "Definiendo el plugin",
388
+ "a11y.failed": "Falló la definición",
389
+ "a11y.stopped": "Definición interrumpida",
390
+ "body.source": "Código fuente del plugin",
391
+ "body.hostCode": "Host",
392
+ "body.clientCode": "Cliente",
393
+ "body.output": "Resultado",
394
+ "body.copy": "Copiar",
395
+ "body.copied": "Copiado",
396
+ },
397
+ "deliverables": {
398
+ "presented.nativeUnavailable": "Este fichero no tiene una ruta de Host disponible. Previsualízalo en la barra lateral.",
399
+ "presented.revealError": "No se pudo mostrar en el gestor de ficheros. Inténtalo de nuevo.",
400
+ "presented.directoryError": "No se pudo abrir la carpeta contenedora. Inténtalo de nuevo.",
401
+ "presented.directoryOpening": "Abriendo la carpeta contenedora…",
402
+ "presented.directoryOpened": "Se pidió abrir la carpeta contenedora",
403
+ "presented.revealed": "Se pidió mostrar en el gestor de ficheros",
404
+ "presented.revealing": "Mostrando en el gestor de ficheros…",
405
+ "presented.unavailable": "Este Host no tiene escritorio disponible para abrir ficheros ni carpetas",
406
+ "presented.retry": "Reintentar",
407
+ "presented.hostError": "No se pudo leer la información del escritorio del Host",
408
+ "presented.directory": "Abrir la carpeta contenedora",
409
+ "presented.explorer": "Mostrar en el Explorador de archivos",
410
+ "presented.finder": "Mostrar en el Finder",
411
+ "presented.defaultApp": "Abrir con la aplicación por defecto",
412
+ "presented.more": "Más acciones de fichero para {name}",
413
+ "presented.action": "Abrir",
414
+ "presented.preview": "Previsualizar en la barra lateral",
415
+ "presented.previewButton": "Abrir {name} en la barra lateral",
416
+ "presented.previewCard": "Previsualizar {name} en la barra lateral",
417
+ "presented.all": "Los {count} ficheros",
418
+ "presented.expandAria": "Mostrar los {count} ficheros entregados",
419
+ "presented.collapse": "Contraer",
420
+ "presented.collapseAria": "Contraer los ficheros entregados",
421
+ "presented.opening": "Abriendo…",
422
+ "presented.opened": "Abierto con la aplicación por defecto",
423
+ "presented.error": "No se pudo abrir. Haz clic para reintentar.",
424
+ "presented.file": "Fichero",
425
+ "row.title": "Presentar ficheros",
426
+ "row.running": "Entregando",
427
+ "row.ok": "Entregado",
428
+ "row.error": "Fallo en la entrega",
429
+ "row.stopped": "Interrumpido",
430
+ "row.inspect": "Inspeccionar la llamada",
431
+ "presented.open": "Abrir {name} con la aplicación por defecto",
432
+ "produced.label": "Ficheros modificados",
433
+ "produced.moreOne": "+ 1 fichero",
434
+ "produced.more": "+ {count} ficheros",
435
+ "produced.open": "Abrir {name}",
436
+ },
437
+ "documentHtml": {
438
+ "title": "HTML",
439
+ "frame": "Vista previa del documento HTML",
440
+ "loading": "Preparando la vista previa del HTML…",
441
+ "failed": "No se pudo previsualizar este documento HTML.",
442
+ },
443
+ "documentMarkdown": {
444
+ "viewer.label": "Markdown",
445
+ "code.copy": "Copiar",
446
+ "code.copied": "Copiado",
447
+ "footnotes": "Notas al pie",
448
+ },
449
+ "feedback": {
450
+ "action.like": "Buena respuesta",
451
+ "action.likeActive": "Quitar valoración",
452
+ "action.dislike": "Mala respuesta",
453
+ "action.dislikeActive": "Quitar valoración",
454
+ "dialog.title": "Enviar comentarios",
455
+ "dialog.categories": "Categoría de los comentarios",
456
+ "dialog.detail": "Detalles de los comentarios",
457
+ "dialog.hint": "Añade detalles para ayudarnos a mejorar. Tu envío incluirá el registro de la conversación actual.",
458
+ "category.task-result": "Resultado de la tarea",
459
+ "category.instruction-following": "Comprensión y seguimiento de las instrucciones",
460
+ "category.product-interaction": "Funciones del producto e interacción",
461
+ "category.service-stability": "Estabilidad y velocidad",
462
+ "category.resource-cost": "Uso de recursos y coste",
463
+ "category.security-privacy-permission": "Seguridad, privacidad y permisos",
464
+ "category.other": "Otro",
465
+ "toast.recorded": "Gracias por tus comentarios",
466
+ "error.conflict": "Estos comentarios cambiaron en otro sitio; se muestra el estado más reciente",
467
+ "error.load": "No se pudieron cargar los comentarios",
468
+ "error.generic": "No se pudieron guardar los comentarios",
469
+ "error.noteTooLarge": "La descripción es demasiado larga; acórtala y vuelve a enviarla",
470
+ },
471
+ "goal": {
472
+ "phase.active": "Objetivo en curso",
473
+ "phase.active.disarmed": "Objetivo inactivo",
474
+ "phase.paused": "Objetivo en pausa",
475
+ "phase.blocked": "Objetivo bloqueado",
476
+ "objective.aria": "Campo de objetivo",
477
+ "commandInput.aria": "Entrada de comandos",
478
+ "action.save": "Guardar objetivo",
479
+ "action.cancel": "Cancelar edición",
480
+ "action.pause": "Pausar objetivo",
481
+ "action.resume": "Reanudar objetivo",
482
+ "action.edit": "Editar objetivo",
483
+ "action.clear": "Borrar objetivo",
484
+ },
485
+ "job": {
486
+ "count.live.one": "{count} trabajo en segundo plano en marcha",
487
+ "count.live.other": "{count} trabajos en segundo plano en marcha",
488
+ "count.idle.one": "{count} trabajo en segundo plano",
489
+ "count.idle.other": "{count} trabajos en segundo plano",
490
+ "list.aria": "Trabajos en segundo plano",
491
+ "status.running": "en marcha",
492
+ "status.stopping": "parando",
493
+ "status.completed": "completado",
494
+ "status.killed": "cancelado",
495
+ "status.failed": "fallido",
496
+ "duration.seconds": "{seconds}s",
497
+ "duration.minutes": "{minutes}m {seconds}s",
498
+ "duration.hours": "{hours}h {minutes}m",
499
+ "duration.title.live": "En marcha desde hace {duration}",
500
+ "duration.title.done": "Tardó {duration}",
501
+ },
502
+ "model": {
503
+ "command.description": "Elegir el modelo de esta conversación",
504
+ "option.loadError": "No se pudo cargar el catálogo: {message}",
505
+ "option.deepseekV4Flash.description": "Rápido, eficiente y económico; va bien para tareas concretas, rutinarias o en paralelo.",
506
+ "option.deepseekV4Pro.description": "Más sólido en programación con agente, conocimiento y razonamiento difícil; va bien para tareas complejas o donde la calidad es crítica, con mayor coste.",
507
+ "trigger.fallback": "Elegir modelo",
508
+ "trigger.loading": "Cargando modelos…",
509
+ "trigger.selectAria": "Elegir modelo",
510
+ "trigger.aria": "Elegir modelo, actual {model}",
511
+ "trigger.ariaEffort": "Elegir modelo, actual {model}, esfuerzo de razonamiento {effort}",
512
+ "menu.aria": "Modelo y esfuerzo de razonamiento",
513
+ "menu.model": "Modelo",
514
+ "menu.effort": "Esfuerzo",
515
+ "effort.providerDefault": "Por defecto",
516
+ "status.loading": "Actualizando la lista de modelos…",
517
+ "error.action": "La operación con el modelo falló: {message}",
518
+ "action.reload": "Recargar",
519
+ "warning.groupLoad": "No se pudo cargar {name}: {message}",
520
+ "empty.models": "No hay modelos disponibles.",
521
+ "blocked.composer": "Este modelo no está disponible — elige otro para continuar",
522
+ "empty.efforts": "Este modelo no ofrece niveles de esfuerzo de razonamiento.",
523
+ },
524
+ "open-in-app": {
525
+ "open.title": "Abrir espacio de trabajo en {app}",
526
+ "open.tooltip": "Abrir en local",
527
+ "open.error": "No se pudo abrir",
528
+ "menu.toggle": "Elige en qué aplicación abrir",
529
+ "menu.aria": "Abrir en",
530
+ "app.cursor": "Cursor",
531
+ "app.vscode": "VS Code",
532
+ "app.vscodeinsiders": "VS Code Insiders",
533
+ "app.windsurf": "Windsurf",
534
+ "app.zed": "Zed",
535
+ "app.sublimetext": "Sublime Text",
536
+ "app.xcode": "Xcode",
537
+ "app.androidstudio": "Android Studio",
538
+ "app.intellij": "IntelliJ IDEA",
539
+ "app.pycharm": "PyCharm",
540
+ "app.webstorm": "WebStorm",
541
+ "app.phpstorm": "PhpStorm",
542
+ "app.goland": "GoLand",
543
+ "app.rider": "Rider",
544
+ "app.rustrover": "RustRover",
545
+ "app.fork": "Fork",
546
+ "app.sourcetree": "Sourcetree",
547
+ "app.github": "GitHub Desktop",
548
+ "app.tower": "Tower",
549
+ "app.gitkraken": "GitKraken",
550
+ "app.smartgit": "SmartGit",
551
+ "app.sublimemerge": "Sublime Merge",
552
+ "app.ghostty": "Ghostty",
553
+ "app.warp": "Warp",
554
+ "app.iterm": "iTerm2",
555
+ "app.kitty": "kitty",
556
+ "app.windowsterminal": "Windows Terminal",
557
+ "app.gitbash": "Git Bash",
558
+ "app.gnometerminal": "GNOME Terminal",
559
+ "app.konsole": "Konsole",
560
+ "app.finder": "Finder",
561
+ "app.explorer": "Explorador de ficheros",
562
+ "app.filemanager": "Archivos",
563
+ "app.terminal": "Terminal",
564
+ },
565
+ "plan": {
566
+ "chip.label": "Plan",
567
+ "chip.on.aria": "Modo plan activado, pulsa para desactivarlo",
568
+ "chip.on.title": "Modo plan activado — haz clic para desactivarlo (/plan off)",
569
+ "chip.off.aria": "Modo plan desactivado, pulsa para activarlo",
570
+ "chip.off.title": "Modo plan desactivado — haz clic para activarlo (/plan)",
571
+ "chip.exitFailed": "No se pudo salir del modo plan",
572
+ },
573
+ "question": {
574
+ "error.incomplete": "Completa esta pregunta primero.",
575
+ "error.unanswered": "Elige una opción o escribe una respuesta propia.",
576
+ "nav.prev": "Pregunta anterior",
577
+ "nav.next": "Pregunta siguiente",
578
+ "nav.minimize": "Plegar la tarjeta de la pregunta",
579
+ "nav.maximize": "Desplegar la tarjeta de la pregunta",
580
+ "nav.cancel": "Descartar todas las preguntas",
581
+ "option.recommended": "Recomendada",
582
+ "custom.placeholder": "Escribe tu respuesta",
583
+ "action.skip": "Saltar esta pregunta",
584
+ "action.next": "Siguiente",
585
+ "plan.header": "Revisión del plan",
586
+ "plan.approve": "Aprobar",
587
+ "plan.decline": "Rechazar",
588
+ "plan.discuss": "Hablar de ello",
589
+ },
590
+ "reference": {
591
+ "section.files": "Ficheros y carpetas",
592
+ "section.sessions": "Sesiones",
593
+ "candidate.noCwd": "(sin cwd)",
594
+ "crumb.root": "Espacio de trabajo",
595
+ "time.now": "ahora",
596
+ "time.minutes": "{n}min",
597
+ "time.hours": "{n}h",
598
+ "time.days": "{n}d",
599
+ "time.months": "{n}mes",
600
+ "time.years": "{n}a",
601
+ },
602
+ "schedule.catalog": {
603
+ "trigger.one": "{count} recordatorio",
604
+ "trigger.other": "{count} recordatorios",
605
+ "list.aria": "Recordatorios activos",
606
+ "status.scheduled": "Programado",
607
+ "status.overdue": "Atrasado",
608
+ "frequency.once": "Una vez",
609
+ "frequency.every": "Cada {value} {unit}",
610
+ "unit.day.one": "día",
611
+ "unit.day.other": "días",
612
+ "unit.hour.one": "hora",
613
+ "unit.hour.other": "horas",
614
+ "unit.minute.one": "minuto",
615
+ "unit.minute.other": "minutos",
616
+ "unit.second.one": "segundo",
617
+ "unit.second.other": "segundos",
618
+ "relative.now": "Vence ahora",
619
+ "relative.future": "dentro de {value} {unit}",
620
+ "relative.overdue": "{value} {unit} de retraso",
621
+ },
622
+ "session-log-download": {
623
+ "header.more": "Más acciones",
624
+ "menu.download": "Descargar el registro de la sesión",
625
+ "dialog.preparingTitle": "Exportando la sesión",
626
+ "dialog.preparingDescription": "Preparando un ZIP que contiene esta sesión, sus subsesiones y sus adjuntos.",
627
+ "dialog.successTitle": "Descarga de la sesión iniciada",
628
+ "dialog.successDescription": "El navegador está descargando el ZIP de la sesión.",
629
+ "dialog.errorTitle": "Falló la exportación de la sesión",
630
+ "dialog.close": "Cerrar",
631
+ "dialog.commandFailed": "No se pudo iniciar la exportación de la sesión.",
632
+ },
633
+ "settings": {
634
+ "trigger": "Ajustes",
635
+ "title": "Ajustes",
636
+ "close": "Cerrar",
637
+ "openDocument": "Abrir fichero de configuración",
638
+ "openDocument.error": "No se pudo abrir el fichero de configuración",
639
+ "general.nav": "General",
640
+ "connection.error": "Sin conexión",
641
+ "connection.retry": "Reconectar ahora",
642
+ "connection.connecting": "Reconectando",
643
+ "connection.connected": "Conectado",
644
+ "connection.reconnect": "Sin conexión, reconecta ahora",
645
+ "connection.restart": "Reconectando automáticamente, reconecta ahora",
646
+ },
647
+ "settings.agentPreset": {
648
+ "error": "No se pudieron cargar los presets de agente.",
649
+ "userTrust": "Personalizado",
650
+ "seatHint": "Preset de agente para la sesión que vas a empezar",
651
+ "headerHint": "El preset de agente con el que corre esta sesión, fijado cuando arrancó",
652
+ "nav": "Presets de agente",
653
+ "sectionIntro": "Un preset es la composición de plugins con la que corre el agente de una sesión — sus herramientas, sus instrucciones y sus capacidades. Duplica uno de los que ya existen y hazlo tuyo, o deja que el agente te lo redacte en el modo creador.",
654
+ "builtIn": "De serie",
655
+ "setDefault": "Poner por defecto",
656
+ "view": "Ver",
657
+ "presetStandardName": "Modo estándar",
658
+ "presetStandardDescription": "Agente de programación completo con edición de ficheros, shell, búsqueda de ficheros y en la web, skills, planificación, objetivos, subagentes y flujos de trabajo.",
659
+ "presetPtcName": "Modo PTC",
660
+ "presetPtcDescription": "Agente de programación completo sin la herramienta de flujos de trabajo; el resto de herramientas se exponen a través del SDK del modo PTC para que el modelo pueda combinar operaciones de varios pasos en un solo programa TypeScript.",
661
+ "presetMinimalName": "Modo mínimo",
662
+ "presetMinimalDescription": "Agente de programación de una sola herramienta con un shell persistente.",
663
+ "presetCordisName": "Modo creador",
664
+ "presetCordisDescription": "Pensado para crear presets de agente personalizados: trae todo lo del modo estándar y además inspección en tiempo de ejecución, experimentos con plugins y guía para escribir presets.",
665
+ "duplicate": "Duplicar",
666
+ "duplicateUnavailable": "Esta instalación no tiene ninguna carpeta de presets en la que se pueda escribir",
667
+ "delete": "Borrar",
668
+ "presetId": "Identificador",
669
+ "presetIdPlaceholder": "mi-agente",
670
+ "displayName": "Nombre",
671
+ "displayNamePlaceholder": "Se muestra en el selector; por defecto es el identificador",
672
+ "inUse": "En uso",
673
+ "builtInGroup": "De serie",
674
+ "customGroup": "Personalizado",
675
+ "noDescription": "Sin descripción.",
676
+ "brokenBadge": "No se pudo cargar",
677
+ "brokenNoCopy": "Un preset que no se pudo cargar no se puede duplicar",
678
+ "switchRefused": "No se pudo cambiar a {name}: {reason}",
679
+ "copyOf": "Copiado de",
680
+ "composition": "Composición (agent.cordis.yml)",
681
+ "cancel": "Cancelar",
682
+ "close": "Cerrar",
683
+ "retry": "Reintentar",
684
+ "copyTitle": "Duplicar preset",
685
+ "copyIntro": "El preset entero se copia en esta máquina. El identificador pasa a ser el nombre de su carpeta y no se puede cambiar después; todo lo demás se edita en los ficheros del propio preset.",
686
+ "create": "Crear",
687
+ "creating": "Creando…",
688
+ "creatorDraft": "Redactar un preset personalizado con el modo creador",
689
+ "openLocation": "Abrir carpeta",
690
+ "showLocation": "Mostrar ubicación",
691
+ "revealedPathLabel": "Ficheros del preset:",
692
+ "idRequired": "Ponle un identificador al preset.",
693
+ "idInvalid": "Usa letras minúsculas, dígitos y guiones, empezando por una letra o un dígito.",
694
+ "idTaken": "Ya existe un preset con este identificador.",
695
+ "deleteTitle": "¿Borrar este preset?",
696
+ "deleteDescription": "Se borra la carpeta del preset. Las sesiones que ya están corriendo con él siguen funcionando; las sesiones nuevas no podrán elegirlo.",
697
+ "deleteConfirm": "Borrar",
698
+ "deleting": "Borrando…",
699
+ },
700
+ "settings.locale": {
701
+ "language.title": "Idioma",
702
+ },
703
+ "settings.models": {
704
+ "nav": "Modelos",
705
+ "title": "Modelos",
706
+ "intro": "Introduce tus claves de API para usar modelos de los siguientes proveedores.",
707
+ "edit": "Editar",
708
+ "editProvider": "Editar {provider}",
709
+ "remove": "Borrar",
710
+ "removeProvider": "Borrar {provider}",
711
+ "deleteTitle": "¿Borrar {provider}?",
712
+ "deleteDescription": "Borrar {provider} elimina su configuración. Cualquier credencial que use se gestiona en otro sitio y se conservará.",
713
+ "deleteDescriptionWithCredential": "Borrar {provider} elimina su configuración y su clave de API guardada.",
714
+ "deleteConfirm": "Borrar {provider}",
715
+ "deleting": "Borrando {provider}…",
716
+ "add": "Añadir proveedor",
717
+ "provider": "Proveedor",
718
+ "close": "Cerrar",
719
+ "cancel": "Cancelar",
720
+ "apply": "Aplicar",
721
+ "applying": "Aplicando…",
722
+ "savedProvider": "Guardado {provider}.",
723
+ "credentialConfigured": "Clave de API configurada",
724
+ "credentialMissing": "Falta la clave de API",
725
+ "readOnly": "El documento de ajustes es de sólo lectura en este despliegue.",
726
+ "loadFailed": "No se pudo cargar el directorio de proveedores",
727
+ "conflict": "Alguien ha cambiado estos ajustes mientras esta tarjeta estaba abierta. Ciérrala y vuelve a abrirla para editar los valores actuales.",
728
+ "retry": "Reintentar",
729
+ "keyInput": "Clave de API",
730
+ "keyPlaceholder": "Introduce tu clave de API",
731
+ "keyPlaceholderNative": "Introduce una clave de API, o déjalo en blanco para usar la autenticación del entorno",
732
+ "keyStored": "Configurada — introduce un valor nuevo para reemplazarla",
733
+ "keyEnvLocked": "La aporta el entorno de arranque (sólo lectura)",
734
+ "customized": "Ajustes personalizados",
735
+ "baseUrl": "URL base",
736
+ "baseUrlDefault": "Por defecto del proveedor",
737
+ "models": "Modelos",
738
+ "modelsInherited": "Usando los valores por defecto del adaptador",
739
+ "modelsCustomized": "Catálogo de modelos personalizado",
740
+ "resetModels": "Restaurar valores por defecto",
741
+ "model": "Modelo",
742
+ "modelId": "ID del modelo",
743
+ "modelName": "Nombre visible",
744
+ "modelNamePlaceholder": "Usa el ID del modelo cuando está vacío",
745
+ "contextWindow": "Ventana de contexto",
746
+ "contextWindowPlaceholder": "Usa el valor por defecto del proveedor",
747
+ "maxTokens": "Tokens máximos de salida",
748
+ "maxTokensPlaceholder": "Usa el valor por defecto del proveedor",
749
+ "modelAdvanced": "Capacidades",
750
+ "addModel": "Añadir modelo",
751
+ "removeModel": "Borrar modelo",
752
+ "modelsEmpty": "No se mostrará ningún modelo en el selector. Los ID que no estén en la lista se pueden enviar igualmente de forma directa.",
753
+ "keyBlank": "Introduce la clave de API, o deja el campo vacío para conservar la guardada.",
754
+ "keyBlankNew": "Introduce la clave de API, o deja el campo vacío si este proveedor se autentica de otra forma.",
755
+ "keyIllegalCharacters": "Esta clave de API no tiene un formato válido. Compruébala.",
756
+ "modelIdRequired": "El ID del modelo es obligatorio.",
757
+ "modelIdDuplicate": "El ID del modelo tiene que ser único.",
758
+ "modelNameInvalid": "El nombre visible no puede estar vacío.",
759
+ "modelContextInvalid": "La ventana de contexto tiene que ser un número positivo, como 131072, 256K o 1M.",
760
+ "modelMaxTokensInvalid": "Los tokens máximos de salida tienen que ser un número positivo, como 8192, 64K o 1M.",
761
+ "advancedHint": "Los demás campos están en settings.yaml; edita esa sección directamente.",
762
+ "modelCapacityInvalid": "Una capacidad tiene que ser un número, con el sufijo K o M si quieres.",
763
+ "modelDuplicate": "Cada ID de modelo sólo puede aparecer una vez.",
764
+ "modelContextWindow": "Ventana de contexto",
765
+ "modelMaxTokens": "Tokens máximos de salida",
766
+ "fetchModels": "Buscar modelos disponibles",
767
+ "fetching": "Preguntando al proveedor…",
768
+ "fetchNeedsBaseUrl": "Introduce antes la URL base, y luego busca.",
769
+ "fetchEmpty": "El proveedor no listó ningún modelo. Añádelos a mano.",
770
+ "fetchTitle": "Elige los modelos que añadir",
771
+ "fetchDescription": "Estos son los modelos que tiene disponibles este proveedor. Elige los que quieras añadir.",
772
+ "fetchSearch": "Buscar modelos",
773
+ "fetchNoMatches": "Ningún modelo coincide.",
774
+ "fetchSelectAll": "Seleccionar todo",
775
+ "fetchDeselectAll": "Deseleccionar todo",
776
+ "fetchAdopt": "Añadir seleccionados",
777
+ "customAdd": "Añadir un proveedor personalizado",
778
+ "customTitle": "Proveedor personalizado",
779
+ "customTag": "Personalizado",
780
+ "customRoute": "ID del proveedor",
781
+ "customRouteHint": "Identificador en minúsculas, que empieza por letra, y que nombra este proveedor de forma única en las peticiones y como nombre de su credencial.",
782
+ "customRouteInvalid": "Empieza por una letra minúscula; después, letras minúsculas, dígitos y guiones.",
783
+ "customRouteTaken": "Ya hay un proveedor que usa este ID.",
784
+ "customDisplayName": "Nombre visible",
785
+ "customApi": "Protocolo de API",
786
+ "customApiUnset": "Sin seleccionar",
787
+ "customNeedsBaseUrl": "Un proveedor personalizado necesita una URL base.",
788
+ "customBaseUrlInvalid": "Introduce una URL HTTP o HTTPS válida.",
789
+ "customNeedsModels": "Un proveedor personalizado necesita al menos un modelo.",
790
+ "customBaseUrlPlaceholder": "https://gateway.example/v1",
791
+ "settingsPathUnresolvable": "ruta de ajustes no resoluble",
792
+ "create": "Crear proveedor",
793
+ "creating": "Creando…",
794
+ "welcomeTitle": "Aviso de pruebas internas",
795
+ "welcomeBody": "DeepSeek Harness 0.1 sigue en pruebas para los desarrolladores de Harness. Todavía hay muchas áreas por mejorar, y agradecemos los comentarios de la comunidad de desarrolladores. Los plugins principales y las API básicas de DeepSeek Harness seguirán evolucionando muy rápido en los próximos meses.\n\nTenemos ganas de explorar los límites de la inteligencia con desarrolladores de todo el mundo, apoyándonos en una infraestructura de código abierto, abierta, reutilizable y componible. Invitamos a los desarrolladores de Harness de todas partes a sumarse al ecosistema de plugins de DSH.",
796
+ "welcomeContinue": "Continuar",
797
+ "welcomeError": "No se pudo guardar la confirmación. Inténtalo de nuevo.",
798
+ "onboardingTitle": "Añade una clave de API para empezar",
799
+ "onboardingDescription": "Configura el proveedor oficial de DeepSeek para empezar a construir.",
800
+ "onboardingLater": "Configurar más tarde",
801
+ "onboardingSave": "Guardar y continuar",
802
+ "onboardingSaving": "Guardando…",
803
+ "keyRequired": "Introduce una clave de API para continuar.",
804
+ },
805
+ "settings.permission": {
806
+ "title": "Permiso",
807
+ "description": "Elige el modo de permiso por defecto para las sesiones nuevas",
808
+ "loading": "Cargando",
809
+ "unavailable": "No disponible",
810
+ "preset.readOnly": "Sólo mirar",
811
+ "preset.workspaceWrite": "Dentro del taller",
812
+ "preset.fullAccess": "A rienda suelta",
813
+ "confirm.title": "¿Activar A rienda suelta?",
814
+ "confirm.description": "A rienda suelta permite que las sesiones nuevas recorten los pasos de confirmación y hagan más acciones directamente, incluidas operaciones sensibles, cambios en ficheros o comandos externos. Úsalo sólo cuando te fíes de las tareas que vengan después.",
815
+ "confirm.acknowledge": "Entiendo los riesgos y quiero continuar",
816
+ "confirm.cancel": "Cancelar",
817
+ "confirm.enable": "Activar A rienda suelta",
818
+ },
819
+ "settings.pluginInventory": {
820
+ "tab": "Lista de plugins",
821
+ "loading": "Leyendo plugins…",
822
+ "error": "Los plugins no están disponibles de momento.",
823
+ "retry": "Reintentar",
824
+ "search": "Buscar plugins",
825
+ "empty": "No hay plugins disponibles.",
826
+ "emptySearch": "Ningún plugin coincide.",
827
+ "presetTitle": "Plugins de la sesión",
828
+ "presetSubtitle": "Los presets de agente los componen en cada sesión",
829
+ "countUnit": "plugins",
830
+ "switcherLabel": "Elige el preset de agente que quieres inspeccionar",
831
+ "presetOptionDefault": "{name} (por defecto)",
832
+ "presetOptionBroken": "{name} (no se pudo cargar)",
833
+ "globalTitle": "Plugins globales",
834
+ "globalSubtitle": "Compartidos por el sistema y todas las sesiones",
835
+ "presetProvidedDetail": "Desactivado en global; los presets de agente lo aportan en cada sesión",
836
+ "enabledIn": "Activado en",
837
+ "viewInPreset": "Ver en el grupo del preset",
838
+ "matchesInOtherPresets": "{count} coincidencias más en otros presets: ",
839
+ "failedCountLabel": "fallidos",
840
+ "enabledTag": "Activado",
841
+ "disabledTag": "Desactivado",
842
+ "conditionalTag": "Condicional",
843
+ "presetEnabledTag": "Activado por presets",
844
+ "failedTag": "Falló",
845
+ "moduleLabel": "Módulo",
846
+ "fromPreset": "De",
847
+ "condition": "Se desactiva cuando",
848
+ "configuration": "Configuración",
849
+ "runtime": "Estado",
850
+ "unobserved": "No está en marcha",
851
+ "pending": "Esperando dependencias",
852
+ "loadingPhase": "Cargando",
853
+ "active": "En marcha",
854
+ "failed": "No arrancó",
855
+ "unloading": "Descargando",
856
+ },
857
+ "settings.plugins": {
858
+ "nav": "Plugins",
859
+ "title": "Plugins",
860
+ "intro": "Configura e inspecciona los plugins instalados en este despliegue.",
861
+ "tabs": "Vistas de plugins",
862
+ "configurableTab": "Configuración del plugin",
863
+ "empty": "Este despliegue no expone ningún ajuste de plugin.",
864
+ "overridden": "Modificado",
865
+ "reset": "Restaurar valor por defecto",
866
+ "readOnly": "Este despliegue guarda los ajustes en modo de sólo lectura.",
867
+ "expand": "Ver ajustes",
868
+ "collapse": "Ocultar ajustes",
869
+ "save": "Guardar",
870
+ "saving": "Guardando…",
871
+ "discard": "Descartar",
872
+ "unsaved": "Sin guardar",
873
+ "saveFailed": "El despliegue no aceptó estos valores; los dejamos para que los corrijas.",
874
+ "invalidNumber": "Escribe un número, o déjalo en blanco para usar el valor por defecto.",
875
+ "bashTitle": "Shell",
876
+ "bashDescription": "Limita todos los comandos que ejecuta el agente.",
877
+ "bashTimeoutMs": "Tiempo de espera del comando (ms)",
878
+ "bashTimeoutMsHint": "Cuánto puede durar un comando antes de que se corte.",
879
+ "bashMaxOutputBytes": "Límite de salida por flujo (bytes)",
880
+ "bashMaxOutputBytesHint": "La salida que supere este límite va a un fichero temporal en vez de perderse.",
881
+ "agentLoopTitle": "Bucle del agente",
882
+ "agentLoopDescription": "Cómo reparte el agente las llamadas a herramienta.",
883
+ "agentLoopMaxParallel": "Llamadas a herramienta en paralelo",
884
+ "agentLoopMaxParallelHint": "Tope de llamadas seguras en paralelo que pueden correr a la vez dentro de un paso.",
885
+ "webSearchTitle": "Búsqueda web",
886
+ "webSearchDescription": "El proveedor de búsqueda de DeepSeek.",
887
+ "webSearchApiKey": "Clave de API",
888
+ "webSearchApiKeyHint": "Se guarda fuera del fichero de ajustes. Déjalo en blanco para conservar la clave actual.",
889
+ "webSearchApiKeySet": "Hay una clave configurada.",
890
+ "webSearchApiKeyUnset": "No hay ninguna clave configurada; la búsqueda no estará disponible hasta que la haya.",
891
+ "webSearchBaseUrl": "Dirección base",
892
+ "webSearchBaseUrlHint": "Déjalo en blanco para usar el valor por defecto del proveedor.",
893
+ "webSearchMaxUses": "Búsquedas máximas por petición",
894
+ "webSearchMaxUsesHint": "Cuántas veces puede buscar una petición antes de tener que responder.",
895
+ "subagentModelSelectionTitle": "Subagente",
896
+ "subagentModelSelectionDescription": "Controla qué modelos pueden elegir los agentes para los subagentes.",
897
+ "subagentModelSelectionToggle": "Permitir que los agentes elijan modelos para los subagentes",
898
+ "subagentModelSelectionChoose": "Con esto activado, los agentes pueden elegir proveedor, modelo y esfuerzo de razonamiento para cada subagente entre los modelos autorizados de abajo. Sólo se aplica a las sesiones nuevas.",
899
+ "subagentModelSelectionAllowed": "Modelos que pueden elegir los agentes",
900
+ "subagentModelSelectionLoading": "Cargando modelos…",
901
+ "subagentModelSelectionLoadFailed": "No se pudieron cargar los modelos.",
902
+ "subagentModelSelectionRetry": "Reintentar",
903
+ "subagentModelSelectionPartial": "Algunos proveedores de modelos no se pudieron cargar; las elecciones guardadas se pueden seguir quitando.",
904
+ "subagentModelSelectionUnavailable": "No disponible ahora mismo",
905
+ "subagentModelSelectionUnavailableGroup": "Guardado pero no disponible ahora mismo",
906
+ "subagentModelSelectionEmpty": "Ahora mismo ningún proveedor de modelos ofrece ningún modelo.",
907
+ "subagentModelSelectionRequired": "Elige al menos un modelo antes de guardar.",
908
+ "subagentModelSelectionConflict": "Los ajustes han cambiado en otro sitio. Descarta el borrador y vuelve a intentarlo.",
909
+ "subagentModelSelectionOff": "Los subagentes usan los valores por defecto configurados o heredan el modelo del agente padre. Las elecciones de modelo guardadas se conservan.",
910
+ },
911
+ "settings.theme": {
912
+ "appearance.title": "Aspecto",
913
+ "appearance.light": "Claro",
914
+ "appearance.dark": "Oscuro",
915
+ "appearance.system": "Sistema",
916
+ "fontSize.title": "Tamaño de letra",
917
+ "fontSize.description": "Sólo afecta al contenido de la conversación",
918
+ "fontSize.unit": "px",
919
+ "fontSize.increase": "Aumentar el tamaño de letra",
920
+ "fontSize.decrease": "Reducir el tamaño de letra",
921
+ },
922
+ "sidebar": {
923
+ "session.new": "Nueva sesión",
924
+ "session.new.label": "Nueva sesión",
925
+ "toggle.open": "Abrir barra lateral",
926
+ "toggle.collapse": "Contraer barra lateral",
927
+ "panels.label": "Paneles globales",
928
+ },
929
+ "sidebarCodePreview": {
930
+ "title": "Código",
931
+ "copy": "Copiar",
932
+ "copied": "Copiado",
933
+ },
934
+ "sidebarDocumentPreview": {
935
+ "loading": "Leyendo…",
936
+ "loadMore": "Cargar más",
937
+ "changed": "El fichero ha cambiado; se muestra el contenido anterior.",
938
+ "reloadNow": "Recargar",
939
+ "reload": "Volver a leer el fichero",
940
+ "wrap.enable": "Activar el ajuste de línea",
941
+ "wrap.disable": "Desactivar el ajuste de línea",
942
+ "wrap.aria": "Ajuste de línea",
943
+ "openWith": "Abrir con",
944
+ "viewer.text": "Texto sin formato",
945
+ "resourceUnavailable": "El servicio de recursos de ficheros no está disponible.",
946
+ "rendererUnavailable": "La vista previa de {name} no está disponible.",
947
+ "error.notFound": "No se encuentra el fichero. Puede que se haya movido o borrado.",
948
+ "error.tooLarge": "Esta página supera el límite de {limit} y no se puede leer.",
949
+ "error.notText": "No es un fichero de texto; la vista previa no está disponible por ahora.",
950
+ "error.notRegularFile": "No es un fichero normal; no hay nada que mostrar.",
951
+ "error.unavailable": "Falló la lectura: {message}",
952
+ "retry": "Reintentar",
953
+ },
954
+ "sidebarFiles": {
955
+ "type.label": "Ficheros",
956
+ "guide.title": "Ficheros del espacio de trabajo",
957
+ "guide.description": "Explora los ficheros del espacio de trabajo de esta sesión",
958
+ "loading": "Leyendo…",
959
+ "empty": "Carpeta vacía",
960
+ "truncated": "Hay demasiadas entradas; se muestran sólo algunas.",
961
+ "noWorkspace": "Esta sesión no tiene carpeta de espacio de trabajo.",
962
+ "reload": "Recargar",
963
+ "entry.other": "No es un fichero ni una carpeta, así que no se puede abrir.",
964
+ "error.notFound": "Esa carpeta ya no está. Puede que se haya movido o borrado.",
965
+ "error.outsideWorkspace": "Esa carpeta está fuera del espacio de trabajo, así que la barra lateral no la va a leer.",
966
+ "error.notDirectory": "Eso no es una carpeta.",
967
+ "error.unavailable": "Falló la lectura: {message}",
968
+ },
969
+ "sidebarImage": {
970
+ "title": "Imagen",
971
+ "preview": "Vista previa de imagen: {name}",
972
+ "loading": "Abriendo imagen…",
973
+ "failed": "No se pudo mostrar esta imagen.",
974
+ "unsupported": "La vista previa de imagen necesita el contenido completo del fichero.",
975
+ },
976
+ "sidebarPdf": {
977
+ "title": "PDF",
978
+ "pageImage": "Página {page} del PDF",
979
+ "loading": "Abriendo el PDF…",
980
+ "rendering": "Pintando la página…",
981
+ "failed": "No puedo mostrar el PDF: {message}",
982
+ "password": "Este PDF pide contraseña; las vistas previas con contraseña no están soportadas.",
983
+ "workerFailed": "El proceso que pinta el PDF no ha podido seguir. Vuelve a intentarlo.",
984
+ "unsupported": "Para ver un PDF hace falta el fichero entero.",
985
+ "retry": "Reintentar",
986
+ },
987
+ "sidebarRight": {
988
+ "chrome.expand": "Abrir barra lateral",
989
+ "chrome.expandAria": "Abrir la barra lateral derecha",
990
+ "chrome.collapse": "Plegar barra lateral",
991
+ "chrome.collapseAria": "Plegar la barra lateral derecha",
992
+ "chrome.toFullscreen": "Pantalla completa",
993
+ "chrome.exitFullscreen": "Salir de pantalla completa",
994
+ "dock.emptyPane": "Panel vacío",
995
+ "dock.splitPane": "Dividir",
996
+ "dock.splitPaneDisabled": "Dos paneles es el límite",
997
+ "dock.splitPaneNarrow": "No hay ancho suficiente para dividir, ensancha la barra lateral",
998
+ "dock.closeTab": "Cerrar",
999
+ "dock.addTab": "Pestaña nueva",
1000
+ "dock.dockFloat": "Devolver a la barra lateral",
1001
+ "dock.closeFloat": "Cerrar",
1002
+ "dock.drop.center": "Mover aquí",
1003
+ "dock.drop.left": "Añadir división a la izquierda",
1004
+ "dock.drop.right": "Añadir división a la derecha",
1005
+ "dock.drop.top": "Añadir división arriba",
1006
+ "dock.drop.bottom": "Añadir división abajo",
1007
+ "tab.guide.title": "Inicio",
1008
+ "tab.unavailable": "Aquí todavía no hay nada que pueda ver este tipo de contenido.",
1009
+ },
1010
+ "skill": {
1011
+ "row.title": "Skill",
1012
+ "row.running": "Cargando skill",
1013
+ "row.failed": "Falló la carga del skill",
1014
+ "row.stopped": "Carga del skill detenida",
1015
+ "row.instructions": "Instrucciones",
1016
+ "row.inspect": "Inspeccionar",
1017
+ "menu.userOnly": "sólo usuario",
1018
+ },
1019
+ "slash.menu": {
1020
+ "command": "Comandos",
1021
+ "skill": "Skills",
1022
+ "subagent": "Subagentes",
1023
+ "loading": "Cargando…",
1024
+ "drill.aria": "Explorar carpeta",
1025
+ "drill.hint": "Explorar carpeta",
1026
+ "drill.key": "Tab",
1027
+ "crumbs.aria": "Navegación por carpetas",
1028
+ "suggestions.aria": "Sugerencias de activación",
1029
+ },
1030
+ "subagent": {
1031
+ "diagnostic.corrupt": "registro de sesión corrupto",
1032
+ "diagnostic.unsupported": "versión del registro de subagente no compatible",
1033
+ "diagnostic.unavailable": "registro de sesión no disponible temporalmente",
1034
+ "duration.seconds": "{seconds}s",
1035
+ "duration.minutes": "{minutes}m {seconds}s",
1036
+ "duration.hours": "{hours}h {minutes}m {seconds}s",
1037
+ "duration.days": "{days}d",
1038
+ "duration.daysHours": "{days}d {hours}h",
1039
+ "duration.months": "~{months}mes",
1040
+ "duration.monthsDays": "~{months}mes {days}d",
1041
+ "duration.years": "~{years}a",
1042
+ "duration.yearsMonths": "~{years}a {months}mes",
1043
+ "duration.exactDays": "{days}d {hours}h {minutes}m {seconds}s",
1044
+ "duration.exactTitle": "Duración activa total: {duration}",
1045
+ "tokens.thousand": "{value}K",
1046
+ "tokens.million": "{value}M",
1047
+ "tokens.total": "{value} tok",
1048
+ "loading.label": "Cargando subagentes…",
1049
+ "loading.aria": "Cargando subagentes",
1050
+ "load.error": "No se pudieron cargar los subagentes",
1051
+ "retry": "Reintentar",
1052
+ "mode.oneShot": "de una sola vez",
1053
+ "mode.continuable": "continuable",
1054
+ "activity.running": "en marcha",
1055
+ "activity.inactive": "inactivo",
1056
+ "branch.collapse": "Contraer {label} descendientes",
1057
+ "branch.expand": "Expandir {label} descendientes",
1058
+ "count.total.one": "{count} subagente",
1059
+ "count.total.other": "{count} subagentes",
1060
+ "count.running.one": "{count} subagente en marcha",
1061
+ "count.running.other": "{count} subagentes en marcha",
1062
+ "switcher.aria": "Cambiar de subagente: {title}",
1063
+ "tree.aria": "Sesiones de subagentes",
1064
+ "readonly.oneShot.title": "Registro de subagente de una sola vez",
1065
+ "readonly.title": "Este subagente, por ahora, es sólo para mirar",
1066
+ "readonly.oneShot.body": "Las tareas de una sola vez no admiten mensajes posteriores; aquí tienes el registro completo de la ejecución.",
1067
+ "readonly.body": "La sesión padre está desconectada; vuelve a abrirla para seguir enviando mensajes.",
1068
+ },
1069
+ "trajectory": {
1070
+ "view.trajectory": "Actividad",
1071
+ "toolbar.aria": "Barra de herramientas de la actividad",
1072
+ "toolbar.duration": "Duración",
1073
+ "toolbar.useActualDuration": "Usar la duración real",
1074
+ "toolbar.useEqualWidth": "Usar operaciones de ancho igual",
1075
+ "toolbar.actualTime": "Tiempo real",
1076
+ "toolbar.turns": "Vueltas",
1077
+ "toolbar.expandTurns": "Expandir vueltas",
1078
+ "toolbar.collapseTurns": "Contraer vueltas",
1079
+ "toolbar.calls": "Llamadas",
1080
+ "toolbar.expandCalls": "Expandir llamadas",
1081
+ "toolbar.collapseCalls": "Contraer llamadas",
1082
+ "toolbar.search": "Buscar en la actividad",
1083
+ "toolbar.searchPlaceholder": "Buscar",
1084
+ "kind.system": "SISTEMA",
1085
+ "kind.user": "USUARIO",
1086
+ "kind.context": "CONTEXTO",
1087
+ "kind.compacted": "COMPACTADO",
1088
+ "kind.message": "Mensaje",
1089
+ "kind.assistant": "ASISTENTE",
1090
+ "kind.tool": "HERRAMIENTA",
1091
+ "kind.subtool": "SUBHERRAMIENTA",
1092
+ "kind.sub": "Sub",
1093
+ "column.input": "Entrada",
1094
+ "column.output": "Salida",
1095
+ "column.think": "Rumiar",
1096
+ "column.time": "Tiempo",
1097
+ "column.model": "Modelo",
1098
+ "column.tools": "Herramientas",
1099
+ "turn.label": "Vuelta {turn}",
1100
+ "section.betweenTurns": "Entre vueltas",
1101
+ "group.message": "Mensaje",
1102
+ "group.step": "Paso {step}",
1103
+ "group.compaction": "Compactación {seq}",
1104
+ "status.failed": "Fallido",
1105
+ "status.pending": "Pendiente",
1106
+ "status.completed": "Completado",
1107
+ "timing.notAvailable": "No disponible",
1108
+ "timing.notRecorded": "Sin registrar",
1109
+ "timing.stepStartUnavailable": "Inicio del paso no disponible",
1110
+ "timing.firstTokenUnavailable": "Primer token no disponible",
1111
+ "timing.usageUnavailable": "Uso no disponible",
1112
+ "timing.outputTokensUnavailable": "Tokens de salida no disponibles",
1113
+ "timing.durationTooShort": "Duración demasiado corta",
1114
+ "timing.showLocalTime": "Mostrar la hora local",
1115
+ "timing.showUnixTimestamp": "Mostrar la marca de tiempo Unix",
1116
+ "timing.started": "Iniciado",
1117
+ "timing.totalDuration": "Duración total",
1118
+ "timing.ttft": "TTFT",
1119
+ "timing.generation": "Generación",
1120
+ "timing.throughput": "Rendimiento",
1121
+ "timing.duration": "Duración",
1122
+ "timing.source": "Origen de los tiempos",
1123
+ "timing.sessionTimestamps": "Marcas de tiempo de la sesión",
1124
+ "timing.sessionTimestampsRunning": "Marcas de tiempo de la sesión (en marcha)",
1125
+ "timing.request": "Tiempos de la petición",
1126
+ "unit.milliseconds": "{value} ms",
1127
+ "unit.seconds": "{value} s",
1128
+ "unit.tokens": "{value} tok",
1129
+ "unit.tokensPerSecond": "{value} tok/s",
1130
+ "usage.tokens": "Tokens",
1131
+ "usage.reasoning": "Razonamiento",
1132
+ "usage.content": "Contenido",
1133
+ "usage.notReported": "Uso no informado",
1134
+ "usage.input": "Entrada",
1135
+ "usage.cached": "En caché",
1136
+ "usage.cacheCreated": "Caché creada",
1137
+ "usage.other": "Otros",
1138
+ "usage.output": "Salida",
1139
+ "usage.thisRequest": "Esta petición",
1140
+ "usage.sessionCumulative": "Acumulado de la sesión",
1141
+ "options.notRecorded": "Opciones sin registrar",
1142
+ "options.json": "JSON de opciones de la petición",
1143
+ "source.unknown": "Desconocido",
1144
+ "source.user": "Usuario",
1145
+ "source.plugin": "Plugin",
1146
+ "source.pluginNamed": "Plugin · {plugin}",
1147
+ "source.goal": "Objetivo",
1148
+ "source.goalRound": "Objetivo · Ronda {round}",
1149
+ "source.notRecorded": "Origen sin registrar",
1150
+ "source.messageJson": "JSON del origen del mensaje",
1151
+ "tab.summary": "Resumen",
1152
+ "tab.rawOutput": "Salida en bruto",
1153
+ "tab.preview": "Vista previa",
1154
+ "tab.raw": "En bruto",
1155
+ "tab.source": "Origen",
1156
+ "tab.payload": "Carga útil",
1157
+ "tab.result": "Resultado",
1158
+ "tab.schema": "Esquema",
1159
+ "tab.timing": "Tiempos",
1160
+ "tab.diff": "Diferencias",
1161
+ "tab.systemPrompt": "Instrucciones",
1162
+ "tab.tools": "Herramientas",
1163
+ "tab.options": "Opciones",
1164
+ "tab.usage": "Uso",
1165
+ "record.toolCallOnly": "(sólo llamada a herramienta)",
1166
+ "record.noContent": "Sin contenido",
1167
+ "record.noPayload": "No se capturó ninguna carga útil",
1168
+ "record.noResult": "No se capturó ningún resultado",
1169
+ "record.noOutput": "Sin salida",
1170
+ "record.schemaUnavailable": "Esquema no disponible",
1171
+ "record.parameters": "Parámetros",
1172
+ "record.resultJson": "JSON del resultado",
1173
+ "record.json": "JSON",
1174
+ "record.parametersJson": "JSON de parámetros",
1175
+ "record.namedParametersJson": "JSON de parámetros de {name}",
1176
+ "record.payloadJson": "JSON de la carga útil",
1177
+ "record.outputJson": "JSON del resultado",
1178
+ "record.thinking": "Razonamiento",
1179
+ "record.systemPromptMissing": "Esta petición no trae instrucciones",
1180
+ "record.toolsMissing": "Esta petición no trae herramientas",
1181
+ "record.systemPrompt": "Instrucciones",
1182
+ "record.tools": "Herramientas",
1183
+ "block.openSummary": "Abrir el resumen de llamadas a herramienta del bloque #{index}",
1184
+ "block.openSummaryTitle": "Abrir el resumen de llamadas a herramienta",
1185
+ "block.label": "Bloque #{index} {type}",
1186
+ "history.loadingTrajectory": "Cargando la actividad…",
1187
+ "history.loadingEarlier": "Cargando el historial anterior…",
1188
+ "history.loadingEarlierAria": "Cargando el historial anterior…",
1189
+ "history.loadEarlier": "Cargar el historial anterior",
1190
+ "history.clickToLoadEarlier": "Haz clic para cargar el historial anterior",
1191
+ "request.label": "Petición #{request}",
1192
+ "request.labelCompaction": "Petición #{request} · Compactación",
1193
+ "request.compaction": "Compactación · {section}",
1194
+ "request.compactionPurpose": "Compactación",
1195
+ "request.retryProgress": "{retry} de {maximum}",
1196
+ "request.collapsedSummary": "Resumen contraído ({kind}), {summary}",
1197
+ "request.collapsedTurn": "vuelta",
1198
+ "request.collapsedAssistant": "asistente",
1199
+ "request.rowAria": "{request}{kind}, {content}",
1200
+ "request.rowPrefix": "Petición {request}, ",
1201
+ "request.rowAriaCompaction": "Petición {request}, compactación",
1202
+ "request.noContent": "sin contenido",
1203
+ "summary.toolCalls.one": "{count} llamada a herramienta",
1204
+ "summary.toolCalls.other": "{count} llamadas a herramienta",
1205
+ "summary.steps.one": "{count} paso",
1206
+ "summary.steps.other": "{count} pasos",
1207
+ "details.event": "Detalles del evento",
1208
+ "details.resize": "Cambiar el tamaño de los detalles del evento",
1209
+ "details.resizeTitle": "Arrastra para cambiar el tamaño. Haz doble clic para restablecerlo.",
1210
+ "details.close": "Cerrar los detalles",
1211
+ "details.status": "Estado",
1212
+ "details.purpose": "Propósito",
1213
+ "details.provider": "Proveedor",
1214
+ "details.model": "Modelo",
1215
+ "details.toolCalls": "Llamadas a herramienta",
1216
+ "details.subtoolCalls": "Llamadas a subherramienta",
1217
+ "details.error": "Error",
1218
+ "details.failure.auth": "La clave de API no es válida",
1219
+ "details.retry": "Reintentar",
1220
+ "details.scheduled": "Programado",
1221
+ "details.retryDelay": "Espera antes de reintentar",
1222
+ "details.result": "Resultado",
1223
+ "details.compacted": "Compactado",
1224
+ "details.assistantMessage": "Mensaje del asistente",
1225
+ "details.source": "Origen",
1226
+ "details.hierarchy": "Jerarquía",
1227
+ "details.toolCall": "Llamada a herramienta",
1228
+ "timeline.aria": "Cronología de la actividad",
1229
+ "timeline.overviewAria": "Vista general de la cronología; arrastra en horizontal para centrar los eventos",
1230
+ "timeline.noTimingData": "Sin datos de tiempos",
1231
+ "timeline.total": "Total {duration}",
1232
+ "timeline.started": "Iniciado {time}",
1233
+ "timeline.ttftDecoding": "TTFT {ttft} · Decodificación {decoding}",
1234
+ "layout.compacting": "Compactando el contexto…",
1235
+ "layout.compactionFailed": "La compactación falló",
1236
+ "layout.compacted": "Contexto compactado",
1237
+ "layout.toolCallOnly": "Sólo llamada a herramienta",
1238
+ "layout.imageOnly": "Imágenes ×{count}",
1239
+ "layout.fileAttachments": "Ficheros ×{count}",
1240
+ "layout.initialSystemPrompt": "Instrucciones iniciales",
1241
+ "layout.systemPromptUpdated": "Instrucciones actualizadas",
1242
+ "layout.toolsUpdated": "Herramientas actualizadas",
1243
+ "layout.systemPromptAndToolsUpdated": "Instrucciones y herramientas actualizadas",
1244
+ "layout.compactionInterrupted": "La compactación se interrumpió antes de terminar.",
1245
+ },
1246
+ "workflowRun": {
1247
+ "run.title": "{name}",
1248
+ "run.members.one": "{count} miembro",
1249
+ "run.members.other": "{count} miembros",
1250
+ "run.empty": "No ha arrancado ningún miembro",
1251
+ "phase.unassigned": "Sin fase",
1252
+ "phase.empty": "Nombre de fase vacío",
1253
+ "statusCount.running": "En marcha {count}",
1254
+ "statusCount.completed": "Completado {count}",
1255
+ "statusCount.failed": "Fallido {count}",
1256
+ "statusCount.cancelled": "Cancelado {count}",
1257
+ "statusCount.interrupted": "Interrumpido {count}",
1258
+ "member.empty": "Nombre de miembro vacío",
1259
+ "member.open": "Abrir {name}",
1260
+ "status.running": "En marcha",
1261
+ "status.completed": "Completado",
1262
+ "status.failed": "Fallido",
1263
+ "status.cancelled": "Cancelado",
1264
+ "status.interrupted": "Interrumpido",
1265
+ },
1266
+ "workspace": {
1267
+ "group.ungrouped": "Sin grupo",
1268
+ "session.new": "Nueva sesión",
1269
+ "section.workspaces": "Espacios de trabajo",
1270
+ "section.sessions": "Sesiones",
1271
+ "viewOptions.label": "Opciones de vista",
1272
+ "groupBy.label": "Agrupar por",
1273
+ "groupBy.workspace": "Espacio de trabajo",
1274
+ "groupBy.flat": "En una sola lista",
1275
+ "orderBy.label": "Ordenar por",
1276
+ "orderBy.manual": "Manual",
1277
+ "orderBy.updated": "Última actualización",
1278
+ "sessions.expand": "Mostrar {n} sesiones más",
1279
+ "sessions.collapse": "Mostrar menos",
1280
+ "empty.none": "Todavía no hay sesiones",
1281
+ "empty.noMatches": "Sin coincidencias",
1282
+ "workspace.add": "Añadir espacio de trabajo",
1283
+ "search.sessions.aria": "Buscar sesiones",
1284
+ "search.placeholder": "Buscar sesiones...",
1285
+ "search.clear": "Limpiar búsqueda",
1286
+ "search.results.aria": "Resultados de la búsqueda",
1287
+ "search.pending": "Buscando en el historial de sesiones…",
1288
+ "search.unavailable": "La búsqueda por contenido no está disponible temporalmente. Se muestran las coincidencias por nombre.",
1289
+ "search.noMatches": "No hay sesiones que coincidan",
1290
+ "search.hasMore": "Se muestran los primeros {n} resultados. Afina la búsqueda.",
1291
+ "menu.addWorkspace": "Añadir espacio de trabajo…",
1292
+ "picker.loading": "Cargando espacios de trabajo…",
1293
+ "conflict.named": "Ya existe un espacio de trabajo llamado “{name}”.",
1294
+ "folderError.title": "No se pudo abrir la carpeta",
1295
+ "folderError.retry": "Elegir otra vez",
1296
+ "rename": "Cambiar nombre",
1297
+ "rename.workspace.title": "Cambiar nombre del espacio de trabajo",
1298
+ "rename.session.title": "Cambiar nombre de la sesión",
1299
+ "field.workspaceName": "Nombre del espacio de trabajo",
1300
+ "field.sessionName": "Nombre de la sesión",
1301
+ "delete.workspace": "Borrar espacio de trabajo",
1302
+ "delete.desc": "Esto quita “{name}” de la lista de espacios de trabajo. La carpeta y los registros de sesión se conservarán. Sus sesiones aparecerán en Sin grupo.",
1303
+ "delete.pending": "Borrando el espacio de trabajo…",
1304
+ "menu.fork": "Bifurcar sesión",
1305
+ "menu.archiveSession": "Archivar sesión",
1306
+ "sessions.count.one": "{n} sesión",
1307
+ "sessions.count.other": "{n} sesiones",
1308
+ "actions.workspace.aria": "Acciones del espacio de trabajo {name}",
1309
+ "actions.session.aria": "Acciones de la sesión {name}",
1310
+ "actions.newSession.aria": "Nueva sesión en {name}",
1311
+ "status.running": "En marcha",
1312
+ "status.subagentsRunning.one": "{n} subagente en marcha",
1313
+ "status.subagentsRunning.other": "{n} subagentes en marcha",
1314
+ "status.idle": "En reposo",
1315
+ "status.waitingApproval": "Esperando aprobación",
1316
+ "status.planReview": "Plan pendiente de revisión",
1317
+ "status.waitingAnswer": "Esperando respuesta",
1318
+ "status.completed": "Completada",
1319
+ "schedule.active": "Tiene una tarea programada activa",
1320
+ "hover.created": "Creado {time}",
1321
+ "hover.copied": "Copiado",
1322
+ "date.ymd": "{y}-{m}-{d}",
1323
+ "time.now": "ahora",
1324
+ "time.minutes": "{n}min",
1325
+ "time.hours": "{n}h",
1326
+ "time.days": "{n}d",
1327
+ "time.months": "{n}mes",
1328
+ "time.years": "{n}a",
1329
+ "time.ago": "hace {t}",
1330
+ },
1331
+ };