import type { Translations } from "./types"; export const es: Translations = { common: { save: "Guardar", saving: "Guardando...", cancel: "Cancelar", close: "Cerrar", confirm: "Confirmar", delete: "Eliminar", refresh: "Actualizar", retry: "Reintentar", search: "Buscar...", loading: "Cargando...", create: "Crear", creating: "Creando...", set: "Establecer", replace: "Reemplazar", clear: "Limpiar", live: "En vivo", off: "Apagado", enabled: "habilitado", disabled: "deshabilitado", active: "activo", inactive: "inactivo", unknown: "desconocido", untitled: "Sin título", none: "Ninguno", form: "Formulario", noResults: "Sin resultados", of: "de", page: "Página", msgs: "msjs", tools: "herramientas", match: "coincidencia", other: "Otros", configured: "configurado", removed: "eliminado", failedToToggle: "No se pudo alternar", failedToRemove: "No se pudo eliminar", failedToReveal: "No se pudo mostrar", collapse: "Contraer", expand: "Expandir", general: "General", messaging: "Mensajería", pluginLoadFailed: "No se pudo cargar el script de este complemento. Revisa la pestaña Network (dashboard-plugins/…) y la ruta del complemento del servidor.", pluginNotRegistered: "El script del complemento no llamó a register(), o falló. Abre la consola del navegador para más detalles.", }, app: { brand: "Hermes Agent", brandShort: "HA", closeNavigation: "Cerrar navegación", closeModelTools: "Cerrar modelo y herramientas", footer: { org: "Nous Research", }, activeSessionsLabel: "Sesiones activas:", gatewayStatusLabel: "Estado del Gateway:", gatewayStrip: { failed: "Inicio fallido", off: "Apagado", running: "En ejecución", starting: "Iniciando", stopped: "Detenido", }, nav: { analytics: "Analíticas", chat: "Chat", config: "Configuración", cron: "Cron", documentation: "Documentación", keys: "Claves", logs: "Registros", models: "Modelos", profiles: "perfiles : multi agentes", plugins: "Complementos", sessions: "Sesiones", skills: "Habilidades", }, modelToolsSheetSubtitle: "y herramientas", modelToolsSheetTitle: "Modelo", navigation: "Navegación", openDocumentation: "Abrir documentación en una nueva pestaña", openNavigation: "Abrir navegación", pluginNavSection: "Complementos", sessionsActiveCount: "{count} activas", statusOverview: "Resumen de estado", system: "Sistema", webUi: "Web UI", }, status: { actionFailed: "Acción fallida", actionFinished: "Finalizado", actions: "Acciones", agent: "Agente", activeSessions: "Sesiones activas", connected: "Conectado", connectedPlatforms: "Plataformas conectadas", disconnected: "Desconectado", error: "Error", failed: "Fallido", gateway: "Gateway", gatewayFailedToStart: "El Gateway no pudo iniciarse", lastUpdate: "Última actualización", noneRunning: "Ninguno", notRunning: "No en ejecución", pid: "PID", platformDisconnected: "desconectado", platformError: "error", recentSessions: "Sesiones recientes", restartGateway: "Reiniciar Gateway", restartingGateway: "Reiniciando gateway…", running: "En ejecución", runningRemote: "En ejecución (remoto)", startFailed: "Inicio fallido", starting: "Iniciando", startedInBackground: "Iniciado en segundo plano — revisa los registros para ver el progreso", stopped: "Detenido", updateHermes: "Actualizar Hermes", updatingHermes: "Actualizando Hermes…", waitingForOutput: "Esperando salida…", }, sessions: { title: "Sesiones", searchPlaceholder: "Buscar contenido de mensajes...", noSessions: "Aún no hay sesiones", noMatch: "Ninguna sesión coincide con tu búsqueda", startConversation: "Inicia una conversación para verla aquí", noMessages: "Sin mensajes", untitledSession: "Sesión sin título", deleteSession: "Eliminar sesión", confirmDeleteTitle: "¿Eliminar sesión?", confirmDeleteMessage: "Esto elimina permanentemente la conversación y todos sus mensajes. No se puede deshacer.", sessionDeleted: "Sesión eliminada", failedToDelete: "No se pudo eliminar la sesión", resumeInChat: "Reanudar en el chat", previousPage: "Página anterior", nextPage: "Página siguiente", roles: { user: "Usuario", assistant: "Asistente", system: "Sistema", tool: "Herramienta", }, }, analytics: { period: "Período:", totalTokens: "Tokens totales", totalSessions: "Sesiones totales", apiCalls: "Llamadas API", dailyTokenUsage: "Uso diario de tokens", dailyBreakdown: "Desglose diario", perModelBreakdown: "Desglose por modelo", topSkills: "Habilidades principales", skill: "Habilidad", loads: "Agente cargó", edits: "Agente gestionó", lastUsed: "Último uso", input: "Entrada", output: "Salida", total: "Total", noUsageData: "No hay datos de uso para este período", startSession: "Inicia una sesión para ver analíticas aquí", date: "Fecha", model: "Modelo", tokens: "Tokens", perDayAvg: "/día prom.", acrossModels: "en {count} modelos", inOut: "{input} entrada / {output} salida", }, models: { modelsUsed: "Modelos utilizados", estimatedCost: "Coste est.", tokens: "tokens", sessions: "sesiones", avgPerSession: "prom./sesión", apiCalls: "llamadas API", toolCalls: "llamadas de herramientas", noModelsData: "No hay datos de uso de modelos para este período", startSession: "Inicia una sesión para ver datos de modelos aquí", }, logs: { title: "Registros", autoRefresh: "Actualización automática", file: "Archivo", level: "Nivel", component: "Componente", lines: "Líneas", noLogLines: "No se encontraron líneas de registro", }, cron: { confirmDeleteMessage: "Esto elimina la tarea de la programación. No se puede deshacer.", confirmDeleteTitle: "¿Eliminar tarea programada?", newJob: "Nueva tarea Cron", nameOptional: "Nombre (opcional)", namePlaceholder: "p. ej. Resumen diario", prompt: "Prompt", promptPlaceholder: "¿Qué debe hacer el agente en cada ejecución?", schedule: "Programación (expresión cron)", schedulePlaceholder: "0 9 * * *", deliverTo: "Entregar a", scheduledJobs: "Tareas programadas", noJobs: "No hay tareas cron configuradas. Crea una arriba.", last: "Última", next: "Próxima", pause: "Pausar", resume: "Reanudar", triggerNow: "Ejecutar ahora", delivery: { local: "Local", telegram: "Telegram", discord: "Discord", slack: "Slack", email: "Email", }, }, profiles: { newProfile: "Nuevo perfil", name: "Nombre", namePlaceholder: "p. ej. coder, writer, etc.", nameRequired: "El nombre es obligatorio", nameRule: "Solo letras minúsculas, dígitos, _ y -; debe comenzar con una letra o dígito; hasta 64 caracteres.", invalidName: "Nombre de perfil no válido", cloneFromDefault: "Clonar configuración del perfil predeterminado", allProfiles: "Perfiles", noProfiles: "No se encontraron perfiles.", defaultBadge: "predeterminado", hasEnv: "env", model: "Modelo", skills: "Habilidades", rename: "Renombrar", editSoul: "Editar SOUL.md", soulSection: "SOUL.md (personalidad / prompt del sistema)", soulPlaceholder: "# Cómo debe comportarse este agente…", saveSoul: "Guardar SOUL", soulSaved: "SOUL.md guardado", openInTerminal: "Copiar comando CLI", commandCopied: "Copiado al portapapeles", copyFailed: "No se pudo copiar", confirmDeleteTitle: "¿Eliminar perfil?", confirmDeleteMessage: "Esto elimina permanentemente el perfil '{name}' — configuración, claves, memorias, sesiones, habilidades, tareas cron. No se puede deshacer.", created: "Creado", deleted: "Eliminado", renamed: "Renombrado", }, pluginsPage: { contextEngineLabel: "Motor de contexto", dashboardSlots: "Slots del panel", disableRuntime: "Deshabilitar", enableAfterInstall: "Habilitar tras instalar", enableRuntime: "Habilitar", forceReinstall: "Forzar reinstalación (eliminar carpeta existente primero)", headline: "Descubre, instala, habilita y actualiza complementos de Hermes (equivalente a `hermes plugins`).", identifierLabel: "URL de Git u owner/repo", inactive: "inactivo", installBtn: "Instalar desde Git", installHeading: "Instalar desde GitHub / URL de Git", installHint: "Usa la forma corta owner/repo o una URL de clonación https:// o git@ completa.", memoryProviderLabel: "Proveedor de memoria", missingEnvWarn: "Configura estos en Claves antes de que el complemento pueda ejecutarse:", noDashboardTab: "Sin pestaña de panel", openTab: "Abrir", orphanHeading: "Extensiones solo del panel (sin coincidencia de plugin.yaml del agente)", pluginListHeading: "Complementos instalados", providerDefaults: "incorporado / predeterminado", providersHeading: "Complementos de proveedor en tiempo de ejecución", providersHint: "Escribe memory.provider (vacío = incorporado) y context.engine en config.yaml. Surte efecto en la próxima sesión.", refreshDashboard: "Volver a escanear extensiones del panel", removeConfirm: "¿Eliminar este complemento de ~/.hermes/plugins/?", removeHint: "Solo se pueden eliminar complementos instalados por el usuario en ~/.hermes/plugins.", rescanHeading: "Registro de complementos SPA", rescanHint: "Vuelve a escanear tras añadir archivos en disco para que la barra lateral del panel detecte nuevos manifiestos.", runtimeHeading: "Tiempo de ejecución del Gateway (complementos YAML)", saveProviders: "Guardar configuración del proveedor", savedProviders: "Configuración del proveedor guardada.", sourceBadge: "Fuente", authRequired: "Autenticación requerida", authRequiredHint: "Ejecuta este comando para autenticarte:", updateGit: "Git pull", versionBadge: "Versión", showInSidebar: "Mostrar en barra lateral", hideFromSidebar: "Ocultar de la barra lateral", }, skills: { title: "Habilidades", searchPlaceholder: "Buscar habilidades y conjuntos de herramientas...", enabledOf: "{enabled}/{total} habilitados", all: "Todas", categories: "Categorías", filters: "Filtros", noSkills: "No se encontraron habilidades. Las habilidades se cargan desde ~/.hermes/skills/", noSkillsMatch: "Ninguna habilidad coincide con tu búsqueda o filtro.", skillCount: "{count} habilidad{s}", resultCount: "{count} resultado{s}", noDescription: "No hay descripción disponible.", toolsets: "Conjuntos de herramientas", toolsetLabel: "conjunto de herramientas {name}", noToolsetsMatch: "Ningún conjunto de herramientas coincide con la búsqueda.", setupNeeded: "Configuración necesaria", disabledForCli: "Deshabilitado para CLI", more: "+{count} más", }, config: { configPath: "~/.hermes/config.yaml", filters: "Filtros", sections: "Secciones", exportConfig: "Exportar configuración como JSON", importConfig: "Importar configuración desde JSON", resetDefaults: "Restablecer valores predeterminados", resetScopeTooltip: "Restablecer {scope} a los valores predeterminados", confirmResetScope: "¿Restablecer todos los ajustes de {scope} a sus valores predeterminados? Esto solo actualiza el formulario — los cambios no se escriben en config.yaml hasta que pulses Guardar.", resetScopeToast: "{scope} restablecido a los valores predeterminados — revisa y guarda para que persista", rawYaml: "Configuración YAML en bruto", searchResults: "Resultados de búsqueda", fields: "campo{s}", noFieldsMatch: 'Ningún campo coincide con "{query}"', configSaved: "Configuración guardada", yamlConfigSaved: "Configuración YAML guardada", failedToSave: "No se pudo guardar", failedToSaveYaml: "No se pudo guardar YAML", failedToLoadRaw: "No se pudo cargar la configuración en bruto", configImported: "Configuración importada — revisa y guarda", invalidJson: "Archivo JSON no válido", categories: { general: "General", agent: "Agente", terminal: "Terminal", display: "Pantalla", delegation: "Delegación", memory: "Memoria", compression: "Compresión", security: "Seguridad", browser: "Navegador", voice: "Voz", tts: "Texto a voz", stt: "Voz a texto", logging: "Registro", discord: "Discord", auxiliary: "Auxiliar", }, }, env: { changesNote: "Los cambios se guardan en disco inmediatamente. Las sesiones activas adoptan las nuevas claves automáticamente.", confirmClearMessage: "El valor almacenado para esta variable se eliminará de tu archivo .env. Esto no se puede deshacer desde la UI.", confirmClearTitle: "¿Limpiar esta clave?", description: "Gestiona claves API y secretos almacenados en", hideAdvanced: "Ocultar avanzado", showAdvanced: "Mostrar avanzado", llmProviders: "Proveedores LLM", providersConfigured: "{configured} de {total} proveedores configurados", getKey: "Obtener clave", notConfigured: "{count} no configurados", notSet: "No establecido", keysCount: "{count} clave{s}", enterValue: "Introduce un valor...", replaceCurrentValue: "Reemplazar valor actual ({preview})", showValue: "Mostrar valor real", hideValue: "Ocultar valor", }, oauth: { title: "Inicios de sesión de proveedores (OAuth)", providerLogins: "Inicios de sesión de proveedores (OAuth)", description: "{connected} de {total} proveedores OAuth conectados. Los flujos de inicio de sesión actualmente se ejecutan a través de la CLI; haz clic en Copiar comando y pégalo en una terminal para configurar.", connected: "Conectado", expired: "Caducado", notConnected: "No conectado. Ejecuta {command} en una terminal.", runInTerminal: "en una terminal.", noProviders: "No se han detectado proveedores compatibles con OAuth.", login: "Iniciar sesión", disconnect: "Desconectar", managedExternally: "Gestionado externamente", copied: "Copiado ✓", cli: "CLI", copyCliCommand: "Copiar comando CLI (para externo / alternativa)", connect: "Conectar", sessionExpires: "La sesión caduca en {time}", initiatingLogin: "Iniciando flujo de inicio de sesión…", exchangingCode: "Intercambiando código por tokens…", connectedClosing: "¡Conectado! Cerrando…", loginFailed: "Inicio de sesión fallido.", sessionExpired: "Sesión caducada. Haz clic en Reintentar para iniciar un nuevo inicio de sesión.", reOpenAuth: "Reabrir página de autenticación", reOpenVerification: "Reabrir página de verificación", submitCode: "Enviar código", pasteCode: "Pega el código de autorización (con el sufijo #state está bien)", waitingAuth: "Esperando que autorices en el navegador…", enterCodePrompt: "Se abrió una nueva pestaña. Introduce este código si se solicita:", pkceStep1: "Se abrió una nueva pestaña en claude.ai. Inicia sesión y haz clic en Autorizar.", pkceStep2: "Copia el código de autorización mostrado tras autorizar.", pkceStep3: "Pégalo abajo y envía.", flowLabels: { pkce: "Inicio de sesión por navegador (PKCE)", device_code: "Código de dispositivo", external: "CLI externa", }, expiresIn: "caduca en {time}", }, language: { switchTo: "Cambiar a inglés", }, theme: { title: "Tema", switchTheme: "Cambiar tema", }, achievements: { hero: { kicker: "Agentic Gamerscore", title: "Hermes Achievements", subtitle: "Insignias coleccionables de Hermes ganadas a partir del historial real de sesiones. Los logros conocidos no completados se muestran como Descubiertos; los logros secretos permanecen ocultos hasta que aparece el primer comportamiento coincidente.", scan_subtitle: "Escaneando el historial de sesiones de Hermes. El primer escaneo puede tardar 5–10 segundos en historiales grandes.", }, actions: { rescan: "Volver a escanear", }, stats: { unlocked: "Desbloqueados", unlocked_hint: "insignias ganadas", discovered: "Descubiertos", discovered_hint: "conocidos, aún no ganados", secrets: "Secretos", secrets_hint: "ocultos hasta la primera señal", highest_tier: "Nivel más alto", highest_tier_hint: "Copper → Silver → Gold → Diamond → Olympian", latest: "Más reciente", latest_hint_empty: "usa Hermes más", none_yet: "Ninguno aún", }, state: { unlocked: "Desbloqueado", discovered: "Descubierto", secret: "Secreto", }, tier: { target: "Objetivo {tier}", hidden: "Oculto", complete: "Completo", objective: "Objetivo", }, progress: { hidden: "oculto", }, scan: { building_headline: "Construyendo perfil de logros…", building_detail: "Leyendo sesiones, llamadas a herramientas, metadatos del modelo y estado de desbloqueo.", starting_headline: "Iniciando escaneo de logros…", progress_detail: "Escaneadas {scanned} de {total} sesiones · {pct}%. Las insignias se desbloquean a medida que se procesa más historial.", idle_detail: "Leyendo sesiones, llamadas a herramientas, metadatos del modelo y estado de desbloqueo. Las insignias aparecerán aquí a medida que se desbloqueen.", }, guide: { tiers_header: "Niveles", secret_header: "Logros secretos", secret_body: "Los secretos ocultan su disparador exacto. Una vez que Hermes detecta una señal relacionada, la tarjeta pasa a Descubierto y muestra su requisito.", scan_status_header: "Estado del escaneo", scan_status_body: "Hermes está escaneando el historial local una vez, después las tarjetas aparecerán automáticamente. No hay nada bloqueado si tarda unos segundos.", what_scanned_header: "Qué se escanea", what_scanned_body: "Sesiones, llamadas a herramientas, metadatos del modelo, errores, logros y estado de desbloqueo local.", }, card: { share_title: "Compartir este logro", share_label: "Compartir {name}", share_text: "Compartir", how_to_reveal: "Cómo revelarlo", what_counts: "Qué cuenta", evidence_label: "Evidencia", evidence_session_fallback: "sesión", no_evidence: "Aún sin evidencia", }, latest: { header: "Desbloqueos recientes", }, empty: { no_secrets_header: "No quedan secretos ocultos en este escaneo.", no_secrets_body: "Pista: los secretos suelen comenzar a partir de fallos inusuales o patrones de usuario avanzado: conflictos de puertos, muros de permisos, variables de entorno faltantes, errores de YAML, colisiones de Docker, uso de rollback/checkpoint, aciertos de caché o pequeñas correcciones tras mucho texto rojo.", }, filters: { all_categories: "Todos", visibility_all: "todos", visibility_unlocked: "desbloqueados", visibility_discovered: "descubiertos", visibility_secret: "secretos", }, share: { dialog_label: "Compartir logro", header: "Compartir: {name}", close: "Cerrar", rendering: "Renderizando…", card_alt: "Tarjeta para compartir de {name}", error_generic: "Algo salió mal.", x_title: "Abre X con una publicación predefinida", x_button: "Compartir en X", copy_title: "Copia la imagen para pegarla en tu publicación", copy_button: "Copiar imagen", copied: "Copiado ✓", download_button: "Descargar PNG", hint: "Compartir en X abre una publicación predefinida en una nueva pestaña. Haz clic primero en Copiar imagen si quieres adjuntar la insignia 1200×630: X te permite pegarla directamente en el redactor del tuit. Descargar PNG guarda el archivo para usarlo en cualquier lugar.", clipboard_unsupported: "Este navegador no admite copiar imágenes al portapapeles: usa Descargar en su lugar.", tweet_text: "Just unlocked {tier_part}\"{name}\" in Hermes Agent ☤", }, }, kanban: { loading: "Cargando tablero Kanban…", loadFailed: "Error al cargar el tablero Kanban: ", loadFailedHint: "El backend crea automáticamente kanban.db en la primera lectura. Si el problema persiste, revisa los registros del panel.", board: "Tablero", newBoard: "+ Nuevo tablero", newBoardTitle: "Nuevo tablero", newBoardDescription: "Los tableros te permiten separar flujos de trabajo no relacionados — uno por proyecto, repositorio o dominio. Los workers de un tablero nunca ven las tareas de otro.", slug: "Slug", slugHint: "— minúsculas, guiones, p. ej. atm10-server", displayName: "Nombre visible", displayNameHint: "(opcional)", description: "Descripción", descriptionHint: "(opcional)", icon: "Icono", iconHint: "(un solo carácter o emoji)", switchAfterCreate: "Cambiar a este tablero tras crearlo", cancel: "Cancelar", creating: "Creando…", createBoard: "Crear tablero", search: "Buscar", filterCards: "Filtrar tarjetas…", tenant: "Tenant", allTenants: "Todos los tenants", assignee: "Asignado a", allProfiles: "Todos los perfiles", showArchived: "Mostrar archivados", lanesByProfile: "Carriles por perfil", nudgeDispatcher: "Avisar al dispatcher", refresh: "Actualizar", selected: "seleccionado(s)", complete: "Completar", archive: "Archivar", apply: "Aplicar", clear: "Limpiar", createTask: "Crear tarea en esta columna", noTasks: "— sin tareas —", unassigned: "sin asignar", untitled: "(sin título)", loadingDetail: "Cargando…", addComment: "Añadir un comentario… (Enter para enviar)", comment: "Comentario", status: "Estado", workspace: "Workspace", skills: "Habilidades", createdBy: "Creado por", result: "Result", comments: "Comentarios", events: "Eventos", runHistory: "Historial de ejecuciones", workerLog: "Registro del worker", loadingLog: "Cargando registro…", noWorkerLog: "— aún no hay registro del worker (la tarea no se ha lanzado o el registro fue rotado) —", noDescription: "— sin descripción —", noComments: "— sin comentarios —", edit: "editar", save: "Guardar", dependencies: "Dependencias", parents: "Padres:", children: "Hijos:", none: "ninguno", addParent: "— añadir padre —", addChild: "— añadir hijo —", removeDependency: "Eliminar dependencia", block: "Bloquear", unblock: "Desbloquear", notifyHomeChannels: "Notificar a los canales de inicio", diagnostics: "Diagnósticos", hide: "Ocultar", show: "Mostrar", attention: "Atención", tasksNeedAttention: "tareas requieren atención", taskNeedsAttention: "1 tarea requiere atención", diagnostic: "diagnóstico", open: "Abrir", close: "Cerrar (Esc)", reassignTo: "Reasignar a:", copied: "Copiado", copyCommand: "Copiar comando al portapapeles", reclaim: "Recuperar", reassign: "Reasignar", renderingError: "La pestaña Kanban tuvo un error de renderizado", reloadView: "Recargar vista", wsAuthFailed: "Error de autenticación de WebSocket — recarga la página para refrescar el token de sesión.", markDone: "¿Marcar {n} tarea(s) como hechas?", markArchived: "¿Archivar {n} tarea(s)?", warning: "Advertencia", phantomIds: "IDs fantasma:", active: "activo", ended: "finalizado", noProfile: "(sin perfil)", showAllAttempts: "Mostrar todos los intentos", sendingUpdates: "Enviando actualizaciones a", sendNotifications: "Enviar notificaciones de completed / blocked / gave_up a", archiveBoardConfirm: "¿Archivar el tablero '{name}'? Se moverá a boards/_archived/ para que puedas recuperarlo más tarde. Las tareas de este tablero ya no aparecerán en ninguna parte de la UI.", archiveBoardTitle: "Archivar este tablero", boardSwitcherHint: "Los tableros te permiten separar flujos de trabajo no relacionados", taskCreatedWarning: "Tarea creada, pero: ", moveFailed: "Error al mover: ", bulkFailed: "Lote: ", completionBlockedHallucination: "⚠ Completado bloqueado — IDs de tarjeta fantasma", suspectedHallucinatedReferences: "⚠ El texto referenció IDs de tarjeta fantasma", pickProfileFirst: "Elige primero un perfil.", unblockedMessage: "Desbloqueado {id}. La tarea está lista para el próximo tick.", unblockFailed: "Error al desbloquear: ", reclaimedMessage: "Recuperado {id}. La tarea vuelve a estar lista.", reclaimFailed: "Error al recuperar: ", reassignedMessage: "Reasignado {id} a {profile}.", reassignFailed: "Error al reasignar: ", selectForBulk: "Seleccionar para acciones por lotes", clickToEdit: "Haz clic para editar", clickToEditAssignee: "Haz clic para editar el asignado", emptyAssignee: "(vacío = sin asignar)", columnLabels: { triage: "Clasificación", todo: "Por hacer", ready: "Listo", running: "En curso", blocked: "Bloqueado", done: "Hecho", archived: "Archivado", }, columnHelp: { triage: "Ideas en bruto — un specifier desarrollará la especificación", todo: "Esperando dependencias o sin asignar", ready: "Asignado y esperando un tick del dispatcher", running: "Reclamado por un worker — en ejecución", blocked: "El worker pidió intervención humana", done: "Completado", archived: "Archivado", }, confirmDone: "¿Marcar esta tarea como hecha? Se libera el reclamo del worker y los hijos dependientes pasan a estar listos.", confirmArchive: "¿Archivar esta tarea? Desaparecerá de la vista por defecto del tablero.", confirmBlocked: "¿Marcar esta tarea como bloqueada? Se libera el reclamo del worker.", completionSummary: "Resumen de finalización para {label}. Se almacena como el result de la tarea.", completionSummaryRequired: "El resumen de finalización es obligatorio antes de marcar una tarea como hecha.", triagePlaceholder: "Idea aproximada — la IA la especificará…", taskTitlePlaceholder: "Título de la nueva tarea…", specifier: "specifier", assigneePlaceholder: "asignado", priority: "Prioridad", skillsPlaceholder: "habilidades (opcional, separadas por comas): translation, github-code-review", noParent: "— sin padre —", workspacePathDir: "ruta del workspace (obligatoria, p. ej. ~/projects/my-app)", workspacePathOptional: "ruta del workspace (opcional, derivada del asignado si está vacía)", logTruncated: "(mostrando los últimos 100 KB — registro completo en ", logAt: ")", }, };